diff --git a/js/cells/DMACell.js b/js/cells/DMACell.js
index d02979637e15b803e631e47ed9e622b5dac44954..c1e28eebccc645fed802c32144305fd68b9a8c60 100644
--- a/js/cells/DMACell.js
+++ b/js/cells/DMACell.js
@@ -38,7 +38,7 @@ DMACell.prototype._translateCell = function(object3D){
 DMACell.prototype._buildMesh = function(){
     var geometry = this._getGeometry();
     var meshes = [];
-    var mesh = new THREE.Mesh(geometry, cellMaterial);
+    var mesh = new THREE.Mesh(geometry, this.getMaterial());
     mesh.name = "cell";
     meshes.push(mesh);
     var wireframe = this._buildWireframe(mesh, geometry);
@@ -80,6 +80,10 @@ DMACell.prototype.show = function(mode){
     this.setMode(mode);
 };
 
+DMACell.prototype.getMaterial = function(){
+    return cellMaterial;
+};
+
 DMACell.prototype.setOpacity = function(opacity){
 };
 
diff --git a/js/cells/GIKCell.js b/js/cells/GIKCell.js
index 412f1f55289cb1ece345690b23d12e5759572e6e..eb7533d97386e118c957ff43cf1a3764309bd2ce 100644
--- a/js/cells/GIKCell.js
+++ b/js/cells/GIKCell.js
@@ -32,8 +32,8 @@
         return object3D;
     };
 
-    GIKCell.prototype.getMaterialType = function(){
-        return this.superCell.getMaterialType();
+    GIKCell.prototype.getMaterial = function(){
+        return this.superCell.getMaterial();
     };
 
     GIKCell.prototype._initParts = function(){
diff --git a/js/cells/OctaRotEdgeCell.js b/js/cells/OctaRotEdgeCell.js
index 8580a8285543292dd47937dce1575feafe26ee9b..6af7524b02d0845383f162a06af8b17f826093d8 100644
--- a/js/cells/OctaRotEdgeCell.js
+++ b/js/cells/OctaRotEdgeCell.js
@@ -14,9 +14,9 @@ OctaRotEdgeCell.prototype._initParts = function(){
     var type = globals.lattice.get("partType");
     var newParts = [];
     if (type == "vox"){
-        newParts.push(new OctaEdgeVoxPart(0));
+        newParts.push(new OctaEdgeVoxPart(0, this));
     } else if (type == "voxLowPoly"){
-        newParts.push(new OctaEdgeVoxPartLowPoly(0));
+        newParts.push(new OctaEdgeVoxPartLowPoly(0, this));
     } else {
         console.warn("part type " + type + " not recognized");
         return;
diff --git a/js/cells/supercells/GIKSuperCell.js b/js/cells/supercells/GIKSuperCell.js
index d211c39f33928fbc9b333b881fa7a59ac3a19f99..d18c44beec703f6a40925c9ace9c8ea1ab579b48 100644
--- a/js/cells/supercells/GIKSuperCell.js
+++ b/js/cells/supercells/GIKSuperCell.js
@@ -41,7 +41,7 @@ GIKSuperCell.prototype._buildMesh = function(length){
     var superCellGeo = new THREE.BoxGeometry(1,1,1.28);
     superCellGeo.applyMatrix(new THREE.Matrix4().makeScale(length, 1, 1));
     superCellGeo.applyMatrix(new THREE.Matrix4().makeTranslation(-length/2+0.5, 0, 0));
-    var mesh = new THREE.Mesh(superCellGeo, this.getMaterialType());
+    var mesh = new THREE.Mesh(superCellGeo, this.getMaterial());
     mesh.name = "supercell";
     meshes.push(mesh);
     var wireframe = this._buildWireframe(mesh);
@@ -59,7 +59,7 @@ GIKSuperCell.prototype._buildWireframe = function(mesh){
     return wireframe;
 };
 
-GIKSuperCell.prototype.getMaterialType = function(){
+GIKSuperCell.prototype.getMaterial = function(){
     var material = cellBrassMaterial;
     if (this.material == "fiberGlass") material = cellFiberGlassMaterial;
     return material;
diff --git a/js/parts/DMAPart.js b/js/parts/DMAPart.js
index 43ef549e55e1a1ce14c283aedaf65d2b4eabc67f..2eb06073e5e4a74ef7ac690d5e8456504056e675 100644
--- a/js/parts/DMAPart.js
+++ b/js/parts/DMAPart.js
@@ -6,14 +6,15 @@
 var partMaterial = new THREE.MeshLambertMaterial({ color:0xffffff, shading: THREE.FlatShading });
     partMaterial.color.setRGB( 0.9619657144369509, 0.6625466032079207, 0.20799727886007258 );
 
-function DMAPart(index) {
+function DMAPart(index, parent) {
+    this.parentCell  = parent;
     this.index = index;//todo need this?
     this.mesh = this._buildMesh(index);
 }
 
 DMAPart.prototype._buildMesh = function(index){
     var geometry = this._getGeometry(index);
-    var mesh = new THREE.Mesh(geometry, partMaterial);
+    var mesh = new THREE.Mesh(geometry, this.getMaterial());
     mesh.name = "part";
     return mesh;
 };
@@ -37,11 +38,16 @@ DMAPart.prototype.getMesh = function(){//only call by parent cell
     return this.mesh;
 };
 
+DMAPart.prototype.getMaterial = function(){
+    return partMaterial;
+};
+
 DMAPart.prototype.destroy = function(){
     if (this.mesh) {
         this.mesh.parent.remove(this.mesh);
         this.mesh = null;
     }
+    this.parentCell = null;
     this.index = null;
 };
 
diff --git a/js/parts/GIKPart.js b/js/parts/GIKPart.js
index 6fb931e4158e65a7e9e0dcf0cc63acb2c9cf120d..d0a2582c55dfcf17409eee444ba277b84a7a7757 100644
--- a/js/parts/GIKPart.js
+++ b/js/parts/GIKPart.js
@@ -40,6 +40,10 @@
         return unitPartGeo;//this.parentCell.getMaterialType()
     };
 
+    DMAPart.prototype.getMaterial = function(){
+        return this.parentCell.getMaterial();
+    };
+
     self.DMAGIKPart = DMAGIKPart;
 
 })();
diff --git a/js/parts/OctaEdgeVoxPart.js b/js/parts/OctaEdgeVoxPart.js
index b4d29f18150c131dab3570e825f05ced5e0bfaa6..792e1c5c96c982bc946bbfd2d34ff720f88de721 100644
--- a/js/parts/OctaEdgeVoxPart.js
+++ b/js/parts/OctaEdgeVoxPart.js
@@ -19,8 +19,8 @@
         unitPartGeo.applyMatrix(new THREE.Matrix4().makeTranslation(0,0,0.09));
     });
 
-    function OctaEdgeVoxPart(type){
-        DMAPart.call(this, type);
+    function OctaEdgeVoxPart(type, parent){
+        DMAPart.call(this, type, parent);
     }
     OctaEdgeVoxPart.prototype = Object.create(DMAPart.prototype);
 
diff --git a/js/parts/OctaFaceTriPart.js b/js/parts/OctaFaceTriPart.js
index 317ab03e3d7d4304a4cfc17dc6ff8a5e111082ee..d3f7612afc79ed26b357e16f294d2b7e5cd38842 100644
--- a/js/parts/OctaFaceTriPart.js
+++ b/js/parts/OctaFaceTriPart.js
@@ -25,8 +25,8 @@ loader.load("assets/stls/parts/trianglePart.stl", function(geometry){
     unitPartGeo3.applyMatrix(new THREE.Matrix4().makeRotationZ(-2*Math.PI/3));
 });
 
-function OctaFaceTriPart(type){
-    DMAPart.call(this, type);
+function OctaFaceTriPart(type, parent){
+    DMAPart.call(this, type, parent);
 }
 OctaFaceTriPart.prototype = Object.create(DMAPart.prototype);