diff --git a/MPSoC/soclib/soclib/module/test_control_component/vci_mwmr_stats/caba/source/src/vci_mwmr_stats.cpp b/MPSoC/soclib/soclib/module/test_control_component/vci_mwmr_stats/caba/source/src/vci_mwmr_stats.cpp
index 0b429cfc25ad67217ebcf717613158f22ef32a18..f1922b2acec174db3942030cc84273dca66d2621 100644
--- a/MPSoC/soclib/soclib/module/test_control_component/vci_mwmr_stats/caba/source/src/vci_mwmr_stats.cpp
+++ b/MPSoC/soclib/soclib/module/test_control_component/vci_mwmr_stats/caba/source/src/vci_mwmr_stats.cpp
@@ -67,6 +67,12 @@ tmpl()::VciMwmrStats(
     for ( typename std::vector<std::string>::const_iterator i = fifo_name.begin();
           i != fifo_name.end();
           ++i ) {
+
+const std::string name2 = (*i);
+loader.get_symbol_by_name(name2);
+const soclib::common::BinaryFileSymbol *sym2 = loader.get_symbol_by_name(name2);
+std::cout << " mwmr fifo with address " << sym2->address() << std::endl;
+
         const std::string name = (*i)+"_status";
         const soclib::common::BinaryFileSymbol *sym = loader.get_symbol_by_name(name);
         if ( ! sym || sym->name() != name ) {
@@ -74,6 +80,7 @@ tmpl()::VciMwmrStats(
             continue;
         }
         typename vci_param::fast_addr_t addr = sym->address();
+        std::cout << " mwmr fifo with status address " << addr << std::endl;
         m_mwmr_info.push_back( mwmr_info_t(addr, *i) );
     }
 }
@@ -98,61 +105,73 @@ tmpl(void)::handle_txn(const VciLoggerElem<vci_param> &elem)
     for ( typename std::vector<mwmr_info_t>::const_iterator i = m_mwmr_info.begin();
           i != m_mwmr_info.end();
           ++i ) {
-        const mwmr_info_t &mwmr = *i;
 
+        const mwmr_info_t &mwmr = *i;
+       
+        //detect if we are in the address range of the mwmr fifo number i
         if ( (elem.address() < mwmr.first) ||
-             ((elem.address() + elem.plen()) >= (mwmr.first + sizeof(soclib_mwmr_status_s))) )
-            continue;
+         ((elem.address() + elem.plen()) >= (mwmr.first + sizeof(soclib_mwmr_status_s))) )
+            continue; 
+
+        //std::cout <<elem.address()<< " " <<  mwmr.first<< " " <<  mwmr.second << " " << (elem.address() + elem.plen()) << " "<< (mwmr.first + sizeof(soclib_mwmr_status_s)) << " "<< sizeof(soclib_mwmr_status_s)<< " " << elem.plen() << std::endl;
+        //std::cout <<m_cycle++<< std::endl;
+
+/*  std::cout << "cmd "  << elem.command() << std::endl;
+    std::cout << "address "  << elem.address() << std::endl;
+    std::cout << "rdata "  << elem.rdata()[0] << std::endl;
+    std::cout << "wdata " << elem.wdata()[0] << std::endl;*/
+
 
         handle_txn(elem, mwmr);
     }
 }
 
 tmpl(void)::handle_txn(const VciLoggerElem<vci_param> &elem, const mwmr_info_t &mwmr)
