diff --git a/host/lib/rfnoc/ddc_block_ctrl_impl.cpp b/host/lib/rfnoc/ddc_block_ctrl_impl.cpp
index 9247708..c57d1c4 100644
--- a/host/lib/rfnoc/ddc_block_ctrl_impl.cpp
+++ b/host/lib/rfnoc/ddc_block_ctrl_impl.cpp
@@ -39,7 +39,7 @@ public:
         );

         // Argument/prop tree hooks
-        for (size_t chan = 0; chan < get_input_ports().size(); chan++) {
+        for (size_t chan = 0; chan < get_output_ports().size(); chan++) {
             const double default_freq = get_arg<double>("freq", chan);
             _tree->access<double>(get_arg_path("freq/value", chan))
                 .set_coercer([this, chan](const double value){
@@ -145,7 +145,7 @@ public:
     {
         if (port == ANY_PORT) {
             port = 0;
-            for (size_t i = 0; i < get_input_ports().size(); i++) {
+            for (size_t i = 0; i < get_output_ports().size(); i++) {
                 if (_rx_streamer_active.count(i) and _rx_streamer_active.at(i)) {
                     port = i;
                     break;
@@ -173,8 +173,11 @@ public:
             const size_t chan
     ) {
         UHD_RFNOC_BLOCK_TRACE() << "ddc_block_ctrl_base::issue_stream_cmd()" ;
-
-        if (list_upstream_nodes().count(chan) == 0) {
+        size_t newchan = chan ;
+        if( get_output_ports().size() != get_input_ports().size() ) {
+            newchan = 0 ;
+        }
+        if (list_upstream_nodes().count(newchan) == 0 ) {
             UHD_LOGGER_INFO("RFNOC") << "No upstream blocks." ;
             return;
         }
@@ -182,16 +185,16 @@ public:
         uhd::stream_cmd_t stream_cmd = stream_cmd_;
         if (stream_cmd.stream_mode == uhd::stream_cmd_t::STREAM_MODE_NUM_SAMPS_AND_DONE or
             stream_cmd.stream_mode == uhd::stream_cmd_t::STREAM_MODE_NUM_SAMPS_AND_MORE) {
-            size_t decimation = get_arg<double>("input_rate", chan) / get_arg<double>("output_rate", chan);
+            size_t decimation = get_arg<double>("input_rate", newchan) / get_arg<double>("output_rate", chan);
             stream_cmd.num_samps *= decimation;
         }

         source_node_ctrl::sptr this_upstream_block_ctrl =
-                boost::dynamic_pointer_cast<source_node_ctrl>(list_upstream_nodes().at(chan).lock());
+                boost::dynamic_pointer_cast<source_node_ctrl>(list_upstream_nodes().at(newchan).lock());
         if (this_upstream_block_ctrl) {
             this_upstream_block_ctrl->issue_stream_cmd(
                     stream_cmd,
-                    get_upstream_port(chan)
+                    get_upstream_port(newchan)
             );
         }
     }
diff --git a/host/lib/usrp/device3/device3_io_impl.cpp b/host/lib/usrp/device3/device3_io_impl.cpp
index 490f10c..d6a1222 100644
--- a/host/lib/usrp/device3/device3_io_impl.cpp
+++ b/host/lib/usrp/device3/device3_io_impl.cpp
@@ -611,6 +611,7 @@ rx_streamer::sptr device3_impl::get_rx_stream(const stream_args_t &args_)
         args.args = chan_args[stream_i];
         size_t mb_index = block_id.get_device_no();
         size_t suggested_block_port = args.args.cast<size_t>("block_port", rfnoc::ANY_PORT);
+        size_t radio_block_port = args.args.cast<size_t>("radio_port", rfnoc::ANY_PORT) ;

         // Access to this channel's block control
         uhd::rfnoc::source_block_ctrl_base::sptr blk_ctrl =
@@ -700,7 +701,7 @@ rx_streamer::sptr device3_impl::get_rx_stream(const stream_args_t &args_)
         std::vector<boost::shared_ptr<uhd::rfnoc::radio_ctrl> > upstream_radio_nodes = blk_ctrl->find_upstream_node<uhd::rfnoc::radio_ctrl>();
         UHD_RX_STREAMER_LOG() << "Number of upstream radio nodes: " << upstream_radio_nodes.size();
         for(const boost::shared_ptr<uhd::rfnoc::radio_ctrl> &node:  upstream_radio_nodes) {
-            node->sr_write(uhd::rfnoc::SR_RESP_OUT_DST_SID, xport.send_sid.get_src(), block_port);
+            node->sr_write(uhd::rfnoc::SR_RESP_OUT_DST_SID, xport.send_sid.get_src(), radio_block_port);
         }

         // Second, configure the streamer
