diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp
index c9780aff4c..e995194608 100644
--- a/interface/src/Application.cpp
+++ b/interface/src/Application.cpp
@@ -6039,7 +6039,8 @@ void Application::reloadResourceCaches() {
     getEntities()->clear();
 
     DependencyManager::get<AssetClient>()->clearCache();
-    DependencyManager::get<ScriptCache>()->clearCache();
+    //It's already cleared in reloadAllScripts so I'm not sure this is necessary.
+    //DependencyManager::get<ScriptCache>()->clearCache();
 
     // Clear all the resource caches
     DependencyManager::get<ResourceCacheSharedItems>()->clear();
diff --git a/libraries/script-engine/src/ScriptEngines.cpp b/libraries/script-engine/src/ScriptEngines.cpp
index ee6e6ffc2f..aeb2cb9336 100644
--- a/libraries/script-engine/src/ScriptEngines.cpp
+++ b/libraries/script-engine/src/ScriptEngines.cpp
@@ -609,6 +609,7 @@ void ScriptEngines::onScriptFinished(const QString& rawScriptURL, ScriptManagerP
         }
     }
 
+    manager->waitTillDoneRunning();
     removeScriptEngine(manager);
 
     if (removed && !_isReloading) {
diff --git a/libraries/script-engine/src/ScriptManager.cpp b/libraries/script-engine/src/ScriptManager.cpp
index a5a5e21b96..ce4572fd89 100644
--- a/libraries/script-engine/src/ScriptManager.cpp
+++ b/libraries/script-engine/src/ScriptManager.cpp
@@ -1032,6 +1032,7 @@ void ScriptManager::stop(bool marshal) {
         QMetaObject::invokeMethod(this, "stop");
         return;
     }
+
     if (!_isFinished) {
         _isFinished = true;
         emit runningStateChanged();
diff --git a/libraries/script-engine/src/ScriptValue.h b/libraries/script-engine/src/ScriptValue.h
index d5a057e0ad..40334733bc 100644
--- a/libraries/script-engine/src/ScriptValue.h
+++ b/libraries/script-engine/src/ScriptValue.h
@@ -4,6 +4,7 @@
 //
 //  Created by Heather Anderson on 4/25/21.
 //  Copyright 2021 Vircadia contributors.
+//  Copyright 2022 Overte e.V.
 //
 //  Distributed under the Apache License, Version 2.0.
 //  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
@@ -22,6 +23,7 @@
 #include <QtCore/QList>
 #include <QtCore/QString>
 #include <QtCore/QVariant>
+#include <QtCore/QDebug>
 
 class ScriptEngine;
 class ScriptValue;
@@ -199,6 +201,11 @@ ScriptValue& ScriptValue::operator=(const ScriptValue& other) {
 
 ScriptValue ScriptValue::call(const ScriptValue& thisObject, const ScriptValueList& args) const {
     Q_ASSERT(_proxy != nullptr);
+    ScriptEnginePointer scriptEngine = _proxy->engine();
+    if (scriptEngine == nullptr) {
+        qDebug() << "Call to deleted or non-existing script engine";
+        return ScriptValue();
+    }
     return _proxy->call(thisObject, args);
 }