diff --git a/htrace-core4/src/main/java/org/apache/htrace/core/SpanReceiver.java b/htrace-core4/src/main/java/org/apache/htrace/core/SpanReceiver.java
index a955ddf..026685e 100644
--- a/htrace-core4/src/main/java/org/apache/htrace/core/SpanReceiver.java
+++ b/htrace-core4/src/main/java/org/apache/htrace/core/SpanReceiver.java
@@ -39,7 +39,7 @@
   public static class Builder {
     private static final Log LOG = LogFactory.getLog(Builder.class);
 
-    private final static String DEFAULT_PACKAGE = "org.apache.htrace.core";
+    final static String DEFAULT_PACKAGE = "org.apache.htrace.core";
     private final HTraceConfiguration conf;
     private boolean logErrors;
     private String className;
diff --git a/htrace-core4/src/main/java/org/apache/htrace/core/TracerPool.java b/htrace-core4/src/main/java/org/apache/htrace/core/TracerPool.java
index 26e39f5..26acc64 100644
--- a/htrace-core4/src/main/java/org/apache/htrace/core/TracerPool.java
+++ b/htrace-core4/src/main/java/org/apache/htrace/core/TracerPool.java
@@ -226,9 +226,11 @@
    */
   public synchronized SpanReceiver loadReceiverType(String className,
       HTraceConfiguration conf, ClassLoader classLoader) {
+    String receiverClass = className.contains(".") ?
+        className : SpanReceiver.Builder.DEFAULT_PACKAGE + "." + className;
     SpanReceiver[] receivers = curReceivers;
     for (SpanReceiver receiver : receivers) {
-      if (receiver.getClass().getName().equals(className)) {
+      if (receiver.getClass().getName().equals(receiverClass)) {
         LOG.trace(toString() + ": returning a reference to receiver " +
                   receiver.toString());
         return receiver;
@@ -282,4 +284,4 @@
   public String toString() {
     return "TracerPool(" + name + ")";
   }
-}
\ No newline at end of file
+}
diff --git a/htrace-core4/src/test/java/org/apache/htrace/core/TestTracerPool.java b/htrace-core4/src/test/java/org/apache/htrace/core/TestTracerPool.java
new file mode 100644
index 0000000..daf8ac1
--- /dev/null
+++ b/htrace-core4/src/test/java/org/apache/htrace/core/TestTracerPool.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.htrace.core;
+
+import static org.junit.Assert.assertTrue;
+import org.junit.Test;
+
+public class TestTracerPool {
+  HTraceConfiguration conf = HTraceConfiguration.EMPTY;
+  ClassLoader loader = TestTracerPool.class.getClassLoader();
+
+  @Test
+  public void testLoadReceiver() {
+    addThenLoadReceiverType("org.apache.htrace.core.POJOSpanReceiver");
+  }
+
+  @Test
+  public void testLoadReceiverWithSimpleName() {
+    addThenLoadReceiverType("POJOSpanReceiver");
+  }
+
+  public void addThenLoadReceiverType(String className) {
+    TracerPool pool = new TracerPool(className);
+    SpanReceiver receiver = new SpanReceiver.Builder(conf).
+        className(className).
+        build();
+    pool.addReceiver(receiver);
+    assertTrue(receiver == pool.loadReceiverType(className, conf, loader));
+  }
+}
