diff --git a/slang_rs_export_type.cpp b/slang_rs_export_type.cpp
index efe989c..0683db0 100644
--- a/slang_rs_export_type.cpp
+++ b/slang_rs_export_type.cpp
@@ -75,9 +75,9 @@
 {PrimitiveDataType, "UNSIGNED_5_5_5_1",         _, 16,          _,         _,        _,        _,        _, false},
 {PrimitiveDataType, "UNSIGNED_4_4_4_4",         _, 16,          _,         _,        _,        _,        _, false},
 
-{MatrixDataType, "MATRIX_2X2", _,  4*32, "rsMatrix_2x2", "Matrix2f", _, _, _, false},
-{MatrixDataType, "MATRIX_3X3", _,  9*32, "rsMatrix_3x3", "Matrix3f", _, _, _, false},
-{MatrixDataType, "MATRIX_4X4", _, 16*32, "rsMatrix_4x4", "Matrix4f", _, _, _, false},
+{MatrixDataType, "MATRIX_2X2", _,  4*32, "rs_matrix2x2", "Matrix2f", _, _, _, false},
+{MatrixDataType, "MATRIX_3X3", _,  9*32, "rs_matrix3x3", "Matrix3f", _, _, _, false},
+{MatrixDataType, "MATRIX_4X4", _, 16*32, "rs_matrix4x4", "Matrix4f", _, _, _, false},
 
 // RS object types are 32 bits in 32-bit RS, but 256 bits in 64-bit RS.
 // This is handled specially by the GetSizeInBits(}, method.
diff --git a/slang_rs_reflection_cpp.cpp b/slang_rs_reflection_cpp.cpp
index 7d29627..15c48fa 100644
--- a/slang_rs_reflection_cpp.cpp
+++ b/slang_rs_reflection_cpp.cpp
@@ -60,7 +60,11 @@
   return nullptr;
 }
 
