diff --git a/lib/bladerf/bladerf_common.cc b/lib/bladerf/bladerf_common.cc
index ed9a8f2136d9dca6aba3b9c5fa33ab3af4f73a3b..244d83d944ee11530804b909a80e1f664b8f238f 100644
--- a/lib/bladerf/bladerf_common.cc
+++ b/lib/bladerf/bladerf_common.cc
@@ -281,6 +281,15 @@ void bladerf_common::init(dict_t const &dict, bladerf_direction direction)
     }
   }
 
+  if(dict.count("ref_clk"))
+  {
+      auto freq = boost::lexical_cast<int>(_get(dict,"ref_clk"));
+      if(freq)
+      {
+          init_refclk(freq);
+      }
+  }
+
   /* Show some info about the device we've opened */
   print_device_info();
 
@@ -421,6 +430,37 @@ size_t bladerf_common::get_max_channels(bladerf_direction direction)
 #endif
 }
 
+void bladerf_common::init_refclk(int freq)
+{
+    const bladerf_range * range = nullptr;
+    auto status = bladerf_get_pll_refclk_range(_dev.get(),&range);
+    if (status != 0) {
+      BLADERF_WARNING("bladerf_get_pll_refclk_range: "
+                      << bladerf_strerror(status));
+    }
+    if (freq < range->min || freq > range->max)
+    {
+        BLADERF_WARNING(freq <<" not in ref_clk range("
+                        << range->min << " - "<< range->max <<")");
+    }
+    else
+    {
+        status = bladerf_set_pll_enable(_dev.get(), true);
+        if (status != 0) {
+          BLADERF_WARNING("bladerf_set_pll_enable: "
+                          << bladerf_strerror(status));
+        }
+        else
+        {
+            status = bladerf_set_pll_refclk(_dev.get(), freq);
+            if (status != 0) {
+              BLADERF_WARNING("bladerf_set_pll_refclk: "
+                              << bladerf_strerror(status));
+            }
+        }
+    }
+}
+
 void bladerf_common::set_channel_enable(bladerf_channel ch, bool enable)
 {
   _enables[ch] = enable;
diff --git a/lib/bladerf/bladerf_common.h b/lib/bladerf/bladerf_common.h
index 4ed1c437eebdfbe77793cd3f99b768de12dba036..eca363c2cfffa0ec94b9119cb56f85cd030bbbd1 100644
--- a/lib/bladerf/bladerf_common.h
+++ b/lib/bladerf/bladerf_common.h
@@ -163,6 +163,8 @@ protected:
   /* Get the maximum number of channels supported in a given direction */
   size_t get_max_channels(bladerf_direction direction);
 
+  void init_refclk(int freq);
+
   void set_channel_enable(bladerf_channel ch, bool enable);
   bool get_channel_enable(bladerf_channel ch);