diff --git a/js/materials/DMAMaterials.js b/js/materials/DMAMaterials.js
index 801b8176c75c4b071311be24be8217f58f5cfed0..93db7144785e3238250c8a7a9c1fcdb75dae56d2 100644
--- a/js/materials/DMAMaterials.js
+++ b/js/materials/DMAMaterials.js
@@ -8,7 +8,8 @@ define(['underscore', 'three', 'appState', 'lattice', 'plist', 'threeModel'], fu
     var materialsList = {
         deleteMaterial: {
             color: "#ff0000",
-            threeMaterial: makeMaterialObject("#ff0000")
+            threeMaterial: makeMaterialObject("#ff0000"),
+            noDelete: true
         }
     };
 
@@ -29,7 +30,10 @@ define(['underscore', 'three', 'appState', 'lattice', 'plist', 'threeModel'], fu
     function setMaterial(id, data){
         if (id && data === null) return deleteMaterial(id);
         if (!materialsList[id]) materialsList[id] = {};
+
+        //check if colors have changed
         var oldColor = materialsList[id].color;
+        var oldAltColor = materialsList[id].altColor;
 
         var edited = false;
         if (materialsList[id].sparseCells) edited = !(_.isEqual(data.sparseCells, materialsList[id].sparseCells));
@@ -41,7 +45,7 @@ define(['underscore', 'three', 'appState', 'lattice', 'plist', 'threeModel'], fu
             else materialsList[id][key] = data[key];
         });
 
-        if (!materialsList[id].threeMaterial || oldColor != materialsList[id].color) changeSingleMaterialColorScheme(id);
+        if (!materialsList[id].threeMaterial || oldColor != materialsList[id].color || oldAltColor != materialsList[id].altColor) changeSingleMaterialColorScheme(id);
         if (edited){
             var allChangedMaterialsList = getAllParentComposites(id);
             allChangedMaterialsList.push(id);
@@ -53,6 +57,7 @@ define(['underscore', 'three', 'appState', 'lattice', 'plist', 'threeModel'], fu
 
             lattice.reinitAllCellsOfTypes(allChangedMaterialsList);
         }
+        console.log(materialsList);
 
         return false;
     }
@@ -62,7 +67,7 @@ define(['underscore', 'three', 'appState', 'lattice', 'plist', 'threeModel'], fu
             console.warn("no delete flag on this material type");
             return false;
         }
-        delete materialsList[id];//todo check if being used first
+        delete materialsList[id];//todo check if being used first (instances)
         var deleted = true;
         if (deleted) setToDefaultMaterial();
         return deleted;
@@ -223,12 +228,35 @@ define(['underscore', 'three', 'appState', 'lattice', 'plist', 'threeModel'], fu
         }
     }
 
+
+
+
+
+    //edit material definition
+
+    var editingMaterial = null;//material definition currently being edited
+
+    function setEditingMaterial(id){
+        editingMaterial = id;
+    }
+
+    function getEditingMaterial(){
+        return editingMaterial;
+    }
+
+
+
+
+
+
     return {
         list: materialsList,
         setMaterial: setMaterial,
         getCompositeKeys: getCompositeKeys,
         getVaildAvailableCompositeKeys: getVaildAvailableCompositeKeys,
         getChildCellTypes:getChildCellTypes,
-        setToDefaultMaterial: setToDefaultMaterial
+        setToDefaultMaterial: setToDefaultMaterial,
+        setEditingMaterial: setEditingMaterial,
+        getEditingMaterial: getEditingMaterial
     };
 });
