diff --git a/js/cam/Assembler.js b/js/cam/Assembler.js
index 5242d67a4cdc9f3ab7243d1d6e711a4ad5bf61c6..a0329a5553dc10be993854c496247334b5180743 100644
--- a/js/cam/Assembler.js
+++ b/js/cam/Assembler.js
@@ -32,7 +32,6 @@ Assembler = Backbone.Model.extend({
         this.listenTo(dmaGlobals.appState, "change:currentTab", this._setCAMVisibility);
         this.listenTo(this, "change:originPosition", this._moveOrigin);
         this.listenTo(this, "change:stockPosition", this._moveStock);
-        this.listenTo(dmaGlobals.appState, "change:units", this._setNeedsPostProcessing);
         this.listenTo(this,
                 "change:originPosition " +
                 "change:stockPosition " +
@@ -43,6 +42,7 @@ Assembler = Backbone.Model.extend({
             this._setNeedsPostProcessing);
         this.listenTo(dmaGlobals.lattice,
                 "change:numCells " +
+                "change:units " +
                 "change:scale " +
                 "change:cellType " +
                 "change:connectionType",
@@ -133,7 +133,7 @@ Assembler = Backbone.Model.extend({
 
         var wcs = this.get("originPosition");
         var stockPosition = this.get("stockPosition");
-        dmaGlobals.lattice.rasterCells(this._getOrder(this.get("camStrategy"), function(cell){
+        dmaGlobals.lattice.rasterCells(this._getOrder(this.get("camStrategy")), function(cell){
             if (!cell) return;
 
             data += exporter.rapidXY(stockPosition.x-wcs.x, stockPosition.y-wcs.y);
diff --git a/js/cam/GCodeExporter.js b/js/cam/GCodeExporter.js
index 64ba054f2cf097f26401f43730b13113ec9f34fc..7d544bf71ef1b944c91ac801ee8107bd82e3fea0 100644
--- a/js/cam/GCodeExporter.js
+++ b/js/cam/GCodeExporter.js
@@ -7,7 +7,7 @@ function GCodeExporter() {
 
 GCodeExporter.prototype.makeHeader = function(){
     var data = "";
-    if (dmaGlobals.appState.get("units") == "inches") data += this.addLine("G20", [], "units inches");
+    if (dmaGlobals.lattice.get("units") == "inches") data += this.addLine("G20", [], "units inches");
     else data += this.addLine("G21", [], "units mm");
     data += this.addLine("G90", [], "absolute positioning");
     data += this.addLine("G54", [], "work offset");
@@ -31,6 +31,7 @@ GCodeExporter.prototype.addLine = function(command, params, comment){
         if (!param) return;
         if (isNaN(parseFloat(param))) {
             data += param + " ";
+            return;
         }
         data += param.toFixed(3) + " ";
     });
diff --git a/js/cam/ShopbotExporter.js b/js/cam/ShopbotExporter.js
index 4fe28e78b8b44686f0de880a239b7ae286e0ead0..a2d26f5e14dac8ba20b013dbe7f60c82ca74875e 100644
--- a/js/cam/ShopbotExporter.js
+++ b/js/cam/ShopbotExporter.js
@@ -27,7 +27,7 @@ ShopbotExporter.prototype.addLine = function(command, params, comment){
             data += param + ", ";
             return;
         }
-        if (dmaGlobals.appState.get("units") == "mm") param = self.convertToInches(param);//all shopbot stuff must be in inches
+        if (dmaGlobals.lattice.get("units") == "mm") param = self.convertToInches(param);//all shopbot stuff must be in inches
         data += param.toFixed(3) + ", ";
     });
     if (comment) data += "'" +comment;
diff --git a/js/menus/CamMenuView.js b/js/menus/CamMenuView.js
index be447d49d695257794a43942cbd6894db470cd65..a115d9939c9ec28ef79cc4ca7300a854860c5d43 100644
--- a/js/menus/CamMenuView.js
+++ b/js/menus/CamMenuView.js
@@ -23,7 +23,7 @@ CamMenuView = Backbone.View.extend({
         _.bindAll(this, "_onKeyup");
         //bind events
         this.listenTo(this.assembler, "change", this.render);
-        this.listenTo(this.model, "change:units", this.render);
+        this.listenTo(this.lattice, "change:units", this.render);
         $(document).bind('keyup', {state:false}, this._onKeyup);
     },
 
@@ -34,7 +34,7 @@ CamMenuView = Backbone.View.extend({
 
     _changeUnits: function(e){
         e.preventDefault();
-        this.model.set("units", $(e.target).data("type"));
+        this.lattice.set("units", $(e.target).data("type"));
     },
 
     _onKeyup: function(e){
@@ -61,7 +61,7 @@ CamMenuView = Backbone.View.extend({
     render: function(){
         if (this.model.get("currentTab") != "cam") return;
         if ($("input").is(":focus")) return;
-        this.$el.html(this.template(_.extend(this.model.toJSON(), this.assembler.toJSON())));
+        this.$el.html(this.template(_.extend(this.model.toJSON(), this.assembler.toJSON(), this.lattice.toJSON())));
     },
 
     template: _.template('\
diff --git a/js/menus/LatticeMenuView.js b/js/menus/LatticeMenuView.js
index 87a4901703ceca882a0335f3640b12d549cf78a5..9c5bf3756cc0f44075f49e6be5514f4c0c2f6438 100644
--- a/js/menus/LatticeMenuView.js
+++ b/js/menus/LatticeMenuView.js
@@ -28,7 +28,6 @@ LatticeMenuView = Backbone.View.extend({
 
         //bind events
         this.listenTo(this.lattice, "change", this.render);
-        this.listenTo(this.model, "change:units", this.render);
     },
 
     _clearCells: function(e){
@@ -45,7 +44,7 @@ LatticeMenuView = Backbone.View.extend({
 
     _changeUnits: function(e){
         e.preventDefault();
-        this.model.set("units", $(e.target).data("type"));
+        this.lattice.set("units", $(e.target).data("type"));
     },
 
     _sliderDidSlide: function(e){
diff --git a/js/models/AppState.js b/js/models/AppState.js
index 80bbdfe9d65d363ff5b1578031d7f63010195f7a..5cad69bd7ecaa0efd3b9e8bd9ef43ca384b89f56 100644
--- a/js/models/AppState.js
+++ b/js/models/AppState.js
@@ -142,7 +142,6 @@ AppState = Backbone.Model.extend({
             mm: "mm",
             inches: "Inches"
         },
-        units: "mm",
 
         //key bindings
         shift: false,
@@ -238,6 +237,7 @@ AppState = Backbone.Model.extend({
                 this.set("shift", state);
                 break;
             case 68://d delete mode
+                console.log(state);
                 if (dmaGlobals.lattice.get("cellMode") == "cell") this.set("deleteMode", state);//only for cell mode
                 else this.set("deleteMode", false);
                 break;
diff --git a/js/models/Lattice.js b/js/models/Lattice.js
index 6b19e6a36c161debcf7624fa882053001b784c39..94c7d22ece6294ae419ae5a63d13f84e9fecb006 100644
--- a/js/models/Lattice.js
+++ b/js/models/Lattice.js
@@ -7,6 +7,8 @@ Lattice = Backbone.Model.extend({
 
     defaults: {
 
+        units: "mm",
+
         nodes: [],
         cells: [[[null]]],//3D matrix containing all cells and null, dynamic size
         cellsMin: {x:0, y:0, z:0},//min position of cells matrix
@@ -503,7 +505,10 @@ Lattice = Backbone.Model.extend({
 
     saveJSON: function(name){
         if (!name) name = "lattice";
-        var data = JSON.stringify(_.omit(this.toJSON(), ["highlighter", "basePlane"]));
+        var data = JSON.stringify({
+            lattice:_.omit(this.toJSON(), ["highlighter", "basePlane"]),
+            assembler: _.omit(dmaGlobals.assembler.toJSON(), ["origin", "stock"])
+        });
         var blob = new Blob([data], {type: "text/plain;charset=utf-8"});
         saveAs(blob, name + ".json");
     },