diff --git a/grc/gen_bladerf_blocks.py b/grc/gen_bladerf_blocks.py
index 746ffc02682857bfb1af48d9194ccd0cb99102f1..7f7d1ab8b0fc161b08f253bf95c721e628852ece 100644
--- a/grc/gen_bladerf_blocks.py
+++ b/grc/gen_bladerf_blocks.py
@@ -121,27 +121,28 @@ inputs:
 - domain: message
   id: command
   optional: true
-% if sourk == 'source':
+  
 - domain: message
   id: pmic_in
   optional: true
-
+  
+% if sourk == 'source':
 outputs:
-- domain: message
-  id: pmic_out
-  optional: true
+
 % endif
 - domain: stream
   dtype: ${'$'}{type.type}
   multiplicity: ${'$'}{nchan}
 % if sourk == 'sink':
-
 outputs:
 - domain: message
   id: async_msgs
   optional: true
 % endif
 
+- domain: message
+  id: pmic_out
+  optional: true
 
 
 templates:
diff --git a/lib/bladerf/bladerf_sink_c.cc b/lib/bladerf/bladerf_sink_c.cc
index 6ee3acd927fdd290e33caf4d5e8b0026073329b5..928f8430c48836e34f9ef1cf6e25b062d7fddc1e 100644
--- a/lib/bladerf/bladerf_sink_c.cc
+++ b/lib/bladerf/bladerf_sink_c.cc
@@ -73,6 +73,18 @@ bladerf_sink_c::bladerf_sink_c(const std::string &args) :
   _in_burst(false),
   _running(false)
 {
+    message_port_register_in(pmt::mp("pmic_in"));
+    message_port_register_out(pmt::mp("pmic_out"));
+
+    set_msg_handler(pmt::mp("pmic_in"),[=](const pmt::pmt_t & msg)
+    {
+        auto type = pmt::symbol_to_string(msg);
+        auto value = get_pmic_value(type);
+        auto pair = pmt::cons(msg,pmt::string_to_symbol(value));
+        message_port_pub(pmt::mp("pmic_out"), pair);
+
+    });
+
   dict_t dict = params_to_dict(args);
 
   /* Perform src/sink agnostic initializations */
diff --git a/lib/sink_impl.cc b/lib/sink_impl.cc
index 2d3b1058171f8f074d9a63ac55753676a6cac9b6..126e3d7aaf14c33abdc14f27e7bad4d3f07c15bf 100644
--- a/lib/sink_impl.cc
+++ b/lib/sink_impl.cc
@@ -27,12 +27,17 @@ namespace gr {
                         gr::io_signature::make(0, 0, 0))
       , sample_rate_(0)
     {
+        message_port_register_hier_in(pmt::mp("pmic_in"));
+        message_port_register_hier_out(pmt::mp("pmic_out"));
+
         auto dev_list = bladerf_sink_c::get_devices();
         if(dev_list.size() == 0)
             throw std::runtime_error("No supported devices found "
                                      "(check the connection and/or udev rules).");
 
         device_ = make_bladerf_sink_c( args ); //todo: get by id from block args
+        msg_connect(self(), pmt::mp("pmic_in"), device_, pmt::mp("pmic_in"));
+        msg_connect(device_,pmt::mp("pmic_out"), self(), pmt::mp("pmic_out"));
     }
 
     /*