-{
-    std::cout << "cmd "  << elem.command() << std::endl;
-    std::cout << "address "  << elem.address() << std::endl;
-    //std::cout << "rdata "  << rdata << std::endl;
-    // std::cout << "wdata " << wdata << std::endl;
+{      
+    //prefix(elem, mwmr) << std::hex<< elem.address ()<< " , " << elem.command() << std::endl;
 
     switch ( elem.command() ) {
         case vci_param::CMD_LOCKED_READ:
-        prefix(elem, mwmr)
+            {prefix(elem, mwmr)
             << "read_lock"
-            << std::endl;
+            << std::endl; }
+           
         break;
         case vci_param::CMD_STORE_COND:
-            { prefix(elem, mwmr) << "STORE COND" << std::endl;
-                //  std::cout<<"***CMD_STORE_COND***"<< std::endl;
+            { 
         typename vci_param::fast_data_t rdata = elem.rdata()[0];
         typename vci_param::fast_data_t wdata = elem.wdata()[0];
-        //std::cout << "cmd "  << elem.command() << std::endl;
-        //std::cout << "address "  << elem.address() << std::endl;
-        //std::cout << "rdata "  << rdata << std::endl;
-        //std::cout << "wdata " << wdata << std::endl;
-        prefix(elem, mwmr) << "WDATA" << wdata<<std::endl;
-        if ( wdata >= 1 ) {       
+        
+        //prefix(elem, mwmr) << "WDATA" << std::hex<< wdata<<std::endl;
+       
+        //if ( wdata == 0x1) {  
+        if ( wdata >= 1 ) {  
             if ( rdata == vci_param::STORE_COND_ATOMIC ){ 
-                // if ( rdata == vci_param::CMD_STORE_COND){ 
+               
                 prefix(elem, mwmr) << "lock_take" << std::endl;
+                //std::cout << elem.address() << "lock_take " << std::endl;
             }
             else
                 prefix(elem, mwmr) << "lock_miss" << std::endl;
         } else {
             if ( rdata == vci_param::STORE_COND_ATOMIC )
-                //if ( rdata == vci_param::CMD_STORE_COND)
-                prefix(elem, mwmr) << "lock_release" << std::endl;
+                
+                {
+                    prefix(elem, mwmr) << "lock_release" << std::endl;
+                    //std::cout << "lock_release" << std::endl;
+                }
             else
                 prefix(elem, mwmr) << "lock_release_miss" << std::endl;
         }
         break;
-    }
-    case vci_param::CMD_READ:
+            }
+    case vci_param::CMD_READ:     
         break;
+  
     case vci_param::CMD_WRITE:
     {
         typename vci_param::fast_addr_t base = elem.address() - mwmr.first;
-
+       
         std::vector<typename vci_param::fast_data_t> wdata = elem.wdata();
         typename std::vector<typename vci_param::fast_data_t>::const_iterator v = wdata.begin();
        
@@ -162,19 +181,31 @@ tmpl(void)::handle_txn(const VciLoggerElem<vci_param> &elem, const mwmr_info_t &
 
             switch ( base+offset ) {
             case 0:
-                prefix(elem, mwmr) << "write_rptr" << field_sep << *v << std::endl;
+                {
+                    prefix(elem, mwmr) << "write_rptr" << field_sep << *v << std::endl;
+                    //std::cout  << elem.address() << "write_rptr " << std::endl;
+                }
                 break;
             case 4:
-                prefix(elem, mwmr) << "write_wptr" << field_sep << *v << std::endl;
+                {
+                    prefix(elem, mwmr) << "write_wptr" << field_sep << *v << std::endl;
+                    //std::cout  << elem.address() << "write_wptr " << std::endl;
+}
                 break;
             case 8:
-                prefix(elem, mwmr) << "write_usage" << field_sep << *v << std::endl;
+                {
+                    prefix(elem, mwmr) << "write_usage" << field_sep << *v << std::endl;
+                    std::cout  << elem.address()<< "write_usage " << std::endl;
+                }
                 break;
             case 12:
                 if ( *v )
-                    prefix(elem, mwmr) << "lock_force" << std::endl;
+                    prefix(elem, mwmr)  << "lock_force" << std::endl;
                 else                    
-                    prefix(elem, mwmr) << "lock_release" << std::endl;
+                    {
+                        prefix(elem, mwmr) << "lock_release" << std::endl;
+                        std::cout  << elem.address() << "lock_release " << std::endl;
+                    }
                 break;
             }
             ++v;
@@ -182,7 +213,7 @@ tmpl(void)::handle_txn(const VciLoggerElem<vci_param> &elem, const mwmr_info_t &
         break;
     }
     }
-}
+    }
 
 tmpl(void)::transition()
 {
diff --git a/MPSoC/src/request_manager.c b/MPSoC/src/request_manager.c
index 91625b392330d78a805db6333e2539de3cff9497..992d166fad3d345115b69cb3d2e873520ee9f924 100755
--- a/MPSoC/src/request_manager.c
+++ b/MPSoC/src/request_manager.c
@@ -63,12 +63,16 @@ void executeSendSyncTransaction(request *req) {
   debugInt("syncchannel address \n", req->syncChannel->mwmr_fifo);
   debugInt("syncchannel nbOfParams \n", req->nbOfParams);
   debugInt("syncchannel burst \n", req->nbOfParams*sizeof(req->params));
-   debugInt("syncchannel params \n", req->params[0]);
-   sync_write(req->syncChannel->mwmr_fifo, &(req->params),  req->nbOfParams*sizeof(req->params)||1);//DG 14.03.+1
-
-  // sync_read(req->syncChannel->mwmr_fifo, &(req->params),  req->nbOfParams*sizeof(req->params));
+  debugInt("syncchannel paramsize \n", sizeof(req->params));
+  debugInt("syncchannel params \n", req->params[0]);
+   //sync_write(req->syncChannel->mwmr_fifo, &(req->params),  req->nbOfParams*sizeof(req->params)||1);//DG 14.03.+1
+   if( req->nbOfParams==0){
+ debugMsg("pas de params");
+     sync_write(req->syncChannel->mwmr_fifo, &(req->params), 4);//DG 10.5. 4 not 1
+}
+else
+  sync_write(req->syncChannel->mwmr_fifo, &(req->params), req->nbOfParams*sizeof(req->params));//DG 30.03.
 
-  //DG 8.2. a-t-on besoin de ID?
   
   traceSynchroRequest(req, selectedReq);
 }
@@ -112,12 +116,15 @@ void executeReceiveSyncTransaction(request *req) {
   debugInt("syncchannel read: nbOfParams \n",selectedReq->nbOfParams);  
   debugInt("syncchannel burst \n", req->nbOfParams*sizeof(req->params));
   debugInt("syncchannel params \n", req->params[0]);
-  
-  //sync_write(selectedReq->syncChannel->mwmr_fifo, &(selectedReq->params),  selectedReq->nbOfParams*sizeof(selectedReq->params) );  
-  // sync_read(selectedReq->syncChannel->mwmr_fifo, &(selectedReq->params),  selectedReq->nbOfParams*sizeof(selectedReq->params)||1 );////DG 14.03. +1
- 
- sync_read(selectedReq->syncChannel->mwmr_fifo, &(selectedReq->params),  selectedReq->nbOfParams*sizeof(selectedReq->params)||1 );////DG 14.03. +1
- 
+  debugInt("syncchannel paramsize \n", sizeof(req->params));
+
+  if(req->nbOfParams==0){ 
+    debugMsg("pas de params");
+    sync_read(selectedReq->syncChannel->mwmr_fifo, &(selectedReq->params), 4 ); //DG 10.05. 4 not 1
+  }
+  else
+  sync_read(selectedReq->syncChannel->mwmr_fifo, &(selectedReq->params),  selectedReq->nbOfParams*sizeof(selectedReq->params));
+  //DG 30.03.
 
   debugMsg("after syncchannel read");
   debugInt("req->params \n", req->params);
@@ -286,6 +293,7 @@ int executable(setOfRequests *list, int nb) {
 	//DG 8.2. ici le probleme! wait queue empty pour B0 :(
 	debugMsg("Send sync");
 	debugInt("req->syncChannel->inWaitQueue ",req->syncChannel->inWaitQueue);
+	debugInt("req->syncChannel address", &(req->syncChannel));
 	if (req->syncChannel->inWaitQueue != NULL) {// DG 8.2. non c'est correct: il faut un rendez-vous synchrone entre inqueue et outqueue
         //if (req->syncChannel->outWaitQueue != NULL) {//DG 8.2.??
 	  debugMsg("Send sync executable");
@@ -299,6 +307,8 @@ int executable(setOfRequests *list, int nb) {
 
       if (req->type == RECEIVE_SYNC_REQUEST) {
 	debugMsg("receive sync");
+	debugInt("req->syncChannel->outWaitQueue ",req->syncChannel->outWaitQueue);
+        debugInt("req->syncChannel address", &(req->syncChannel));
 	//if ((req->syncChannel->outWaitQueue != NULL)&&(req->syncChannel->inWaitQueue != NULL)) {
 	if (req->syncChannel->outWaitQueue != NULL) {// DG 8.2. non c'est correct: il faut un rendez-vous synchrone entre inqueue et outqueue
         //if (req->syncChannel->inWaitQueue != NULL) {//DG 8.2.??
diff --git a/MPSoC/src/syncchannel.c b/MPSoC/src/syncchannel.c
index cd78352a0ac5db2cff4d91d5089879b04a3f0c1c..26d86fba7b9bf8b2a53c4081a0c412c230d9bb38 100755
--- a/MPSoC/src/syncchannel.c
+++ b/MPSoC/src/syncchannel.c
@@ -1,6 +1,4 @@
 #include <stdlib.h>
-
-
 #include "syncchannel.h"
 #include "request.h"
 #include "myerrors.h"
@@ -18,7 +16,7 @@ void mwmr_sync_flush(struct mwmr_s *fifo){
 
 void sync_read( struct mwmr_s *fifo, void *_ptr, int lensw ){  
   int i;
-  debugInt("debug fifo \n",fifo);
+  debugInt("debug fifo read\n",fifo);
   debugInt("debug ptr \n",_ptr);
   debugInt("debug  lensw \n", lensw);
   debugInt("debug  fifo status address \n", &(fifo->status));
@@ -27,15 +25,17 @@ void sync_read( struct mwmr_s *fifo, void *_ptr, int lensw ){
   debugInt("debug  fifo rptr address\n", &(fifo->status->rptr));
   debugInt("debug  fifo wptr address\n", &(fifo->status->rptr));
   debugInt("debug  fifo lock \n", fifo->status->lock);
-  i=mwmr_try_read(fifo,_ptr,lensw); 
+  /*i=mwmr_try_read(fifo,_ptr,lensw); 
   if(i>0)
-    mwmr_read(fifo,_ptr,(lensw-i)); 
+  mwmr_read(fifo,_ptr,(lensw-i)); */
+  mwmr_read(fifo,_ptr,lensw);
+  //mwmr_read(fifo,_ptr,1);
   return;
 }
 
 void sync_write( struct mwmr_s *fifo, void *_ptr, int lensw ){
  
-  debugInt("debug fifo \n",fifo);
+  debugInt("debug fifo write\n",fifo);
   debugInt("debug ptr \n",_ptr);
   debugInt("debug  lensw \n", lensw);
   debugInt("debug  fifo status address \n", &(fifo->status));
@@ -45,6 +45,7 @@ void sync_write( struct mwmr_s *fifo, void *_ptr, int lensw ){
   debugInt("debug  fifo wptr address\n", &(fifo->status->rptr));
   debugInt("debug  fifo lock \n", fifo->status->lock);
   mwmr_write(fifo,_ptr,lensw);
+  //mwmr_write(fifo,_ptr,1);
   return;
 }
 
diff --git a/src/ddtranslatorSoclib/toSoclib/TasksAndMainGenerator.java b/src/ddtranslatorSoclib/toSoclib/TasksAndMainGenerator.java
index a217ffb6fd2967ef28c1fb72c9cfa99aaa7b3967..e2dfbc62f5892614cf755a8cefc106042b302e75 100755
--- a/src/ddtranslatorSoclib/toSoclib/TasksAndMainGenerator.java
+++ b/src/ddtranslatorSoclib/toSoclib/TasksAndMainGenerator.java
@@ -246,10 +246,10 @@ public class TasksAndMainGenerator {
 	//DG 9.5.
 	
 	if (nbParams>0)
-	mainFile.appendToMainCode(getChannelName(ar, i) + ".width = "+ nbParams+";" + CR);
+	    mainFile.appendToMainCode(getChannelName(ar, i) + ".width = "+ (nbParams*4)+";" + CR);
 	else mainFile.appendToMainCode(getChannelName(ar, i) + ".width = "+ 1 +";" + CR);
 
-mainFile.appendToMainCode(getChannelName(ar, i) + ".depth = 1;" + CR);
+         mainFile.appendToMainCode(getChannelName(ar, i) + ".depth = 100;" + CR);
 	//mainFile.appendToMainCode(getChannelName(ar, i) + ".depth = "+((nbParams*4)+4)+";" + CR);
 	mainFile.appendToMainCode(getChannelName(ar, i) + ".gdepth = " +getChannelName(ar, i)+".depth;" + CR);
 	mainFile.appendToMainCode(getChannelName(ar, i) + ".buffer = "+getChannelName(ar, i)+"_data;" + CR);
@@ -303,8 +303,8 @@ mainFile.appendToMainCode(getChannelName(ar, i) + ".depth = 1;" + CR);
 			AvatarSignal sig = ar.getSignal1(0);
 			int nbParams= sig.getNbParams();
 			if (nbParams>0)
-	mainFile.appendToMainCode(getChannelName(ar, i) + ".width = "+ nbParams+";" + CR);
-			else mainFile.appendToMainCode(getChannelName(ar, i) + ".width = "+ 1 +";" + CR);
+			    mainFile.appendToMainCode(getChannelName(ar, i) + ".width = "+ (nbParams*4)+";" + CR);
+			else mainFile.appendToMainCode(getChannelName(ar, i) + ".width = "+ 4 +";" + CR);
 	//	mainFile.appendToMainCode(getChannelName(ar, i) + ".depth = "+ ar.getSizeOfFIFO()+"1;" + CR);
 	mainFile.appendToMainCode(getChannelName(ar, i) + ".depth = "+ ar.getSizeOfFIFO()+";" + CR);//DG 27.03.
 			mainFile.appendToMainCode(getChannelName(ar, i) + ".gdepth = "+getChannelName(ar, i)+".depth;" + CR);