diff --git a/htrace-core/src/main/java/org/apache/htrace/HTraceConfiguration.java b/htrace-core/src/main/java/org/apache/htrace/HTraceConfiguration.java
index a5f244b..f674e0d 100644
--- a/htrace-core/src/main/java/org/apache/htrace/HTraceConfiguration.java
+++ b/htrace-core/src/main/java/org/apache/htrace/HTraceConfiguration.java
@@ -48,6 +48,18 @@
     return new MapConf(conf);
   }
 
+  static HTraceConfiguration fromKeyValuePairs(String... pairs) {
+    if ((pairs.length % 2) != 0) {
+      throw new RuntimeException("You must specify an equal number of keys " +
+          "and values.");
+    }
+    Map<String, String> conf = new HashMap<String, String>();
+    for (int i = 0; i < pairs.length; i+=2) {
+      conf.put(pairs[i], pairs[i + 1]);
+    }
+    return new MapConf(conf);
+  }
+
   public abstract String get(String key);
 
   public abstract String get(String key, String defaultValue);
diff --git a/htrace-core/src/main/java/org/apache/htrace/SamplerFactory.java b/htrace-core/src/main/java/org/apache/htrace/SamplerFactory.java
new file mode 100644
index 0000000..84b52f1
--- /dev/null
+++ b/htrace-core/src/main/java/org/apache/htrace/SamplerFactory.java
@@ -0,0 +1,73 @@
+/*
+ * 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;
+
+import java.lang.reflect.Constructor;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.htrace.impl.AlwaysSampler;
+import org.apache.htrace.impl.NeverSampler;
+
+public class SamplerFactory {
+  private final static String SAMPLER_CONF_KEY = "sampler";
+  private final static ClassLoader classLoader =
+      SamplerFactory.class.getClassLoader();
+  private final HTraceConfiguration conf;
+  private static final Log LOG = LogFactory.getLog(SamplerFactory.class);
+
+  public SamplerFactory(HTraceConfiguration conf) {
+    this.conf = conf;
+  }
+
+  public Sampler build() {
+    String str = conf.get(SAMPLER_CONF_KEY);
+    if (str.isEmpty()) {
+      return NeverSampler.INSTANCE;
+    }
+    if (!str.contains(".")) {
+      str = "org.apache.htrace.impl." + str;
+    }
+    Class cls = null;
+    try {
+      cls = classLoader.loadClass(str);
+    } catch (ClassNotFoundException e) {
+      LOG.error("SamplerFactory cannot find sampler class " + str +
+          ": falling back on NeverSampler.");
+      return NeverSampler.INSTANCE;
+    }
+    Constructor<Sampler> ctor = null;
+    try {
+      ctor = cls.getConstructor(HTraceConfiguration.class);
+    } catch (NoSuchMethodException e) {
+      LOG.error("SamplerFactory cannot find a constructor for class " + str +
+          "which takes an HTraceConfiguration.  Falling back on " +
+          "NeverSampler.");
+      return NeverSampler.INSTANCE;
+    }
+    try {
+      return ctor.newInstance(conf);
+    } catch (ReflectiveOperationException e) {
+      LOG.error("SamplerFactory reflection error when constructing " + str +
+          ".  Falling back on NeverSampler.", e);
+      return NeverSampler.INSTANCE;
+    } catch (Throwable e) {
+      LOG.error("SamplerFactory constructor error when constructing " + str +
+          ".  Falling back on NeverSampler.", e);
+      return NeverSampler.INSTANCE;
+    }
+  }
+}
diff --git a/htrace-core/src/main/java/org/apache/htrace/impl/AlwaysSampler.java b/htrace-core/src/main/java/org/apache/htrace/impl/AlwaysSampler.java
index 8c90eff..69e3aff 100644
--- a/htrace-core/src/main/java/org/apache/htrace/impl/AlwaysSampler.java
+++ b/htrace-core/src/main/java/org/apache/htrace/impl/AlwaysSampler.java
@@ -16,13 +16,14 @@
  */
 package org.apache.htrace.impl;
 
