diff --git a/js/fea/DMASuperCell.js b/js/fea/DMASuperCell.js
index 2fb7ce1a2eacb4ddfa739cea47c3b0f168011b24..5cd6f6fbf52630101b61ac77f58047fceefc5db2 100644
--- a/js/fea/DMASuperCell.js
+++ b/js/fea/DMASuperCell.js
@@ -43,7 +43,7 @@ DMASuperCell.prototype.setVisibility = function(visible){
 };
 
 DMASuperCell.prototype.getLength = function(){
-    return this.cells.length;
+    return this.cells.length-1;
 };
 
 DMASuperCell.prototype.destroy = function(){
diff --git a/js/fea/DmaCellOther.js b/js/fea/DmaCellOther.js
index 123ceaaa982af1aad7cdf969b627535776828fd6..016e82f91a49f63958de7c7ae414965aa3b06e1f 100644
--- a/js/fea/DmaCellOther.js
+++ b/js/fea/DmaCellOther.js
@@ -83,6 +83,7 @@ var cellMaterial = [new THREE.MeshNormalMaterial()];
     DMAGIKCell.prototype.setSuperCell = function(superCell, index){
         this.superCell = superCell;
         this.superCellIndex = index;
+        if (this.superCellIndex == this.superCell.getLength()) this.cellMesh.rotateZ(Math.PI);
         if (dmaGlobals.appState.get("cellMode")=="part") {
             this.parts = this.__initParts();
             this.draw();
@@ -91,7 +92,7 @@ var cellMaterial = [new THREE.MeshNormalMaterial()];
 
     DMAGIKCell.prototype.__initParts = function(){
         var parts  = [];
-        var isEnd = this.superCellIndex == 0 || this.superCellIndex == this.superCell.getLength()-1;
+        var isEnd = this.superCellIndex == 0 || this.superCellIndex == this.superCell.getLength();
         if (dmaGlobals.lattice.get("partType") == "lego") {
             if (isEnd) parts.push(new DMAGIKEndPart(0, this));
             else parts.push(new DMAGIKPart(0, this));
diff --git a/js/fea/DmaPart.js b/js/fea/DmaPart.js
index ae66d74a646fc0456ccf426f4f9fa000b0d9f4ad..0c6f4c7f5cb3eb154fe9657af0b56c1604e04d43 100644
--- a/js/fea/DmaPart.js
+++ b/js/fea/DmaPart.js
@@ -268,6 +268,12 @@ var partMaterial = new THREE.MeshLambertMaterial({ color:0xffffff, shading: THRE
     }
     DMAGIKPartLowPoly.prototype = Object.create(DMAGIKPart.prototype);
 
+    DMAGIKPartLowPoly.prototype._makeMeshForType = function(){
+        var mesh = new THREE.Mesh(unitPartGeo, partMaterial);
+        mesh.myPart = this;//need a ref back to this part
+        return mesh;
+    };
+
     self.DMAGIKPartLowPoly = DMAGIKPartLowPoly;
 
 })();
@@ -282,7 +288,7 @@ var partMaterial = new THREE.MeshLambertMaterial({ color:0xffffff, shading: THRE
 
         unitPartGeo = geometry;
         unitPartGeo.computeBoundingBox();
-        unitPartGeo.applyMatrix(new THREE.Matrix4().makeTranslation(-(unitPartGeo.boundingBox.min.x+unitPartGeo.boundingBox.max.x)/2,
+        unitPartGeo.applyMatrix(new THREE.Matrix4().makeTranslation(-(unitPartGeo.boundingBox.min.x+0.5),
             -(unitPartGeo.boundingBox.min.y+unitPartGeo.boundingBox.max.y)/2, -(unitPartGeo.boundingBox.min.z+unitPartGeo.boundingBox.max.z)/2));
         var unitScale = 1/(1.2699999809265137);
         unitPartGeo.applyMatrix(new THREE.Matrix4().makeRotationX(Math.PI/2));
@@ -294,6 +300,12 @@ var partMaterial = new THREE.MeshLambertMaterial({ color:0xffffff, shading: THRE
     }
     DMAGIKEndPart.prototype = Object.create(DMAGIKPart.prototype);
 
+    DMAGIKEndPart.prototype._makeMeshForType = function(){
+        var mesh = new THREE.Mesh(unitPartGeo, partMaterial);
+        mesh.myPart = this;//need a ref back to this part
+        return mesh;
+    };
+
     self.DMAGIKEndPart = DMAGIKEndPart;
 
 })();
@@ -308,7 +320,7 @@ var partMaterial = new THREE.MeshLambertMaterial({ color:0xffffff, shading: THRE
 
         unitPartGeo = geometry;
         unitPartGeo.computeBoundingBox();
-        unitPartGeo.applyMatrix(new THREE.Matrix4().makeTranslation(-(unitPartGeo.boundingBox.min.x+unitPartGeo.boundingBox.max.x)/2,
+        unitPartGeo.applyMatrix(new THREE.Matrix4().makeTranslation(-(unitPartGeo.boundingBox.min.x+0.5),
             -(unitPartGeo.boundingBox.min.y+unitPartGeo.boundingBox.max.y)/2, -(unitPartGeo.boundingBox.min.z+unitPartGeo.boundingBox.max.z)/2));
         var unitScale = 1/(1.2699999809265137);
         unitPartGeo.applyMatrix(new THREE.Matrix4().makeRotationX(Math.PI/2));
@@ -320,6 +332,12 @@ var partMaterial = new THREE.MeshLambertMaterial({ color:0xffffff, shading: THRE
     }
     DMAGIKEndPartLowPoly.prototype = Object.create(DMAGIKPart.prototype);
 
+    DMAGIKEndPartLowPoly.prototype._makeMeshForType = function(){
+        var mesh = new THREE.Mesh(unitPartGeo, partMaterial);
+        mesh.myPart = this;//need a ref back to this part
+        return mesh;
+    };
+
     self.DMAGIKEndPartLowPoly = DMAGIKEndPartLowPoly;
 
 })();
\ No newline at end of file