... yet more incremental work for efficient JSON String token handling
diff --git a/src/java/org/codehaus/jackson/JsonFactory.java b/src/java/org/codehaus/jackson/JsonFactory.java
index 34e2dbf..10b845e 100644
--- a/src/java/org/codehaus/jackson/JsonFactory.java
+++ b/src/java/org/codehaus/jackson/JsonFactory.java
@@ -577,9 +577,7 @@
 
         if (br == null) {
             br = new BufferRecycler();
-            if (ref == null) {
-                _recyclerRef.set(new SoftReference<BufferRecycler>(br));
-            }
+            _recyclerRef.set(new SoftReference<BufferRecycler>(br));
         }
         return br;
     }
diff --git a/src/java/org/codehaus/jackson/io/JsonStringEncoder.java b/src/java/org/codehaus/jackson/io/JsonStringEncoder.java
new file mode 100644
index 0000000..6788629
--- /dev/null
+++ b/src/java/org/codehaus/jackson/io/JsonStringEncoder.java
@@ -0,0 +1,89 @@
+package org.codehaus.jackson.io;
+
+import java.lang.ref.SoftReference;
+
+import org.codehaus.jackson.util.BufferRecycler;
+
+/**
+ * Helper class used for efficient encoding of JSON String values (including
+ * JSON field names) into Strings or UTF-8 byte arrays.
+ *
+ * @since 1.6
+ */
+public final class JsonStringEncoder
+{
+    /**
+     * This <code>ThreadLocal</code> contains a {@link java.lang.ref.SoftRerefence}
+     * to a {@link BufferRecycler} used to provide a low-cost
+     * buffer recycling between reader and writer instances.
+     */
+    final protected static ThreadLocal<SoftReference<JsonStringEncoder>> _threadEncoder
+        = new ThreadLocal<SoftReference<JsonStringEncoder>>();
+
+    /*
+    /**********************************************************
+    /* Construction, instance access
+    /**********************************************************
+     */
+    
+    public JsonStringEncoder() { }
+    
+    /**
+     * Factory method for getting an instance; this is either recycled per-thread instance,
+     * or a newly constructed one.
+     */
+    public static JsonStringEncoder getInstance()
+    {
+        SoftReference<JsonStringEncoder> ref = _threadEncoder.get();
+        JsonStringEncoder enc = (ref == null) ? null : ref.get();
+
+        if (enc == null) {
+            enc = new JsonStringEncoder();
+            _threadEncoder.set(new SoftReference<JsonStringEncoder>(enc));
+        }
+        return enc;
+    }
+
+    /*
+    /**********************************************************
+    /* Public API
+    /**********************************************************
+     */
+
+    /**
+     * Method that will quote text contents using JSON standard quoting,
+     * and return results as a character array
+     */
+    public char[] quoteAsString(String text)
+    {
+        // !!! TBI
+        return null;
+    }
+
+    /**
+     * Will quote given JSON String value using standard quoting, encode
+     * results as UTF-8, and return result as a byte array.
+     */
+    public byte[] quoteAsUTF8(String text)
+    {
+        // !!! TBI
+        return null;
+    }
+
+    /**
+     * Will encode given String as UTF-8 (without any quoting), return
+     * resulting byte array.
+     */
+    public byte[] encodeAsUTF8(String text)
+    {
+        // !!! TBI
+        return null;
+    }
+    
+    /*
+    /**********************************************************
+    /* Internal methods
+    /**********************************************************
+     */
+
+}
diff --git a/src/java/org/codehaus/jackson/io/SerializedString.java b/src/java/org/codehaus/jackson/io/SerializedString.java
index 13b1481..d89208b 100644
--- a/src/java/org/codehaus/jackson/io/SerializedString.java
+++ b/src/java/org/codehaus/jackson/io/SerializedString.java
@@ -42,7 +42,7 @@
     {
         char[] result = _quotedChars;
         if (result == null) {
-            // !!! TBI
+            result = JsonStringEncoder.getInstance().quoteAsString(_value);
             _quotedChars = result;
         }
         return null;
@@ -56,7 +56,7 @@
     {
         byte[] result = _unquotedUTF8Ref.get();
         if (result == null) {
-            // !!! TBI
+            JsonStringEncoder.getInstance().encodeAsUTF8(_value);
             _unquotedUTF8Ref.set(result);
         }
         return null;
@@ -70,7 +70,7 @@
     {
         byte[] result = _quotedUTF8Ref.get();
         if (result == null) {
-            // !!! TBI
+            JsonStringEncoder.getInstance().quoteAsUTF8(_value);
             _quotedUTF8Ref.set(result);
         }
         return null;