diff --git a/js/fea/DMASuperCell.js b/js/fea/DMASuperCell.js
index 2210bc15dd36dcb45e32b945b969f2a3afd21581..085fb8c14dcdf424c9216f8855f4706ffcddfaf5 100644
--- a/js/fea/DMASuperCell.js
+++ b/js/fea/DMASuperCell.js
@@ -11,11 +11,7 @@ DMASuperCell = function(length, range, cells){
     this.material = dmaGlobals.lattice.get("materialType");
     this.mesh = this._buildSuperCellMesh(length, shouldRotate);
     this.setVisibility(dmaGlobals.appState.get("cellMode")=="cell");
-    if (range) {
-        this.index = _.clone(range.max);
-        if (this.index.z %2 == 0) this.index.x -= cells.length/2.0-0.5;
-        else this.index.y -= cells.length/2.0-0.5;
-    }
+    if (range) this.indices = _.clone(range.max);
     this.cells = cells;
     this.setScale();
     dmaGlobals.three.sceneAdd(this.mesh);
@@ -24,6 +20,7 @@ DMASuperCell = function(length, range, cells){
 DMASuperCell.prototype._buildSuperCellMesh = function(length, shouldRotate){
     var superCellGeo = new THREE.BoxGeometry(1,1,1);
     superCellGeo.applyMatrix(new THREE.Matrix4().makeScale(length, 1, 1));
+    superCellGeo.applyMatrix(new THREE.Matrix4().makeTranslation(-length/2+0.5, 0, 0));
     if (shouldRotate) superCellGeo.applyMatrix(new THREE.Matrix4().makeRotationZ(Math.PI/2));
     var mesh = THREE.SceneUtils.createMultiMaterialObject(superCellGeo, [this.getMaterialType()]);
     var wireframe = new THREE.BoxHelper(mesh.children[0]);
@@ -47,7 +44,7 @@ DMASuperCell.prototype._setPosition = function(index){
 DMASuperCell.prototype.setScale = function(scale){
     if (!scale) scale = dmaGlobals.lattice.get("scale");
     this.mesh.scale.set(scale, scale, scale);
-    this._setPosition(this.index);
+    this._setPosition(this.indices);
 };
 
 DMASuperCell.prototype.setVisibility = function(visible){
@@ -99,6 +96,6 @@ DMASuperCell.prototype.destroy = function(){
     });
     this.cells = null;
     this.mesh = null;
-    this.index = null;
+    this.indices = null;
     this.material = null;
 }
\ No newline at end of file
diff --git a/js/models/Lattice.js b/js/models/Lattice.js
index 886637dd3e1b6e3dae88c21f588c94d7ba1674ae..638f747d2f86f72d41ab985807ecd96651a303fc 100644
--- a/js/models/Lattice.js
+++ b/js/models/Lattice.js
@@ -552,25 +552,11 @@ Lattice = Backbone.Model.extend({
             newVarOrder = 2;
             newVarDim = cells[0][0].length;
         } else if (firstLetter == ""){
-            for (var i=this._getRasterLoopInit(var1);this._getRasterLoopCondition(i,var1);i+=this._getRasterLoopIterator(var1)){
-                for (var j=this._getRasterLoopInit(var2);this._getRasterLoopCondition(j,var2);j+=this._getRasterLoopIterator(var2)){
-                    for (var k=this._getRasterLoopInit(var3);this._getRasterLoopCondition(k,var3);k+=this._getRasterLoopIterator(var3)){
-                        if (var1.order == 0){
-                            if (var2.order == 1) callback(cells[i][j][k], i, j, k);
-                            else if (var2.order == 2) callback(cells[i][k][j], i, k, j);
-                        } else if (var1.order == 1){
-                            if (var2.order == 0) callback(cells[j][i][k], j, i, k);
-                            else if (var2.order == 2) callback(cells[k][i][j], k, i, j);
-                        } else {
-                            if (var2.order == 0) callback(cells[j][k][i], j, k, i);
-                            else if (var2.order == 1) {
-                                callback(cells[k][j][i], k, j, i);
-                            }
-                        }
-
-                    }
-                }
+            if (this._rasterGikCells) {
+                this._rasterGikCells(order, callback, var1, var2, var3, cells);
+                return;
             }
+            this._rasterCells(order, callback, var1, var2, var3, cells);
             return;
         }
         if (var3 == null) var3 = {order: newVarOrder, dim: newVarDim, neg:isNeg};
@@ -579,6 +565,28 @@ Lattice = Backbone.Model.extend({
         this.rasterCells(order, callback, var1, var2, var3, cells);
     },
 
+    _rasterCells: function(order, callback, var1, var2, var3, cells){
+        for (var i=this._getRasterLoopInit(var1);this._getRasterLoopCondition(i,var1);i+=this._getRasterLoopIterator(var1)){
+            for (var j=this._getRasterLoopInit(var2);this._getRasterLoopCondition(j,var2);j+=this._getRasterLoopIterator(var2)){
+                for (var k=this._getRasterLoopInit(var3);this._getRasterLoopCondition(k,var3);k+=this._getRasterLoopIterator(var3)){
+                    if (var1.order == 0){
+                        if (var2.order == 1) callback(cells[i][j][k], i, j, k);
+                        else if (var2.order == 2) callback(cells[i][k][j], i, k, j);
+                    } else if (var1.order == 1){
+                        if (var2.order == 0) callback(cells[j][i][k], j, i, k);
+                        else if (var2.order == 2) callback(cells[k][i][j], k, i, j);
+                    } else {
+                        if (var2.order == 0) callback(cells[j][k][i], j, k, i);
+                        else if (var2.order == 1) {
+                            callback(cells[k][j][i], k, j, i);
+                        }
+                    }
+
+                }
+            }
+        }
+    },
+
     _getRasterLoopInit: function(variable){
         if (variable.neg) return variable.dim-1;
         return 0;
diff --git a/js/models/LatticeOther.js b/js/models/LatticeOther.js
index 5a7d99f1736cb22081e9df0dd04345218f39e91a..7666c8e9bc67b85aaca2cb381249c8f4536741ac 100644
--- a/js/models/LatticeOther.js
+++ b/js/models/LatticeOther.js
@@ -106,6 +106,32 @@ OtherLatticeSubclasses = {
             return superCell;
         },
 
+        _rasterGikCells: function(order, callback, var1, var2, var3, cells){
+            for (var i=this._getRasterLoopInit(var1);this._getRasterLoopCondition(i,var1);i+=this._getRasterLoopIterator(var1)){
+                for (var j=this._getRasterLoopInit(var2);this._getRasterLoopCondition(j,var2);j+=this._getRasterLoopIterator(var2)){
+                    for (var k=this._getRasterLoopInit(var3);this._getRasterLoopCondition(k,var3);k+=this._getRasterLoopIterator(var3)){
+                        if (var1.order == 0){
+                            if (var2.order == 1) callback(this._retrieveSuperCell(cells[i][j][k]), i, j, k);
+                            else if (var2.order == 2) callback(this._retrieveSuperCell(cells[i][k][j]), i, k, j);
+                        } else if (var1.order == 1){
+                            if (var2.order == 0) callback(this._retrieveSuperCell(cells[j][i][k]), j, i, k);
+                            else if (var2.order == 2) callback(this._retrieveSuperCell(cells[k][i][j]), k, i, j);
+                        } else {
+                            if (var2.order == 0) callback(this._retrieveSuperCell(cells[j][k][i]), j, k, i);
+                            else if (var2.order == 1) {
+                                callback(this._retrieveSuperCell(cells[k][j][i]), k, j, i);
+                            }
+                        }
+                    }
+                }
+            }
+        },
+
+        _retrieveSuperCell: function(cell){
+            if (cell) return cell.superCell;
+            return null;
+        },
+
         _undo: function(){//remove all the mixins, this will help with debugging later
             var self = this;
             _.each(_.keys(this.GIKLattice), function(key){