diff --git a/src/mod/languages/mod_managed/managed/Demo.cs b/src/mod/languages/mod_managed/managed/Demo.csx
similarity index 95%
rename from src/mod/languages/mod_managed/managed/Demo.cs
rename to src/mod/languages/mod_managed/managed/Demo.csx
index d342c5443e..7a2509da96 100644
--- a/src/mod/languages/mod_managed/managed/Demo.cs
+++ b/src/mod/languages/mod_managed/managed/Demo.csx
@@ -32,7 +32,7 @@
 // How to test the demo (in the mod/managed directory):
 // -- Compile to dll for "normal" loading
 // -- Compile to exe for script EXE loading
-// -- Rename to demo.csx for dynamic compilation
+// -- Copy to managed directory for dynamic compilation
 
 using System;
 using FreeSWITCH;
@@ -85,7 +85,7 @@ public class LoadDemo : ILoadNotificationPlugin {
 
 public class ScriptDemo {
 
-    static void Main() {
+    public static void Main() {
         switch (FreeSWITCH.Script.ContextType) {
             case ScriptContextType.Api: {
                     var ctx = FreeSWITCH.Script.GetApiContext();
diff --git a/src/mod/languages/mod_managed/managed/FreeSWITCH.Managed.csproj b/src/mod/languages/mod_managed/managed/FreeSWITCH.Managed.csproj
index 7010cf15c1..d98e183a8d 100644
--- a/src/mod/languages/mod_managed/managed/FreeSWITCH.Managed.csproj
+++ b/src/mod/languages/mod_managed/managed/FreeSWITCH.Managed.csproj
@@ -52,7 +52,7 @@
     <Compile Include="Loader.cs" />
     <Compile Include="Extensions.cs" />
     <Compile Include="Log.cs" />
-    <None Include="Demo.cs" />
+    <None Include="Demo.csx" />
     <Compile Include="PluginInterfaces.cs" />
     <Compile Include="PluginManager.cs" />
     <Compile Include="ScriptPluginManager.cs" />
diff --git a/src/mod/languages/mod_managed/managed/Loader.cs b/src/mod/languages/mod_managed/managed/Loader.cs
index f2e93d6244..c7c9cc12c6 100644
--- a/src/mod/languages/mod_managed/managed/Loader.cs
+++ b/src/mod/languages/mod_managed/managed/Loader.cs
@@ -219,15 +219,24 @@ namespace FreeSWITCH {
             setup.ApplicationName = Path.GetFileName(fileName) + "_" + appDomainCount;
             var domain = AppDomain.CreateDomain(setup.ApplicationName, null, setup);
                 
-            var pm = (PluginManager)domain.CreateInstanceAndUnwrap(pmType.Assembly.FullName, pmType.FullName, null);
-            if (!pm.Load(fileName)) {
+            PluginManager pm;
+            try {
+                pm = (PluginManager)domain.CreateInstanceAndUnwrap(pmType.Assembly.FullName, pmType.FullName, null);
+                if (!pm.Load(fileName)) {
+                    AppDomain.Unload(domain);
+                    unloadFile(fileName);
+                    return;
+                }
+            } catch (Exception ex) {
+                // On an exception, we will unload the current file so an old copy doesnt stay active
+                Log.WriteLine(LogLevel.Alert, "Exception loading {0}: {1}", fileName, ex.ToString());
                 AppDomain.Unload(domain);
                 unloadFile(fileName);
                 return;
             }
 
+            // Update dictionaries atomically
             lock (loaderLock) {
-                // Update dictionaries atomically
                 unloadFile(fileName);
 
                 var pi = new PluginInfo { FileName = fileName, Domain = domain, Manager = pm };
@@ -279,7 +288,7 @@ namespace FreeSWITCH {
                         AppDomain.Unload(d);
                         Log.WriteLine(LogLevel.Info, "Unloaded {0}, domain {1}.", pi.FileName, friendlyName);
                     } catch (Exception ex) {
-                        Log.WriteLine(LogLevel.Critical, "Could not unload {0}, domain {1}: {2}", pi.FileName, friendlyName, ex.ToString());
+                        Log.WriteLine(LogLevel.Alert, "Could not unload {0}, domain {1}: {2}", pi.FileName, friendlyName, ex.ToString());
                     }
                 });
                 t.Priority = System.Threading.ThreadPriority.BelowNormal;