diff --git a/htrace-core/src/main/java/org/apache/htrace/impl/MilliSpan.java b/htrace-core/src/main/java/org/apache/htrace/impl/MilliSpan.java
index c57eb25..c688858 100644
--- a/htrace-core/src/main/java/org/apache/htrace/impl/MilliSpan.java
+++ b/htrace-core/src/main/java/org/apache/htrace/impl/MilliSpan.java
@@ -21,12 +21,13 @@
 import com.fasterxml.jackson.databind.DeserializationContext;
 import com.fasterxml.jackson.databind.JsonDeserializer;
 import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectReader;
 import com.fasterxml.jackson.databind.ObjectWriter;
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import org.apache.htrace.Span;
 import org.apache.htrace.TimelineAnnotation;
 import org.apache.htrace.Tracer;
-import com.fasterxml.jackson.databind.ObjectMapper;
 
 import java.io.IOException;
 import java.io.StringWriter;
@@ -47,7 +48,9 @@
  */
 @JsonDeserialize(using = MilliSpan.MilliSpanDeserializer.class)
 public class MilliSpan implements Span {
-  private static ObjectWriter JSON_WRITER = new ObjectMapper().writer();
+  private static ObjectMapper OBJECT_MAPPER = new ObjectMapper();
+  private static ObjectReader JSON_READER = OBJECT_MAPPER.reader(MilliSpan.class);
+  private static ObjectWriter JSON_WRITER = OBJECT_MAPPER.writer();
   private static final long EMPTY_PARENT_ARRAY[] = new long[0];
   private static final String EMPTY_STRING = "";
 
@@ -384,4 +387,8 @@
       return builder.build();
     }
   }
+
+  static MilliSpan fromJson(String json) throws IOException {
+    return JSON_READER.readValue(json);
+  }
 }
diff --git a/htrace-core/src/test/java/org/apache/htrace/impl/TestMilliSpan.java b/htrace-core/src/test/java/org/apache/htrace/impl/TestMilliSpan.java
index 41ee108..2e0edde 100644
--- a/htrace-core/src/test/java/org/apache/htrace/impl/TestMilliSpan.java
+++ b/htrace-core/src/test/java/org/apache/htrace/impl/TestMilliSpan.java
@@ -16,8 +16,6 @@
  */
 package org.apache.htrace.impl;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
-
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
@@ -81,8 +79,7 @@
         spanId(989L).
         traceId(444).build();
     String json = span.toJson();
-    ObjectMapper mapper = new ObjectMapper();
-    MilliSpan dspan = mapper.readValue(json, MilliSpan.class);
+    MilliSpan dspan = MilliSpan.fromJson(json);
     compareSpans(span, dspan);
   }
 
@@ -97,8 +94,7 @@
         spanId(-1L).
         traceId(-1L).build();
     String json = span.toJson();
-    ObjectMapper mapper = new ObjectMapper();
-    MilliSpan dspan = mapper.readValue(json, MilliSpan.class);
+    MilliSpan dspan = MilliSpan.fromJson(json);
     compareSpans(span, dspan);
   }
 
@@ -114,8 +110,7 @@
         spanId(random.nextLong()).
         traceId(random.nextLong()).build();
     String json = span.toJson();
-    ObjectMapper mapper = new ObjectMapper();
-    MilliSpan dspan = mapper.readValue(json, MilliSpan.class);
+    MilliSpan dspan = MilliSpan.fromJson(json);
     compareSpans(span, dspan);
   }
 
@@ -140,8 +135,7 @@
     builder.timeline(timeline);
     MilliSpan span = builder.build();
     String json = span.toJson();
-    ObjectMapper mapper = new ObjectMapper();
-    MilliSpan dspan = mapper.readValue(json, MilliSpan.class);
+    MilliSpan dspan = MilliSpan.fromJson(json);
     compareSpans(span, dspan);
   }
 
@@ -149,8 +143,7 @@
   public void testJsonSerializationWithFieldsNotSet() throws Exception {
     MilliSpan span = new MilliSpan.Builder().build();
     String json = span.toJson();
-    ObjectMapper mapper = new ObjectMapper();
-    MilliSpan dspan = mapper.readValue(json, MilliSpan.class);
+    MilliSpan dspan = MilliSpan.fromJson(json);
     compareSpans(span, dspan);
   }
 }
diff --git a/htrace-htraced/src/test/java/org/apache/htrace/impl/TestHTracedRESTReceiver.java b/htrace-htraced/src/test/java/org/apache/htrace/impl/TestHTracedRESTReceiver.java
index 9a01005..a6faa02 100644
--- a/htrace-htraced/src/test/java/org/apache/htrace/impl/TestHTracedRESTReceiver.java
+++ b/htrace-htraced/src/test/java/org/apache/htrace/impl/TestHTracedRESTReceiver.java
@@ -24,7 +24,6 @@
 import java.io.File;
 import java.net.URL;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.htrace.HTraceConfiguration;
@@ -160,8 +159,7 @@
                 return false;
               }
               LOG.info("Got " + content + " for span " + i);
-              ObjectMapper mapper = new ObjectMapper();
-              MilliSpan dspan = mapper.readValue(content, MilliSpan.class);
+              MilliSpan dspan = MilliSpan.fromJson(content);
               assertEquals((long)i, dspan.getSpanId());
               // Every span should have the process ID we set in the
               // configuration... except for the last span, which had
