diff --git a/src/main/java/ddtranslatorSoclib/AvatarChannel.java b/src/main/java/ddtranslatorSoclib/AvatarChannel.java
index 4412a0279a696f4b09ccce24db384a3b3498a28d..d52a80f8c7bb8cccea9982db640c27bfb4992d12 100755
--- a/src/main/java/ddtranslatorSoclib/AvatarChannel.java
+++ b/src/main/java/ddtranslatorSoclib/AvatarChannel.java
@@ -78,7 +78,7 @@ public class AvatarChannel extends AvatarMappedObject{
       return channelName;
       } 
 
-    public int getNo_cluster(){
+    public int getClusterIndex(){
       return no_cluster;
     } 
 
@@ -86,4 +86,4 @@ public class AvatarChannel extends AvatarMappedObject{
       return monitored;
     } 
 
-}
\ No newline at end of file
+}
diff --git a/src/main/java/ddtranslatorSoclib/AvatarCoproMWMR.java b/src/main/java/ddtranslatorSoclib/AvatarCoproMWMR.java
index 7c5f5891abf2f0a2d0355378c7a9487a3fd1597c..1305d904fdd043cdd7203f3b2e88a89ba36c995c 100755
--- a/src/main/java/ddtranslatorSoclib/AvatarCoproMWMR.java
+++ b/src/main/java/ddtranslatorSoclib/AvatarCoproMWMR.java
@@ -61,14 +61,14 @@ public class AvatarCoproMWMR extends AvatarComponent{
     private int nStatus;
     private boolean useLLSC; 
     private int coprocType;
-    private int cluster_address;
+    private int cluster_index;
 
     private AvatarConnectingPoint[] connectingsPoints;
     private int nbConnectingPoint = 16 ;
 
-    private LinkedList<AvatarTask> tasksMapped;// DG 21.09.
+    private LinkedList<AvatarTask> tasksMapped;
 
-    public AvatarCoproMWMR(String _coprocName,int srcid, int _srcid, int _tgtid, int _plaps, int _fifoToCoprocDepth,int _fifoFromCoprocDepth, int _nToCopro, int _nFromCopro, int _nConfig, int _nStatus, boolean _useLLSC, int _coprocType, int _cluster_address)
+    public AvatarCoproMWMR(String _coprocName,int srcid, int _srcid, int _tgtid, int _plaps, int _fifoToCoprocDepth,int _fifoFromCoprocDepth, int _nToCopro, int _nFromCopro, int _nConfig, int _nStatus, boolean _useLLSC, int _coprocType, int _cluster_index)
     {
       coprocName = _coprocName;
       srcid =  _srcid;
@@ -82,7 +82,7 @@ public class AvatarCoproMWMR extends AvatarComponent{
       nStatus = _nStatus;
       useLLSC = _useLLSC;
       coprocType = _coprocType;
-      cluster_address = _cluster_address ;
+      cluster_index = _cluster_index;
 	
       connectingsPoints = new AvatarConnectingPoint[nbConnectingPoint] ;
       tasksMapped = new LinkedList<AvatarTask>(); //DG 21.09.
@@ -114,8 +114,8 @@ public class AvatarCoproMWMR extends AvatarComponent{
 	}
 
 
-        public int getNo_cluster(){
-	    return cluster_address;
+        public int getClusterIndex(){
+	    return cluster_index;
 	}
     
 	public int getTgtid(){
@@ -156,7 +156,7 @@ public class AvatarCoproMWMR extends AvatarComponent{
     public int getCoprocType(){
 	return coprocType;
 	}
-    //DG 21.09.
+   
     public LinkedList<AvatarTask> getAllTasks(){
       return tasksMapped;
     }
diff --git a/src/main/java/ddtranslatorSoclib/AvatarRAM.java b/src/main/java/ddtranslatorSoclib/AvatarRAM.java
index 6307ec8212761830b3c7b8f534d953984b33856d..6bd1bce02608d14d67c12ca159448e7298c2d88a 100755
--- a/src/main/java/ddtranslatorSoclib/AvatarRAM.java
+++ b/src/main/java/ddtranslatorSoclib/AvatarRAM.java
@@ -85,9 +85,9 @@ public class AvatarRAM extends AvatarComponent{
       return no_target;
     }
 
-    public int getNo_cluster(){
+    public int getClusterIndex(){	
       return no_cluster;
-    }
+    } 
 
     public void setNo_ram(int _no_ram){
       no_ram = _no_ram;
diff --git a/src/main/java/ddtranslatorSoclib/AvatarTTY.java b/src/main/java/ddtranslatorSoclib/AvatarTTY.java
index a9ddce603395daa10ff31fae036d0f8fe0fbb4ba..ccfd520b223802569f85bde15d80957e29c961a0 100755
--- a/src/main/java/ddtranslatorSoclib/AvatarTTY.java
+++ b/src/main/java/ddtranslatorSoclib/AvatarTTY.java
@@ -80,7 +80,7 @@ public class AvatarTTY extends AvatarComponent {
       return no_target;
     }
 
-    public int getNo_cluster(){
+    public int getClusterIndex(){
       return no_cluster;
     } 
 
diff --git a/src/main/java/ddtranslatorSoclib/toTopCell/Declaration.java b/src/main/java/ddtranslatorSoclib/toTopCell/Declaration.java
index 9bc3c34c0dbd0724ce2fca83d512cae75ca9bda1..d738adec2bfc5fa7763da49a04eaf1fc9d48fb0c 100755
--- a/src/main/java/ddtranslatorSoclib/toTopCell/Declaration.java
+++ b/src/main/java/ddtranslatorSoclib/toTopCell/Declaration.java
@@ -84,6 +84,7 @@ public class Declaration
 	    AvatarComponent comp2 = my_p2.getComponent(); 
 	    if (comp1 instanceof AvatarCPU){ 
 		AvatarCPU comp1cpu = (AvatarCPU)comp1;
+		if(comp1cpu.getClusterIndex()==cluster_no)
 		cpus++;
 	    }		    		
 	    
@@ -101,7 +102,8 @@ public static int rams_in_cluster(AvatarddSpecification dd,int cluster_no){
 	    AvatarComponent comp1 = my_p1.getComponent();
 	    AvatarComponent comp2 = my_p2.getComponent(); 
 	    if (comp1 instanceof AvatarRAM){ 
-		AvatarRAM comp1cpu = (AvatarRAM)comp1;
+		AvatarRAM comp1ram = (AvatarRAM)comp1;
+		if(comp1ram.getClusterIndex()==cluster_no)
 		rams++;			
 	    }		    		
 	    
@@ -250,7 +252,7 @@ public static int rams_in_cluster(AvatarddSpecification dd,int cluster_no){
 	      
 	    for (AvatarTTY tty:TopCellGenerator.avatardd.getAllTTY ())
 		
-		{   int cluster_no=tty.getNo_cluster();
+		{   int cluster_no=tty.getClusterIndex();
 		    int nb_ram =
 			rams_in_cluster(avatardd, cluster_no);
 
@@ -258,14 +260,14 @@ public static int rams_in_cluster(AvatarddSpecification dd,int cluster_no){
 			 declaration +=
 			"caba::VciMultiTty<vci_param> " + tty.getTTYName () +
 			"(\"" + tty.getTTYName () + "\", IntTab(" +
-			     tty.getNo_cluster () + "," +  (nb_ram+10)  +
+			     tty.getClusterIndex () + "," +  (nb_ram+10)  +
 			"), maptab, \"vci_multi_tty" + cluster_no + "\", NULL);" + CR;
 		    }
 		    else{
 		    declaration +=
 			"caba::VciMultiTty<vci_param> " + tty.getTTYName () +
 			"(\"" + tty.getTTYName () + "\", IntTab(" +
-			tty.getNo_cluster () + "," +  nb_ram  +
+			tty.getClusterIndex () + "," +  nb_ram  +
 			"), maptab, \"vci_multi_tty" + cluster_no + "\", NULL);" + CR;
 		    }
 		
@@ -276,7 +278,7 @@ public static int rams_in_cluster(AvatarddSpecification dd,int cluster_no){
 		  declaration +=
 		      "soclib::caba::VciRam<vci_param>" +
 		      ram.getMemoryName () + "(\"" + ram.getMemoryName () +
-		      "\"" + ", IntTab(" + ram.getNo_cluster () + "," +
+		      "\"" + ", IntTab(" + ram.getClusterIndex () + "," +
 		      ram.getNo_target () + "), maptab);" + CR2;
 	  }
 	if (nb_clusters == 0)
@@ -320,8 +322,8 @@ public static int rams_in_cluster(AvatarddSpecification dd,int cluster_no){
 			"caba::VciMwmrController<vci_param> " +
 			copro.getCoprocName () + "_wrapper(\"" +
 			copro.getCoprocName () +
-			"_wrapper\", IntTab(" + copro.getNo_cluster () + "," +
-			  (init_no - 1) +" ,IntTab(" + copro.getNo_cluster () + "," +
+			"_wrapper\", IntTab(" + copro.getClusterIndex () + "," +
+			  (init_no - 1) +" ,IntTab(" + copro.getClusterIndex () + "," +
 			 target_no + ")," + copro.getPlaps () +
 			"," + copro.getFifoToCoprocDepth () + "," +
 			copro.getFifoFromCoprocDepth () + "," +
@@ -555,7 +557,7 @@ public static int rams_in_cluster(AvatarddSpecification dd,int cluster_no){
 			" , maptab, " + crossbar.getClusterIndex () +
 			"," + crossbar.getClusterIndex () + ", " +
 			cpus_in_cluster(avatardd, cluster_no) + ", " +
-			rams_in_cluster(avatardd, cluster_no) + ");" + CR2;
+			(rams_in_cluster(avatardd, cluster_no)+1) + ");" + CR2;
 		    //if CROSSBAR was not last in input file, update here
 		 
 		}
diff --git a/src/main/java/ddtranslatorSoclib/toTopCell/MappingTable.java b/src/main/java/ddtranslatorSoclib/toTopCell/MappingTable.java
index 12b5447c072aa8393027f0e2e7916c51c25d1b8d..ada872cc34e57f15909effc0a6b29aad1c21115a 100755
--- a/src/main/java/ddtranslatorSoclib/toTopCell/MappingTable.java
+++ b/src/main/java/ddtranslatorSoclib/toTopCell/MappingTable.java
@@ -76,7 +76,8 @@ public class MappingTable {
 	    AvatarComponent comp1 = my_p1.getComponent();
 	    AvatarComponent comp2 = my_p2.getComponent(); 
 	    if (comp1 instanceof AvatarRAM){ 
-		AvatarRAM comp1cpu = (AvatarRAM)comp1;
+		AvatarRAM comp1ram = (AvatarRAM)comp1;
+		if(comp1ram.getClusterIndex()==cluster_no)
 		rams++;			
 	    }		    		
 	    
@@ -282,9 +283,9 @@ public class MappingTable {
       //we want to identify the RAMS on this cluster (not RAMs in total)
 
       for (AvatarRAM ram : TopCellGenerator.avatardd.getAllRAM()) {						      	
-	  mapping += "maptab.add(Segment(\"cram" + ram.getNo_ram() + "\", 0x"+Integer.toHexString(SEG_RAM_BASE+ ram.getNo_cluster()*CLUSTER_SIZE)+",  0x"+Integer.toHexString(ram.getDataSize()/2)+", IntTab("+ram.getNo_cluster()+","+(ram.getNo_target())+"), true));" + CR;
+	  mapping += "maptab.add(Segment(\"cram" + ram.getNo_ram() + "\", 0x"+Integer.toHexString(SEG_RAM_BASE+ ram.getClusterIndex()*CLUSTER_SIZE)+",  0x"+Integer.toHexString(ram.getDataSize()/2)+", IntTab("+ram.getClusterIndex()+","+(ram.getNo_target())+"), true));" + CR;
 	  
-	  mapping += "maptab.add(Segment(\"uram" + ram.getNo_ram() + "\",  0x"+Integer.toHexString(SEG_RAM_BASE + ram.getNo_cluster()*CLUSTER_SIZE+cacheability_bit)+",  0x"+Integer.toHexString(ram.getDataSize()/2)+", IntTab("+ram.getNo_cluster()+","+(ram.getNo_target())+"), false));" + CR;	  
+	  mapping += "maptab.add(Segment(\"uram" + ram.getNo_ram() + "\",  0x"+Integer.toHexString(SEG_RAM_BASE + ram.getClusterIndex()*CLUSTER_SIZE+cacheability_bit)+",  0x"+Integer.toHexString(ram.getDataSize()/2)+", IntTab("+ram.getClusterIndex()+","+(ram.getNo_target())+"), false));" + CR;	  
       }                     
          
       //we want to identify the TTYS on this cluster (not TTYs in total)
@@ -293,17 +294,17 @@ public class MappingTable {
       for (AvatarTTY tty : TopCellGenerator.avatardd.getAllTTY()) {	   
       /* the number of fixed targets varies depending on if we are on cluster 0 or on other clusters */
 	  int tty_no;
-	  int cluster_no=tty.getNo_cluster();
+	  int cluster_no=tty.getClusterIndex();
 	  int cluster_rams=rams_in_cluster(avatardd,cluster_no);
 	  
-	  if(tty.getNo_cluster()==0){	  
+	  if(tty.getClusterIndex()==0){	  
 	      tty_no=6+cluster_rams;
 	  }
 	  else{	     
 	      tty_no=cluster_rams;	      
 	  }
 	  
-	  mapping += "maptab.add(Segment(\"vci_multi_tty"+tty.getIndex()+"\" , 0x"+Integer.toHexString(SEG_TTY_BASE +  tty.getNo_cluster()* CLUSTER_SIZE)+", 0x00000010, IntTab("+tty.getNo_cluster()+","+tty_no+"), false));" + CR; 	  
+	  mapping += "maptab.add(Segment(\"vci_multi_tty"+tty.getIndex()+"\" , 0x"+Integer.toHexString(SEG_TTY_BASE +  tty.getClusterIndex()* CLUSTER_SIZE)+", 0x00000010, IntTab("+tty.getClusterIndex()+","+tty_no+"), false));" + CR; 	  
       }
       /* Add as many mwmr controllers as there are hardware accelerators */
       
diff --git a/src/main/java/ddtranslatorSoclib/toTopCell/NetList.java b/src/main/java/ddtranslatorSoclib/toTopCell/NetList.java
index 926532713ea989ac6eeb2e495d890eb61c2ad831..593469b454d8df59e1d00a9c72e01dce7b3d32eb 100755
--- a/src/main/java/ddtranslatorSoclib/toTopCell/NetList.java
+++ b/src/main/java/ddtranslatorSoclib/toTopCell/NetList.java
@@ -75,6 +75,7 @@ public class NetList
 		AvatarComponent comp2 = my_p2.getComponent(); 
 		if (comp1 instanceof AvatarCPU){ 
 			AvatarCPU comp1cpu = (AvatarCPU)comp1;
+			if(comp1cpu.getClusterIndex()==cluster_no)
 			cpus++;			
 		    }		    			
 	}
@@ -223,7 +224,7 @@ public class NetList
 		    "  cpus[i]->connect(cpus[i], signal_clk, signal_resetn, signal_vci_m"+crossbar.getClusterIndex()+"[j]);"+ CR;
 		netlist =
 		    netlist +"}" + CR;
-		netlist = netlist + "// connected cluster" + +crossbar.getClusterIndex()+"."+CR2;
+		netlist = netlist + "// connected cluster" +crossbar.getClusterIndex()+"."+CR2;
 		i++;
 	    }
 	}
@@ -429,7 +430,7 @@ public class NetList
 			    CR2;
 			//target number for local cluster: this is set at avatardd creation                         
 			netlist =
-			    netlist + "crossbar" + ram.getNo_cluster () +
+			    netlist + "crossbar" + ram.getClusterIndex () +
 			    ".p_to_target[" + ram.getNo_target () +
 			    "](signal_vci_vciram" + ram.getIndex () + ");" + CR2;
 		    }
@@ -587,7 +588,7 @@ public class NetList
 				netlist =
 				    netlist + tty.getTTYName () +
 				    ".p_irq[0](signal_xicu_irq[" +
-				    (tty.getNo_cluster () * 5) + "]);" + CR2;
+				    (tty.getClusterIndex () * 5) + "]);" + CR2;
 			    }
 		    }
 		i++;
@@ -825,7 +826,7 @@ public class NetList
 
 	
 	//If there is a spy, add logger or stats to vci interface
-
+	if(nb_clusters==0){
 	i = 0;
 	for (AvatarCPU cpu:TopCellGenerator.avatardd.getAllCPU ())
 	    {
@@ -842,7 +843,28 @@ public class NetList
 
 	    }
 	j = 0;
+	}
+	else{
+	i = 0;
+	for (AvatarCPU cpu:TopCellGenerator.avatardd.getAllCPU ())
+	    {
+		int number = cpu.getNo_proc ();
+		if (cpu.getMonitored () == 1)
+		    {
+			netlist = netlist + CR +
+			    "logger" + i + ".p_clk(signal_clk);" + CR +
+			    "logger" + i + ".p_resetn(signal_resetn);" + CR +
+			    "logger" + i + ".p_vci(signal_vci_m"+cpu.getClusterIndex()+"[" + number +
+			    "]);" + CR2;
+			i++;
+		    }
+
+	    }
+	j = 0;
+	}
 
+	if(nb_clusters==0){
+	i = 0;
 	for (AvatarRAM ram:TopCellGenerator.avatardd.getAllRAM ())
 	    {
 		if (ram.getMonitored () == 1)
@@ -852,7 +874,7 @@ public class NetList
 			netlist +=
 			    "logger" + i + ".p_resetn(signal_resetn);" + CR;
 			netlist +=
-			    "logger" + i + ".p_vci(signal_vci_vciram" + number +
+			    "logger" + i + ".p_vci(signal_vci_vciram"+ ram.getClusterIndex() +"_" + number +
 			    ");" + CR2;
 			i++;
 		    }
@@ -868,13 +890,47 @@ public class NetList
 				    "mwmr_stats" + j + ".p_resetn(signal_resetn);" +
 				    CR;
 				netlist +=
-				    "mwmr_stats" + j + ".p_vci(signal_vci_vciram" +
+				    "mwmr_stats" + j + ".p_vci(signal_vci_vciram"+ ram.getClusterIndex() +"_" +
 				    number + ");" + CR2;
 				j++;
 			    }
 		    }
 	    }
+	}
+	else{
+	   i = 0;
+	for (AvatarRAM ram:TopCellGenerator.avatardd.getAllRAM ())
+	    {
+		if (ram.getMonitored () == 1)
+		    {
+			int number = number = ram.getIndex ();
+			netlist += "logger" + i + ".p_clk(signal_clk);" + CR;
+			netlist +=
+			    "logger" + i + ".p_resetn(signal_resetn);" + CR;
+			netlist +=
+			    "logger" + i + ".p_vci(signal_vci_vciram" + number +
+			    ");" + CR2;
+			i++;
+		    }
+		else
+		    {
 
+			if (ram.getMonitored () == 2)
+			    {
+				int number = number = ram.getIndex ();
+				netlist +=
+				    "mwmr_stats" + j + ".p_clk(signal_clk);" + CR;
+				netlist +=
+				    "mwmr_stats" + j + ".p_resetn(signal_resetn);" +
+				    CR;
+				netlist +=
+				    "mwmr_stats" + j + ".p_vci(signal_vci_vciram" +
+				    number + ");" + CR2;
+				j++;
+			    }
+		    }
+	    } 
+	}
 
 	int p = 0;
 
diff --git a/src/main/java/ddtranslatorSoclib/toTopCell/Signal.java b/src/main/java/ddtranslatorSoclib/toTopCell/Signal.java
index 794b41528f5ad5db0814b3cc713d512e880aef58..33fa399000852d89de61dbb7e6956d6c54e36e80 100755
--- a/src/main/java/ddtranslatorSoclib/toTopCell/Signal.java
+++ b/src/main/java/ddtranslatorSoclib/toTopCell/Signal.java
@@ -73,6 +73,7 @@ public static int cpus_in_cluster(AvatarddSpecification dd,int cluster_no){
 	    AvatarComponent comp2 = my_p2.getComponent(); 
 	    if (comp1 instanceof AvatarCPU){ 
 		AvatarCPU comp1cpu = (AvatarCPU)comp1;
+		if(comp1cpu.getClusterIndex()==cluster_no)
 		cpus++;			
 	    }		    		
 	    
@@ -116,9 +117,9 @@ public static int cpus_in_cluster(AvatarddSpecification dd,int cluster_no){
 	signal = signal + "sc_clock signal_clk(\"signal_clk\");" + CR;
 	signal = signal + "sc_signal<bool>  signal_resetn(\"" + NAME_RST + "\");" + CR2;	
 		
-	
+	i=0;
 	for (AvatarCoproMWMR copro : TopCellGenerator.avatardd.getAllCoproMWMR()) {
-	    i=0;
+	    
 	    if(copro.getCoprocType()==0){
 		signal = signal + "soclib::caba::VciSignals<vci_param> signal_vci_IE(\"signal_vci_IE\");"+CR;
 		signal = signal +"caba::VciSignals<vci_param> signal_mwmr_"+i+"_initiator;"+ CR;
@@ -146,9 +147,8 @@ public static int cpus_in_cluster(AvatarddSpecification dd,int cluster_no){
 		    signal = signal +"caba::VciSignals<vci_param> signal_mwmr_"+i+"_target;"+ CR;	
 		    signal = signal +" soclib::caba::FifoSignals<uint32_t> signal_fifo_"+i+"_from_ctrl;"+ CR;
 		    signal = signal +" soclib::caba::FifoSignals<uint32_t> signal_fifo_"+i+"_to_ctrl;"+ CR;	       
-		}
-	  
-	    }
+		}		
+	    }	    
 	    i++;
       
 	    /*   signal = signal + "	soclib::caba::VciSignals<vci_param> signal_mwmr"+p+"_target(\"signal_mwmr"+p+"_target\""+CR;
@@ -161,22 +161,24 @@ public static int cpus_in_cluster(AvatarddSpecification dd,int cluster_no){
       
 	i = 0;
 	if(TopCellGenerator.avatardd.getAllCrossbar().size()==0){
+	   int j = 0;
 	    for (AvatarRAM ram : TopCellGenerator.avatardd.getAllRAM()){
 		//	signal = signal + "soclib::caba::VciSignals<vci_param> signal_vci_vciram" + ram.getIndex()
 		//		    + "(\"signal_vci_vciram" + ram.getIndex() + "\");" + CR2;
 		signal = signal + "soclib::caba::VciSignals<vci_param> signal_vci_vciram" + i
-		    + "(\"signal_vci_vciram" + i + "\");" + CR2;	  
-		i++;
+		    + "(\"signal_vci_vciram" + i +"_"+ j + "\");" + CR2;	  
+		j++;
 	    }							
-	    i = 0;
-								
+	    int k = 0;
+	    	  							
 	    for (AvatarTTY  tty :  TopCellGenerator.avatardd.getAllTTY()){
 		//signal = signal + "soclib::caba::VciSignals<vci_param> signal_vci_tty"+tty.getNo_tty()+"(\"signal_vci_tty"+tty.getNo_tty()+"\");" + CR2;		
-		signal = signal + "soclib::caba::VciSignals<vci_param> signal_vci_tty"+i+"(\"signal_vci_tty"+i+"\");" + CR2; 
-		i++;		
+		signal = signal + "soclib::caba::VciSignals<vci_param> signal_vci_tty"+i+"(\"signal_vci_tty"+ i +"_"+k+"\");" + CR2; 
+		k++;		
 	    }			
 	    //	signal = signal + " sc_core::sc_signal<bool> signal_xicu_irq[xicu_n_irq];" + CR2;
 	    //	System.out.print("number of processors : " + TopCellGenerator.avatardd.getNbCPU()+"\n");
+	    i++;
 	}