diff --git a/samplecode/SampleDecode.cpp b/samplecode/SampleDecode.cpp
index 9188257..fa2b727 100644
--- a/samplecode/SampleDecode.cpp
+++ b/samplecode/SampleDecode.cpp
@@ -27,7 +27,7 @@
 public:
     SkBitmap fBitmap[SK_ARRAY_COUNT(gRec)];
 
-	DecodeView() {
+    DecodeView() {
         SkFILEStream stream("/skimages/index.png");
         SkImageDecoder* codec = SkImageDecoder::Factory(&stream);
         if (codec) {
@@ -37,6 +37,7 @@
                 codec->decode(&stream, &fBitmap[i], gRec[i].fPrefConfig,
                               SkImageDecoder::kDecodePixels_Mode);
             }
+            SkDELETE(codec);
         }
     }
     
diff --git a/src/gpu/gl/debug/GrDebugGL.cpp b/src/gpu/gl/debug/GrDebugGL.cpp
index c4cfe89..6570039 100644
--- a/src/gpu/gl/debug/GrDebugGL.cpp
+++ b/src/gpu/gl/debug/GrDebugGL.cpp
@@ -16,7 +16,8 @@
 #include "GrTextureUnitObj.h"
 
 
-GrDebugGL GrDebugGL::Obj;
+GrDebugGL* GrDebugGL::gObj = NULL;
+int GrDebugGL::gStaticRefCount = 0;
 GrDebugGL::Create GrDebugGL::gFactoryFunc[kObjTypeCount] = {
     GrTextureObj::createGrTextureObj,
     GrBufferObj::createGrBufferObj,
@@ -40,7 +41,9 @@
     , fTexture(NULL) {
 
     for (int i = 0; i < kDefaultMaxTextureUnits; ++i) {
-        fTextureUnits[i] = GR_CREATE(GrTextureUnitObj, GrDebugGL::kTextureUnit_ObjTypes);
+
+        fTextureUnits[i] = reinterpret_cast<GrTextureUnitObj *>(
+                            createObj(GrDebugGL::kTextureUnit_ObjTypes));
         fTextureUnits[i]->ref();
 
         fTextureUnits[i]->setNumber(i);
diff --git a/src/gpu/gl/debug/GrDebugGL.h b/src/gpu/gl/debug/GrDebugGL.h
index 4e714ee..d6697fd 100644
--- a/src/gpu/gl/debug/GrDebugGL.h
+++ b/src/gpu/gl/debug/GrDebugGL.h
@@ -84,13 +84,31 @@
     GrGLint getUnPackRowLength() const { return fUnPackRowLength; }
 
     static GrDebugGL *getInstance() {
-//        static GrDebugGL Obj;
+        // someone should admit to actually using this class
+        GrAssert(0 < gStaticRefCount);
 
-        return &Obj;
+        if (NULL == gObj) {
+            gObj = SkNEW(GrDebugGL);
+        }
+
+        return gObj;
     }
 
     void report() const;
 
+    static void staticRef() {
+        gStaticRefCount++;
+    }
+
+    static void staticUnRef() {
+        GrAssert(gStaticRefCount > 0);
+        gStaticRefCount--;
+        if (0 == gStaticRefCount) {
+            SkDELETE(gObj);
+            gObj = NULL;
+        }
+    }
+
 protected:
 
 private:
@@ -113,7 +131,8 @@
 
     static Create gFactoryFunc[kObjTypeCount];
 
-    static GrDebugGL Obj;
+    static GrDebugGL* gObj;
+    static int gStaticRefCount;
 
     // global store of all objects
     SkTArray<GrFakeRefObj *> fObjects;
diff --git a/src/gpu/gl/debug/GrGLCreateDebugInterface.cpp b/src/gpu/gl/debug/GrGLCreateDebugInterface.cpp
index 22f32dc..3f58cc6 100644
--- a/src/gpu/gl/debug/GrGLCreateDebugInterface.cpp
+++ b/src/gpu/gl/debug/GrGLCreateDebugInterface.cpp
@@ -1280,6 +1280,11 @@
 
     GrDebugGLInterface()
         : fWrapped(NULL) {
+        GrDebugGL::staticRef();
+    }
+
+    virtual ~GrDebugGLInterface() {
+        GrDebugGL::staticUnRef();
     }
 
     void setWrapped(GrGLInterface *interface) {
