diff --git a/examples/html/entityProperties.html b/examples/html/entityProperties.html
index 8a15147f16..cb680dd83a 100644
--- a/examples/html/entityProperties.html
+++ b/examples/html/entityProperties.html
@@ -362,6 +362,9 @@
             var elVoxelVolumeSizeY = document.getElementById("property-voxel-volume-size-y");
             var elVoxelVolumeSizeZ = document.getElementById("property-voxel-volume-size-z");
             var elVoxelSurfaceStyle = document.getElementById("property-voxel-surface-style");
+            var elXTextureURL = document.getElementById("property-x-texture-url");
+            var elYTextureURL = document.getElementById("property-y-texture-url");
+            var elZTextureURL = document.getElementById("property-z-texture-url");
 
             var elHyperlinkHref = document.getElementById("property-hyperlink-href");
             var elHyperlinkDescription = document.getElementById("property-hyperlink-description");
@@ -614,6 +617,8 @@
                                 elVoxelVolumeSizeY.value = properties.voxelVolumeSize.y.toFixed(2);
                                 elVoxelVolumeSizeZ.value = properties.voxelVolumeSize.z.toFixed(2);
                                 elVoxelSurfaceStyle.value = properties.voxelSurfaceStyle;
+                                elXTextureURL.value = properties.xTextureURL;
+
                             }
 
                             if (selected) {
@@ -867,6 +872,9 @@
             elVoxelVolumeSizeY.addEventListener('change', voxelVolumeSizeChangeFunction);
             elVoxelVolumeSizeZ.addEventListener('change', voxelVolumeSizeChangeFunction);
             elVoxelSurfaceStyle.addEventListener('change', createEmitTextPropertyUpdateFunction('voxelSurfaceStyle'));
+            elXTextureURL.addEventListener('change', createEmitTextPropertyUpdateFunction('xTextureURL'));
+            elYTextureURL.addEventListener('change', createEmitTextPropertyUpdateFunction('yTextureURL'));
+            elZTextureURL.addEventListener('change', createEmitTextPropertyUpdateFunction('zTextureURL'));
 
             elMoveSelectionToGrid.addEventListener("click", function() {
                 EventBridge.emitWebEvent(JSON.stringify({
@@ -1063,7 +1071,22 @@
                 <option value='0'>marching cubes</option>
                 <option value='1'>cubic</option>
                 <option value='2'>edged cubic</option>
-              </select> 
+              </select>
+            </div>
+
+            <div class="label">X-axis Texture URL</div>
+            <div class="value">
+              <input type="text" id="property-x-texture-url" class="url"></input>
+            </div>
+
+            <div class="label">Y-axis Texture URL</div>
+            <div class="value">
+              <input type="text" id="property-y-texture-url" class="url"></input>
+            </div>
+
+            <div class="label">Z-axis Texture URL</div>
+            <div class="value">
+              <input type="text" id="property-z-texture-url" class="url"></input>
             </div>
         </div>
 
diff --git a/examples/libraries/entityPropertyDialogBox.js b/examples/libraries/entityPropertyDialogBox.js
index 1b1a6a9c12..b386953c7c 100644
--- a/examples/libraries/entityPropertyDialogBox.js
+++ b/examples/libraries/entityPropertyDialogBox.js
@@ -98,8 +98,8 @@ EntityPropertyDialogBox = (function () {
             index++;
         }
 
-	if (properties.type == "PolyVox") {
-	    array.push({ label: "Voxel Space Size:", type: "header" });
+        if (properties.type == "PolyVox") {
+            array.push({ label: "Voxel Space Size:", type: "header" });
             index++;
 
             array.push({ label: "X:", value: properties.voxelVolumeSize.x.toFixed(decimals) });
@@ -109,9 +109,16 @@ EntityPropertyDialogBox = (function () {
             array.push({ label: "Z:", value: properties.voxelVolumeSize.z.toFixed(decimals) });
             index++;
 
-	    array.push({ label: "Surface Extractor", value: properties.voxelSurfaceStyle });
-	    index++;
-	}
+            array.push({ label: "Surface Extractor", value: properties.voxelSurfaceStyle });
+            index++;
+
+            array.push({ label: "X-axis Texture URL:", value: properties.xTextureURL });
+            index++;
+            array.push({ label: "Y-axis Texture URL:", value: properties.yTextureURL });
+            index++;
+            array.push({ label: "Z-axis Texture URL:", value: properties.zTextureURL });
+            index++;
+        }
 
         array.push({ label: "Position:", type: "header" });
         index++;
@@ -348,14 +355,17 @@ EntityPropertyDialogBox = (function () {
                 properties.backgroundColor.blue = array[index++].value;
             }
 
-	    if (properties.type == "PolyVox") {
+            if (properties.type == "PolyVox") {
                 properties.shapeType = array[index++].value;
 
-		index++; // skip header
-		properties.voxelVolumeSize.x = array[index++].value;
-		properties.voxelVolumeSize.y = array[index++].value;
-		properties.voxelVolumeSize.z = array[index++].value;
-		properties.voxelSurfaceStyle = array[index++].value;
+                index++; // skip header
+                properties.voxelVolumeSize.x = array[index++].value;
+                properties.voxelVolumeSize.y = array[index++].value;
+                properties.voxelVolumeSize.z = array[index++].value;
+                properties.voxelSurfaceStyle = array[index++].value;
+                properties.xTextureURL = array[index++].value;
+                properties.yTextureURL = array[index++].value;
+                properties.zTextureURL = array[index++].value;
             }
 
             index++; // skip header
diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp
index 61253ba6ba..ac9bccab78 100644
--- a/libraries/entities/src/EntityItemProperties.cpp
+++ b/libraries/entities/src/EntityItemProperties.cpp
@@ -101,6 +101,9 @@ CONSTRUCT_PROPERTY(lineWidth, LineEntityItem::DEFAULT_LINE_WIDTH),
 CONSTRUCT_PROPERTY(linePoints, QVector<glm::vec3>()),
 CONSTRUCT_PROPERTY(faceCamera, TextEntityItem::DEFAULT_FACE_CAMERA),
 CONSTRUCT_PROPERTY(actionData, QByteArray()),
+CONSTRUCT_PROPERTY(xTextureURL, ""),
+CONSTRUCT_PROPERTY(yTextureURL, ""),
+CONSTRUCT_PROPERTY(zTextureURL, ""),
 
 _id(UNKNOWN_ENTITY_ID),
 _idSet(false),
@@ -357,6 +360,9 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const {
     CHECK_PROPERTY_CHANGE(PROP_DESCRIPTION, description);
     CHECK_PROPERTY_CHANGE(PROP_FACE_CAMERA, faceCamera);
     CHECK_PROPERTY_CHANGE(PROP_ACTION_DATA, actionData);
+    CHECK_PROPERTY_CHANGE(PROP_X_TEXTURE_URL, xTextureURL);
+    CHECK_PROPERTY_CHANGE(PROP_Y_TEXTURE_URL, yTextureURL);
+    CHECK_PROPERTY_CHANGE(PROP_Z_TEXTURE_URL, zTextureURL);
 
     changedProperties += _stage.getChangedProperties();
     changedProperties += _atmosphere.getChangedProperties();
@@ -493,6 +499,10 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool
     _atmosphere.copyToScriptValue(properties, engine, skipDefaults, defaultEntityProperties);
     _skybox.copyToScriptValue(properties, engine, skipDefaults, defaultEntityProperties);
 
+    COPY_PROPERTY_TO_QSCRIPTVALUE(xTextureURL);
+    COPY_PROPERTY_TO_QSCRIPTVALUE(yTextureURL);
+    COPY_PROPERTY_TO_QSCRIPTVALUE(zTextureURL);
+
     return properties;
 }
 
@@ -583,6 +593,12 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool
     _stage.copyFromScriptValue(object, _defaultSettings);
     _atmosphere.copyFromScriptValue(object, _defaultSettings);
     _skybox.copyFromScriptValue(object, _defaultSettings);
+
+
+    COPY_PROPERTY_FROM_QSCRIPTVALUE(xTextureURL, QString, setXTextureURL);
+    COPY_PROPERTY_FROM_QSCRIPTVALUE(yTextureURL, QString, setYTextureURL);
+    COPY_PROPERTY_FROM_QSCRIPTVALUE(zTextureURL, QString, setZTextureURL);
+
     _lastEdited = usecTimestampNow();
 }
 
@@ -810,6 +826,9 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType::Value command, Ent
                 APPEND_ENTITY_PROPERTY(PROP_VOXEL_VOLUME_SIZE, properties.getVoxelVolumeSize());
                 APPEND_ENTITY_PROPERTY(PROP_VOXEL_DATA, properties.getVoxelData());
                 APPEND_ENTITY_PROPERTY(PROP_VOXEL_SURFACE_STYLE, properties.getVoxelSurfaceStyle());
+                APPEND_ENTITY_PROPERTY(PROP_X_TEXTURE_URL, properties.getXTextureURL());
+                APPEND_ENTITY_PROPERTY(PROP_Y_TEXTURE_URL, properties.getYTextureURL());
+                APPEND_ENTITY_PROPERTY(PROP_Z_TEXTURE_URL, properties.getZTextureURL());
             }
 
             if (properties.getType() == EntityTypes::Line) {
@@ -1061,6 +1080,9 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int
         READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_VOXEL_VOLUME_SIZE, glm::vec3, setVoxelVolumeSize);
         READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_VOXEL_DATA, QByteArray, setVoxelData);
         READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_VOXEL_SURFACE_STYLE, uint16_t, setVoxelSurfaceStyle);
+        READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_X_TEXTURE_URL, QString, setXTextureURL);
+        READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_Y_TEXTURE_URL, QString, setYTextureURL);
+        READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_Z_TEXTURE_URL, QString, setZTextureURL);
     }
 
     if (properties.getType() == EntityTypes::Line) {
@@ -1185,6 +1207,10 @@ void EntityItemProperties::markAllChanged() {
     _descriptionChanged = true;
     _faceCameraChanged = true;
     _actionDataChanged = true;
+
+    _xTextureURLChanged = true;
+    _yTextureURLChanged = true;
+    _zTextureURLChanged = true;
 }
 
 /// The maximum bounding cube for the entity, independent of it's rotation.
diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h
index 4532ffd67b..ef5e8c54dc 100644
--- a/libraries/entities/src/EntityItemProperties.h
+++ b/libraries/entities/src/EntityItemProperties.h
@@ -154,6 +154,9 @@ public:
     DEFINE_PROPERTY_REF(PROP_DESCRIPTION, Description, description, QString);
     DEFINE_PROPERTY(PROP_FACE_CAMERA, FaceCamera, faceCamera, bool);
     DEFINE_PROPERTY_REF(PROP_ACTION_DATA, ActionData, actionData, QByteArray);
+    DEFINE_PROPERTY_REF(PROP_X_TEXTURE_URL, XTextureURL, xTextureURL, QString);
+    DEFINE_PROPERTY_REF(PROP_Y_TEXTURE_URL, YTextureURL, yTextureURL, QString);
+    DEFINE_PROPERTY_REF(PROP_Z_TEXTURE_URL, ZTextureURL, zTextureURL, QString);
 
     static QString getBackgroundModeString(BackgroundMode mode);
 
@@ -313,6 +316,9 @@ inline QDebug operator<<(QDebug debug, const EntityItemProperties& properties) {
     DEBUG_PROPERTY_IF_CHANGED(debug, properties, Href, href, "");
     DEBUG_PROPERTY_IF_CHANGED(debug, properties, Description, description, "");
     DEBUG_PROPERTY_IF_CHANGED(debug, properties, ActionData, actionData, "");
+    DEBUG_PROPERTY_IF_CHANGED(debug, properties, XTextureURL, xTextureURL, "");
+    DEBUG_PROPERTY_IF_CHANGED(debug, properties, YTextureURL, yTextureURL, "");
+    DEBUG_PROPERTY_IF_CHANGED(debug, properties, ZTextureURL, zTextureURL, "");
 
     properties.getStage().debugDump();
     properties.getAtmosphere().debugDump();
diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h
index be16683f39..c23c45fabf 100644
--- a/libraries/entities/src/EntityPropertyFlags.h
+++ b/libraries/entities/src/EntityPropertyFlags.h
@@ -126,6 +126,10 @@ enum EntityPropertyList {
     PROP_SCRIPT_TIMESTAMP,
     PROP_ACTION_DATA,
 
+    PROP_X_TEXTURE_URL, // used by PolyVox
+    PROP_Y_TEXTURE_URL, // used by PolyVox
+    PROP_Z_TEXTURE_URL, // used by PolyVox
+
     ////////////////////////////////////////////////////////////////////////////////////////////////////
     // ATTENTION: add new properties to end of list just ABOVE this line
     PROP_AFTER_LAST_ITEM,
diff --git a/libraries/entities/src/PolyVoxEntityItem.cpp b/libraries/entities/src/PolyVoxEntityItem.cpp
index 048017de1c..c9f3705712 100644
--- a/libraries/entities/src/PolyVoxEntityItem.cpp
+++ b/libraries/entities/src/PolyVoxEntityItem.cpp
@@ -26,6 +26,9 @@ const float PolyVoxEntityItem::MAX_VOXEL_DIMENSION = 32.0f;
 const QByteArray PolyVoxEntityItem::DEFAULT_VOXEL_DATA(PolyVoxEntityItem::makeEmptyVoxelData());
 const PolyVoxEntityItem::PolyVoxSurfaceStyle PolyVoxEntityItem::DEFAULT_VOXEL_SURFACE_STYLE =
     PolyVoxEntityItem::SURFACE_MARCHING_CUBES;
+const QString PolyVoxEntityItem::DEFAULT_X_TEXTURE_URL = QString("");
+const QString PolyVoxEntityItem::DEFAULT_Y_TEXTURE_URL = QString("");
+const QString PolyVoxEntityItem::DEFAULT_Z_TEXTURE_URL = QString("");
 
 EntityItemPointer PolyVoxEntityItem::factory(const EntityItemID& entityID, const EntityItemProperties& properties) {
     return std::make_shared<PolyVoxEntityItem>(entityID, properties);
@@ -49,7 +52,10 @@ PolyVoxEntityItem::PolyVoxEntityItem(const EntityItemID& entityItemID, const Ent
     EntityItem(entityItemID),
     _voxelVolumeSize(PolyVoxEntityItem::DEFAULT_VOXEL_VOLUME_SIZE),
     _voxelData(PolyVoxEntityItem::DEFAULT_VOXEL_DATA),
-    _voxelSurfaceStyle(PolyVoxEntityItem::DEFAULT_VOXEL_SURFACE_STYLE)
+    _voxelSurfaceStyle(PolyVoxEntityItem::DEFAULT_VOXEL_SURFACE_STYLE),
+    _xTextureURL(PolyVoxEntityItem::DEFAULT_X_TEXTURE_URL),
+    _yTextureURL(PolyVoxEntityItem::DEFAULT_Y_TEXTURE_URL),
+    _zTextureURL(PolyVoxEntityItem::DEFAULT_Z_TEXTURE_URL)
 {
     _type = EntityTypes::PolyVox;
     setProperties(properties);
@@ -94,6 +100,9 @@ EntityItemProperties PolyVoxEntityItem::getProperties() const {
     COPY_ENTITY_PROPERTY_TO_PROPERTIES(voxelVolumeSize, getVoxelVolumeSize);
     COPY_ENTITY_PROPERTY_TO_PROPERTIES(voxelData, getVoxelData);
     COPY_ENTITY_PROPERTY_TO_PROPERTIES(voxelSurfaceStyle, getVoxelSurfaceStyle);
+    COPY_ENTITY_PROPERTY_TO_PROPERTIES(xTextureURL, getXTextureURL);
+    COPY_ENTITY_PROPERTY_TO_PROPERTIES(yTextureURL, getYTextureURL);
+    COPY_ENTITY_PROPERTY_TO_PROPERTIES(zTextureURL, getZTextureURL);
 
     return properties;
 }
@@ -103,6 +112,9 @@ bool PolyVoxEntityItem::setProperties(const EntityItemProperties& properties) {
     SET_ENTITY_PROPERTY_FROM_PROPERTIES(voxelVolumeSize, setVoxelVolumeSize);
     SET_ENTITY_PROPERTY_FROM_PROPERTIES(voxelData, setVoxelData);
     SET_ENTITY_PROPERTY_FROM_PROPERTIES(voxelSurfaceStyle, setVoxelSurfaceStyle);
+    SET_ENTITY_PROPERTY_FROM_PROPERTIES(xTextureURL, setXTextureURL);
+    SET_ENTITY_PROPERTY_FROM_PROPERTIES(yTextureURL, setYTextureURL);
+    SET_ENTITY_PROPERTY_FROM_PROPERTIES(zTextureURL, setZTextureURL);
 
     if (somethingChanged) {
         bool wantDebug = false;
@@ -127,6 +139,9 @@ int PolyVoxEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* dat
     READ_ENTITY_PROPERTY(PROP_VOXEL_VOLUME_SIZE, glm::vec3, setVoxelVolumeSize);
     READ_ENTITY_PROPERTY(PROP_VOXEL_DATA, QByteArray, setVoxelData);
     READ_ENTITY_PROPERTY(PROP_VOXEL_SURFACE_STYLE, uint16_t, setVoxelSurfaceStyle);
+    READ_ENTITY_PROPERTY(PROP_X_TEXTURE_URL, QString, setXTextureURL);
+    READ_ENTITY_PROPERTY(PROP_Y_TEXTURE_URL, QString, setYTextureURL);
+    READ_ENTITY_PROPERTY(PROP_Z_TEXTURE_URL, QString, setZTextureURL);
 
     return bytesRead;
 }
@@ -138,6 +153,9 @@ EntityPropertyFlags PolyVoxEntityItem::getEntityProperties(EncodeBitstreamParams
     requestedProperties += PROP_VOXEL_VOLUME_SIZE;
     requestedProperties += PROP_VOXEL_DATA;
     requestedProperties += PROP_VOXEL_SURFACE_STYLE;
+    requestedProperties += PROP_X_TEXTURE_URL;
+    requestedProperties += PROP_Y_TEXTURE_URL;
+    requestedProperties += PROP_Z_TEXTURE_URL;
     return requestedProperties;
 }
 
@@ -153,6 +171,10 @@ void PolyVoxEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeB
     APPEND_ENTITY_PROPERTY(PROP_VOXEL_VOLUME_SIZE, getVoxelVolumeSize());
     APPEND_ENTITY_PROPERTY(PROP_VOXEL_DATA, getVoxelData());
     APPEND_ENTITY_PROPERTY(PROP_VOXEL_SURFACE_STYLE, (uint16_t) getVoxelSurfaceStyle());
+    APPEND_ENTITY_PROPERTY(PROP_X_TEXTURE_URL, getXTextureURL());
+    APPEND_ENTITY_PROPERTY(PROP_Y_TEXTURE_URL, getYTextureURL());
+    APPEND_ENTITY_PROPERTY(PROP_Z_TEXTURE_URL, getZTextureURL());
+
 }
 
 void PolyVoxEntityItem::debugDump() const {
diff --git a/libraries/entities/src/PolyVoxEntityItem.h b/libraries/entities/src/PolyVoxEntityItem.h
index 9e20187195..0d0ab060f9 100644
--- a/libraries/entities/src/PolyVoxEntityItem.h
+++ b/libraries/entities/src/PolyVoxEntityItem.h
@@ -87,6 +87,18 @@ class PolyVoxEntityItem : public EntityItem {
 
     static QByteArray makeEmptyVoxelData(quint16 voxelXSize = 16, quint16 voxelYSize = 16, quint16 voxelZSize = 16);
 
+    static const QString DEFAULT_X_TEXTURE_URL;
+    virtual void setXTextureURL(QString xTextureURL) { _xTextureURL = xTextureURL; }
+    virtual const QString& getXTextureURL() const { return _xTextureURL; }
+
+    static const QString DEFAULT_Y_TEXTURE_URL;
+    virtual void setYTextureURL(QString yTextureURL) { _yTextureURL = yTextureURL; }
+    virtual const QString& getYTextureURL() const { return _yTextureURL; }
+
+    static const QString DEFAULT_Z_TEXTURE_URL;
+    virtual void setZTextureURL(QString zTextureURL) { _zTextureURL = zTextureURL; }
+    virtual const QString& getZTextureURL() const { return _zTextureURL; }
+
  protected:
     virtual void updateVoxelSurfaceStyle(PolyVoxSurfaceStyle voxelSurfaceStyle) {
         _voxelSurfaceStyle = voxelSurfaceStyle;
@@ -95,6 +107,11 @@ class PolyVoxEntityItem : public EntityItem {
     glm::vec3 _voxelVolumeSize; // this is always 3 bytes
     QByteArray _voxelData;
     PolyVoxSurfaceStyle _voxelSurfaceStyle;
+
+    QString _xTextureURL;
+    QString _yTextureURL;
+    QString _zTextureURL;
+
 };
 
 #endif // hifi_PolyVoxEntityItem_h
diff --git a/libraries/networking/src/udt/PacketHeaders.cpp b/libraries/networking/src/udt/PacketHeaders.cpp
index 0591ac30fe..bddad72d29 100644
--- a/libraries/networking/src/udt/PacketHeaders.cpp
+++ b/libraries/networking/src/udt/PacketHeaders.cpp
@@ -67,7 +67,7 @@ PacketVersion versionForPacketType(PacketType::Value packetType) {
         case EntityAdd:
         case EntityEdit:
         case EntityData:
-            return VERSION_ENTITIES_NEW_PROTOCOL_LAYER;
+            return VERSION_POLYVOX_TEXTURES;
         default:
             return 11;
     }
diff --git a/libraries/networking/src/udt/PacketHeaders.h b/libraries/networking/src/udt/PacketHeaders.h
index 3f3f165e87..9c837f4594 100644
--- a/libraries/networking/src/udt/PacketHeaders.h
+++ b/libraries/networking/src/udt/PacketHeaders.h
@@ -139,5 +139,6 @@ const PacketVersion VERSION_ENTITIES_SCRIPT_TIMESTAMP = 31;
 const PacketVersion VERSION_ENTITIES_SCRIPT_TIMESTAMP_FIX = 32;
 const PacketVersion VERSION_ENTITIES_HAVE_SIMULATION_OWNER_AND_ACTIONS_OVER_WIRE = 33;
 const PacketVersion VERSION_ENTITIES_NEW_PROTOCOL_LAYER = 35;
+const PacketVersion VERSION_POLYVOX_TEXTURES = 36;
 
 #endif // hifi_PacketHeaders_h