diff --git a/js/cam/Machine.js b/js/cam/Machine.js
deleted file mode 100644
index 09587679725c31a72fb4bebae2419b73d2966c31..0000000000000000000000000000000000000000
--- a/js/cam/Machine.js
+++ /dev/null
@@ -1,365 +0,0 @@
-/**
- * Created by fab on 3/16/15.
- */
-
-
-function Machine() {
-
-    this.hasStock = false;
-    this._setDefaults();
-
-    this.meshes = {};
-    this.material = new THREE.MeshLambertMaterial({color:0xaaaaaa, shading: THREE.FlatShading, transparent:true, opacity:1});
-    this.cell = this._makeStockCell();
-    var self = this;
-    this._buildMeshes(function(meshes){
-        self.meshes = meshes;
-        _.each(_.values(meshes), function(mesh){
-            globals.three.sceneAdd(mesh);
-        });
-        if (self.setMachinePosition) self.setMachinePosition();
-        self.setVisibility();
-    });
-    this.setVisibility(false);
-}
-
-Machine.prototype._setDefaults = function(){
-    globals.cam.set("camProcess", "gcode");
-    globals.cam.set("stockFixed", false);
-    globals.cam.set("originPosition", {x:0,y:0,z:0});
-    var boundingBox = globals.lattice.calculateBoundingBox();
-    var rapidHeight = parseFloat((boundingBox.max.z + 2*globals.lattice.zScale()).toFixed(4));
-    globals.cam.set("rapidHeight", rapidHeight);
-    globals.cam.set("stockPosition", {x:0,y:0,z:0});
-    globals.cam.set("stockSeparation", globals.lattice.xScale());
-};
-
-Machine.prototype.setVisibility = function(visible){
-    if (visible == null || visible === undefined) {
-        if (globals.cam) visible = globals.cam.isVisible();
-        else visible = false;
-    }
-    if (visible && this.hasStock) this.cell.draw();
-    else this.cell.hide();
-    this._setAlpha();
-    this._setMeshesVisiblity(visible);
-    globals.three.render();
-};
-
-Machine.prototype._setAlpha = function(){
-    //todo make stock transparent
-    if (globals.appState.get("currentTab") == "cam"){
-        this.material.opacity = 0.5;
-    } else {
-        this.material.opacity = 1;
-    }
-};
-
-Machine.prototype._setMeshesVisiblity = function(visible){
-    _.each(_.values(this.meshes), function(mesh){
-        mesh.visible = visible;
-    });
-    if (visible) this.setScale(globals.lattice.get("scale"));
-};
-
-Machine.prototype.setScale = function(scale){
-    _.each(_.values(this.meshes), function(mesh){
-        mesh.scale.set(scale, scale, scale);
-    });
-}
-
-Machine.prototype._makeStockCell = function(){
-    if (globals.lattice.makeSuperCell) return globals.lattice.makeSuperCell();
-    return globals.lattice.makeCellForLatticeType({}, globals.lattice.get("scale"));
-};
-
-Machine.prototype.updateCellType = function(){
-    if (this.cell) this.cell.destroy();
-    this.cell = this._makeStockCell();
-    this.setVisibility();
-};
-
-Machine.prototype.updatePartType = function(){
-    this.cell.destroyParts();
-    this.cell.draw();
-    this.setVisibility();
-};
-
-Machine.prototype.pickUpStock = function(){
-    this.hasStock = true;
-    this.cell.draw();
-};
-
-Machine.prototype.releaseStock = function(index){
-    this.hasStock = false;
-    globals.lattice.showCellAtIndex(JSON.parse(index));
-    this.cell.hide();
-};
-
-Machine.prototype.pause = function(){
-};
-
-Machine.prototype.moveTo = function(x, y, z, speed, wcs, callback){
-    x = this._makeAbsPosition(x, wcs.x);
-    y = this._makeAbsPosition(y, wcs.y);
-    z = this._makeAbsPosition(z, wcs.z);
-    this._moveTo(x, y, z, speed, wcs, callback);
-};
-
-Machine.prototype._moveTo = function(x, y, z, speed, wcs, callback){
-    var totalThreads = 3;
-    function sketchyCallback(){
-        totalThreads -= 1;
-        if (totalThreads > 0) return;
-        callback();
-    }
-    var startingPos = this.cell.getPosition();
-    speed = this._normalizeSpeed(startingPos, x, y, this._reorganizeSpeed(speed));
-    this._moveAxis(startingPos.x, x, "x", speed.x, sketchyCallback);
-    this._moveAxis(startingPos.y, y, "y", speed.y, sketchyCallback);
-    this._moveAxis(startingPos.z, z, "z", speed.z, sketchyCallback);
-};
-
-Machine.prototype._makeAbsPosition = function(target, wcs){
-    if (target == "" || target == null || target === undefined) return null;
-    return parseFloat(target)+wcs;
-};
-
-Machine.prototype._reorganizeSpeed = function(speed){
-    var newSpeed = {};
-    newSpeed.x = speed.xy;
-    newSpeed.y = speed.xy;
-    newSpeed.z = speed.z;
-    return newSpeed;
-}
-
-Machine.prototype._normalizeSpeed = function(startingPos, x, y, speed){//xy moves need speed normalization
-    var normSpeed = {};
-    if (x == "" || y == "") return speed;
-    var deltaX = x-startingPos.x;
-    var deltaY = y-startingPos.y;
-    var totalDistance = Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));
-    if (totalDistance == 0) return speed;
-    normSpeed.x = Math.abs(deltaX/totalDistance*speed.x);
-    normSpeed.y = Math.abs(deltaY/totalDistance*speed.y);
-    normSpeed.z = speed.z;
-    return normSpeed;
-};
-
-Machine.prototype._animateObjects = function(objects, axis, speed, startingPos, target, callback){
-    var increment = speed/25*globals.cam.get("simSpeed");
-    if (increment == 0) {
-        if (callback) callback();
-        return;
-    }
-    var direction = 1;
-    if (target-startingPos < 0) direction = -1;
-    increment = Math.max(increment, 0.00001)*direction;//need to put a min on the increment - other wise this stall out with floating pt tol
-    this._incrementalMove(objects, axis, increment, startingPos, target, direction, callback);
-};
-
-Machine.prototype._incrementalMove = function(objects, axis, increment, currentPos, target, direction, callback){
-    var self = this;
-    setTimeout(function(){
-        if ((target-currentPos)*direction <= 0) {
-            if (callback) callback();
-            return;
-        }
-        var nextPos = currentPos + increment;
-        if (Math.abs(target-currentPos) < Math.abs(increment)) nextPos = target;//don't overshoot
-        self._setPosition(objects, nextPos, axis);
-        self._incrementalMove(objects, axis, increment, nextPos, target, direction, callback)
-    }, 10);
-};
-
-Machine.prototype._setPosition = function(objects, nextPos, axis){
-    _.each(objects, function(object){
-        if (object instanceof DMACell || object instanceof  DMASuperCell) object.moveTo(nextPos, axis);
-        else object.position[axis] = nextPos;
-    });
-};
-
-///////////////////////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////POST PROCESS//////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////
-
-Machine.prototype.postProcess = function(data, exporter){//override in subclasses
-
-    var rapidHeight = globals.cam.get("rapidHeight");
-    var safeHeight = globals.cam.get("safeHeight");
-    var wcs = globals.cam.get("originPosition");
-
-    var stockPosition = globals.cam.get("stockPosition");
-    var stockNum = 0;//position of stock in stock array
-    var multStockPositions = globals.cam.get("multipleStockPositions");
-    var stockSeparation = globals.cam.get("stockSeparation");
-    var stockArraySize = globals.cam.get("stockArraySize");
-    var self = this;
-
-    globals.lattice.rasterCells(globals.cam._getOrder(globals.cam.get("camStrategy")), function(cell){
-        if (!cell) return;
-        var thisStockPosition = _.clone(stockPosition);
-        if (multStockPositions) {
-            thisStockPosition.x += stockNum % stockArraySize.y * stockSeparation;
-            thisStockPosition.y -= Math.floor(stockNum / stockArraySize.y) * stockSeparation;
-            stockNum += 1;
-            if (stockNum >= stockArraySize.x * stockArraySize.y) stockNum = 0;
-        }
-        data += self._postMoveXY(exporter, stockPosition.x-wcs.x, stockPosition.y-wcs.y);
-        data += self._postPickUpStock(exporter, thisStockPosition, rapidHeight, wcs, safeHeight);
-        var cellPosition = cell.getPosition();
-        data += self._postMoveXY(exporter, cellPosition.x-wcs.x, cellPosition.y-wcs.y);
-        data += self._postReleaseStock(cellPosition, cell, exporter, rapidHeight, wcs, safeHeight);
-        data += "\n";
-    });
-    return data;
-};
-
-Machine.prototype._postMoveXY = function(exporter, x, y){
-    return exporter.rapidXY(x, y);
-};
-
-Machine.prototype._postPickUpStock = function(exporter, stockPosition, rapidHeight, wcs, safeHeight){
-    var data = "";
-    data += exporter.rapidZ(stockPosition.z-wcs.z+safeHeight);
-    data += exporter.moveZ(stockPosition.z-wcs.z);
-    data += exporter.addComment("get stock");
-    data += exporter.moveZ(stockPosition.z-wcs.z+safeHeight);
-    data += exporter.rapidZ(rapidHeight);
-    return data;
-};
-
-Machine.prototype._postReleaseStock = function(cellPosition, cell, exporter, rapidHeight, wcs, safeHeight){
-    var data = "";
-    data += exporter.rapidZ(cellPosition.z-wcs.z+safeHeight);
-    data += exporter.moveZ(cellPosition.z-wcs.z);
-    data += exporter.addComment(JSON.stringify(cell.indices));
-    data += exporter.moveZ(cellPosition.z-wcs.z+safeHeight);
-    data += exporter.rapidZ(rapidHeight);
-    return data;
-};
-
-
-///////////////////////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////DEALLOCATE////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////
-
-Machine.prototype.destroy = function(){
-    this.cell.destroy();
-    _.each(_.values(this.meshes), function(mesh){
-        globals.three.sceneRemove(mesh);
-        mesh = null;
-    });
-    this.meshes = null;
-    this.position = null;
-    this.material = null;
-};
-
-
-///////////////////////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////SHOPBOT///////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////
-
-function Shopbot(){
-    Machine.call(this);
-}
-Shopbot.prototype = Object.create(Machine.prototype);
-
-Shopbot.prototype._setDefaults = function(){
-    Machine.prototype._setDefaults.call(this);
-    globals.cam.set("camProcess", "shopbot");
-    var boundingBox = globals.lattice.calculateBoundingBox();
-    var yPos = parseFloat((boundingBox.max.y + 3*globals.lattice.yScale()).toFixed(4));
-    globals.cam.set("stockPosition", {x:0,y:yPos,z:0});
-};
-
-Shopbot.prototype._buildMeshes = function(callback){
-    var meshes = {};
-    var material = this.material;
-    (new THREE.STLLoader()).load("assets/stls/shopbot/shopbotEndEffector.stl", function(geometry){
-        geometry.computeBoundingBox();
-        var unitScale = 0.5/geometry.boundingBox.max.y;
-        geometry.applyMatrix(new THREE.Matrix4().makeScale(unitScale, unitScale, unitScale));
-        geometry.applyMatrix(new THREE.Matrix4().makeTranslation(0,0,1.13-Math.sqrt(2)/2));
-        var mesh = new THREE.Mesh(geometry, material);
-        mesh.visible = false;
-        meshes.endEffector = mesh;
-        callback(meshes);
-    });
-};
-
-Shopbot.prototype._moveAxis = function(startingPos, target, axis, speed, callback){
-    if (target == null || target === undefined) {
-        callback();
-        return;
-    }
-    this._animateObjects([this.meshes.endEffector, this.cell], axis, speed, startingPos, target, callback);
-};
-
-
-///////////////////////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////GOD///////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////////
-
-function God(){
-    Machine.call(this);
-}
-God.prototype = Object.create(Machine.prototype);
-
-God.prototype._setDefaults = function(){
-    Machine.prototype._setDefaults.call(this);
-    var boundingBox = globals.lattice.calculateBoundingBox();
-    var zPos = parseFloat((boundingBox.max.z + 5*globals.lattice.zScale()).toFixed(4));
-    globals.cam.set("stockPosition", {x:0,y:0,z:zPos});
-};
-
-God.prototype._buildMeshes = function(callback){
-    callback({});
-};
-
-God.prototype._moveTo = function(x, y, z, speed, wcs, callback){
-    var startingPos = this.cell.getPosition();
-    if (z != "" && z != null && z !== undefined){
-        if (z>startingPos.z){//ignore z up moves
-            this._setPosition(_.values(this.meshes).concat(this.cell), z, "z");
-            callback();
-            return;
-        }
-    } else {
-        this._setPosition(_.values(this.meshes).concat(this.cell), x, "x");
-        this._setPosition(_.values(this.meshes).concat(this.cell), y, "y");
-        callback();
-        return;
-    }
-
-    Machine.prototype._moveTo.call(this, x, y, z, speed, wcs, callback);
-};
-
-God.prototype._moveAxis = function(startingPos, target, axis, speed, callback){
-    if (target == null || target === undefined) {
-        callback();
-        return;
-    }
-    this._animateObjects([this.cell], axis, speed, startingPos, target, callback);
-};
-
-God.prototype._postPickUpStock = function(exporter, stockPosition, rapidHeight, wcs, safeHeight){
-    var data = "";
-    data += exporter.rapidZ(stockPosition.z-wcs.z+safeHeight);
-    data += exporter.moveZ(stockPosition.z-wcs.z);
-    return data;
-};
-
-God.prototype._postReleaseStock = function(cellPosition, cell, exporter, rapidHeight, wcs, safeHeight){
-    var data = "";
-    var cellPosition = cell.getPosition();
-    data += exporter.rapidXY(cellPosition.x-wcs.x, cellPosition.y-wcs.y);
-    data += exporter.addComment("get stock");
-    data += exporter.rapidZ(cellPosition.z-wcs.z+safeHeight);
-    data += exporter.moveZ(cellPosition.z-wcs.z);
-    data += exporter.addComment(JSON.stringify(cell.indices));
-    data += exporter.moveZ(cellPosition.z-wcs.z+safeHeight);
-    return data;
-};
-
-