diff --git a/src/tmltranslator/ctranslator/DataTransfer.java b/src/tmltranslator/ctranslator/DataTransfer.java
index 8a71e3ec51faa9a647d361b77c80bcf3ef98905a..c4e19d02b5f48656db12085cc97b91abf51f3a1b 100755
--- a/src/tmltranslator/ctranslator/DataTransfer.java
+++ b/src/tmltranslator/ctranslator/DataTransfer.java
@@ -62,20 +62,20 @@ public class DataTransfer	{
 
 	private int type;
 	private String name = "";
-	private Buffer inBuffer;
+	private ArrayList<Buffer> inBuffers;
 	private Buffer outBuffer;
 	private TMLCPLib tmlcplib;
 	private ArrayList<Signal> outSignals;
 	private ArrayList<Signal> inSignals;
 
-	public DataTransfer( TMLCPLib _tmlcplib, Buffer _inBuffer, Buffer _outBuffer, ArrayList<Signal> _inSignals, ArrayList<Signal> _outSignals )	{
+	/*public DataTransfer( TMLCPLib _tmlcplib, ArrayList<Buffer> _inBuffers, Buffer _outBuffer, ArrayList<Signal> _inSignals, ArrayList<Signal> _outSignals )	{
 		name = _tmlcplib.getName();
 		tmlcplib = _tmlcplib;
 		inSignals = _inSignals;
 		outSignals = _outSignals;
-		inBuffer = _inBuffer;
+		inBuffers = _inBuffers;
 		outBuffer = _outBuffer;
-	}
+	}*/
 
 	public DataTransfer( TMLCPLib _tmlcplib, ArrayList<Signal> _inSignals, ArrayList<Signal> _outSignals )	{
 		name = _tmlcplib.getName();
@@ -87,6 +87,11 @@ public class DataTransfer	{
 		else	{
 			outSignals = _outSignals;
 		}
+		init();
+	}
+
+	private void init()	{
+		inBuffers = new ArrayList<Buffer>();
 	}
 
 	public TMLCPLib getTMLCPLib()	{
@@ -117,12 +122,20 @@ public class DataTransfer	{
 		outSignals.add( _outSignal );
 	}
 
-	public void setInBuffer( Buffer _inBuffer)	{
+	public void addInSignal( Signal _inSignal )	{
+		inSignals.add( _inSignal );
+	}
+
+	/*public void setInBuffer( Buffer _inBuffer)	{
 		inBuffer = _inBuffer;
+	}*/
+
+	public void addInBuffer( Buffer _inBuffer )	{
+		inBuffers.add( _inBuffer );
 	}
 
-	public Buffer getInBuffer()	{
-		return inBuffer;
+	public ArrayList<Buffer> getInBuffers()	{
+		return inBuffers;
 	}
 
 	public void setOutBuffer( Buffer _outBuffer)	{
@@ -154,8 +167,8 @@ public class DataTransfer	{
 		for( Signal sig: outSignals )	{
 			s.append( "outSignal: " + sig.getName() + "\n\t" );
 		}
-		if( inBuffer != null )	{
-			s.append( "inBuffer: " + inBuffer.toString() + "\n\t" );
+		for( Buffer buff: inBuffers )	{
+			s.append( "inBuffer: " + buff.toString() + "\n\t" );
 		}
 		if( outBuffer != null )	{
 			s.append( "outBuffer: " + outBuffer.toString() );
diff --git a/src/tmltranslator/ctranslator/TMLCCodeGeneration.java b/src/tmltranslator/ctranslator/TMLCCodeGeneration.java
index e86a467cd56e4773df8808a3128bd911d94260b3..d01125c1d054be96a9e6688f1ed112c26d40f59e 100755
--- a/src/tmltranslator/ctranslator/TMLCCodeGeneration.java
+++ b/src/tmltranslator/ctranslator/TMLCCodeGeneration.java
@@ -457,29 +457,25 @@ public class TMLCCodeGeneration	{
 					newInSignalsList.add( newSig );	//to be substitued to the inSignals of op
 					signalsList.add( newSig );
 				}
-				Buffer inBuff = op.getInBuffer();
-				Buffer outBuff = op.getOutBuffer();
+				Buffer inBuff = op.getInBuffer();	//the operation inBuffer is the dataTransfer outBuffer
 				String portName = "buff_" + dt.getTMLCPLib().getArtifacts().get(0).getPortName();
-				if( inBuff != null )	{
-					//TraceManager.addDev( "Trying to match " + portName + " and " + inBuff.getName() );
+				if( inBuff != null )	{	//the port mapped on the CP is associated to the CP output buffer
 					if( inBuff.getName().equals( portName ) )	{
-						/*inBuff.setStartAddress( startAddress );
-						inBuff.setEndAddress( endAddress );*/
-						//TraceManager.addDev( "Operation " + op.getName() + " inBuffer = " + inBuff.getName() + " mapped port: " + portName );
-						dt.setOutBuffer( inBuff );	//Careful with which is IN and which is OUT!
+						dt.setOutBuffer( inBuff );
 					}
 				}
-				if( outBuff != null )	{
-					//TraceManager.addDev( "Trying to match " + portName + " and " + outBuff.getName() );
-					if( outBuff.getName().equals( portName ) )	{
-						/*outBuff.setStartAddress( startAddress );
-						outBuff.setEndAddress( endAddress );*/
-						//TraceManager.addDev( "Operation " + op.getName() + " outBuffer = " + outBuff.getName() + " mapped port: " + portName );
-						dt.setInBuffer( inBuff );	//Careful with which is IN and which is OUT!
+			}
+			op.setInSignals( newInSignalsList );
+			newInSignalsList = new ArrayList<Signal>();
+		}
+		for( DataTransfer dt: dataTransfersList )	{
+			for( Signal inSignal: dt.getInSignals() )	{	//for each in signal corresponds an inBuffer
+				String buffName = "buff_" + inSignal.getName();
+				for( Buffer buff: buffersList )	{
+					if( buff.getName().equals( buffName ) )	{
+						dt.addInBuffer( buff );
 					}
 				}
-				op.setInSignals( newInSignalsList );
-				newInSignalsList = new ArrayList<Signal>();
 			}
 		}
 	}
@@ -501,6 +497,25 @@ public class TMLCCodeGeneration	{
 		return null;
 	}
 
+	private Operation getOperationWithSameOutputSignals( ArrayList<Signal> outSignals )	{
+		
+		int counter = 0;
+		for( Operation op: operationsList )	{
+			Signal sig = op.getOutSignal();	//operations have one and only one outSignal
+			if( sig != null){
+			TraceManager.addDev( "Checking if signal " + sig.getName() + " is contained in " + outSignals.toString() );
+			if( outSignals.contains( sig ) )	{
+				counter++;
+			}
+			if( counter == outSignals.size() )	{
+				return op;
+			}
+			counter = 0;
+		}
+		}
+		return null;
+	}
+
 	//retrieve the signal whose channel has a destintation port equal to portName
 	private ArrayList<Signal> getDTInSignals( String portName )	{