diff --git a/cas/1.0/default/FactoryLoader.h b/cas/1.0/default/FactoryLoader.h
index 18c2186..943f761 100644
--- a/cas/1.0/default/FactoryLoader.h
+++ b/cas/1.0/default/FactoryLoader.h
@@ -45,9 +45,9 @@
             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;
@@ -63,9 +63,7 @@
             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();
@@ -121,12 +119,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());
 
@@ -168,8 +163,8 @@
 }
 
 template <class T>
-bool FactoryLoader<T>::queryPluginsFromPath(
-        const String8 &path, vector<HidlCasPluginDescriptor>* results) {
+bool FactoryLoader<T>::queryPluginsFromPath(const String8& path,
+                                            hidl_vec<HidlCasPluginDescriptor>* results) {
     closeFactory();
 
     vector<CasPluginDescriptor> descriptors;
@@ -178,11 +173,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.0/default/MediaCasService.cpp b/cas/1.0/default/MediaCasService.cpp
index dbdd008..b159f5b 100644
--- a/cas/1.0/default/MediaCasService.cpp
+++ b/cas/1.0/default/MediaCasService.cpp
@@ -44,7 +44,7 @@
 
     ALOGV("%s", __FUNCTION__);
 
-    vector<HidlCasPluginDescriptor> results;
+    hidl_vec<HidlCasPluginDescriptor> results;
     mCasLoader.enumeratePlugins(&results);
 
     _hidl_cb(results);
