diff --git a/bikeshed/scripts/dataPopulator b/bikeshed/scripts/dataPopulator
index c98fbfb..8d24cc8 100755
--- a/bikeshed/scripts/dataPopulator
+++ b/bikeshed/scripts/dataPopulator
@@ -22,7 +22,7 @@
 MAVEN_REPO=~/.m2/repository
 
 NEW_CLASSPATH=$MAVEN_REPO/org/json/json/20090211/json-20090211.jar
-for i in dev user servlet bikeshed
+for i in dev user servlet 
 do 
   NEW_CLASSPATH=$MAVEN_REPO/com/google/gwt/gwt-${i}/2.1.0.M1/gwt-${i}-2.1.0.M1.jar:$NEW_CLASSPATH
 done
diff --git a/user/src/com/google/gwt/requestfactory/server/SampleDataPopulator.java b/user/src/com/google/gwt/requestfactory/server/SampleDataPopulator.java
index c6709b0..7c988bb 100644
--- a/user/src/com/google/gwt/requestfactory/server/SampleDataPopulator.java
+++ b/user/src/com/google/gwt/requestfactory/server/SampleDataPopulator.java
@@ -15,7 +15,6 @@
  */
 package com.google.gwt.requestfactory.server;
 
-import com.google.gwt.dev.util.Util;
 import com.google.gwt.requestfactory.shared.RequestFactory;
 import com.google.gwt.requestfactory.shared.impl.RequestDataManager;
 import com.google.gwt.valuestore.shared.WriteOperation;
@@ -29,7 +28,9 @@
 import org.json.JSONObject;
 
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.IOException;
+import java.io.UnsupportedEncodingException;
 
 /**
  * <p>
@@ -108,9 +109,49 @@
     return jsonObject;
   }
 
-  private String readFileAsString(String filePathName) {
+  // ugly method, refactor later when cleaning up this class.
+  private byte[] readFileAsBytes(String filePathName) {
     File file = new File(filePathName);
-    return Util.readFileAsString(file);
+    FileInputStream fileInputStream = null;
+    byte bytes[] = null;
+    try {
+      fileInputStream = new FileInputStream(file);
+      int byteLength = (int) file.length();
+      bytes = new byte[byteLength];
+      int byteOffset = 0;
+      while (byteOffset < byteLength) {
+        int bytesReadCount = fileInputStream.read(bytes, byteOffset, byteLength
+            - byteOffset);
+        if (bytesReadCount == -1) {
+          return null;
+        }
+        byteOffset += bytesReadCount;
+      }
+    } catch (IOException e) {
+      // Ignored.
+    } finally {
+      try {
+        if (fileInputStream != null) {
+          fileInputStream.close();
+        }
+      } catch (IOException e) {
+        // ignored
+      }
+    }
+    return bytes;
+  }
+  
+  private String readFileAsString(String filePathName) {
+    byte bytes[] = readFileAsBytes(filePathName);
+    if (bytes != null) {
+      try {
+        return new String(bytes, "UTF-8");
+      } catch (UnsupportedEncodingException e) {
+        // Ignored.
+      }
+      return null;
+    }
+    return null;
   }
 
 }