+import org.apache.htrace.HTraceConfiguration;
 import org.apache.htrace.Sampler;
 
 public final class AlwaysSampler implements Sampler<Object> {
 
-  public static final AlwaysSampler INSTANCE = new AlwaysSampler();
+  public static final AlwaysSampler INSTANCE = new AlwaysSampler(null);
 
-  private AlwaysSampler() {
+  public AlwaysSampler(HTraceConfiguration conf) {
   }
 
   @Override
diff --git a/htrace-core/src/main/java/org/apache/htrace/impl/CountSampler.java b/htrace-core/src/main/java/org/apache/htrace/impl/CountSampler.java
index 78e155c..03b444b 100644
--- a/htrace-core/src/main/java/org/apache/htrace/impl/CountSampler.java
+++ b/htrace-core/src/main/java/org/apache/htrace/impl/CountSampler.java
@@ -16,6 +16,7 @@
  */
 package org.apache.htrace.impl;
 
+import org.apache.htrace.HTraceConfiguration;
 import org.apache.htrace.Sampler;
 
 import java.util.Random;
@@ -24,14 +25,15 @@
  * Sampler that returns true every N calls.
  */
 public class CountSampler implements Sampler<Object> {
+  private final static String SAMPLER_FREQUENCY_CONF_KEY = "sampler.frequency";
 
   final static Random random = new Random();
 
   final long frequency;
   long count = random.nextLong();
 
-  public CountSampler(long frequency) {
-    this.frequency = frequency;
+  public CountSampler(HTraceConfiguration conf) {
+    this.frequency = Long.parseLong(conf.get(SAMPLER_FREQUENCY_CONF_KEY), 10);
   }
 
   @Override
diff --git a/htrace-core/src/main/java/org/apache/htrace/impl/NeverSampler.java b/htrace-core/src/main/java/org/apache/htrace/impl/NeverSampler.java
index 20233d9..3ab192d 100644
--- a/htrace-core/src/main/java/org/apache/htrace/impl/NeverSampler.java
+++ b/htrace-core/src/main/java/org/apache/htrace/impl/NeverSampler.java
@@ -16,13 +16,14 @@
  */
 package org.apache.htrace.impl;
 
+import org.apache.htrace.HTraceConfiguration;
 import org.apache.htrace.Sampler;
 
 public final class NeverSampler implements Sampler<Object> {
 
-  public static final NeverSampler INSTANCE = new NeverSampler();
+  public static final NeverSampler INSTANCE = new NeverSampler(null);
 
-  private NeverSampler() {
+  public NeverSampler(HTraceConfiguration conf) {
   }
 
   @Override
diff --git a/htrace-core/src/main/java/org/apache/htrace/impl/ProbabilitySampler.java b/htrace-core/src/main/java/org/apache/htrace/impl/ProbabilitySampler.java
index a34c5ec..c53d914 100644
--- a/htrace-core/src/main/java/org/apache/htrace/impl/ProbabilitySampler.java
+++ b/htrace-core/src/main/java/org/apache/htrace/impl/ProbabilitySampler.java
@@ -16,17 +16,18 @@
  */
 package org.apache.htrace.impl;
 
+import org.apache.htrace.HTraceConfiguration;
 import org.apache.htrace.Sampler;
 
 import java.util.Random;
 
 public class ProbabilitySampler implements Sampler<Object> {
   public final double threshold;
-  private Random random;
+  private Random random = new Random();
+  private final static String SAMPLER_FRACTION_CONF_KEY = "sampler.fraction";
 
-  public ProbabilitySampler(double threshold) {
-    this.threshold = threshold;
-    random = new Random();
+  public ProbabilitySampler(HTraceConfiguration conf) {
+    this.threshold = Double.parseDouble(conf.get(SAMPLER_FRACTION_CONF_KEY));
   }
 
   @Override
diff --git a/htrace-core/src/main/java/org/apache/htrace/impl/TrueIfTracingSampler.java b/htrace-core/src/main/java/org/apache/htrace/impl/TrueIfTracingSampler.java
index 69598ba..7be7fc9 100644
--- a/htrace-core/src/main/java/org/apache/htrace/impl/TrueIfTracingSampler.java
+++ b/htrace-core/src/main/java/org/apache/htrace/impl/TrueIfTracingSampler.java
@@ -16,6 +16,7 @@
  */
 package org.apache.htrace.impl;
 
+import org.apache.htrace.HTraceConfiguration;
 import org.apache.htrace.Sampler;
 import org.apache.htrace.Trace;
 
@@ -24,9 +25,10 @@
  */
 public class TrueIfTracingSampler implements Sampler<Object> {
 
-  public static final TrueIfTracingSampler INSTANCE = new TrueIfTracingSampler();
+  public static final TrueIfTracingSampler INSTANCE =
+    new TrueIfTracingSampler(null);
 
-  private TrueIfTracingSampler() {
+  public TrueIfTracingSampler(HTraceConfiguration conf) {
   }
 
   @Override
diff --git a/htrace-core/src/test/java/org/apache/htrace/TestCountSampler.java b/htrace-core/src/test/java/org/apache/htrace/TestCountSampler.java
index 41c06a3..1cc7753 100644
--- a/htrace-core/src/test/java/org/apache/htrace/TestCountSampler.java
+++ b/htrace-core/src/test/java/org/apache/htrace/TestCountSampler.java
@@ -16,6 +16,7 @@
  */
 package org.apache.htrace;
 
+import org.apache.htrace.HTraceConfiguration;
 import org.apache.htrace.impl.CountSampler;
 import org.junit.Assert;
 import org.junit.Test;
@@ -24,8 +25,10 @@
 
   @Test
   public void testNext() {
-    CountSampler half = new CountSampler(2);
-    CountSampler hundred = new CountSampler(100);
+    CountSampler half = new CountSampler(HTraceConfiguration.
+        fromKeyValuePairs("sampler.frequency", "2"));
+    CountSampler hundred = new CountSampler(HTraceConfiguration.
+        fromKeyValuePairs("sampler.frequency", "100"));
     int halfCount = 0;
     int hundredCount = 0;
     for (int i = 0; i < 200; i++) {
diff --git a/htrace-core/src/test/java/org/apache/htrace/TestSampler.java b/htrace-core/src/test/java/org/apache/htrace/TestSampler.java
index 81b965e..265d603 100644
--- a/htrace-core/src/test/java/org/apache/htrace/TestSampler.java
+++ b/htrace-core/src/test/java/org/apache/htrace/TestSampler.java
@@ -16,15 +16,37 @@
  */
 package org.apache.htrace;
 
+import java.util.HashMap;
+import java.util.Map;
 import org.apache.htrace.Sampler;
 import org.apache.htrace.Trace;
 import org.apache.htrace.TraceInfo;
 import org.apache.htrace.TraceScope;
+import org.apache.htrace.impl.AlwaysSampler;
+import org.apache.htrace.impl.NeverSampler;
 import org.junit.Assert;
 import org.junit.Test;
 
 public class TestSampler {
   @Test
+  public void testSamplerFactory() {
+    Sampler alwaysSampler = new SamplerFactory(
+        HTraceConfiguration.fromKeyValuePairs("sampler", "AlwaysSampler")).
+        build();
+    Assert.assertEquals(AlwaysSampler.class, alwaysSampler.getClass());
+
+    Sampler neverSampler = new SamplerFactory(
+        HTraceConfiguration.fromKeyValuePairs("sampler", "NeverSampler")).
+        build();
+    Assert.assertEquals(NeverSampler.class, neverSampler.getClass());
+
+    Sampler neverSampler2 = new SamplerFactory(HTraceConfiguration.
+        fromKeyValuePairs("sampler", "NonExistentSampler")).
+        build();
+    Assert.assertEquals(NeverSampler.class, neverSampler2.getClass());
+  }
+
+  @Test
   public void testParamterizedSampler() {
     TestParamSampler sampler = new TestParamSampler();
     TraceScope s = Trace.startSpan("test", sampler, 1);
