diff --git a/AST.cpp b/AST.cpp
index 2d2898c..8a49512 100644
--- a/AST.cpp
+++ b/AST.cpp
@@ -22,7 +22,7 @@
 #include "HandleType.h"
 #include "Interface.h"
 #include "Location.h"
-#include "PredefinedType.h"
+#include "FmqType.h"
 #include "Scope.h"
 #include "TypeDef.h"
 
diff --git a/Android.bp b/Android.bp
index 7f32fcd..38e3287 100644
--- a/Android.bp
+++ b/Android.bp
@@ -42,7 +42,7 @@
         "Method.cpp",
         "NamedType.cpp",
         "PointerType.cpp",
-        "PredefinedType.cpp",
+        "FmqType.cpp",
         "RefType.cpp",
         "ScalarType.cpp",
         "Scope.cpp",
diff --git a/PredefinedType.cpp b/FmqType.cpp
similarity index 84%
rename from PredefinedType.cpp
rename to FmqType.cpp
index fb015a4..c22fd55 100644
--- a/PredefinedType.cpp
+++ b/FmqType.cpp
@@ -14,28 +14,28 @@
  * limitations under the License.
  */
 
-#include "PredefinedType.h"
+#include "FmqType.h"
 
 #include <hidl-util/Formatter.h>
 #include <android-base/logging.h>
 
 namespace android {
 
-PredefinedType::PredefinedType(const char *nsp, const char *name)
+FmqType::FmqType(const char *nsp, const char *name)
     : mNamespace(nsp), mName(name) {
 }
 
-void PredefinedType::addNamedTypesToSet(std::set<const FQName> &) const {
+void FmqType::addNamedTypesToSet(std::set<const FQName> &) const {
     // do nothing
 }
 
-std::string PredefinedType::fullName() const {
+std::string FmqType::fullName() const {
     return mNamespace +
             (mNamespace.empty() ? "" : "::") +
-            mName;
+            mName + "<" + mElementType->getCppStackType(true) + ">";
 }
 
-std::string PredefinedType::getCppType(
+std::string FmqType::getCppType(
         StorageMode mode,
         bool) const {
 
@@ -53,7 +53,7 @@
     }
 }
 
-void PredefinedType::emitReaderWriter(
+void FmqType::emitReaderWriter(
         Formatter &out,
         const std::string &name,
         const std::string &parcelObj,
@@ -117,7 +117,7 @@
             "0 /* parentOffset */");
 }
 
-void PredefinedType::emitReaderWriterEmbedded(
+void FmqType::emitReaderWriterEmbedded(
         Formatter &out,
         size_t /* depth */,
         const std::string &name,
@@ -144,17 +144,21 @@
             mNamespace);
 }
 
-bool PredefinedType::isJavaCompatible() const {
+bool FmqType::isJavaCompatible() const {
     return false;
 }
 
-bool PredefinedType::needsEmbeddedReadWrite() const {
+bool FmqType::needsEmbeddedReadWrite() const {
     return true;
 }
 
-bool PredefinedType::resultNeedsDeref() const {
+bool FmqType::resultNeedsDeref() const {
     return true;
 }
 
+bool FmqType::isCompatibleElementType(Type *elementType) const {
+    return (!elementType->isInterface() && !elementType->needsEmbeddedReadWrite());
+}
+
 }  // namespace android
 
diff --git a/PredefinedType.h b/FmqType.h
similarity index 87%
rename from PredefinedType.h
rename to FmqType.h
index a3f2e81..054a25e 100644
--- a/PredefinedType.h
+++ b/FmqType.h
@@ -14,16 +14,16 @@
  * limitations under the License.
  */
 
-#ifndef PREDEFINED_TYPE_H_
+#ifndef FMQ_TYPE_H_
 
-#define PREDEFINED_TYPE_H_
+#define FMQ_TYPE_H_
 
 #include "Type.h"
 
 namespace android {
 
-struct PredefinedType : public Type {
-    PredefinedType(const char *nsp, const char *name);
+struct FmqType : public TemplatedType {
+    FmqType(const char *nsp, const char *name);
 
     void addNamedTypesToSet(std::set<const FQName> &set) const override;
 
@@ -58,14 +58,14 @@
 
     bool needsEmbeddedReadWrite() const override;
     bool resultNeedsDeref() const override;
-
+    bool isCompatibleElementType(Type *elementType) const override;
 private:
     std::string mNamespace;
     std::string mName;
 
-    DISALLOW_COPY_AND_ASSIGN(PredefinedType);
+    DISALLOW_COPY_AND_ASSIGN(FmqType);
 };
 
 }  // namespace android
 
-#endif  // PREDEFINED_TYPE_H_
+#endif  // FMQ_TYPE_H_
diff --git a/hidl-gen_l.ll b/hidl-gen_l.ll
index e6b4bef..1fb0127 100644
--- a/hidl-gen_l.ll
+++ b/hidl-gen_l.ll
@@ -44,7 +44,7 @@
 #include "StringType.h"
 #include "VectorType.h"
 #include "RefType.h"
-#include "PredefinedType.h"
+#include "FmqType.h"
 
 #include "hidl-gen_y.h"
 
@@ -118,8 +118,8 @@
 "pointer"		{ yylval->type = new PointerType; return token::TYPE; }
 "string"		{ yylval->type = new StringType; return token::TYPE; }
 
-"MQDescriptorSync" { yylval->type = new PredefinedType("::android::hardware", "MQDescriptorSync"); return token::TYPE; }
-"MQDescriptorUnsync" { yylval->type = new PredefinedType("::android::hardware", "MQDescriptorUnsync"); return token::TYPE; }
+"fmq_sync" { yylval->type = new FmqType("::android::hardware", "MQDescriptorSync"); return token::TEMPLATED; }
+"fmq_unsync" { yylval->type = new FmqType("::android::hardware", "MQDescriptorUnsync"); return token::TEMPLATED; }
 
 "("			{ return('('); }
 ")"			{ return(')'); }
diff --git a/hidl-gen_y.yy b/hidl-gen_y.yy
index 75843c5..4548b68 100644
--- a/hidl-gen_y.yy
+++ b/hidl-gen_y.yy
@@ -90,7 +90,7 @@
         "int8_t", "int16_t", "int32_t", "int64_t", "bool", "float", "double",
         "interface", "struct", "union", "string", "vec", "enum", "ref", "handle",
         "package", "import", "typedef", "generates", "oneway", "extends",
-        "MQDescriptorSync", "MQDescriptorUnsync",
+        "fmq_sync", "fmq_unsync",
     });
     static const std::vector<std::string> cppKeywords({
         "alignas", "alignof", "and", "and_eq", "asm", "atomic_cancel", "atomic_commit",
diff --git a/test/vendor/1.0/IVendor.hal b/test/vendor/1.0/IVendor.hal
index 1ccaa0d..f888a2d 100644
--- a/test/vendor/1.0/IVendor.hal
+++ b/test/vendor/1.0/IVendor.hal
@@ -21,14 +21,14 @@
     struct StructTest {
         handle a;
         vec<uint8_t> b;
-        MQDescriptorSync c;
+        fmq_sync<uint8_t> c;
         string d;
         uint8_t[4][4] e;
     };
 
     fun1(handle a) generates(handle b);
     fun2(vec<uint8_t> a) generates(vec<uint8_t> b);
-    fun3(MQDescriptorSync a) generates(MQDescriptorSync b);
+    fun3(fmq_sync<uint8_t> a) generates(fmq_sync<uint8_t> b);
     fun4(string a) generates(string b);
     fun5(uint8_t[4][4] a) generates(uint8_t[4][4] b);
 
