diff --git a/js/cells/DMACell.js b/js/cells/DMACell.js
index 06bcd1399e70c739c6365e34539683041615a3ac..28e2757cb4d3c7011384483333fe1bd6546d05c8 100644
--- a/js/cells/DMACell.js
+++ b/js/cells/DMACell.js
@@ -240,12 +240,9 @@ define(['underscore', 'three', 'threeModel', 'lattice', 'appState', 'globals'],
                 if (!this.parts) {
                     this._initParts(function(parts){
                         self.parts = parts;
-                        _.each(this.parts, function(part){
-                            self.addChildren(part.getMesh());
-                        });
                         setVisiblity();
                     });
-                }
+                } else setVisiblity();
                 break;
             case "beam":
 //                if (!this.beams) this.beams = this._initBeams();
@@ -264,7 +261,8 @@ define(['underscore', 'three', 'threeModel', 'lattice', 'appState', 'globals'],
                 if (child.name == "object3D") return;
                 child.visible = visible && (child.name == mode);
             });
-        };
+            three.conditionalRender();
+        }
     };
 
 
diff --git a/js/lattice/Lattice.js b/js/lattice/Lattice.js
index 82a8e6db31e198f5d94b16bd77ceae6263607bb8..d170a147f2efc218e47d198c0c1fce57ea3aac98 100644
--- a/js/lattice/Lattice.js
+++ b/js/lattice/Lattice.js
@@ -86,10 +86,10 @@ define(['underscore', 'backbone', 'appState', 'globals', 'plist', 'three', 'thre
             var index = (new THREE.Vector3()).subVectors(indices, this.get("cellsMin") || indices);
             if (!this.sparseCells[index.x][index.y][index.z]) {
                 var self = this;
+                if (!noRender || noRender === undefined) three.setRenderFlag();
                 this.makeCellForLatticeType(indices, function(cell){
                     self.sparseCells[index.x][index.y][index.z] = cell;
                     self.set("numCells", self.get("numCells")+1);
-                    if (!noRender || noRender === undefined) three.render();
                 });
             } else console.warn("already a cell there");
 
diff --git a/js/three/ThreeModel.js b/js/three/ThreeModel.js
index 6b8d94136cc0edfc26c01dfbe9c5c8cc05dc8758..90a2442a41bef075f35501bd776a5971d3bfa567 100644
--- a/js/three/ThreeModel.js
+++ b/js/three/ThreeModel.js
@@ -17,6 +17,8 @@ define(['underscore', 'three'], function(_, THREE){
     var animationLoopRunning = false;
     var stopAnimationFlag = false;
 
+    var shouldRender = false;
+
     initialize();
 
     function initialize(){
@@ -122,8 +124,18 @@ define(['underscore', 'three'], function(_, THREE){
         renderer.render(scene, camera);
     }
 
+    function setRenderFlag(){
+        shouldRender = true;
+    }
+
+    function conditionalRender(){
+        if (shouldRender) render();
+    }
+
     return {//return public properties/methods
         render: render,
+        conditionalRender: conditionalRender,
+        setRenderFlag: setRenderFlag,
         startAnimationLoop: startAnimationLoop,
         stopAnimationLoop: stopAnimationLoop,
         sceneRemove: sceneRemove,