diff --git a/cas/1.1/default/FactoryLoader.h b/cas/1.1/default/FactoryLoader.h
index 862d557..c4a48e2 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(hidl_vec<HidlCasPluginDescriptor>* results);
+    bool enumeratePlugins(vector<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, hidl_vec<HidlCasPluginDescriptor>* results);
+    bool queryPluginsFromPath(const String8& path, vector<HidlCasPluginDescriptor>* results);
 
     bool openFactory(const String8& path);
     void closeFactory();
@@ -113,9 +113,11 @@
 }
 
 template <class T>
-bool FactoryLoader<T>::enumeratePlugins(hidl_vec<HidlCasPluginDescriptor>* results) {
+bool FactoryLoader<T>::enumeratePlugins(vector<HidlCasPluginDescriptor>* results) {
     ALOGI("enumeratePlugins");
 
+    results->clear();
+
     String8 dirPath("/vendor/lib/mediacas");
     DIR* pDir = opendir(dirPath.string());
 
@@ -157,7 +159,7 @@
 
 template <class T>
 bool FactoryLoader<T>::queryPluginsFromPath(const String8& path,
-                                            hidl_vec<HidlCasPluginDescriptor>* results) {
+                                            vector<HidlCasPluginDescriptor>* results) {
     closeFactory();
 
     vector<CasPluginDescriptor> descriptors;
@@ -166,19 +168,10 @@
         return false;
     }
 
-    results->resize(descriptors.size());
-
-    if (results->size() >= SIZE_MAX / sizeof(HidlCasPluginDescriptor)) {
-        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()});
     }
-    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 122c53f..eb3fa6b 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__);
 
-    hidl_vec<HidlCasPluginDescriptor> results;
+    vector<HidlCasPluginDescriptor> results;
     mCasLoader.enumeratePlugins(&results);
 
     _hidl_cb(results);
