diff --git a/src/common/version.h b/src/common/version.h
index 5d8dedc..91a3867 100644
--- a/src/common/version.h
+++ b/src/common/version.h
@@ -1,7 +1,7 @@
 #define MAJOR_VERSION 0
 #define MINOR_VERSION 0
 #define BUILD_VERSION 0
-#define BUILD_REVISION 759
+#define BUILD_REVISION 760
 
 #define STRINGIFY(x) #x
 #define MACRO_STRINGIFY(x) STRINGIFY(x)
diff --git a/src/compiler/OutputHLSL.cpp b/src/compiler/OutputHLSL.cpp
index afa8f04..3eb9a07 100644
--- a/src/compiler/OutputHLSL.cpp
+++ b/src/compiler/OutputHLSL.cpp
@@ -136,7 +136,7 @@
                 {
                     if (mReferencedUniforms.find(name.c_str()) != mReferencedUniforms.end())
                     {
-                        uniforms += "uniform " + typeString(type) + " " + decorate(name) + arrayString(type) + ";\n";
+                        uniforms += "uniform " + typeString(type) + " " + decorateUniform(name, type.isArray()) + arrayString(type) + ";\n";
                     }
                 }
                 else if (qualifier == EvqVaryingIn || qualifier == EvqInvariantVaryingIn)
@@ -300,7 +300,7 @@
                 {
                     if (mReferencedUniforms.find(name.c_str()) != mReferencedUniforms.end())
                     {
-                        uniforms += "uniform " + typeString(type) + " " + decorate(name) + arrayString(type) + ";\n";
+                        uniforms += "uniform " + typeString(type) + " " + decorateUniform(name, type.isArray()) + arrayString(type) + ";\n";
                     }
                 }
                 else if (qualifier == EvqAttribute)
@@ -729,17 +729,22 @@
         if (qualifier == EvqUniform)
         {
             mReferencedUniforms.insert(name.c_str());
+            out << decorateUniform(name, node->isArray());
         }
         else if (qualifier == EvqAttribute)
         {
             mReferencedAttributes.insert(name.c_str());
+            out << decorate(name);
         }
         else if (qualifier == EvqVaryingOut || qualifier == EvqInvariantVaryingOut || qualifier == EvqVaryingIn || qualifier == EvqInvariantVaryingIn)
         {
             mReferencedVaryings.insert(name.c_str());
+            out << decorate(name);
         }
-
-        out << decorate(name);
+        else
+        {
+            out << decorate(name);
+        }
     }
 }
 
@@ -2341,9 +2346,17 @@
     {
         return "_" + string;
     }
-    else
+    
+    return string;
+}
+
+TString OutputHLSL::decorateUniform(const TString &string, bool array)
+{
+    if (array)
     {
-        return string;
+        return "ar_" + string;   // Allows identifying arrays of size 1
     }
+    
+    return decorate(string);
 }
 }
diff --git a/src/compiler/OutputHLSL.h b/src/compiler/OutputHLSL.h
index 805561a..b1058bd 100644
--- a/src/compiler/OutputHLSL.h
+++ b/src/compiler/OutputHLSL.h
@@ -31,7 +31,8 @@
     static TString qualifierString(TQualifier qualifier);
     static TString arrayString(const TType &type);
     static TString initializer(const TType &type);
-    static TString decorate(const TString &string);   // Prepend an underscore to avoid naming clashes
+    static TString decorate(const TString &string);                      // Prepends an underscore to avoid naming clashes
+    static TString decorateUniform(const TString &string, bool array);
 
   protected:
     void header();
diff --git a/src/libGLESv2/Program.cpp b/src/libGLESv2/Program.cpp
index 476999f..206d62e 100644
--- a/src/libGLESv2/Program.cpp
+++ b/src/libGLESv2/Program.cpp
@@ -34,7 +34,7 @@
 }
 
 Uniform::Uniform(GLenum type, const std::string &_name, unsigned int arraySize)
-    : type(type), _name(_name), name(Program::undecorate(_name)), arraySize(arraySize)
+    : type(type), _name(_name), name(Program::undecorateUniform(_name)), arraySize(arraySize)
 {
     int bytes = UniformTypeSize(type) * arraySize;
     data = new unsigned char[bytes];
@@ -50,11 +50,11 @@
 
 bool Uniform::isArray()
 {
-    return arraySize != 1;   // FIXME: Arrays can be of size 1
+    return _name.substr(0, 3) == "ar_";
 }
 
 UniformLocation::UniformLocation(const std::string &_name, unsigned int element, unsigned int index) 
-    : name(Program::undecorate(_name)), element(element), index(index)
+    : name(Program::undecorateUniform(_name)), element(element), index(index)
 {
 }
 
@@ -1282,7 +1282,7 @@
           default:  UNREACHABLE();
         }
 
-        mVertexHLSL += decorate(attribute->name) + " : TEXCOORD" + str(semanticIndex) + ";\n";
+        mVertexHLSL += decorateAttribute(attribute->name) + " : TEXCOORD" + str(semanticIndex) + ";\n";
 
         semanticIndex += VariableRowCount(attribute->type);
     }
@@ -1317,14 +1317,14 @@
 
     for (AttributeArray::iterator attribute = mVertexShader->mAttributes.begin(); attribute != mVertexShader->mAttributes.end(); attribute++)
     {
-        mVertexHLSL += "    " + decorate(attribute->name) + " = ";
+        mVertexHLSL += "    " + decorateAttribute(attribute->name) + " = ";
 
         if (VariableRowCount(attribute->type) > 1)   // Matrix
         {
             mVertexHLSL += "transpose";
         }
 
-        mVertexHLSL += "(input." + decorate(attribute->name) + ");\n";
+        mVertexHLSL += "(input." + decorateAttribute(attribute->name) + ");\n";
     }
 
     mVertexHLSL += "\n"
@@ -1903,7 +1903,7 @@
 }
 
 // This method needs to match OutputHLSL::decorate
-std::string Program::decorate(const std::string &name)
+std::string Program::decorateAttribute(const std::string &name)
 {
     if (name.substr(0, 3) != "gl_" && name.substr(0, 3) != "dx_")
     {
@@ -1913,12 +1913,16 @@
     return name;
 }
 
-std::string Program::undecorate(const std::string &_name)
+std::string Program::undecorateUniform(const std::string &_name)
 {
     if (_name.substr(0, 1) == "_")
     {
         return _name.substr(1);
     }
+    else if (_name.substr(0, 3) == "ar_")
+    {
+        return _name.substr(3);
+    }
     
     return _name;
 }
diff --git a/src/libGLESv2/Program.h b/src/libGLESv2/Program.h
index 9a20f7a..4bf344f 100644
--- a/src/libGLESv2/Program.h
+++ b/src/libGLESv2/Program.h
@@ -130,6 +130,9 @@
 
     unsigned int getSerial() const;
 
+    static std::string decorateAttribute(const std::string &name);    // Prepend an underscore
+    static std::string undecorateUniform(const std::string &_name);   // Remove leading underscore
+
   private:
     DISALLOW_COPY_AND_ASSIGN(Program);
 
@@ -168,9 +171,6 @@
     void appendToInfoLog(const char *info, ...);
     void resetInfoLog();
 
-    static std::string decorate(const std::string &name);      // Prepend an underscore
-    static std::string undecorate(const std::string &_name);   // Remove leading underscore
-
     static unsigned int issueSerial();
 
     FragmentShader *mFragmentShader;