\ No newline at end of file
diff --git a/js/menus/MaterialEditorMenuView.js b/js/menus/MaterialEditorMenuView.js
index 7c2c09d69259426903a41b45675a6a2c403c0a41..1a6cb1f513b87cda2d18e00e7ad16e9bfccda965 100644
--- a/js/menus/MaterialEditorMenuView.js
+++ b/js/menus/MaterialEditorMenuView.js
@@ -20,7 +20,15 @@ define(['jquery', 'underscore', 'menuParent', 'plist', 'materials', 'text!materi
 
         _initialize: function(){
             //bind events
-            this.material = _.clone(materials.list[this.model.get("materialType")]);
+            if (!materials.getEditingMaterial()) console.warn("no editing material id set");
+            this.material = _.clone(materials.list[materials.getEditingMaterial()]);
+            if (!this.material) this.material = {
+                name: "Material " + materialNameIndex++,
+                color: '#000000',
+                altColor: '#000000',
+                noDelete: false
+            };
+
         },
 
         getPropertyOwner: function($target){
@@ -42,24 +50,20 @@ define(['jquery', 'underscore', 'menuParent', 'plist', 'materials', 'text!materi
 
         _save: function(e){
             e.preventDefault();
-            var name = this.material.name;
-            if (name == "") name = "Material " + materialNameIndex++;
-            materials.setMaterial(this.model.get("materialType"), {
-                name: name,
-                color: this.material.color,
-                altColor: this.material.altColor
-            });
+            if (this.material.name == "") this.material.name = "Material " + materialNameIndex++;
+            materials.setMaterial(materials.getEditingMaterial(), _.clone(this.material));
             this._exit();
         },
 
         _saveMaterialToFile: function(e){
             e.preventDefault();
-            fileSaver.saveMaterial(this.model.get("materialType"));
+            fileSaver.saveMaterial(materials.getEditingMaterial(), this.material);
         },
 
         _deleteMaterial: function(e){
             e.preventDefault();
-            var deleted = materials.setMaterial(this.model.get("materialType"), null);
+            if (!materials.list(materials.getEditingMaterial())) this.exit();
+            var deleted = materials.setMaterial(materials.getEditingMaterial(), null);
             if (deleted) this._exit();
         },
 
@@ -69,6 +73,8 @@ define(['jquery', 'underscore', 'menuParent', 'plist', 'materials', 'text!materi
         },
 
         _exit: function(){
+            this.material = null;
+            materials.setEditingMaterial(null);
             this.model.set("currentNav", "navDesign");
         },
 
diff --git a/js/menus/MaterialMenuView.js b/js/menus/MaterialMenuView.js
index fb3e6c333ec63f9361dbc6a819b1ed43696f95db..be19c7dbe8e86e18d929a197f515a330e58885cf 100644
--- a/js/menus/MaterialMenuView.js
+++ b/js/menus/MaterialMenuView.js
@@ -46,17 +46,12 @@ define(['jquery', 'underscore', 'menuParent', 'plist', 'lattice', 'globals', 'ma
             e.preventDefault();
             //first create dummy material
             var id = "material" + this.cid + materialID++;
-            materials.setMaterial(id, {
-                name: "",
-                color: '#000000',
-                altColor: '#000000',
-                noDelete: false
-            });
             this._openMaterialEditor(id);
         },
 
         _openMaterialEditor: function(id){
-            this.model.set("materialType", id);
+            console.log(id);
+            materials.setEditingMaterial(id);
             this.model.set("currentTab", "materialEditor", {silent:true});
             this.model.set("currentNav", "navMaterial");
         },
diff --git a/js/menus/templates/MaterialMenuView.html b/js/menus/templates/MaterialMenuView.html
index a024e35c0df3151612bdd13c2c9f6cfd89542200..c64b798ed4a98a50149c35a01afc53ebff8323ed 100644
--- a/js/menus/templates/MaterialMenuView.html
+++ b/js/menus/templates/MaterialMenuView.html
@@ -13,15 +13,25 @@ Material Class:   
         <label class="radio colorSwatches">
             <input type="radio" <%if (key == materialType){ %>checked<%}%> name="materialType" value="<%= key %>" data-toggle="radio" class="custom-radio appState"><span class="icons"><span class="icon-unchecked"></span><span class="icon-checked"></span></span>
             <div class="materialColorSwatch">
-            <div style="background-color:<% if(realisticColorScheme){ %><%= allMaterials[materialClass][key].color %><% }else{ %><%= allMaterials[materialClass][key].altColor %><% } %>"></div>
-            <span><span class="materialListTitle"><%= allMaterials[materialClass][key].name %></span><a data-id="<%= key %>" class="editMaterial">Edit...</a></span></div>
+            <div style="background-color:<% if(realisticColorScheme){ %><%= materials[key].color %><% }else{ %><%= materials[key].altColor %><% } %>"></div>
+            <span><span class="materialListTitle"><%= materials[key].name %></span><a data-id="<%= key %>" class="editMaterial">Edit...</a></span></div>
+        </label>
+    <% }); %>
+    <% _.each(materials, function(material, key){
+        if (key.substr(0,5) == "super") return;
+        if (material.noDelete) return; %>
+        <label class="radio colorSwatches">
+            <input type="radio" <%if (key == materialType){ %>checked<%}%> name="materialType" value="<%= key %>" data-toggle="radio" class="custom-radio appState"><span class="icons"><span class="icon-unchecked"></span><span class="icon-checked"></span></span>
+            <div class="materialColorSwatch">
+            <div style="background-color:<% if(realisticColorScheme){ %><%= material.color %><% }else{ %><%= material.altColor %><% } %>"></div>
+            <span><span class="materialListTitle"><%= material.name %></span><a data-id="<%= key %>" class="editMaterial">Edit...</a></span></div>
         </label>
     <% }); %>
-    <!--<a id="newElementaryMaterial" href="#" class="btn btn-block btn-lg btn-default">+ Create New Material Definition</a>-->
-    <br/><label class="checkbox" for="realisticColorScheme">
+    <label class="checkbox" for="realisticColorScheme">
     <input id="realisticColorScheme" data-property="realisticColorScheme" type="checkbox" <% if (realisticColorScheme){ %> checked="checked"<% } %> value="" data-toggle="checkbox" class="appState custom-checkbox">
     <span class="icons"><span class="icon-unchecked"></span><span class="icon-checked"></span></span>
-    Use realistic color scheme</label>
+    Use realistic color scheme</label><br/>
+    <a id="newElementaryMaterial" href="#" class="btn btn-block btn-lg btn-default">+ Create New Material Definition</a>
 <% } %><br/>
 Composite Materials:<br/>
 <% if ((cellType == "octa" && connectionType != "vertex") || cellType == "tetra"){ %>