diff --git a/js/cam/Assembler.js b/js/cam/Assembler.js
index 4e5f09169721c47ee527549860c8dfd06c5693e9..cd46d909423ac511fb55a22ed2fcf02d8e1e3663 100644
--- a/js/cam/Assembler.js
+++ b/js/cam/Assembler.js
@@ -16,12 +16,12 @@ Assembler = Backbone.Model.extend({
         needsPostProcessing: true,
         editsMadeToProgram: false,//warn the user that they will override changes
 
-        rapidHeight: 6,
+        rapidHeight: 6,//always store relative to origin
         rapidHeightRelative: true,
         safeHeight: 0.5,//inches above stock or assembly, when feed rate should slow
 
         origin: null,
-        originPosition: new THREE.Vector3(20,0,0),
+        originPosition: new THREE.Vector3(20,0,0),//in abs coordinates
         stock: null,
         stockPosition: new THREE.Vector3(20,0,0),//in abs coordinates
         stockPositionRelative: true,
diff --git a/js/menus/CamMenuView.js b/js/menus/CamMenuView.js
index 6434d2e48882317ee55ce51efef4d4486e4f3003..26ff715ff4a4f34ffd872918d103dff90ca14c58 100644
--- a/js/menus/CamMenuView.js
+++ b/js/menus/CamMenuView.js
@@ -55,7 +55,10 @@ CamMenuView = Backbone.View.extend({
         else if ($(".rapidSpeeds").is(":focus")) this._updateNumber(e, "rapidSpeeds");
         else if ($(".feedRate").is(":focus")) this._updateNumber(e, "feedRate");
         else if ($(".safeHeight").is(":focus")) this._updateNumber(e, "safeHeight");
-        else if ($(".rapidHeight").is(":focus")) this._updateNumber(e, "rapidHeight");
+        else if ($(".rapidHeight").is(":focus")) {
+            if (this.assembler.get("rapidHeightRelative")) this._updateNumber(e, "rapidHeight");
+            else this._updateAbsoluteRapidHeight(e)
+        }
         else if ($(".stockArraySize").is(":focus")) this._updateNumber(e, "stockArraySize");
         else if ($(".stockSeparation").is(":focus")) this._updateNumber(e, "stockSeparation");
     },
@@ -85,6 +88,14 @@ CamMenuView = Backbone.View.extend({
         this.assembler.trigger("change");
     },
 
+    _updateAbsoluteRapidHeight: function(e){
+        e.preventDefault();
+        var newVal = parseFloat($(e.target).val());
+        if (isNaN(newVal)) return;
+        newVal -= this.assembler.get("originPosition".z).toFixed(4);//always store relative to origin
+        this.assembler.set("rapidHeight", parseFloat(newVal));
+    },
+
     _clickCheckbox: function(e){
         e.preventDefault();
         var $object = $(e.target);
@@ -109,6 +120,10 @@ CamMenuView = Backbone.View.extend({
             relStockPos.z = data.stockPosition.z - data.originPosition.z;
             data.stockPosition = relStockPos;
         }
+        if (!this.assembler.get("rapidHeightRelative")){
+            data.rapidHeight = data.rapidHeight + data.originPosition.z;
+        }
+
         this.$el.html(this.template(data));
     },