diff --git a/libraries/entities/src/EntityTree.cpp b/libraries/entities/src/EntityTree.cpp
index 580fed8790..a0a8a33ca8 100644
--- a/libraries/entities/src/EntityTree.cpp
+++ b/libraries/entities/src/EntityTree.cpp
@@ -229,6 +229,23 @@ void EntityTree::setSimulation(EntitySimulation* simulation) {
 }
 
 void EntityTree::deleteEntity(const EntityItemID& entityID) {
+    EntityTreeElement* containingElement = getContainingElement(entityID);
+    if (!containingElement) {
+        qDebug() << "UNEXPECTED!!!!  EntityTree::deleteEntity() entityID doesn't exist!!! entityID=" << entityID;
+        return;
+    }
+
+    EntityItem* existingEntity = containingElement->getEntityWithEntityItemID(entityID);
+    if (!existingEntity) {
+        qDebug() << "UNEXPECTED!!!! don't call EntityTree::deleteEntity() on entity items that don't exist. entityID=" << entityID;
+        return;
+    }
+
+    if (existingEntity->getLocked()) {
+        qDebug() << "ERROR! EntityTree::deleteEntity() trying to delete locked entity. entityID=" << entityID;
+        return;
+    }
+
     emit deletingEntity(entityID);
 
     // NOTE: callers must lock the tree before using this method
@@ -242,14 +259,33 @@ void EntityTree::deleteEntities(QSet<EntityItemID> entityIDs) {
     // NOTE: callers must lock the tree before using this method
     DeleteEntityOperator theOperator(this);
     foreach(const EntityItemID& entityID, entityIDs) {
+        EntityTreeElement* containingElement = getContainingElement(entityID);
+        if (!containingElement) {
+            qDebug() << "UNEXPECTED!!!!  EntityTree::deleteEntities() entityID doesn't exist!!! entityID=" << entityID;
+            continue;
+        }
+
+        EntityItem* existingEntity = containingElement->getEntityWithEntityItemID(entityID);
+        if (!existingEntity) {
+            qDebug() << "UNEXPECTED!!!! don't call EntityTree::deleteEntities() on entity items that don't exist. entityID=" << entityID;
+            continue;
+        }
+
+        if (existingEntity->getLocked()) {
+            qDebug() << "ERROR! EntityTree::deleteEntities() trying to delete locked entity. entityID=" << entityID;
+            continue;
+        }
+
         // tell our delete operator about this entityID
         theOperator.addEntityIDToDeleteList(entityID);
         emit deletingEntity(entityID);
     }
 
-    recurseTreeWithOperator(&theOperator);
-    processRemovedEntities(theOperator);
-    _isDirty = true;
+    if (theOperator.getEntities().size() > 0) {
+        recurseTreeWithOperator(&theOperator);
+        processRemovedEntities(theOperator);
+        _isDirty = true;
+    }
 }
 
 void EntityTree::processRemovedEntities(const DeleteEntityOperator& theOperator) {