diff --git a/js/cam/Assembler.js b/js/cam/Assembler.js
index 91dd96c621b36f2210bf21547492afe5e69e7065..b784ecc074b8b3b445afff2ee4fcab78cf2b4583 100644
--- a/js/cam/Assembler.js
+++ b/js/cam/Assembler.js
@@ -38,7 +38,7 @@ Assembler = Backbone.Model.extend({
         _.bindAll(this, "postProcess");
 
         //bind events
-        this.listenTo(options.appState, "change:currentTab", this._setCAMVisibility);
+        this.listenTo(options.appState, "change:currentTab", this._tabChanged);
         this.listenTo(this, "change:originPosition", this._moveOrigin);
         this.listenTo(this, "change:stockPosition", this._moveStock);
         this.listenTo(this,
@@ -97,6 +97,11 @@ Assembler = Backbone.Model.extend({
         this.get("stock").scale.set(scale, scale, scale);
     },
 
+    _tabChanged: function(){
+        this._setCAMVisibility();
+        if (dmaGlobals.appState.get("currentTab") != "animate") this.resetSimulation();
+    },
+
     _setCAMVisibility: function(){
         var visible = this._isVisible();
         this.get("origin").visible = visible;
@@ -137,6 +142,12 @@ Assembler = Backbone.Model.extend({
 ///////////////////////////////SIMULATION//////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////////////////////
 
+    resetSimulation: function(){
+        this.set("simLineNumber", 0, {silent:true});
+        dmaGlobals.appState.set("stockSimulationPlaying", false);
+        dmaGlobals.lattice.showCells();
+    },
+
     _stockSimulation: function(){
         if (dmaGlobals.appState.get("stockSimulationPlaying")){
             var currentLine = this.get("simLineNumber");
@@ -152,8 +163,7 @@ Assembler = Backbone.Model.extend({
                 });
             } else {
                 //finished simulation
-                this.set("simLineNumber", 0);
-                dmaGlobals.appState.set("stockSimulationPlaying", false);
+                this.resetSimulation();
             }
         } else {
             this.get("machine").pause();
@@ -203,7 +213,7 @@ Assembler = Backbone.Model.extend({
         this.set("dataOut", data);
         this.set("editsMadeToProgram", false);
         this.set("exporter", exporter);
-        this.set("simLineNumber", 0);
+        this.resetSimulation();
         return {data:data, exporter:exporter};
     },
 
diff --git a/js/menus/AnimationMenuView.js b/js/menus/AnimationMenuView.js
index ccf8328e8ef28257445a7d420b634467a755ba75..bbc52090cd090ffea8cd308754f073ffdeda10f8 100644
--- a/js/menus/AnimationMenuView.js
+++ b/js/menus/AnimationMenuView.js
@@ -62,7 +62,7 @@ AnimationMenuView = Backbone.View.extend({
 
     _resetStockSim: function(e){
         e.preventDefault();
-        dmaGlobals.assembler.set("simLineNumber", 0);
+        dmaGlobals.assembler.resetSimulation();
         this.render();
     },
 
diff --git a/js/models/Lattice.js b/js/models/Lattice.js
index f248b9da5d694ee065e4c621c822de0f5ae88a34..3ead407eef5c40565d44551f2fb20144b38980b8 100644
--- a/js/models/Lattice.js
+++ b/js/models/Lattice.js
@@ -356,13 +356,15 @@ Lattice = Backbone.Model.extend({
     hideCells: function(){
         this._iterCells(this.get("cells"), function(cell){
             if (cell) cell.hide();
-        })
+        });
+        dmaGlobals.three.render();
     },
 
     showCells: function(){
         this._iterCells(this.get("cells"), function(cell){
             if (cell) cell.draw();
-        })
+        });
+        dmaGlobals.three.render();
     },
 
     showCellAtIndex: function(index){