diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp
index 6226012052..166e6d2819 100644
--- a/libraries/entities/src/EntityScriptingInterface.cpp
+++ b/libraries/entities/src/EntityScriptingInterface.cpp
@@ -144,15 +144,26 @@ void EntityScriptingInterface::deleteEntity(EntityItemID entityID) {
         }
     }
 
+    bool shouldDelete = true;
+
     // If we have a local entity tree set, then also update it.
     if (_entityTree) {
         _entityTree->lockForWrite();
-        _entityTree->deleteEntity(entityID);
+
+        EntityItem* entity = const_cast<EntityItem*>(_entityTree->findEntityByEntityItemID(actualID));
+        if (entity) {
+            if (entity->getLocked()) {
+                shouldDelete = false;
+            } else {
+                _entityTree->deleteEntity(entityID);
+            }
+        }
+
         _entityTree->unlock();
     }
 
-    // if at this point, we know the id, send the update to the entity server
-    if (entityID.isKnownID) {
+    // if at this point, we know the id, and we should still delete the entity, send the update to the entity server
+    if (shouldDelete && entityID.isKnownID) {
         getEntityPacketSender()->queueEraseEntityMessage(entityID);
     }
 }