diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
index 0743aa7ee712b487a7d2374b74b798c620bea42a..c5b103009bbd289d49f330348cd37b364ded44f3 100644
--- a/lib/CMakeLists.txt
+++ b/lib/CMakeLists.txt
@@ -32,6 +32,8 @@ add_library(gnuradio-bladeRF SHARED ${bladeRF_sources})
 target_link_libraries(gnuradio-bladeRF ${gr_bladerf_libs})
 
 target_include_directories(gnuradio-bladeRF
+    PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
+    PUBLIC ${Boost_INCLUDE_DIRS}
     PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
     PUBLIC $<INSTALL_INTERFACE:include>
   )
diff --git a/lib/bladerf/bladerf_common.h b/lib/bladerf/bladerf_common.h
index 741b1e75b4e90daf4ddddc0cbb5862eccbb7646f..f2c1b8c980e3201a3011203f926b7ca672639959 100644
--- a/lib/bladerf/bladerf_common.h
+++ b/lib/bladerf/bladerf_common.h
@@ -30,7 +30,7 @@
 
 #include <libbladeRF.h>
 
-#include "osmosdr/ranges.h"
+#include "bladeRF/ranges.h"
 #include "arg_helpers.h"
 
 #include "bladerf_compat.h"
diff --git a/lib/source_impl.cc b/lib/source_impl.cc
index f46eb1682e66ba608f05d7aac2c5ae09f8ebbb4a..3af33403694dfbfb6c6b7804700da44abfb8af75 100644
--- a/lib/source_impl.cc
+++ b/lib/source_impl.cc
@@ -9,6 +9,8 @@
 #include "source_impl.h"
 #include "arg_helpers.h"
 
+
+
 namespace gr {
   namespace bladeRF {
 
@@ -25,11 +27,34 @@ namespace gr {
               gr::io_signature::make(0,0,0),
               args_to_io_signature(args))
     {
+        //in osmocom args for make source is strings,
+        //therefore all params is strings
+        //todo: change to vector<bladerf_devinfo>
 
-      //connect(self(), 0, d_firstblock, 0);
-      // connect other blocks
-      //connect(d_lastblock, 0, self(), 0);
-    }
+        auto dev_list = bladerf_source_c::get_devices();
+        if(dev_list.size() == 0)
+            throw std::runtime_error("No supported devices found "
+                                     "(check the connection and/or udev rules).");
+
+        dev_ = make_bladerf_source_c( dev_list[0] ); //todo: get by id from block args
+        for (size_t i = 0; i < dev_->get_num_channels(); i++) {
+  #ifdef HAVE_IQBALANCE
+          gr::iqbalance::optimize_c::sptr iq_opt = gr::iqbalance::optimize_c::make( 0 );
+          gr::iqbalance::fix_cc::sptr     iq_fix = gr::iqbalance::fix_cc::make();
+
+          connect(block, i, iq_fix, 0);
+          connect(iq_fix, 0, self(), channel++);
+
+          connect(block, i, iq_opt, 0);
+          msg_connect(iq_opt, "iqbal_corr", iq_fix, "iqbal_corr");
+
+          _iq_opt.push_back( iq_opt.get() );
+          _iq_fix.push_back( iq_fix.get() );
+  #else
+          connect(dev_, i, self(), i);
+  #endif
+        }
+     }
 
     /*
      * Our virtual destructor.
@@ -38,9 +63,9 @@ namespace gr {
     {
     }
 
-    size_t source_impl::get_num_channels() override
+    size_t source_impl::get_num_channels()
     {
-
+        return 0;
     }
 
 
diff --git a/python/bindings/source_python.cc b/python/bindings/source_python.cc
index 1e5ba73aac698bb7749020105e498f6d2c01e135..f0d73e29ae3cc8fbb1bcc3a543d79a0735779d98 100644
--- a/python/bindings/source_python.cc
+++ b/python/bindings/source_python.cc
@@ -14,7 +14,7 @@
 /* BINDTOOL_GEN_AUTOMATIC(0)                                                       */
 /* BINDTOOL_USE_PYGCCXML(0)                                                        */
 /* BINDTOOL_HEADER_FILE(source.h)                                        */
-/* BINDTOOL_HEADER_FILE_HASH(66db645c2a179be37e33d0fa63c60b38)                     */
+/* BINDTOOL_HEADER_FILE_HASH(0b4f4e854a322e9c5fccafa1563ff0cb)                     */
 /***********************************************************************************/
 
 #include <pybind11/complex.h>