-static std::string GetTypeName(const RSExportType *ET, bool Brackets = true) {
+static std::string GetTypeName(const RSExportType *ET, bool PreIdentifier = true) {
+  if((!PreIdentifier) && (ET->getClass() != RSExportType::ExportClassConstantArray)) {
+    slangAssert(false && "Non-array type post identifier?");
+    return "";
+  }
   switch (ET->getClass()) {
   case RSExportType::ExportClassPrimitive: {
     const RSExportPrimitiveType *EPT =
@@ -92,14 +96,17 @@
     return GetMatrixTypeName(static_cast<const RSExportMatrixType *>(ET));
   }
   case RSExportType::ExportClassConstantArray: {
-    // TODO: Fix this for C arrays!
     const RSExportConstantArrayType *CAT =
         static_cast<const RSExportConstantArrayType *>(ET);
-    std::string ElementTypeName = GetTypeName(CAT->getElementType());
-    if (Brackets) {
-      ElementTypeName.append("[]");
+    if (PreIdentifier) {
+      std::string ElementTypeName = GetTypeName(CAT->getElementType());
+      return ElementTypeName;
     }
-    return ElementTypeName;
+    else {
+      std::stringstream ArraySpec;
+      ArraySpec << "[" << CAT->getSize() << "]";
+      return ArraySpec.str();
+    }
   }
   case RSExportType::ExportClassRecord: {
     // TODO: Fix for C structs!
@@ -679,7 +686,7 @@
                                          const RSExportVar *EV) {
   RSReflectionTypeData rtd;
   EPT->convertToRTD(&rtd);
-  std::string TypeName = GetTypeName(EPT, false);
+  std::string TypeName = GetTypeName(EPT);
 
   if (!EV->isConst()) {
     mOut.indent() << "void set_" << EV->getName() << "(" << TypeName << " v)";
@@ -776,12 +783,51 @@
 }
 
 void RSReflectionCpp::genMatrixTypeExportVariable(const RSExportVar *EV) {
-  slangAssert(false);
+  uint32_t slot = getNextExportVarSlot();
+  stringstream tmp;
+  tmp << slot;
+
+  const RSExportType *ET = EV->getType();
+  if (ET->getName() == "rs_matrix4x4") {
+    mOut.indent() << "void set_" << EV->getName() << "(float v[16])";
+    mOut.startBlock();
+    mOut.indent() << "setVar(" << tmp.str() << ", v, sizeof(float)*16);\n";
+    mOut.endBlock();
+  } else if (ET->getName() == "rs_matrix3x3") {
+    mOut.indent() << "void set_" << EV->getName() << "(float v[9])";
+    mOut.startBlock();
+    mOut.indent() << "setVar(" << tmp.str() << ", v, sizeof(float)*9);";
+    mOut.endBlock();
+  } else if (ET->getName() == "rs_matrix2x2") {
+    mOut.indent() << "void set_" << EV->getName() << "(float v[4])";
+    mOut.startBlock();
+    mOut.indent() << "setVar(" << tmp.str() << ", v, sizeof(float)*4);";
+    mOut.endBlock();
+  } else {
+    mOut.indent() << "#error: TODO: " << ET->getName();
+    slangAssert(false);
+  }
 }
 
 void RSReflectionCpp::genGetterAndSetter(const RSExportConstantArrayType *AT,
                                          const RSExportVar *EV) {
-  slangAssert(false);
+  std::stringstream ArraySpec;
+  const RSExportType *ET = EV->getType();
+
+  const RSExportConstantArrayType *CAT =
+      static_cast<const RSExportConstantArrayType *>(ET);
+
+  uint32_t slot = getNextExportVarSlot();
+  stringstream tmp;
+  tmp << slot;
+
+  ArraySpec << CAT->getSize();
+  mOut.indent() << "void set_" << EV->getName() << "(" << GetTypeName(EV->getType()) << " v "
+      << GetTypeName(EV->getType(), false) << ")";
+  mOut.startBlock();
+  mOut.indent() << "setVar(" << tmp.str() << ", v, sizeof(" << GetTypeName(EV->getType()) + ") *"
+      << ArraySpec.str() << ");";
+  mOut.endBlock();
 }
 
 void RSReflectionCpp::genGetterAndSetter(const RSExportRecordType *ERT,
@@ -807,7 +853,7 @@
       } else {
         FirstArg = false;
       }
-      mOut << GetTypeName((*i)->getType(), false) << " " << (*i)->getName();
+      mOut << GetTypeName((*i)->getType()) << " " << (*i)->getName();
     }
   }
 
diff --git a/tests/P_array_cpp/array.rs b/tests/P_array_cpp/array.rs
new file mode 100644
index 0000000..9a36c6d
--- /dev/null
+++ b/tests/P_array_cpp/array.rs
@@ -0,0 +1,5 @@
+// -reflect-c++
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+float array[16];
diff --git a/tests/P_array_cpp/stderr.txt.expect b/tests/P_array_cpp/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/P_array_cpp/stderr.txt.expect
diff --git a/tests/P_array_cpp/stdout.txt.expect b/tests/P_array_cpp/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/P_array_cpp/stdout.txt.expect
diff --git a/tests/P_matrix_cpp/matrix.rs b/tests/P_matrix_cpp/matrix.rs
new file mode 100644
index 0000000..4847b54
--- /dev/null
+++ b/tests/P_matrix_cpp/matrix.rs
@@ -0,0 +1,5 @@
+// -reflect-c++
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+rs_matrix4x4 mat;
diff --git a/tests/P_matrix_cpp/stderr.txt.expect b/tests/P_matrix_cpp/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/P_matrix_cpp/stderr.txt.expect
diff --git a/tests/P_matrix_cpp/stdout.txt.expect b/tests/P_matrix_cpp/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/P_matrix_cpp/stdout.txt.expect
