diff --git a/libraries/graphics-scripting/src/graphics-scripting/ScriptableMesh.cpp b/libraries/graphics-scripting/src/graphics-scripting/ScriptableMesh.cpp
index 40685340c8..72d2adb48f 100644
--- a/libraries/graphics-scripting/src/graphics-scripting/ScriptableMesh.cpp
+++ b/libraries/graphics-scripting/src/graphics-scripting/ScriptableMesh.cpp
@@ -59,8 +59,8 @@ glm::uint32 scriptable::ScriptableMesh::getNumVertices() const {
     return 0;
 }
 
-QVector<unsigned int> scriptable::ScriptableMesh::findNearbyVertexIndices(const glm::vec3& origin, float epsilon) const {
-    QVector<unsigned int> result;
+QVector<glm::uint32> scriptable::ScriptableMesh::findNearbyVertexIndices(const glm::vec3& origin, float epsilon) const {
+    QVector<glm::uint32> result;
     if (!isValid()) {
         return result;
     }
@@ -74,14 +74,14 @@ QVector<unsigned int> scriptable::ScriptableMesh::findNearbyVertexIndices(const
     return result;
 }
 
-QVector<unsigned int> scriptable::ScriptableMesh::getIndices() const {
+QVector<glm::uint32> scriptable::ScriptableMesh::getIndices() const {
     if (auto mesh = getMeshPointer()) {
 #ifdef SCRIPTABLE_MESH_DEBUG
         qCDebug(graphics_scripting, "getIndices mesh %p", mesh.get());
 #endif
         return buffer_helpers::bufferToVector<glm::uint32>(mesh->getIndexBuffer());
     }
-    return QVector<unsigned int>();
+    return QVector<glm::uint32>();
 }
 
 
diff --git a/libraries/graphics-scripting/src/graphics-scripting/ScriptableMesh.h b/libraries/graphics-scripting/src/graphics-scripting/ScriptableMesh.h
index 61dd9a3e61..dcb1c53759 100644
--- a/libraries/graphics-scripting/src/graphics-scripting/ScriptableMesh.h
+++ b/libraries/graphics-scripting/src/graphics-scripting/ScriptableMesh.h
@@ -83,9 +83,8 @@ namespace scriptable {
 
     public slots:
         const scriptable::ScriptableModelPointer getParentModel() const { return qobject_cast<scriptable::ScriptableModel*>(model); }
-        // Functions exposed to scripts need to use QVector<unsigned int> instead of QVector<glm::uint32> as a workaround to QScriptEngine meta types
-        QVector<unsigned int> getIndices() const;
-        QVector<unsigned int> findNearbyVertexIndices(const glm::vec3& origin, float epsilon = 1e-6) const;
+        QVector<glm::uint32> getIndices() const;
+        QVector<glm::uint32> findNearbyVertexIndices(const glm::vec3& origin, float epsilon = 1e-6) const;
 
         glm::uint32 addAttribute(const QString& attributeName, const QVariant& defaultValue = QVariant());
         glm::uint32 fillAttribute(const QString& attributeName, const QVariant& value);
diff --git a/libraries/graphics-scripting/src/graphics-scripting/ScriptableMeshPart.cpp b/libraries/graphics-scripting/src/graphics-scripting/ScriptableMeshPart.cpp
index 092cdede98..192071d3af 100644
--- a/libraries/graphics-scripting/src/graphics-scripting/ScriptableMeshPart.cpp
+++ b/libraries/graphics-scripting/src/graphics-scripting/ScriptableMeshPart.cpp
@@ -244,8 +244,8 @@ glm::uint32 scriptable::ScriptableMeshPart::fillAttribute(const QString& attribu
     return isValid() ? parentMesh->fillAttribute(attributeName, value) : 0;
 }
 
-QVector<unsigned int> scriptable::ScriptableMeshPart::findNearbyPartVertexIndices(const glm::vec3& origin, float epsilon) const {
-    QSet<unsigned int> result;
+QVector<glm::uint32> scriptable::ScriptableMeshPart::findNearbyPartVertexIndices(const glm::vec3& origin, float epsilon) const {
+    QSet<glm::uint32> result;
     if (!isValid()) {
         return result.toList().toVector();
     }
@@ -328,14 +328,14 @@ scriptable::ScriptableMeshPart::ScriptableMeshPart(scriptable::ScriptableMeshPoi
     setObjectName(QString("%1.part[%2]").arg(parentMesh ? parentMesh->objectName() : "").arg(partIndex));
 }
 
-QVector<unsigned int> scriptable::ScriptableMeshPart::getIndices() const {
+QVector<glm::uint32> scriptable::ScriptableMeshPart::getIndices() const {
     if (auto mesh = getMeshPointer()) {
 #ifdef SCRIPTABLE_MESH_DEBUG
         qCDebug(graphics_scripting, "getIndices mesh %p", mesh.get());
 #endif
         return buffer_helpers::bufferToVector<glm::uint32>(mesh->getIndexBuffer());
     }
-    return QVector<unsigned int>();
+    return QVector<glm::uint32>();
 }
 
 bool scriptable::ScriptableMeshPart::setFirstVertexIndex( glm::uint32 vertexIndex) {
@@ -365,11 +365,11 @@ bool scriptable::ScriptableMeshPart::setLastVertexIndex( glm::uint32 vertexIndex
     return true;
 }
 
-bool scriptable::ScriptableMeshPart::setIndices(const QVector<unsigned int>& indices) {
+bool scriptable::ScriptableMeshPart::setIndices(const QVector<glm::uint32>& indices) {
     if (!isValid()) {
         return false;
     }
-    unsigned int len = indices.size();
+    glm::uint32 len = indices.size();
     if (len != getNumIndices()) {
         context()->throwError(QString("setIndices: currently new indicies must be assign 1:1 across old indicies (indicies.size()=%1, numIndices=%2)")
                               .arg(len).arg(getNumIndices()));
@@ -379,14 +379,14 @@ bool scriptable::ScriptableMeshPart::setIndices(const QVector<unsigned int>& ind
     auto indexBuffer = mesh->getIndexBuffer();
 
     // first loop to validate all indices are valid
-    for (unsigned int i = 0; i < len; i++) {
+    for (glm::uint32 i = 0; i < len; i++) {
         if (!isValidIndex(indices.at(i))) {
             return false;
         }
     }
     const auto first = getFirstVertexIndex();
     // now actually apply them
-    for (unsigned int i = 0; i < len; i++) {
+    for (glm::uint32 i = 0; i < len; i++) {
         buffer_helpers::setValue(indexBuffer, first + i, indices.at(i));
     }
     return true;
@@ -431,7 +431,7 @@ glm::uint32 scriptable::ScriptableMeshPart::getTopologyLength() const {
     return 0;
 }
 
-QVector<unsigned int> scriptable::ScriptableMeshPart::getFace(unsigned int faceIndex) const {
+QVector<glm::uint32> scriptable::ScriptableMeshPart::getFace(glm::uint32 faceIndex) const {
     switch (getTopology()) {
     case graphics::Mesh::Topology::POINTS:
     case graphics::Mesh::Topology::LINES:
@@ -440,7 +440,7 @@ QVector<unsigned int> scriptable::ScriptableMeshPart::getFace(unsigned int faceI
         if (faceIndex < getNumFaces()) {
             return getIndices().mid(faceIndex * getTopologyLength(), getTopologyLength());
         }
-    default: return QVector<unsigned int>();
+    default: return QVector<glm::uint32>();
     }
 }
 
diff --git a/libraries/graphics-scripting/src/graphics-scripting/ScriptableMeshPart.h b/libraries/graphics-scripting/src/graphics-scripting/ScriptableMeshPart.h
index 73e69d66ef..7352fcd0f6 100644
--- a/libraries/graphics-scripting/src/graphics-scripting/ScriptableMeshPart.h
+++ b/libraries/graphics-scripting/src/graphics-scripting/ScriptableMeshPart.h
@@ -55,10 +55,9 @@ namespace scriptable {
         bool isValid() const { auto mesh = getMeshPointer(); return mesh && partIndex < mesh->getNumParts(); }
 
     public slots:
-        // Functions exposed to scripts need to use QVector<unsigned int> instead of QVector<glm::uint32> as a workaround to QScriptEngine meta types
-        QVector<unsigned int> getIndices() const;
-        bool setIndices(const QVector<unsigned int>& indices);
-        QVector<unsigned int> findNearbyPartVertexIndices(const glm::vec3& origin, float epsilon = 1e-6) const;
+        QVector<glm::uint32> getIndices() const;
+        bool setIndices(const QVector<glm::uint32>& indices);
+        QVector<glm::uint32> findNearbyPartVertexIndices(const glm::vec3& origin, float epsilon = 1e-6) const;
         QVariantList queryVertexAttributes(QVariant selector) const;
         QVariantMap getVertexAttributes(glm::uint32 vertexIndex) const;
         bool setVertexAttributes(glm::uint32 vertexIndex, const QVariantMap& attributeValues);
@@ -66,7 +65,7 @@ namespace scriptable {
         QVariant getVertexProperty(glm::uint32 vertexIndex, const QString& attributeName) const;
         bool setVertexProperty(glm::uint32 vertexIndex, const QString& attributeName, const QVariant& attributeValues);
 
-        QVector<unsigned int> getFace(glm::uint32 faceIndex) const;
+        QVector<glm::uint32> getFace(glm::uint32 faceIndex) const;
 
         QVariantMap scaleToFit(float unitScale);
         QVariantMap translate(const glm::vec3& translation);
diff --git a/libraries/shared/src/RegisteredMetaTypes.cpp b/libraries/shared/src/RegisteredMetaTypes.cpp
index 2369928845..f0fb20f292 100644
--- a/libraries/shared/src/RegisteredMetaTypes.cpp
+++ b/libraries/shared/src/RegisteredMetaTypes.cpp
@@ -35,6 +35,7 @@ int vec4MetaTypeId = qRegisterMetaType<glm::vec4>();
 int qVectorVec3MetaTypeId = qRegisterMetaType<QVector<glm::vec3>>();
 int qVectorQuatMetaTypeId = qRegisterMetaType<QVector<glm::quat>>();
 int qVectorBoolMetaTypeId = qRegisterMetaType<QVector<bool>>();
+int qVectorGLMUint32MetaTypeId = qRegisterMetaType<QVector<unsigned int>>("QVector<glm::uint32>");
 int quatMetaTypeId = qRegisterMetaType<glm::quat>();
 int pickRayMetaTypeId = qRegisterMetaType<PickRay>();
 int collisionMetaTypeId = qRegisterMetaType<Collision>();