diff --git a/cas/1.1/default/FactoryLoader.h b/cas/1.1/default/FactoryLoader.h
index c4a48e2..862d557 100644
--- a/cas/1.1/default/FactoryLoader.h
+++ b/cas/1.1/default/FactoryLoader.h
@@ -44,9 +44,9 @@
     bool findFactoryForScheme(int32_t CA_system_id, sp<SharedLibrary>* library = NULL,
                               T** factory = NULL);
 
-    bool enumeratePlugins(vector<HidlCasPluginDescriptor>* results);
+    bool enumeratePlugins(hidl_vec<HidlCasPluginDescriptor>* results);
 
-   private:
+  private:
     typedef T* (*CreateFactoryFunc)();
 
     Mutex mMapLock;
@@ -59,7 +59,7 @@
     bool loadFactoryForSchemeFromPath(const String8& path, int32_t CA_system_id,
                                       sp<SharedLibrary>* library, T** factory);
 
-    bool queryPluginsFromPath(const String8& path, vector<HidlCasPluginDescriptor>* results);
+    bool queryPluginsFromPath(const String8& path, hidl_vec<HidlCasPluginDescriptor>* results);
 
     bool openFactory(const String8& path);
     void closeFactory();
@@ -113,11 +113,9 @@
 }
 
 template <class T>
-bool FactoryLoader<T>::enumeratePlugins(vector<HidlCasPluginDescriptor>* results) {
+bool FactoryLoader<T>::enumeratePlugins(hidl_vec<HidlCasPluginDescriptor>* results) {
     ALOGI("enumeratePlugins");
 
-    results->clear();
-
     String8 dirPath("/vendor/lib/mediacas");
     DIR* pDir = opendir(dirPath.string());
 
@@ -159,7 +157,7 @@
 
 template <class T>
 bool FactoryLoader<T>::queryPluginsFromPath(const String8& path,
-                                            vector<HidlCasPluginDescriptor>* results) {
+                                            hidl_vec<HidlCasPluginDescriptor>* results) {
     closeFactory();
 
     vector<CasPluginDescriptor> descriptors;
@@ -168,10 +166,19 @@
         return false;
     }
 
-    for (auto it = descriptors.begin(); it != descriptors.end(); it++) {
-        results->push_back(
-                HidlCasPluginDescriptor{.caSystemId = it->CA_system_id, .name = it->name.c_str()});
+    results->resize(descriptors.size());
+
+    if (results->size() >= SIZE_MAX / sizeof(HidlCasPluginDescriptor)) {
+        return false;
     }
+    memset(results->data(), 0, results->size() * sizeof(HidlCasPluginDescriptor));
+
+    for (size_t i = 0; i < results->size(); i++) {
+        HidlCasPluginDescriptor& descriptor = (*results)[i];
+        descriptor.caSystemId = descriptors[i].CA_system_id;
+        descriptor.name = descriptors[i].name.c_str();
+    }
+
     return true;
 }
 
diff --git a/cas/1.1/default/MediaCasService.cpp b/cas/1.1/default/MediaCasService.cpp
index eb3fa6b..122c53f 100644
--- a/cas/1.1/default/MediaCasService.cpp
+++ b/cas/1.1/default/MediaCasService.cpp
@@ -68,7 +68,7 @@
 Return<void> MediaCasService::enumeratePlugins(enumeratePlugins_cb _hidl_cb) {
     ALOGV("%s", __FUNCTION__);
 
-    vector<HidlCasPluginDescriptor> results;
+    hidl_vec<HidlCasPluginDescriptor> results;
     mCasLoader.enumeratePlugins(&results);
 
     _hidl_cb(results);
