Index: /trunk/modules/vci_local_ring_network_2/caba/source/src/vci_local_ring_network_2.cpp
===================================================================
--- /trunk/modules/vci_local_ring_network_2/caba/source/src/vci_local_ring_network_2.cpp	(revision 32)
+++ /trunk/modules/vci_local_ring_network_2/caba/source/src/vci_local_ring_network_2.cpp	(revision 33)
@@ -67,10 +67,11 @@
 	std::ostringstream o;
 	o << name() << "_hg_init";
-
-        m_half_gateway_initiator = new half_gateway_initiator_t(o.str().c_str(), false, half_gateway_fifo_depth, mt, ringid, false);
+        bool alloc_hg_init = (m_nai == 0);
+        m_half_gateway_initiator = new half_gateway_initiator_t(o.str().c_str(), alloc_hg_init, half_gateway_fifo_depth, mt, ringid, false);
 
 	std::ostringstream p;
 	p << name() << "_hg_target";
-        m_half_gateway_target    = new half_gateway_target_t(p.str().c_str(), false, half_gateway_fifo_depth, mt, ringid, false);
+	bool alloc_hg_target = (m_nat == 0);
+        m_half_gateway_target    = new half_gateway_target_t(p.str().c_str(), alloc_hg_target, half_gateway_fifo_depth, mt, ringid, false);
 
         for(size_t i=0; i<m_nai; ++i) {
@@ -125,7 +126,18 @@
         }
 
+if(m_nai > 0) {
         for(size_t i=0;i<m_nat;i++){
                 m_ring_target[i]->update_ring_signals(m_ring_signal[m_nai+i-1], m_ring_signal[m_nai+i] );
         }
+ }
+else {
+
+        for(size_t i=0;i<m_nat;i++){
+                size_t h = 0;
+                if(i == 0) h = m_ns-1;
+                else h = i-1;
+                m_ring_target[i]->update_ring_signals(m_ring_signal[h], m_ring_signal[i] );
+        }
+}
 
         m_half_gateway_initiator->update_ring_signals(m_ring_signal[m_nai+m_nat-1], m_ring_signal[m_nai+m_nat] );
@@ -141,7 +153,19 @@
         }
 
+if(m_nai > 0) {
         for(size_t i=0;i<m_nat;i++){
                 m_ring_target[i]->update_ring_signals(m_ring_signal[m_nai+i-1], m_ring_signal[m_nai+i] );
         }
+ }
+else {
+
+        for(size_t i=0;i<m_nat;i++){
+                size_t h = 0;
+                if(i == 0) h = m_ns-1;
+                else h = i-1;
+                m_ring_target[i]->update_ring_signals(m_ring_signal[h], m_ring_signal[i] );
+        }
+}
+
 
         m_half_gateway_initiator->update_ring_signals(m_ring_signal[m_nai+m_nat-1], m_ring_signal[m_nai+m_nat] );
@@ -158,7 +182,19 @@
         }
 
+if(m_nai > 0) {
         for(size_t i=0;i<m_nat;i++){
                 m_ring_target[i]->update_ring_signals(m_ring_signal[m_nai+i-1], m_ring_signal[m_nai+i] );
         }
+ }
+else {
+
+        for(size_t i=0;i<m_nat;i++){
+                size_t h = 0;
+                if(i == 0) h = m_ns-1;
+                else h = i-1;
+                m_ring_target[i]->update_ring_signals(m_ring_signal[h], m_ring_signal[i] );
+        }
+}
+
 
         m_half_gateway_initiator->update_ring_signals(m_ring_signal[m_nai+m_nat-1], m_ring_signal[m_nai+m_nat] );
@@ -176,8 +212,20 @@
                 m_ring_initiator[i]->transition(p_to_initiator[i], m_ring_signal[h]);
         }
+
+if(m_nai > 0) {
         for(size_t t=0;t<m_nat;t++) {
                 m_ring_target[t]->transition(p_to_target[t], m_ring_signal[m_nai+t-1]);
         }
-
+}
+else {
+
+        for(size_t t=0;t<m_nat;t++) {
+		size_t h = 0;
+                if(t == 0) h = m_ns-1;
+                else h = t-1;
+
+                m_ring_target[t]->transition(p_to_target[t], m_ring_signal[h]);
+        }
+}
         m_half_gateway_initiator->transition(p_gate_initiator, m_ring_signal[m_nai+m_nat-1]);
         m_half_gateway_target->transition(p_gate_target, m_ring_signal[m_nai+m_nat]);
