diff --git a/base/include/hidl/MQDescriptor.h b/base/include/hidl/MQDescriptor.h
index 8043761..ed9279a 100644
--- a/base/include/hidl/MQDescriptor.h
+++ b/base/include/hidl/MQDescriptor.h
@@ -49,7 +49,7 @@
   kUnsynchronizedWrite = 0x02
 };
 
-template <MQFlavor flavor>
+template <typename T, MQFlavor flavor>
 struct MQDescriptor {
     MQDescriptor(
             const std::vector<GrantorDescriptor>& grantors,
@@ -114,26 +114,28 @@
     uint32_t mFlags;
 };
 
-template<MQFlavor flavor>
-const size_t MQDescriptor<flavor>::kOffsetOfGrantors = offsetof(MQDescriptor<flavor>, mGrantors);
+template<typename T, MQFlavor flavor>
+const size_t MQDescriptor<T, flavor>::kOffsetOfGrantors = offsetof(MQDescriptor, mGrantors);
 
-template<MQFlavor flavor>
-const size_t MQDescriptor<flavor>::kOffsetOfHandle = offsetof(MQDescriptor<flavor>, mHandle);
+template<typename T, MQFlavor flavor>
+const size_t MQDescriptor<T, flavor>::kOffsetOfHandle = offsetof(MQDescriptor, mHandle);
 
 /*
  * MQDescriptorSync will describe the wait-free synchronized
  * flavor of FMQ.
  */
-using MQDescriptorSync = MQDescriptor<kSynchronizedReadWrite>;
+template<typename T>
+using MQDescriptorSync = MQDescriptor<T, kSynchronizedReadWrite>;
 
 /*
  * MQDescriptorUnsync will describe the unsynchronized write
  * flavor of FMQ.
  */
-using MQDescriptorUnsync = MQDescriptor<kUnsynchronizedWrite>;
+template<typename T>
+using MQDescriptorUnsync = MQDescriptor<T, kUnsynchronizedWrite>;
 
-template<MQFlavor flavor>
-MQDescriptor<flavor>::MQDescriptor(
+template<typename T, MQFlavor flavor>
+MQDescriptor<T, flavor>::MQDescriptor(
         const std::vector<GrantorDescriptor>& grantors,
         native_handle_t* nhandle,
         size_t size)
@@ -146,8 +148,8 @@
     }
 }
 
-template<MQFlavor flavor>
-MQDescriptor<flavor>::MQDescriptor(size_t bufferSize, native_handle_t *nHandle,
+template<typename T, MQFlavor flavor>
+MQDescriptor<T, flavor>::MQDescriptor(size_t bufferSize, native_handle_t *nHandle,
                                    size_t messageSize, bool configureEventFlag)
     : mHandle(nHandle), mQuantum(messageSize), mFlags(flavor) {
     /*
@@ -180,8 +182,8 @@
     }
 }
 
-template<MQFlavor flavor>
-MQDescriptor<flavor>::MQDescriptor(const MQDescriptor<flavor> &other)
+template<typename T, MQFlavor flavor>
+MQDescriptor<T, flavor>::MQDescriptor(const MQDescriptor<T, flavor> &other)
     : mGrantors(other.mGrantors),
       mHandle(nullptr),
       mQuantum(other.mQuantum),
@@ -200,33 +202,33 @@
     }
 }
 
-template<MQFlavor flavor>
-MQDescriptor<flavor>::MQDescriptor() : MQDescriptor(
+template<typename T, MQFlavor flavor>
+MQDescriptor<T, flavor>::MQDescriptor() : MQDescriptor(
         std::vector<android::hardware::GrantorDescriptor>(),
         nullptr /* nHandle */,
         0 /* size */) {}
 
-template<MQFlavor flavor>
-MQDescriptor<flavor>::~MQDescriptor() {
+template<typename T, MQFlavor flavor>
+MQDescriptor<T, flavor>::~MQDescriptor() {
     if (mHandle != nullptr) {
         native_handle_close(mHandle);
         native_handle_delete(mHandle);
     }
 }
 
-template<MQFlavor flavor>
-size_t MQDescriptor<flavor>::getSize() const {
+template<typename T, MQFlavor flavor>
+size_t MQDescriptor<T, flavor>::getSize() const {
   return mGrantors[DATAPTRPOS].extent;
 }
 
-template<MQFlavor flavor>
-size_t MQDescriptor<flavor>::getQuantum() const { return mQuantum; }
+template<typename T, MQFlavor flavor>
+size_t MQDescriptor<T, flavor>::getQuantum() const { return mQuantum; }
 
-template<MQFlavor flavor>
-int32_t MQDescriptor<flavor>::getFlags() const { return mFlags; }
+template<typename T, MQFlavor flavor>
+int32_t MQDescriptor<T, flavor>::getFlags() const { return mFlags; }
 
-template<MQFlavor flavor>
-std::vector<GrantorDescriptor> MQDescriptor<flavor>::getGrantors() const {
+template<typename T, MQFlavor flavor>
+std::vector<GrantorDescriptor> MQDescriptor<T, flavor>::getGrantors() const {
   size_t grantor_count = mGrantors.size();
   std::vector<GrantorDescriptor> grantors(grantor_count);
   for (size_t i = 0; i < grantor_count; i++) {
@@ -235,8 +237,8 @@
   return grantors;
 }
 
-template<MQFlavor flavor>
-const sp<NativeHandle> MQDescriptor<flavor>::getNativeHandle() const {
+template<typename T, MQFlavor flavor>
+const sp<NativeHandle> MQDescriptor<T, flavor>::getNativeHandle() const {
   /*
    * Create an sp<NativeHandle> from mHandle.
    */
