diff --git a/bench/ETCBitmapBench.cpp b/bench/ETCBitmapBench.cpp
index 4b9cd6e..e9aee76 100644
--- a/bench/ETCBitmapBench.cpp
+++ b/bench/ETCBitmapBench.cpp
@@ -89,8 +89,9 @@
 
 private:
     SkData *loadPKM() {
-        SkString filename = SkOSPath::SkPathJoin(
-            INHERITED::GetResourcePath().c_str(), "mandrill_128.pkm");
+        SkString resourcePath = GetResourcePath();
+        SkString filename = SkOSPath::SkPathJoin(resourcePath.c_str(),
+                                                 "mandrill_128.pkm");
 
         // Expand the data
         SkAutoDataUnref fileData(SkData::NewFromFileName(filename.c_str()));
diff --git a/bench/SkBenchmark.cpp b/bench/SkBenchmark.cpp
index d995415..1f12ed3 100644
--- a/bench/SkBenchmark.cpp
+++ b/bench/SkBenchmark.cpp
@@ -12,7 +12,7 @@
 
 template BenchRegistry* BenchRegistry::gHead;
 
-SkString SkBenchmark::gResourcePath;
+const char* SkBenchmark::gResourcePath;
 
 SkBenchmark::SkBenchmark() {
     fForceAlpha = 0xFF;
@@ -55,6 +55,13 @@
     }
 }
 
+void SkBenchmark::SetResourcePath(const char* resourcePath) {
+    gResourcePath = resourcePath;
+}
+
+SkString SkBenchmark::GetResourcePath() {
+    return SkString(gResourcePath);
+}
 
 ///////////////////////////////////////////////////////////////////////////////
 
diff --git a/bench/SkBenchmark.h b/bench/SkBenchmark.h
index bf28689..00a816c 100644
--- a/bench/SkBenchmark.h
+++ b/bench/SkBenchmark.h
@@ -107,9 +107,8 @@
         fClearMask = clearMask;
     }
 
-    static void SetResourcePath(const char* resPath) { gResourcePath.set(resPath); }
-
-    static SkString& GetResourcePath() { return gResourcePath; }
+    static void SetResourcePath(const char*);
+    static SkString GetResourcePath();
 
 protected:
     virtual void setupPaint(SkPaint* paint);
@@ -129,7 +128,7 @@
     bool    fForceFilter;
     SkTriState::State  fDither;
     uint32_t    fOrMask, fClearMask;
-    static  SkString gResourcePath;
+    static const char* gResourcePath;
 
     typedef SkRefCnt INHERITED;
 };
