diff --git a/css/main.css b/css/main.css
index 9400633dd379aabe4bfef87c909051081ff23b74..2a000be8c1059d5502226224ccd75275d02219db 100644
--- a/css/main.css
+++ b/css/main.css
@@ -172,3 +172,71 @@ input.numberInput{
     display: inline;
     padding: 8px 10px;
 }
+
+
+
+.navbar-nav > .open > .dropdown-menu{
+    padding: 3px 0!important;
+}
+
+.divider{
+    margin-right: 0!important;
+    margin-left: 0!important;
+    background-color: #676767!important;
+}
+
+.dropdown-submenu {
+    position: relative;
+}
+
+.dropdown-submenu a{
+    color: #e1e4e7!important;
+}
+
+.dropdown-submenu li:hover{
+    background-color: #428bca!important;
+}
+
+.dropdown-submenu>.dropdown-menu {
+    top: 0;
+    left: 100%;
+    margin-top: -6px;
+    margin-left: -1px;
+    -webkit-border-radius: 0 6px 6px 6px;
+    -moz-border-radius: 0 6px 6px;
+    border-radius: 0 6px 6px 6px;
+    background-color: #444;
+}
+
+.dropdown-submenu:hover>.dropdown-menu {
+    display: block;
+}
+
+.dropdown-submenu>a:after {
+    display: block;
+    content: " ";
+    float: right;
+    width: 0;
+    height: 0;
+    border-color: transparent;
+    border-style: solid;
+    border-width: 5px 0 5px 5px;
+    border-left-color: #ccc;
+    margin-top: 5px;
+}
+
+.dropdown-submenu:hover>a:after {
+    border-left-color: #fff;
+}
+
+.dropdown-submenu.pull-left {
+    float: none;
+}
+
+.dropdown-submenu.pull-left>.dropdown-menu {
+    left: -100%;
+    margin-left: 10px;
+    -webkit-border-radius: 6px 0 6px 6px;
+    -moz-border-radius: 6px 0 6px 6px;
+    border-radius: 6px 0 6px 6px;
+}
\ No newline at end of file
diff --git a/data/users/ben.user b/data/users/ben.user
new file mode 100644
index 0000000000000000000000000000000000000000..22d8053648ccacd9ff3216143c06cf0ad93be91f
--- /dev/null
+++ b/data/users/ben.user
@@ -0,0 +1 @@
+{"lattice":{"units":"inches","scale":2.78388,"shouldPreserveCells":true,"cellSeparation":{"xy":0,"z":0},"cellType":"octa","connectionType":"edgeRot","partType":"beam"},"assembler":{"camStrategy":"xRaster","placementOrder":"XYZ","camProcess":"shopbot","machine":"shopbot","rapidHeight":6.9,"safeHeight":0.5,"originPosition":{"x":-1.39194,"y":1.39194,"z":0},"stockPosition":{"x":-4.713,"y":-13.321,"z":-1.303},"rapidSpeeds":{"xy":6,"z":4},"feedRate":{"xy":0.1,"z":0.1},"stockHeight":0}}
\ No newline at end of file
diff --git a/js/menus/Navbar.js b/js/menus/Navbar.js
index a1747f4c3dcbb86ff9a01b4e7a2cc5af9d93c52a..ee61f7e77d2a825ad8af8eeb4416b608cba06f8f 100644
--- a/js/menus/Navbar.js
+++ b/js/menus/Navbar.js
@@ -11,15 +11,17 @@ NavBar = Backbone.View.extend({
     el: "body",
 
     events: {
-        "click #showHideMenu":                          "_setMenuVis",
-        "click .menuHoverControls":                     "_setNavSelection",
-        "click #saveJSON":                              "_save",
-        "click #saveAsJSON":                            "_saveAs",
-        "shown.bs.modal #saveAsModel":                  "_showSaveAsModal",
-        "hide.bs.modal #saveAsModel":                   "_hideSaveAsModal",
-        "change #saveAsModel":                          "_saveAs",
-        "click #importJSON":                            "_importJSON",
-        "change #jsonInput":                            "_selectJSONFiles"
+        "click #showHideMenu":                                  "_setMenuVis",
+        "click .menuHoverControls":                             "_setNavSelection",
+        "click #saveJSON":                                      "_save",
+        "click #saveAsJSON":                                    "_saveAs",
+        "change #saveAsModel":                                  "_saveAs",//detect enter key
+        "click #saveUser":                                      "_saveUserSettings",
+        "shown.bs.modal .modal":                                "_showModal",
+        "hide.bs.modal .modal":                                 "_hideModal",
+        "click .importJSON":                                    "_importJSON",
+        "change #jsonInput":                                    "_selectJSONFiles",
+        "click .savedUserSettings":                             "_loadSavedUser"
     },
 
     initialize: function(){
@@ -90,31 +92,51 @@ NavBar = Backbone.View.extend({
         reader.readAsText(files[0]);
         reader.onload = (function() {
             return function(e) {
-                dmaGlobals.lattice.loadFromJSON(e.target.result);
+                var extension = filename.substr(filename.length - 5);
+                if (extension == ".json"){
+                    dmaGlobals.appState.loadLatticeFromJSON(e.target.result);
+                } else if (extension == ".user"){
+                    dmaGlobals.appState.loadUser(e.target.result);
+                } else console.warn("file type not recognized");
             }
         })();
     },
 
     _save: function(e){
         e.preventDefault();
-        dmaGlobals.lattice.saveJSON();
+        dmaGlobals.appState.saveJSON();
     },
 
     _saveAs: function(e){
         e.preventDefault();
         var fileName = $("#saveAsFileName").val();
-        dmaGlobals.lattice.saveJSON(fileName);
+        dmaGlobals.appState.saveJSON(fileName);
         $('#saveAsModel').modal('hide');
     },
 
-    _showSaveAsModal: function(){
-        var input = $("#saveAsFileName");
+    _saveUserSettings: function(e){
+        e.preventDefault();
+        var fileName = $("#userSettingsFilename").val();
+        dmaGlobals.appState.saveUser(fileName);
+        $('#saveUserModel').modal('hide');
+    },
+
+    _loadSavedUser: function(e){
+        e.preventDefault();
+        var url = "data/users/" + $(e.target).data("file");
+        $.getJSON( url, function(data) {
+            dmaGlobals.appState.loadUser(data, true);
+        });
+    },
+
+    _showModal: function(e){
+        var input = $(e.target).find("input.filename");
         input.focus();
         input.select();
     },
 
-    _hideSaveAsModal: function(){
-        $("#saveAsFileName").blur();
+    _hideModal: function(e){
+        $(e.target).find("input.filename").blur();
     },
 
     _uiStuff: function(){
@@ -128,7 +150,7 @@ NavBar = Backbone.View.extend({
     },
 
     _deselectAllNavItems: function(){
-        $(".menuHoverControls").parent().removeClass("open");//no highlight
+        $(".open").removeClass("open");//no highlight
     }
 
 });
\ No newline at end of file
diff --git a/js/models/AppState.js b/js/models/AppState.js
index 79884584ce4d80bfa2d9613a1f3411a83faadf9b..a4e48611774dea91f15f9bfaa86d7997288712fc 100644
--- a/js/models/AppState.js
+++ b/js/models/AppState.js
@@ -38,7 +38,7 @@ AppState = Backbone.Model.extend({
                 assembler:"Assembler",
                 cam: "Process",
                 animate:"Preview",
-                send: "Send"
+                send: "Edit"
             }
         },
 
@@ -241,8 +241,6 @@ AppState = Backbone.Model.extend({
                 this.set("shift", state);
                 break;
             case 68://d delete mode
-                console.log(state);
-                console.log(dmaGlobals.lattice.get("cellMode"));
                 if (this.get("cellMode") == "cell") this.set("deleteMode", state);//only for cell mode
                 else this.set("deleteMode", false);
                 break;
@@ -278,6 +276,64 @@ AppState = Backbone.Model.extend({
 
     _handleScroll: function(e){//disable two finger swipe back
         if (Math.abs(e.originalEvent.deltaX) > Math.abs(e.originalEvent.deltaY)) e.preventDefault();
+    },
+
+        ////////////////////////////////////////////////////////////////////////////////////
+    ////////////////////////////////////SAVE////////////////////////////////////////////
+    ////////////////////////////////////////////////////////////////////////////////////
+
+    _saveFile: function(data, name, extension){
+        var blob = new Blob([data], {type: "text/plain;charset=utf-8"});
+        saveAs(blob, name + extension);
+    },
+
+    saveJSON: function(name){
+        if (!name) name = "lattice";
+        var data = JSON.stringify({
+            lattice:this._getLatticeDataToSave(),
+            assembler: this._getAssemblerDataToSave()
+        });
+        this._saveFile(data, name, ".json");
+    },
+
+    _getAssemblerDataToSave: function(){
+        var assemblerData = _.omit(dmaGlobals.assembler.toJSON(), ["origin", "stock", "exporter", "appState", "lattice"]);
+        if (!dmaGlobals.assembler.get("editsMadeToProgram")) assemblerData.dataOut = "";
+        return assemblerData;
+    },
+
+    _getLatticeDataToSave: function(){
+        return _.omit(dmaGlobals.lattice.toJSON(), ["highlighter", "basePlane", "nodes", "appState"]);
+    },
+
+    loadLatticeFromJSON: function(data){
+        dmaGlobals.lattice.clearCells();
+        this._setData(JSON.parse(data), true);
+        dmaGlobals.lattice._updateLatticeType(null, null, null, true);
+    },
+
+    saveUser: function(name){
+        var latticeData = _.omit(this._getLatticeDataToSave(), ["cells", "cellsMin", "cellsMax", "numCells"]);
+        var assemblerData = _.omit(this._getAssemblerDataToSave(), ["dataOut", "needsPostProcessing", "editsMadeToProgram"]);
+        var data = JSON.stringify({
+            lattice:latticeData,
+            assembler:assemblerData
+        });
+        this._saveFile(data, name, ".user");
+    },
+
+    loadUser: function(data, isParsed){
+        if (!isParsed) data = JSON.parse(data);
+        this._setData(data, false);
+    },
+
+    _setData: function(data, silent){
+        _.each(_.keys(data.lattice), function(key){
+            dmaGlobals.lattice.set(key, data.lattice[key], {silent:silent});
+        });
+        _.each(_.keys(data.assembler), function(key){
+            dmaGlobals.assembler.set(key, data.assembler[key]);
+        });
     }
 
 });
\ No newline at end of file
diff --git a/js/models/Lattice.js b/js/models/Lattice.js
index 9e07e6b332fe20217a96ce8d566c54a34fc9809e..ec88516ebb78f66a52992fe509aaf706a786ee8b 100644
--- a/js/models/Lattice.js
+++ b/js/models/Lattice.js
@@ -488,36 +488,6 @@ Lattice = Backbone.Model.extend({
         else if (var2  == null) var2 = {order: newVarOrder, dim: newVarDim};
         else var1 = {order: newVarOrder, dim: newVarDim};
         this.rasterCells(order, callback, var1, var2, var3);
-    },
-
-    ////////////////////////////////////////////////////////////////////////////////////
-    ////////////////////////////////////SAVE////////////////////////////////////////////
-    ////////////////////////////////////////////////////////////////////////////////////
-
-    saveJSON: function(name){
-        if (!name) name = "lattice";
-        var assemblerData = _.omit(dmaGlobals.assembler.toJSON(), ["origin", "stock", "exporter", "appState", "lattice"]);
-        if (!dmaGlobals.assembler.get("editsMadeToProgram")) assemblerData.dataOut = "";
-        var data = JSON.stringify({
-            lattice:_.omit(this.toJSON(), ["highlighter", "basePlane", "nodes", "appState"]),
-            assembler: assemblerData
-        });
-        var blob = new Blob([data], {type: "text/plain;charset=utf-8"});
-        saveAs(blob, name + ".json");
-    },
-
-    loadFromJSON: function(data){
-        this.clearCells();
-        var data = JSON.parse(data);
-        var self = this;
-        _.each(_.keys(data.lattice), function(key){
-            self.set(key, data.lattice[key], {silent:true});
-        });
-        _.each(_.keys(data.assembler), function(key){
-            dmaGlobals.assembler.set(key, data.assembler[key]);
-        });
-        this.set("shouldPreserveCells", true, {silent:true});
-        this._updateLatticeType(null, null, null, true);
     }
 
 });
\ No newline at end of file
diff --git a/main.html b/main.html
index ba0b482c0324ca05d3f76ce4bee820972e8c127e..b694e82a84f811641c7d9c302570e6839a5c1ef1 100644
--- a/main.html
+++ b/main.html
@@ -105,9 +105,19 @@
           <a href="#" class="dropdown-toggle" data-toggle="dropdown">File <b class="caret"></b></a>
           <span class="dropdown-arrow"></span>
           <ul class="dropdown-menu">
-            <li><a id="saveJSON" href="#">Save JSON &nbsp&nbsp&nbsp&nbsp(CTRL/&#8984; + S)</a></li>
-            <li><a data-toggle="modal" data-target="#saveAsModel" href="#">Save JSON As... &nbsp&nbsp&nbsp&nbsp(CTRL/&#8984 + Shift + S)</a></li>
-            <li><a id="importJSON" href="#">Open JSON &nbsp&nbsp&nbsp&nbsp(CTRL/&#8984 + O)</a></li>
+                <li><a id="saveJSON" href="#">Save JSON &nbsp&nbsp&nbsp&nbsp(CTRL/&#8984; + S)</a></li>
+                <li><a data-toggle="modal" data-target="#saveAsModel" href="#">Save JSON As... &nbsp&nbsp&nbsp&nbsp(CTRL/&#8984 + Shift + S)</a></li>
+                <li><a class="importJSON" href="#">Open JSON... &nbsp&nbsp&nbsp&nbsp(CTRL/&#8984 + O)</a></li>
+                <li class="divider"></li>
+                <li class="dropdown-submenu">
+                <a tabindex="-1">Load User Settings</a>
+                <ul class="dropdown-menu">
+                    <!--<li><a id="resetDefaultSettings" href="#">Reset Settings</a></li>-->
+                    <li><a data-file="ben.user" class="savedUserSettings" href="#">Ben</a></li>
+                    <li><a class="importJSON" href="#">From File...</a></li>
+                </ul>
+              </li>
+              <li><a id="saveUserSettings" data-toggle="modal" data-target="#saveUserModel" href="#">Save User Settings...</a></li>
             <li class="divider"></li>
             <li><a id="exportSTL" href="#">Export STL</a></li>
           </ul>
@@ -128,10 +138,10 @@
         <div class="modal-content">
             <div class="modal-header">
             <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
-            <p class="modal-title" id="myModalLabel">Enter File Name</p>
+            <p class="modal-title" >Enter File Name</p>
             </div>
             <div class="modal-body">
-                <input id="saveAsFileName" type="text" value="lattice" placeholder="Enter file name" class="form-control">
+                <input id="saveAsFileName" type="text" value="lattice" placeholder="Enter file name" class="form-control filename">
             </div>
             <div class="modal-footer">
                 <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
@@ -141,6 +151,24 @@
     </div>
 </div>
 
+<div class="modal fade" id="saveUserModel" tabindex="-1" role="dialog" aria-labelledby="basicModal" aria-hidden="true">
+    <div class="modal-dialog modal-sm">
+        <div class="modal-content">
+            <div class="modal-header">
+            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+            <p class="modal-title" >Save User Settings</p>
+            </div>
+            <div class="modal-body">
+                <input id="userSettingsFilename" type="text" value="lattice" placeholder="Enter file name" class="form-control filename">
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
+                <button type="button" id="saveUser" class="btn btn-primary">Save</button>
+            </div>
+        </div>
+    </div>
+</div>
+
 <div id="menuWrapper"><div id="menuHeader"></div><div id="menuContent"></div></div>
 
 <div id="about" class="row navMenu">
@@ -155,4 +183,4 @@
 
 
 </body>
-</html
\ No newline at end of file
+</html>
\ No newline at end of file