diff --git a/rsContext.cpp b/rsContext.cpp
index 40cb5c7..1dfedb3 100644
--- a/rsContext.cpp
+++ b/rsContext.cpp
@@ -528,6 +528,7 @@
 
 void Context::destroyWorkerThreadResources() {
     //LOGV("destroyWorkerThreadResources 1");
+    ObjectBase::zeroAllUserRef(this);
     if (mIsGraphicsContext) {
          mRaster.clear();
          mFragment.clear();
@@ -542,7 +543,6 @@
          mStateFont.deinit(this);
          mShaderCache.cleanupAll();
     }
-    ObjectBase::zeroAllUserRef(this);
     //LOGV("destroyWorkerThreadResources 2");
     mExit = true;
 }
diff --git a/rsFont.cpp b/rsFont.cpp
index 8571c32..7fdfbe0 100644
--- a/rsFont.cpp
+++ b/rsFont.cpp
@@ -74,6 +74,15 @@
     return true;
 }
 
+void Font::preDestroy() const {
+    for (uint32_t ct = 0; ct < mRSC->mStateFont.mActiveFonts.size(); ct++) {
+        if (mRSC->mStateFont.mActiveFonts[ct] == this) {
+            mRSC->mStateFont.mActiveFonts.removeAt(ct);
+            break;
+        }
+    }
+}
+
 void Font::invalidateTextureCache() {
     for (uint32_t i = 0; i < mCachedGlyphs.size(); i ++) {
         mCachedGlyphs.valueAt(i)->mIsValid = false;
@@ -309,13 +318,6 @@
         FT_Done_Face(mFace);
     }
 
-    for (uint32_t ct = 0; ct < mRSC->mStateFont.mActiveFonts.size(); ct++) {
-        if (mRSC->mStateFont.mActiveFonts[ct] == this) {
-            mRSC->mStateFont.mActiveFonts.removeAt(ct);
-            break;
-        }
-    }
-
     for (uint32_t i = 0; i < mCachedGlyphs.size(); i ++) {
         CachedGlyphInfo *glyph = mCachedGlyphs.valueAt(i);
         delete glyph;
@@ -799,11 +801,6 @@
 
     mDefault.clear();
 
-    Vector<Font*> fontsToDereference = mActiveFonts;
-    for (uint32_t i = 0; i < fontsToDereference.size(); i ++) {
-        fontsToDereference[i]->zeroUserRef();
-    }
-
     if (mLibrary) {
         FT_Done_FreeType( mLibrary );
         mLibrary = NULL;
diff --git a/rsFont.h b/rsFont.h
index 00d77c8..4820999 100644
--- a/rsFont.h
+++ b/rsFont.h
@@ -119,6 +119,7 @@
     Font(Context *rsc);
     bool init(const char *name, float fontSize, uint32_t dpi, const void *data = NULL, uint32_t dataLen = 0);
 
+    virtual void preDestroy() const;
     FT_Face mFace;
     bool mInitialized;
     bool mHasKerning;
diff --git a/rsScript.cpp b/rsScript.cpp
index efdc626..9ada9c2 100644
--- a/rsScript.cpp
+++ b/rsScript.cpp
@@ -78,8 +78,6 @@
             (*destPtr)->decSysRef();
         }
         *destPtr = val;
-    } else {
-        LOGV("Calling setVarObj on slot = %i which is null.  This is dangerous because the script will not hold a ref count on the object.", slot);
     }
 }
 
diff --git a/rsScriptC.cpp b/rsScriptC.cpp
index 3858e1c..fc673a2 100644
--- a/rsScriptC.cpp
+++ b/rsScriptC.cpp
@@ -94,16 +94,24 @@
 }
 
 ScriptC::ScriptC(Context *rsc) : Script(rsc) {
-    LOGD(">>>> ScriptC ctor called, obj=%p", this);
     mBccScript = NULL;
     memset(&mProgram, 0, sizeof(mProgram));
 }
 
 ScriptC::~ScriptC() {
-    LOGD(">>>> ~ScriptC() mBccScript = %p", mBccScript);
     if (mBccScript) {
+        if (mProgram.mObjectSlotList) {
+            for (size_t ct=0; ct < mProgram.mObjectSlotCount; ct++) {
+                setVarObj(mProgram.mObjectSlotList[ct], NULL);
+            }
+            delete [] mProgram.mObjectSlotList;
+            mProgram.mObjectSlotList = NULL;
+            mProgram.mObjectSlotCount = 0;
+        }
+
+
+        LOGD(">>>> ~ScriptC  bccDisposeScript(%p)", mBccScript);
         bccDisposeScript(mBccScript);
-        LOGD(">>>> ~ScriptC(mBCCScript)");
     }
     free(mEnviroment.mScriptText);
     mEnviroment.mScriptText = NULL;
@@ -589,6 +597,16 @@
             return false;
         }
     }
+
+    size_t objectSlotCount = bccGetObjectSlotCount(s->mBccScript);
+    uint32_t *objectSlots = NULL;
+    if (objectSlotCount) {
+        objectSlots = new uint32_t[objectSlotCount];
+        bccGetObjectSlotList(s->mBccScript, objectSlotCount, objectSlots);
+        s->mProgram.mObjectSlotList = objectSlots;
+        s->mProgram.mObjectSlotCount = objectSlotCount;
+    }
+
     return true;
 }
 
diff --git a/rsScriptC.h b/rsScriptC.h
index 7143c67..e794feb 100644
--- a/rsScriptC.h
+++ b/rsScriptC.h
@@ -42,8 +42,12 @@
 
         RunScript_t mRoot;
         VoidFunc_t mInit;
+
+        uint32_t * mObjectSlotList;
+        uint32_t mObjectSlotCount;
     };
 
+
     Program_t mProgram;
 
     BCCScriptRef mBccScript;