diff --git a/bench/SkipZeroesBench.cpp b/bench/SkipZeroesBench.cpp
index 3d846bf..b84cf78 100644
--- a/bench/SkipZeroesBench.cpp
+++ b/bench/SkipZeroesBench.cpp
@@ -45,13 +45,14 @@
     }
 
     virtual void onPreDraw() SK_OVERRIDE {
-        const char* resPath = GetResourcePath().c_str();
-        if (NULL == resPath) {
+        SkString resourcePath = GetResourcePath();
+        if (resourcePath.isEmpty()) {
             fValid = false;
             return;
         }
 
-        SkString fullPath = SkOSPath::SkPathJoin(resPath, fFilename.c_str());
+        SkString fullPath = SkOSPath::SkPathJoin(resourcePath.c_str(),
+                                                 fFilename.c_str());
         SkFILEStream fileStream(fullPath.c_str());
         fValid = fileStream.isValid() && fileStream.getLength() > 0;
         if (fValid) {
diff --git a/gm/copyTo4444.cpp b/gm/copyTo4444.cpp
index 7e2c279..6233301 100644
--- a/gm/copyTo4444.cpp
+++ b/gm/copyTo4444.cpp
@@ -30,8 +30,7 @@
 
     virtual void onDraw(SkCanvas* canvas) {
         SkBitmap bm, bm4444;
-        SkString filename = SkOSPath::SkPathJoin(
-                INHERITED::gResourcePath.c_str(), "mandrill_512.png");
+        SkString filename = SkOSPath::SkPathJoin(INHERITED::gResourcePath, "mandrill_512.png");
         if (!SkImageDecoder::DecodeFile(filename.c_str(), &bm,
                                         SkBitmap::kARGB_8888_Config,
                                         SkImageDecoder::kDecodePixels_Mode)) {
diff --git a/gm/etc1bitmap.cpp b/gm/etc1bitmap.cpp
index cdf8617..ce0aa7d 100644
--- a/gm/etc1bitmap.cpp
+++ b/gm/etc1bitmap.cpp
@@ -93,8 +93,7 @@
 
     virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
         SkBitmap bm;
-        SkString filename = SkOSPath::SkPathJoin(
-                INHERITED::gResourcePath.c_str(), "mandrill_128.");
+        SkString filename = SkOSPath::SkPathJoin(INHERITED::gResourcePath, "mandrill_128.");
         filename.append(this->fileExtension());
 
         SkAutoTUnref<SkData> fileData(SkData::NewFromFileName(filename.c_str()));
@@ -169,8 +168,7 @@
     virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
 
         SkBitmap bm;
-        SkString filename = SkOSPath::SkPathJoin(
-                INHERITED::gResourcePath.c_str(), "mandrill_128.pkm");
+        SkString filename = SkOSPath::SkPathJoin(INHERITED::gResourcePath, "mandrill_128.pkm");
 
         SkAutoDataUnref fileData(SkData::NewFromFileName(filename.c_str()));
         if (NULL == fileData) {
diff --git a/gm/factory.cpp b/gm/factory.cpp
index bd79c9d..aa643a2 100644
--- a/gm/factory.cpp
+++ b/gm/factory.cpp
@@ -28,8 +28,7 @@
 protected:
     virtual void onOnceBeforeDraw() SK_OVERRIDE {
         // Copyright-free file from http://openclipart.org/detail/29213/paper-plane-by-ddoo
-        SkString filename = SkOSPath::SkPathJoin(INHERITED::gResourcePath.c_str(),
-                                                 "plane.png");
+        SkString filename = SkOSPath::SkPathJoin(INHERITED::gResourcePath, "plane.png");
         SkAutoDataUnref data(SkData::NewFromFileName(filename.c_str()));
         if (NULL != data.get()) {
             // Create a cache which will boot the pixels out anytime the
diff --git a/gm/gm.cpp b/gm/gm.cpp
index 803874f..8da45c5 100644
--- a/gm/gm.cpp
+++ b/gm/gm.cpp
@@ -6,9 +6,10 @@
  */
 
 #include "gm.h"
+
 using namespace skiagm;
 
-SkString GM::gResourcePath;
+const char* GM::gResourcePath;
 
 GM::GM() {
     fMode = kGM_Mode;
@@ -17,6 +18,7 @@
     fHaveCalledOnceBeforeDraw = false;
     fStarterMatrix.reset();
 }
+
 GM::~GM() {}
 
 void GM::draw(SkCanvas* canvas) {
@@ -64,5 +66,13 @@
     canvas->drawRect(r, paint);
 }
 
+void GM::SetResourcePath(const char* resourcePath) {
+    gResourcePath = resourcePath;
+}
+
+SkString GM::GetResourcePath() {
+    return SkString(gResourcePath);
+}
+
 // need to explicitly declare this, or we get some weird infinite loop llist
 template GMRegistry* SkTRegistry<GM*(*)(void*)>::gHead;
diff --git a/gm/gm.h b/gm/gm.h
index 90de96f..a48976b 100644
--- a/gm/gm.h
+++ b/gm/gm.h
@@ -96,13 +96,8 @@
         // GM's getISize bounds.
         void drawSizeBounds(SkCanvas*, SkColor);
 
-        static void SetResourcePath(const char* resourcePath) {
-            gResourcePath = resourcePath;
-        }
-
-        static SkString& GetResourcePath() {
-            return gResourcePath;
-        }
+        static void SetResourcePath(const char*);
+        static SkString GetResourcePath();
 
         bool isCanvasDeferred() const { return fCanvasIsDeferred; }
         void setCanvasIsDeferred(bool isDeferred) {
@@ -115,7 +110,7 @@
         }
 
     protected:
-        static SkString gResourcePath;
+        static const char* gResourcePath;
 
         virtual void onOnceBeforeDraw() {}
         virtual void onDraw(SkCanvas*) = 0;
diff --git a/tests/Test.cpp b/tests/Test.cpp
index e57427a..b904d5a 100644
--- a/tests/Test.cpp
+++ b/tests/Test.cpp
@@ -1,10 +1,10 @@
-
 /*
  * Copyright 2011 Google Inc.
  *
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file.
  */
+
 #include "Test.h"
 
 #include "SkCommandLineFlags.h"
@@ -41,6 +41,8 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
+const char* Test::gResourcePath;
+
 Test::Test() : fReporter(NULL), fPassed(true) {}
 
 Test::~Test() {
@@ -121,8 +123,9 @@
     return SkString(tmpDir);
 }
 
-static const char* gResourcePath = NULL;
-void Test::SetResourcePath(const char* resourcePath) { gResourcePath = resourcePath; }
+void Test::SetResourcePath(const char* resourcePath) {
+    gResourcePath = resourcePath;
+}
 
 SkString Test::GetResourcePath() {
     return SkString(gResourcePath);
diff --git a/tests/Test.h b/tests/Test.h
index 4d2cf2b..90d072e 100644
--- a/tests/Test.h
+++ b/tests/Test.h
@@ -73,6 +73,8 @@
         virtual void onRun(Reporter*) = 0;
 
     private:
+        static const char* gResourcePath;
+
         Reporter*   fReporter;
         SkString    fName;
         bool        fPassed;
