diff --git a/js/lattice/LatticeBase.js b/js/lattice/LatticeBase.js
index 555b8bf505c711dc73554b9426b453b31822c2a9..037dd4f7c2661a3c10b8cb44df8b94be3195a1a2 100644
--- a/js/lattice/LatticeBase.js
+++ b/js/lattice/LatticeBase.js
@@ -8,8 +8,8 @@
  */
 
 
-define(['underscore', 'backbone', 'appState', 'globals', 'plist', 'three', 'threeModel', 'materials'],
-    function(_, Backbone, appState, globals, plist, THREE, three, materials){
+define(['underscore', 'backbone', 'appState', 'globals', 'plist', 'three', 'threeModel'],
+    function(_, Backbone, appState, globals, plist, THREE, three){
 
     return Backbone.Model.extend({
 
@@ -95,10 +95,12 @@ define(['underscore', 'backbone', 'appState', 'globals', 'plist', 'three', 'thre
 
         makeCellForLatticeType: function(json, callback){
             var subclassFile = this.getCellSubclassFile();
-            if (json.materialID && materials.isComposite(json.materialID)) subclassFile = "compositeCell";
-            require([subclassFile], function(CellSubclass){
-                var cell = new CellSubclass(json);
-                if (callback) callback(cell);
+            require(['materials'], function(materials){
+                if (json.materialID && materials.isComposite(json.materialID)) subclassFile = "compositeCell";
+                require([subclassFile], function(CellSubclass){
+                    var cell = new CellSubclass(json);
+                    if (callback) callback(cell);
+                });
             });
         },
 
diff --git a/js/materials/DMAMaterial.js b/js/materials/DMAMaterial.js
index ffccacfbee621e5fab5e01510c70d33c295cf305..0cecddb333e4f357b2704aba3311aa3621bc48a6 100644
--- a/js/materials/DMAMaterial.js
+++ b/js/materials/DMAMaterial.js
@@ -15,10 +15,12 @@ define(['underscore', 'appState'], function(_, appState){
     function DMAMaterial(json, id){
         this.id = id;
 
+        var randomColor = this.randomHexColor();
+
         var defaults = {
             name: "",
-            color: "#000000",
-            altColor: "#000000",
+            color: randomColor,
+            altColor: randomColor,
             noDelete: false,
             properties:{}
         };
@@ -68,6 +70,10 @@ define(['underscore', 'appState'], function(_, appState){
         return this.altColor;
     };
 
+    DMAMaterial.prototype.randomHexColor = function(){
+        return '#' + Math.floor(Math.random()*16777215).toString(16);
+    };
+
     DMAMaterial.prototype._makeMaterialObject = function(color, transparent){
         if (transparent) return new THREE.MeshLambertMaterial({color:color, transparent: true, opacity:0.1});
         return new THREE.MeshLambertMaterial({color:color});
diff --git a/js/materials/DMAMaterials.js b/js/materials/DMAMaterials.js
index 07371187aecc958a453fe53c5efcf157198b9d31..f5375bf7ad2132a7df1d1f07cc8539215ffacffb 100644
--- a/js/materials/DMAMaterials.js
+++ b/js/materials/DMAMaterials.js
@@ -6,6 +6,7 @@
 define(['underscore', 'three', 'appState', 'lattice', 'materialsPlist', 'threeModel', 'material'],
     function(_, THREE, appState, lattice, materialsPlist, three, DMAMaterial){
 
+
     var materialsList = {
     };
     newMaterial({
diff --git a/js/menus/MaterialEditorMenuView.js b/js/menus/MaterialEditorMenuView.js
index ca635fd44749d7752eaf08a5790d793eb7bd3c2d..f100e3eb9a241470957073b324c03d7a894dec49 100644
--- a/js/menus/MaterialEditorMenuView.js
+++ b/js/menus/MaterialEditorMenuView.js
@@ -42,7 +42,7 @@ define(['jquery', 'underscore', 'menuParent', 'plist', 'materials', 'text!materi
 
         _changeRandomColor: function(e){
             e.preventDefault();
-            var color = '#' + Math.floor(Math.random()*16777215).toString(16);
+            var color = this.material.randomHexColor();
             this.material.altColor = color;
             this.render();
         },
diff --git a/js/menus/templates/MaterialMenuView.html b/js/menus/templates/MaterialMenuView.html
index 3b3f1b809bafc4d1c515c1f945e19a9e53f94c62..db8ff1850f1dffb1b2f1cb7b5ed9061ea4defb7e 100644
--- a/js/menus/templates/MaterialMenuView.html
+++ b/js/menus/templates/MaterialMenuView.html
@@ -28,11 +28,11 @@ Materials:<br/>
         <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>
 <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><br/>
-<a id="newElementaryMaterial" href="#" class="btn btn-block btn-lg btn-default">+ Create New Material Definition</a>
 <br/>
 <% if (!inSimMode){ %>
     Composite Materials:<br/>
diff --git a/js/models/AppState.js b/js/models/AppState.js
index b72126a890d3881654368c637d1afae1bb3c7a1c..cb15349cc78a8c30d1ab57aafd0b12ed9bedf37d 100644
--- a/js/models/AppState.js
+++ b/js/models/AppState.js
@@ -132,7 +132,7 @@ define(['underscore', 'backbone', 'threeModel', 'three', 'plist', 'globals'],
 
             var self = this;
             require(['materials'], function(materials){
-                var materialType = this.get("materialType");
+                var materialType = self.get("materialType");
                 //verify that correct class is in sync
                 if (materials.isComposite(materialType)) {
                     if (materials.isComposite(self.previous("materialType"))) return;