diff --git a/xos/core/templates/slice_instance_tab.html b/xos/core/templates/slice_instance_tab.html
index d2aa3fc..abcfea4 100644
--- a/xos/core/templates/slice_instance_tab.html
+++ b/xos/core/templates/slice_instance_tab.html
@@ -1,15 +1,14 @@
 {% if slice_id %}
 
-<a href="/admin/core/instance/add/?_to_field=id&slice={{ slice_id }}" class="add-another" id="add_instance_advanced"
-onclick="return showAddInstancePopup(this);">
+<a href="/admin/core/instance/add/?_to_field=id&slice={{ slice_id }}" id="add_instance_advanced"
+onclick="return addInstanceClicked(this);">
 Add Instance
 </a>
-<!-- div id="instance_advanced" style="display: node;" onchange="console.log('changed');" -->
 <input type="hidden" id="instance_advanced" name="instance_advanced" onchange="console.log('changed');" value="initial">
 
 <script>
 
-// ugly - poll for djange to change "instance_advanced", and it it does, then refresh the
+// ugly - poll for django to change "instance_advanced", and it it does, then refresh the
 // page so the instance list gets updated.
 var last_instance_advanced = $("#instance_advanced").val();
 checkInstanceAdvanced = function() {
@@ -20,7 +19,7 @@
    }
 };
 
-setInterval(function() { checkInstanceAdvanced(); }, 1000); 
+setInterval(function() { checkInstanceAdvanced(); }, 1000);
 
 function showAddInstancePopup(triggeringLink) {
     var name = triggeringLink.id.replace(/^add_/, '');
@@ -36,6 +35,44 @@
     return false;
 }
 
+function formIsDirty(form) {
+  console.log(form);
+  for (var i = 0; i < form.elements.length; i++) {
+    var element = form.elements[i];
+    var type = element.type;
+    if (type == "checkbox" || type == "radio") {
+      if (element.checked != element.defaultChecked) {
+        return true;
+      }
+    }
+    else if (type == "hidden" || type == "password" ||
+             type == "text" || type == "textarea") {
+      if (element.value != element.defaultValue) {
+        return true;
+      }
+    }
+    else if (type == "select-one" || type == "select-multiple") {
+      for (var j = 0; j < element.options.length; j++) {
+        if (element.options[j].selected !=
+            element.options[j].defaultSelected) {
+          return true;
+        }
+      }
+    }
+  }
+  return false;
+}
+
+function addInstanceClicked(link) {
+    if (formIsDirty($("#slice_form")[0])) {
+        console.log("dirty!!");
+        alert("Slice has modified fields. Please save the slice before adding instances.");
+        return false;
+    } else {
+        return showAddInstancePopup(link);
+    }
+}
+
 </script>
 
 {% else %}
