diff --git a/dependencies/bootstrap-slider/bootstrap-slider.css b/dependencies/bootstrap-slider/bootstrap-slider.css
index 043a23414ea5eff21cd4a2f48870868cbfc86ef3..c061bf433c71d81836cd29fb09624617864e2886 100755
--- a/dependencies/bootstrap-slider/bootstrap-slider.css
+++ b/dependencies/bootstrap-slider/bootstrap-slider.css
@@ -29,8 +29,9 @@
   position: relative;
 }
 .slider.slider-horizontal {
-  width: 210px;
+  width: 100%;
   height: 20px;
+    padding: 30px 0;
 }
 .slider.slider-horizontal .slider-track {
   height: 10px;
diff --git a/js/cam/Assembler.js b/js/cam/Assembler.js
index c8c0496f320dbbe707d088924f17fd48267f5fff..f8083f875ab92bb381b722c121495dbebbb22287 100644
--- a/js/cam/Assembler.js
+++ b/js/cam/Assembler.js
@@ -27,7 +27,8 @@ Assembler = Backbone.Model.extend({
         rapidSpeeds:{xy: 3, z: 2},//rapids at clearance height
         feedRate:{xy: 0.1, z: 0.1},//speed when heading towards assembly
 
-        simLineNumber: 1//used for stock simulation, reading through gcode
+        simLineNumber: 1,//used for stock simulation, reading through gcode
+        simSpeed: 4//#X times real speed
     },
 
     initialize: function(options){
@@ -126,7 +127,7 @@ Assembler = Backbone.Model.extend({
                 this.get("exporter").simulate(allLines[currentLine], this.get("machine"),
                     this.get("originPosition"), function(){
                     currentLine++;
-                    self.set("simLineNumber", currentLine);
+                    self.set("simLineNumber", currentLine, {silent:true});
                     self._stockSimulation();
                 });
             } else {
diff --git a/js/cam/Machine.js b/js/cam/Machine.js
index 7251123813516b210a0107faf2b335f40a0a766b..92f55857d28f5bcc886230921272c3bcce8efe91 100644
--- a/js/cam/Machine.js
+++ b/js/cam/Machine.js
@@ -4,11 +4,17 @@
 
 
 function Machine() {
-    var mesh = new THREE.Mesh(new THREE.BoxGeometry(2,2,2));
-    //dmaGlobals.three.sceneAdd(mesh);
+    var mesh = new THREE.Mesh(new THREE.BoxGeometry(2,2,2));//this._makeStock();
+    dmaGlobals.three.sceneAdd(mesh);
     this.mesh = mesh;
 }
 
+Machine.prototype._makeStock = function(){
+    var mesh = DMAEdgeVoxPart.prototype._makeMeshForType();
+    mesh.myPart = null;
+    return mesh;
+};
+
 Machine.prototype.pause = function(){
 
 };
@@ -21,6 +27,6 @@ Machine.prototype.moveTo = function(x, y, z, speed, wcs, callback){
         if (z != "") self.mesh.position.z = parseFloat(z)+wcs.z;
         dmaGlobals.three.render();
         return callback();
-    }, 300);
+    }, 500/dmaGlobals.assembler.get("simSpeed"));
 
 };
\ No newline at end of file
diff --git a/js/menus/AnimationMenuView.js b/js/menus/AnimationMenuView.js
index 3a816996f45ed5c45a72cb380ad4bc6537ef6d3c..b5a553150a98300f8ca5bf0273cd4f9da5709486 100644
--- a/js/menus/AnimationMenuView.js
+++ b/js/menus/AnimationMenuView.js
@@ -12,7 +12,8 @@ AnimationMenuView = Backbone.View.extend({
         "click #pauseStockSim":                                     "_pauseStockSim",
         "click #resetStockSim":                                     "_resetStockSim",
         "click #saveSendMenu":                                      "_save",
-        "click #overrideEdits":                                     "_postProcess"
+        "click #overrideEdits":                                     "_postProcess",
+        "slideStop #speedSlider":                                   "_changeSpeedSlider"
     },
 
     initialize: function(){
@@ -57,24 +58,35 @@ AnimationMenuView = Backbone.View.extend({
         dmaGlobals.assembler.set("simLineNumber", 1);
     },
 
+    _changeSpeedSlider: function(e){
+        dmaGlobals.assembler.set("simSpeed", $(e.target)[0].value);
+    },
+
     render: function(){
         if (this.model.get("currentTab") != "animate") return;
         if (dmaGlobals.assembler.get("needsPostProcessing")) dmaGlobals.assembler.postProcess();
         this.$el.html(this.template(_.extend(this.model.toJSON(), dmaGlobals.assembler.toJSON())));
+
+        $('#speedSlider').slider({
+            formatter: function(value) {
+                return value + "X";
+            }
+        });
     },
 
     template: _.template('\
         <% if (stockSimulationPlaying){ %>\
-        <a href="#" id="pauseStockSim" class=" btn btn-block btn-lg btn-warning">Pause</a><br/>\
+        <a href="#" id="pauseStockSim" class=" btn btn-block btn-lg btn-warning">Pause</a>\
         <% } else { %>\
             <% if (simLineNumber != 1){ %>\
                 <a href="#" id="playStockSim" class=" btn btn-lg btn-halfWidth btn-success">Play</a>\
-                <a href="#" id="resetStockSim" class=" btn btn-lg btn-halfWidth pull-right btn-default">Reset</a><br/><br/>\
+                <a href="#" id="resetStockSim" class=" btn btn-lg btn-halfWidth pull-right btn-default">Reset</a><br/>\
             <% } else { %>\
-                <a href="#" id="playStockSim" class=" btn btn-block btn-lg btn-success">Play</a><br/>\
+                <a href="#" id="playStockSim" class=" btn btn-block btn-lg btn-success">Play</a>\
             <% } %>\
         <% } %>\
-        <a href="#" id="saveSendMenu" class=" btn btn-block btn-lg btn-default">Save</a><br/>\
+        <input id="speedSlider" data-slider-id="speedSlider" type="text" data-slider-min="1" data-slider-max="10" data-slider-step="1" data-slider-value="<%= simSpeed %>"/>\
+        <br/><a href="#" id="saveSendMenu" class=" btn btn-block btn-lg btn-default">Save</a><br/>\
         Assembly Time:&nbsp;&nbsp;<br/><br/>\
         <textarea id="gcodeEditor"><%= dataOut %></textarea><br/><br/>\
         <a href="#" id="overrideEdits" class=" btn btn-block btn-lg btn-default">Undo Changes</a><br/>\