Index: /branches/reconfiguration/platforms/tsar_generic_iob/tsar_iob_cluster/caba/metadata/tsar_iob_cluster.sd
===================================================================
--- /branches/reconfiguration/platforms/tsar_generic_iob/tsar_iob_cluster/caba/metadata/tsar_iob_cluster.sd	(revision 850)
+++ /branches/reconfiguration/platforms/tsar_generic_iob/tsar_iob_cluster/caba/metadata/tsar_iob_cluster.sd	(revision 851)
@@ -78,8 +78,8 @@
               dspin_rsp_width    = parameter.Reference('dspin_int_rsp_width')),
 
-        Uses('caba:virtual_dspin_router',
+        Uses('caba:dspin_router',
               flit_width         = parameter.Reference('dspin_int_cmd_width')),
 
-        Uses('caba:virtual_dspin_router',
+        Uses('caba:dspin_router',
               flit_width         = parameter.Reference('dspin_int_rsp_width')),
 
Index: /branches/reconfiguration/platforms/tsar_generic_iob/tsar_iob_cluster/caba/source/include/tsar_iob_cluster.h
===================================================================
--- /branches/reconfiguration/platforms/tsar_generic_iob/tsar_iob_cluster/caba/source/include/tsar_iob_cluster.h	(revision 850)
+++ /branches/reconfiguration/platforms/tsar_generic_iob/tsar_iob_cluster/caba/source/include/tsar_iob_cluster.h	(revision 851)
@@ -27,5 +27,4 @@
 #include "vci_dspin_target_wrapper.h"
 #include "dspin_router.h"
-#include "virtual_dspin_router.h"
 #include "vci_multi_dma.h"
 #include "vci_mem_cache.h"
@@ -164,6 +163,6 @@
     DspinLocalCrossbar<dspin_int_cmd_width>*          int_xbar_clack_c;
 
-    VirtualDspinRouter<dspin_int_cmd_width>*          int_router_cmd;
-    VirtualDspinRouter<dspin_int_rsp_width>*          int_router_rsp;
+    DspinRouter<dspin_int_cmd_width>**                int_router_cmd;
+    DspinRouter<dspin_int_rsp_width>**                int_router_rsp;
 
     VciSimpleRam<vci_param_ext>*                      xram;
@@ -244,4 +243,6 @@
                     bool                               iob0_debug_ok );
 
+    ~TsarIobCluster();
+
   protected:
 
Index: /branches/reconfiguration/platforms/tsar_generic_iob/tsar_iob_cluster/caba/source/src/tsar_iob_cluster.cpp
===================================================================
--- /branches/reconfiguration/platforms/tsar_generic_iob/tsar_iob_cluster/caba/source/src/tsar_iob_cluster.cpp	(revision 850)
+++ /branches/reconfiguration/platforms/tsar_generic_iob/tsar_iob_cluster/caba/source/src/tsar_iob_cluster.cpp	(revision 851)
@@ -295,21 +295,29 @@
 
     //////////////  INT ROUTER(S)
-    std::ostringstream s_int_router_cmd;
-    s_int_router_cmd << "router_cmd_" << x_id << "_" << y_id;
-    int_router_cmd = new VirtualDspinRouter<dspin_int_cmd_width>(
-                     s_int_router_cmd.str().c_str(),
-                     x_id,y_id,                    // coordinate in the mesh
-                     x_width, y_width,             // x & y fields width
-                     3,                            // nb virtual channels
-                     4, 4);                        // input & output fifo depths
-
-    std::ostringstream s_int_router_rsp;
-    s_int_router_rsp << "router_rsp_" << x_id << "_" << y_id;
-    int_router_rsp = new VirtualDspinRouter<dspin_int_rsp_width>(
-                     s_int_router_rsp.str().c_str(),
-                     x_id,y_id,                    // router coordinates in mesh
-                     x_width, y_width,             // x & y fields width
-                     2,                            // nb virtual channels
-                     4, 4);                        // input & output fifo depths
+    int_router_cmd = new DspinRouter<dspin_int_cmd_width>*[3];
+    for (int k = 0; k < 3; k++)
+    {
+        std::ostringstream s_int_router_cmd;
+        s_int_router_cmd << "router_cmd_" << x_id << "_" << y_id << "_" << k;
+        int_router_cmd[k] = new DspinRouter<dspin_int_cmd_width>(
+                s_int_router_cmd.str().c_str(),
+                x_id, y_id,
+                x_width, y_width,
+                4, 4,
+                (k == 1));
+    }
+
+    int_router_rsp = new DspinRouter<dspin_int_rsp_width>*[2];
+    for (int k = 0; k < 2; k++)
+    {
+        std::ostringstream s_int_router_rsp;
+        s_int_router_rsp << "router_rsp_" << x_id << "_" << y_id << "_" << k;
+        int_router_rsp[k] = new DspinRouter<dspin_int_rsp_width>(
+                s_int_router_rsp.str().c_str(),
+                x_id, y_id,
+                x_width, y_width,
+                4, 4,
+                false);
+    }
 
     //////////////  XRAM
@@ -416,36 +424,38 @@
 
     //////////////////////// internal CMD & RSP routers
-    int_router_cmd->p_clk                        (this->p_clk);
-    int_router_cmd->p_resetn                     (this->p_resetn);
-    int_router_rsp->p_clk                        (this->p_clk);
-    int_router_rsp->p_resetn                     (this->p_resetn);
-
-    for (int i = 0; i < 4; i++)
-    {
-        for(int k = 0; k < 3; k++)
+    for(int k = 0; k < 3; k++)
+    {
+        int_router_cmd[k]->p_clk                 (this->p_clk);
+        int_router_cmd[k]->p_resetn              (this->p_resetn);
+        for (int i = 0; i < 4; i++)
         {
-            int_router_cmd->p_out[i][k]          (this->p_dspin_int_cmd_out[i][k]);
-            int_router_cmd->p_in[i][k]           (this->p_dspin_int_cmd_in[i][k]);
+            int_router_cmd[k]->p_out[i]          (this->p_dspin_int_cmd_out[i][k]);
+            int_router_cmd[k]->p_in[i]           (this->p_dspin_int_cmd_in[i][k]);
         }
-
-        for(int k = 0; k < 2; k++)
+    }
+
+    for(int k = 0; k < 2; k++)
+    {
+        int_router_rsp[k]->p_clk                 (this->p_clk);
+        int_router_rsp[k]->p_resetn              (this->p_resetn);
+        for (int i = 0; i < 4; i++)
         {
-            int_router_rsp->p_out[i][k]          (this->p_dspin_int_rsp_out[i][k]);
-            int_router_rsp->p_in[i][k]           (this->p_dspin_int_rsp_in[i][k]);
+            int_router_rsp[k]->p_out[i]          (this->p_dspin_int_rsp_out[i][k]);
+            int_router_rsp[k]->p_in[i]           (this->p_dspin_int_rsp_in[i][k]);
         }
     }
 
     // local ports
-    int_router_cmd->p_out[4][0]                  (signal_int_dspin_cmd_g2l_d);
-    int_router_cmd->p_out[4][1]                  (signal_int_dspin_m2p_g2l_c);
-    int_router_cmd->p_out[4][2]                  (signal_int_dspin_clack_g2l_c);
-    int_router_cmd->p_in[4][0]                   (signal_int_dspin_cmd_l2g_d);
-    int_router_cmd->p_in[4][1]                   (signal_int_dspin_m2p_l2g_c);
-    int_router_cmd->p_in[4][2]                   (signal_int_dspin_clack_l2g_c);
-
-    int_router_rsp->p_out[4][0]                  (signal_int_dspin_rsp_g2l_d);
-    int_router_rsp->p_out[4][1]                  (signal_int_dspin_p2m_g2l_c);
-    int_router_rsp->p_in[4][0]                   (signal_int_dspin_rsp_l2g_d);
-    int_router_rsp->p_in[4][1]                   (signal_int_dspin_p2m_l2g_c);
+    int_router_cmd[0]->p_out[4]                  (signal_int_dspin_cmd_g2l_d);
+    int_router_cmd[1]->p_out[4]                  (signal_int_dspin_m2p_g2l_c);
+    int_router_cmd[2]->p_out[4]                  (signal_int_dspin_clack_g2l_c);
+    int_router_cmd[0]->p_in[4]                   (signal_int_dspin_cmd_l2g_d);
+    int_router_cmd[1]->p_in[4]                   (signal_int_dspin_m2p_l2g_c);
+    int_router_cmd[2]->p_in[4]                   (signal_int_dspin_clack_l2g_c);
+
+    int_router_rsp[0]->p_out[4]                  (signal_int_dspin_rsp_g2l_d);
+    int_router_rsp[1]->p_out[4]                  (signal_int_dspin_p2m_g2l_c);
+    int_router_rsp[0]->p_in[4]                   (signal_int_dspin_rsp_l2g_d);
+    int_router_rsp[1]->p_in[4]                   (signal_int_dspin_p2m_l2g_c);
 
     ///////////////////// CMD DSPIN  local crossbar direct
@@ -654,4 +664,19 @@
 } // end init
 
+tmpl(/**/)::~TsarIobCluster()
+{
+    for (int k = 0; k < 3; k++)
+    {
+        delete int_router_cmd[k];
+    }
+    delete [] int_router_cmd;
+
+    for (int k = 0; k < 2; k++)
+    {
+        delete int_router_rsp[k];
+    }
+    delete [] int_router_rsp;
+}
+
 }}
 
