diff --git a/css/main.css b/css/main.css
index 656d59ec51ceabfe7bfc136827125aa2c27d13f0..9400633dd379aabe4bfef87c909051081ff23b74 100644
--- a/css/main.css
+++ b/css/main.css
@@ -170,4 +170,5 @@ hr {
 input.numberInput{
     width:22%;
     display: inline;
+    padding: 8px 10px;
 }
diff --git a/js/cam/GCodeExporter.js b/js/cam/GCodeExporter.js
index 7d544bf71ef1b944c91ac801ee8107bd82e3fea0..dc724ab83148449ea508d1993ab2e454c77f0e16 100644
--- a/js/cam/GCodeExporter.js
+++ b/js/cam/GCodeExporter.js
@@ -52,6 +52,10 @@ GCodeExporter.prototype.rapidXY = function(x, y){
     return this.rapidXYZ(x, y, null);
 };
 
+GCodeExporter.prototype.rapidZ = function(z){
+    return this.rapidXYZ(null, null, z);
+};
+
 GCodeExporter.prototype.moveXYZ = function(x, y, z){
     if (x !== null) x = "X"+x;
     if (y !== null) y = "Y"+y;
diff --git a/js/menus/AssemblerMenuView.js b/js/menus/AssemblerMenuView.js
index d3dd36ed544f1ad4dafc512eb9b4c256fd49b3ed..31d390315e0694258c9d7b67881df14618a8dc8d 100644
--- a/js/menus/AssemblerMenuView.js
+++ b/js/menus/AssemblerMenuView.js
@@ -16,13 +16,13 @@ AssemblerMenuView = Backbone.View.extend({
 
         this.assembler = options.assembler;
 
-        _.bindAll(this, "render");
-        _.bindAll(this, "_onKeyup");
+        _.bindAll(this, "render", "_onKeyup");
         this.listenTo(this.assembler, "change", this.render);
-        $(document).bind('keyup', {state:false}, this._onKeyup);
+        $(document).bind('keyup', {}, this._onKeyup);
     },
 
     _onKeyup: function(e){
+        if (this.model.get("currentTab") != "assembler") return;
         if ($(".placementOrder").is(":focus")) this._updatePlacementOrder(e);
     },
 
diff --git a/js/menus/CamMenuView.js b/js/menus/CamMenuView.js
index 0055e2f94a84509b20045b8b5fb0cb1bca1dfdfb..4f1d9d412e409e091e6a1faddeb15dc8d5f00a69 100644
--- a/js/menus/CamMenuView.js
+++ b/js/menus/CamMenuView.js
@@ -19,12 +19,11 @@ CamMenuView = Backbone.View.extend({
         this.lattice = options.lattice;
         this.assembler = options.assembler;
 
-        _.bindAll(this, "render");
-        _.bindAll(this, "_onKeyup");
+        _.bindAll(this, "render", "_onKeyup");
         //bind events
         this.listenTo(this.assembler, "change", this.render);
         this.listenTo(this.lattice, "change:units", this.render);
-        $(document).bind('keyup', {state:false}, this._onKeyup);
+        $(document).bind('keyup', {}, this._onKeyup);
     },
 
     _selectCamProcess: function(e){
@@ -38,6 +37,7 @@ CamMenuView = Backbone.View.extend({
     },
 
     _onKeyup: function(e){
+        if (this.model.get("currentTab") != "cam") return;
         if ($(".wcs").is(":focus")) this._updateNumber(e, "originPosition");
         else if ($(".stockPosition").is(":focus")) this._updateNumber(e, "stockPosition");
         else if ($(".rapidSpeeds").is(":focus")) this._updateNumber(e, "rapidSpeeds");
@@ -50,6 +50,7 @@ CamMenuView = Backbone.View.extend({
         e.preventDefault();
         var newVal = parseFloat($(e.target).val());
         if (isNaN(newVal)) return;
+        newVal = newVal.toFixed(4);
         var object = this.assembler.get(property);
         if ($(e.target).data("type")) {
             object[$(e.target).data("type")] = newVal;
diff --git a/js/models/AppState.js b/js/models/AppState.js
index 6a17d8c69846937b0652bf500a93cbc09504aed7..261a9d0efee792ff33186d1dd747ecad210374c8 100644
--- a/js/models/AppState.js
+++ b/js/models/AppState.js
@@ -155,11 +155,12 @@ AppState = Backbone.Model.extend({
 
     initialize: function(){
 
-         _.bindAll(this, "_handleKeyStroke");
+         _.bindAll(this, "_handleKeyStroke", "_handleScroll");
 
         //bind events
         $(document).bind('keydown', {state:true}, this._handleKeyStroke);
         $(document).bind('keyup', {state:false}, this._handleKeyStroke);
+        $(document).bind('mousewheel', {}, this._handleScroll);
 
         this.listenTo(this, "change:currentTab", this._storeTab);
         this.listenTo(this, "change:currentNav", this._updateCurrentTabForNav);
@@ -273,6 +274,10 @@ AppState = Backbone.Model.extend({
             default:
                 break;
         }
+    },
+
+    _handleScroll: function(e){//disable two finger swipe back
+        e.preventDefault();
     }
 
 });
\ No newline at end of file
diff --git a/js/models/Lattice.js b/js/models/Lattice.js
index 11beeb4a6b32a5d3405a4603bdd1620d22ebc738..9e07e6b332fe20217a96ce8d566c54a34fc9809e 100644
--- a/js/models/Lattice.js
+++ b/js/models/Lattice.js
@@ -462,8 +462,12 @@ Lattice = Backbone.Model.extend({
             newVarDim = cells[0][0].length;
         } else if (firstLetter == ""){
             for (var i=0;i<var1.dim;i++){
-                for (var j=0;j<var2.dim;j++){
-                    for (var k=0;k<var3.dim;k++){
+            //for (var i=var1.dim-1;i>=0;i--){
+                for (var j=var2.dim-1;j>=0;j--){
+                    for (var k=var3.dim-1;k>=0;k--){
+            //for (var i=0;i<var1.dim;i++){
+            //    for (var j=0;j<var2.dim;j++){
+            //        for (var k=0;k<var3.dim;k++){
                         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);