diff --git a/simulators/c++2/Makefile b/simulators/c++2/Makefile
index a1f09d922e5f9bb06c40a874a104541bfa0098f2..56d35f37e7434dc211489e869d797f9f224c0f71 100755
--- a/simulators/c++2/Makefile
+++ b/simulators/c++2/Makefile
@@ -12,7 +12,7 @@ LTHREAD = -pthread
 
 DEBUG  = -g
 PROFILE = -pg
-OTHER  = -Wall
+OTHER  = -Werror -Wall -Wextra -pedantic -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-parentheses-equality -Wno-self-assign-field -Wno-c++11-long-long -Wno-long-long
 SOLARIS_SPECIFIC = -lsocket -lnsl
 TRY    = -Wno-deprecated
 #make  = $(OPT) $(OTHER) $(TRY) 
diff --git a/simulators/c++2/src_simulator/HashAlgo.h b/simulators/c++2/src_simulator/HashAlgo.h
index 886c4c9ee6975b76b9326842e4e9be4e5e2ff22e..5ca8d34b793d936630c5651eced86cde6a81c1ed 100644
--- a/simulators/c++2/src_simulator/HashAlgo.h
+++ b/simulators/c++2/src_simulator/HashAlgo.h
@@ -63,7 +63,7 @@ Ludovic Apvrille, Renaud Pacalet
   c -= b;  c ^= rot(b, 4);  b += a; \
 }
 
-#define ifinal(a,b,c) \
+#define ihfinal(a,b,c) \
 { \
   b += rot(a,14); b ^= a;\
   a += rot(c,4);  a ^= c;\
@@ -73,7 +73,7 @@ Ludovic Apvrille, Renaud Pacalet
   c += rot(b,14); c ^= b;\
 }
 
-#define final(a,b,c) \
+#define hfinal(a,b,c) \
 { \
   c ^= b; c -= rot(b,14); \
   a ^= c; a -= rot(c,11); \
@@ -121,7 +121,7 @@ public:
 	
 	/*void removeValue(HashValueType iVal){
 		if(_finalized){
-  			ifinal(_a, _b, _c);
+  			ihfinal(_a, _b, _c);
 			_finalized=false;
 		}
 		switch(_state){
@@ -137,7 +137,7 @@ public:
 			_result = _c;
 			if(_state!=0){
 				HashValueType aA = _a, aB=_b;
-				final(aA, aB, _result);
+				hfinal(aA, aB, _result);
 				_finalized=true;
 			}
 		}
diff --git a/simulators/c++2/src_simulator/TEPE/PropRelConstraint.cpp b/simulators/c++2/src_simulator/TEPE/PropRelConstraint.cpp
index 062011494f4ec348adf242b4bce7b07c45749a3c..8c535b698637e89c64d9a8a38198032dce0a95fa 100644
--- a/simulators/c++2/src_simulator/TEPE/PropRelConstraint.cpp
+++ b/simulators/c++2/src_simulator/TEPE/PropRelConstraint.cpp
@@ -77,4 +77,4 @@ void PropRelConstraint::notifyEnable(unsigned int iSigState){
 //}
 
 void PropRelConstraint::reset(){
-}
\ No newline at end of file
+}
diff --git a/simulators/c++2/src_simulator/app/Parameter.h b/simulators/c++2/src_simulator/app/Parameter.h
index d6f99a625a74e3ec206dcc23699fb52118b2501c..f96df82e5d0dd95089d4a2e491bb78625fe255ab 100644
--- a/simulators/c++2/src_simulator/app/Parameter.h
+++ b/simulators/c++2/src_simulator/app/Parameter.h
@@ -71,15 +71,14 @@ public:
 	SizedParameter(){
 	}
 	
-	SizedParameter(const T& ip1 ...){
+	SizedParameter(const T ip1 ...){
 //#if size>0
 		if (size!=0){
-			T arg=ip1;
 			va_list args; // argument list
 			va_start(args, ip1); // initialize args
-			for (unsigned int i=0;i<size;i++){
-				_p[i]=arg;
-				arg=va_arg(args, T);
+			_p[0]=ip1;
+			for (unsigned int i=1;i<size;i++){
+				_p[i]=va_arg(args, T);
 			}
 		}
 //#endif
@@ -143,12 +142,11 @@ public:
 	}
 
 	/* template <typename T, int size> void SizedParameter<T,size>::setP(T ip1 ...){
-		T arg=ip1;
 		va_list args; // argument list
 		va_start(args, ip1); // initialize args
-		for (unsigned int i=0;i<size;i++){
-			_p[i]=arg;
-			arg=va_arg(args, T);
+		_p[0]=ip1;
+		for (unsigned int i=1;i<size;i++){
+			_p[i]=va_arg(args, T);
 		}
 	}*/
 
diff --git a/simulators/c++2/src_simulator/app/TMLActionCommand.cpp b/simulators/c++2/src_simulator/app/TMLActionCommand.cpp
index e1742d0cf4f22fa4cebace63ce45ba5a5d6f1dd1..169fd8371e716116b04b0177cd9149a9d5e2169b 100644
--- a/simulators/c++2/src_simulator/app/TMLActionCommand.cpp
+++ b/simulators/c++2/src_simulator/app/TMLActionCommand.cpp
@@ -81,4 +81,4 @@ std::string TMLActionCommand::toString(TMLLength aLength, TMLLength aProgress) c
 	std::ostringstream outp;	
 	outp << "Action in " << TMLCommand::toString(aLength, aProgress);
 	return outp.str();
-}
\ No newline at end of file
+}
diff --git a/simulators/c++2/src_simulator/app/TMLDelayCommand.cpp b/simulators/c++2/src_simulator/app/TMLDelayCommand.cpp
index 58880e49ca2125d006e03cdbf299f66a1ac4a9cb..3ebf2f69e148052cc9ffb96b75dce3929ec2b209 100644
--- a/simulators/c++2/src_simulator/app/TMLDelayCommand.cpp
+++ b/simulators/c++2/src_simulator/app/TMLDelayCommand.cpp
@@ -43,7 +43,7 @@ Ludovic Apvrille, Renaud Pacalet
 #include <TMLTransaction.h>
 #include <SimComponents.h>
 //#include <CommandListener.h>
-TMLDelayCommand::TMLDelayCommand(ID iID, TMLTask* iTask,TMLLength iStatLength, ActionFuncPointer iActionFunc, const char* iLiveVarList, bool iCheckpoint, bool isActiveDelay):TMLCommand(iID, iTask, 1, 1, iLiveVarList, iCheckpoint),_actionFunc(iActionFunc){
+TMLDelayCommand::TMLDelayCommand(ID iID, TMLTask* iTask,TMLLength iStatLength, DelayActionFuncPointer iActionFunc, const char* iLiveVarList, bool iCheckpoint, bool isActiveDelay):TMLCommand(iID, iTask, 1, 1, iLiveVarList, iCheckpoint),_actionFunc(iActionFunc){
 	if (!isActiveDelay){
 	    _isActiveDelay = false;
 	}else {
diff --git a/simulators/c++2/src_simulator/app/TMLDelayCommand.h b/simulators/c++2/src_simulator/app/TMLDelayCommand.h
index 7e1d4b838df1c9063eddd04005e3c676d67dd331..a564fec926a428f1966fc3ea7a8cbb925bf70680 100644
--- a/simulators/c++2/src_simulator/app/TMLDelayCommand.h
+++ b/simulators/c++2/src_simulator/app/TMLDelayCommand.h
@@ -59,7 +59,7 @@ public:
     bool _isActiveDelay;
     virtual bool getActiveDelay() {return _isActiveDelay;}
     virtual bool isDelayTransaction(){return true;}
-	TMLDelayCommand(ID iID, TMLTask* iTask, TMLLength iStatLength, ActionFuncPointer iActionFunc, const char* iLiveVarList, bool iCheckpoint, bool isActiveDelay);
+	TMLDelayCommand(ID iID, TMLTask* iTask, TMLLength iStatLength, DelayActionFuncPointer iActionFunc, const char* iLiveVarList, bool iCheckpoint, bool isActiveDelay);
 	///TMLDelayCommand
 	virtual ~TMLDelayCommand(){}
 	void execute();
@@ -71,7 +71,7 @@ public:
 	inline std::string getCommandStr() const {return "DL";}
 protected:
 	///Member function pointer to the action function
-	ActionFuncPointer _actionFunc;
+	DelayActionFuncPointer _actionFunc;
 	TMLCommand* prepareNextTransaction();
 };
 
diff --git a/simulators/c++2/src_simulator/app/TMLEventBChannel.h b/simulators/c++2/src_simulator/app/TMLEventBChannel.h
index d86ee4a937602b08429dfabf1f571893cae82308..d41f9f063d75e5e51813fac633a48be0e874303d 100644
--- a/simulators/c++2/src_simulator/app/TMLEventBChannel.h
+++ b/simulators/c++2/src_simulator/app/TMLEventBChannel.h
@@ -93,7 +93,7 @@ public:
 
 	void write(TMLTransaction* iTrans){
 #ifdef LOSS_ENABLED
-		if (this->_maxNbOfLosses > this->_nbOfLosses && this->_lossRate!=0 && myrand(0,99) < this->_lossRate){
+		if (this->_maxNbOfLosses > this->_nbOfLosses && this->_lossRate!=0 && (unsigned int)myrand(0,99) < this->_lossRate){
 			this->_nbOfLosses++;
 		}else{
 #endif
@@ -232,11 +232,10 @@ public:
 	}
 
 	TMLLength removeSamples(TMLLength iNbOfSamples) {
-		TMLLength aNbToRemove;
+		TMLLength aNbToRemove = 0;
 		if (iNbOfSamples==0) {
 			this->_content=0;
 			this->_paramQueue.clear();
-			aNbToRemove=0;
 		} else if (this->_content > 0) {
 			aNbToRemove=1;
 			this->_content-=aNbToRemove;
diff --git a/simulators/c++2/src_simulator/app/TMLEventFBChannel.h b/simulators/c++2/src_simulator/app/TMLEventFBChannel.h
index b932ba556e696acc15bc97c78a93fc32822bf020..d9e3671c091d4f652a7aaedf9441c06c3c62dbee 100644
--- a/simulators/c++2/src_simulator/app/TMLEventFBChannel.h
+++ b/simulators/c++2/src_simulator/app/TMLEventFBChannel.h
@@ -161,11 +161,10 @@ public:
 	}
 
 	TMLLength insertSamples(TMLLength iNbOfSamples, Parameter* iParam){
-		TMLLength aNbToInsert;
+		TMLLength aNbToInsert = 0;
 		if (iNbOfSamples==0){
 			this->_content=0;
 			this->_paramQueue.clear();
-			aNbToInsert=0;
 		}else if(_length-this->_content>0) {
 			aNbToInsert=1;
 			this->_content+=aNbToInsert;
@@ -177,11 +176,10 @@ public:
 	}
 	
 	TMLLength removeSamples(TMLLength iNbOfSamples) {
-		TMLLength aNbToRemove;
+		TMLLength aNbToRemove = 0;
 		if (iNbOfSamples==0) {
 			this->_content=0;
 			this->_paramQueue.clear();
-			aNbToRemove=0;
 		} else if (this->_content>0) {
 			aNbToRemove=1;
 			this->_content-=aNbToRemove;
diff --git a/simulators/c++2/src_simulator/app/TMLEventFChannel.h b/simulators/c++2/src_simulator/app/TMLEventFChannel.h
index 7b300b79e941e0339311e1781a5b880f7fbfe842..72a6245bac1405fe71e0622aa35d443ef597f29a 100644
--- a/simulators/c++2/src_simulator/app/TMLEventFChannel.h
+++ b/simulators/c++2/src_simulator/app/TMLEventFChannel.h
@@ -86,7 +86,7 @@ public:
 	void write(TMLTransaction* iTrans){
 		if (this->_content<_length){		
 #ifdef LOSS_ENABLED
-			if (this->_maxNbOfLosses > this->_nbOfLosses && this->_lossRate!=0 && myrand(0,99) < this->_lossRate){
+			if (this->_maxNbOfLosses > this->_nbOfLosses && this->_lossRate!=0 && (unsigned int)myrand(0,99) < this->_lossRate){
 				this->_nbOfLosses++;
 			}else{
 #endif
@@ -155,11 +155,10 @@ public:
 	}
 
 	TMLLength insertSamples(TMLLength iNbOfSamples, Parameter* iParam){
-		TMLLength aNbToInsert;
+		TMLLength aNbToInsert = 0;
 		if (iNbOfSamples==0){
 			this->_content=0;
 			this->_paramQueue.clear();
-			aNbToInsert=0;
 		} else if (_length-this->_content>0) {
 			aNbToInsert=1;
 			this->_content+=aNbToInsert;
@@ -170,11 +169,10 @@ public:
 	}
 
 	TMLLength removeSamples(TMLLength iNbOfSamples) {
-		TMLLength aNbToRemove;
+		TMLLength aNbToRemove = 0;
 		if (iNbOfSamples==0) {
 			this->_content=0;
 			this->_paramQueue.clear();
-			aNbToRemove=0;
 		} else if (this->_content>0) {
 			aNbToRemove=1;
 			this->_content-=aNbToRemove;
diff --git a/simulators/c++2/src_simulator/app/TMLExeciCommand.h b/simulators/c++2/src_simulator/app/TMLExeciCommand.h
index 577ebed0037cd82f1e66a66718491db4b7d0f550..2cb13ca9c15e1c795544a7e96f4f759b1ef853fb 100644
--- a/simulators/c++2/src_simulator/app/TMLExeciCommand.h
+++ b/simulators/c++2/src_simulator/app/TMLExeciCommand.h
@@ -68,7 +68,7 @@ public:
 	std::string toShortString() const;
 	std::string toShortString(TMLLength aLength, TMLLength aProgress) const;
 	inline std::string getCommandStr() const {return "exe";}
-    inline unsigned int getExecType() override {return _execType;}
+    inline unsigned int getExecType() {return _execType;}
 protected:
 	TMLCommand* prepareNextTransaction();
 	///Pointer to the function returning the length of the command
diff --git a/simulators/c++2/src_simulator/app/TMLNotifiedCommand.h b/simulators/c++2/src_simulator/app/TMLNotifiedCommand.h
index 8ee0cc815a15cdcfb2eb87a060e88521ac1a6844..9b468a6829af85903d1bf9d7f7651b6281aa8812 100644
--- a/simulators/c++2/src_simulator/app/TMLNotifiedCommand.h
+++ b/simulators/c++2/src_simulator/app/TMLNotifiedCommand.h
@@ -63,6 +63,8 @@ public:
 	virtual ~TMLNotifiedCommand(){}
 	void execute();
 	inline TMLChannel* getChannel() const {return dynamic_cast<TMLChannel*>(_channel);}
+	inline unsigned int getNbOfChannels() const {return 1;}
+  inline TMLChannel* getChannel(unsigned int iIndex) const {return getChannel();}
 	std::string toString() const;
 	std::string toString(TMLLength aLength, TMLLength aProgress) const;
 	std::string toShortString() const;
diff --git a/simulators/c++2/src_simulator/app/TMLTask.cpp b/simulators/c++2/src_simulator/app/TMLTask.cpp
index aa68d606802432e61a6d644913b4634e6c22dfc3..55513329a2c131843c366ed71d9d3828f0bf9ef1 100644
--- a/simulators/c++2/src_simulator/app/TMLTask.cpp
+++ b/simulators/c++2/src_simulator/app/TMLTask.cpp
@@ -157,6 +157,7 @@ void TMLTask::getNextSignalChange(bool iInit, SignalChangeData* oSigData){
 				  new (oSigData) SignalChangeData(RUNNING, aCurrTrans->getStartTimeOperation(), this);
 				  break;
 				}
+				// fall through
 			case END_TRANS:
 				if (aCurrTrans->getRunnableTime() == _previousTransEndTime){
 					//outp << VCD_PREFIX << vcdValConvert(RUNNABLE) << "ta" << _ID;
@@ -574,7 +575,7 @@ void TMLTask::schedule2HTML(std::ofstream& myfile) const {
 			isBlankTooBig = true;
 			changeCssClass = true;
 		}
-		if ( aBlanks >= 0 && (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction()) ){
+		if (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction()){
 			listScale.push_back(aBlanks+1);
 			tempString << tempBlanks+1;
 			if (beg + 1 > listScaleTime.back()) {
diff --git a/simulators/c++2/src_simulator/arch/Bus.cpp b/simulators/c++2/src_simulator/arch/Bus.cpp
index 0a05936bae6b7cc89a58d4d6b03eb160e70e9430..7293f9ffd39a09d6761608a73551b6d709ecf203 100644
--- a/simulators/c++2/src_simulator/arch/Bus.cpp
+++ b/simulators/c++2/src_simulator/arch/Bus.cpp
@@ -348,6 +348,7 @@ void Bus::getNextSignalChange(bool iInit, SignalChangeData* oSigData){
 					//return 0;
 					return;
 				}
+				// fall through
 			case END_IDLE_BUS:
 			std::cout<<"BUS END_IDLE_BUS"<<std::endl;
 				if (aCurrTrans->getCommand()->getTask()==aCurrTrans->getChannel()->getBlockedReadTask()){
diff --git a/simulators/c++2/src_simulator/arch/CPU.cpp b/simulators/c++2/src_simulator/arch/CPU.cpp
index 9523ba63128745070cb249614668372e4a1057dd..3808fd7c6113870b2ee85d5a2e868fd9a8c34aee 100644
--- a/simulators/c++2/src_simulator/arch/CPU.cpp
+++ b/simulators/c++2/src_simulator/arch/CPU.cpp
@@ -194,7 +194,7 @@ std::cout << std::endl << "---- CPU HTML ----- " << std::endl;
   TransactionList _transactListClone;
   std::string taskList = iTracetaskList.c_str();
   maxScale = 0;
-  for (int z = 0; z < _transactList.size(); z++)
+  for (unsigned int z = 0; z < _transactList.size(); z++)
   {
     std::string taskName = _transactList[z]->getCommand()->getTask()->toString();
     std::size_t pos = taskList.find(taskName); /*pos1 = position of "bin" if we working with open model*/
@@ -267,7 +267,7 @@ std::cout << std::endl << "---- CPU HTML ----- " << std::endl;
 
         
 
-        if (aBlanks >= 0 && (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction()))
+        if (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction())
         {
           listScale.push_back(aBlanks + 1);
           std::cout << "ListScale: " <<  (aBlanks + 1) << std::endl;
@@ -518,7 +518,7 @@ void CPU::HW2HTML(std::ofstream &myfile) const
           isBlankTooBig = true;
           changeCssClass = true;
         }
-        if (aBlanks >= 0 && (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction()))
+        if (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction())
         {
           listScale.push_back(aBlanks + 1);
           tempString << tempBlanks + 1;
@@ -699,7 +699,7 @@ void CPU::schedule2HTML(std::ofstream &myfile) const
           isBlankTooBig = true;
           changeCssClass = true;
         }
-        if (aBlanks >= 0 && (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction()))
+        if (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction())
         {
           listScale.push_back(aBlanks + 1);
           tempString << tempBlanks + 1;
diff --git a/simulators/c++2/src_simulator/arch/FPGA.cpp b/simulators/c++2/src_simulator/arch/FPGA.cpp
index 7458dd390289ae2039eeaf9047503e3453ab109a..e43da25d6acd38bc3db4e9674ae2eb0bbbcd1676 100644
--- a/simulators/c++2/src_simulator/arch/FPGA.cpp
+++ b/simulators/c++2/src_simulator/arch/FPGA.cpp
@@ -475,6 +475,8 @@ void FPGA::getNextSignalChange(bool iInit, SignalChangeData *oSigData)
           aCurrTrans->setTransVcdOutPutState(END_TASK_TRANS);
           new (oSigData) SignalChangeData(END_TASK_TRANS, aCurrTrans->getStartTime(), this);
 
+          break;
+        case END_PENALTY_TRANS:
           break;
         }
       }
@@ -765,7 +767,7 @@ std::map<TMLTask *, std::string> FPGA::HWTIMELINE2HTML(std::ostringstream &myfil
   TransactionList _transactListClone;
   std::string taskList = iTracetaskList.c_str();
   maxScale = 0;
-  for (int z = 0; z < _transactList.size(); z++)
+  for (unsigned int  z = 0; z < _transactList.size(); z++)
   {
     std::string taskName = _transactList[z]->getCommand()->getTask()->toString();
     std::size_t pos = taskList.find(taskName); /*pos1 = position of "bin" if we working with open model*/
@@ -857,7 +859,7 @@ std::map<TMLTask *, std::string> FPGA::HWTIMELINE2HTML(std::ostringstream &myfil
         {
           tempReconfigIdle << " ";
         }
-        if (aBlanks >= 0 && (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction()))
+        if (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction())
         {
           listScale.push_back(aBlanks + 1);
           tempString << tempBlanks + 1;
@@ -1072,7 +1074,7 @@ void FPGA::HW2HTML(std::ofstream &myfile)
           isBlankTooBig = true;
           changeCssClass = true;
         }
-        if (aBlanks >= 0 && (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction()))
+        if (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction())
         {
           listScale.push_back(aBlanks + 1);
           tempString << tempBlanks + 1;
@@ -1236,7 +1238,7 @@ void FPGA::schedule2HTML(std::ofstream &myfile)
           changeCssClass = true;
         }
 
-        if (aBlanks >= 0 && (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction()))
+        if (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction())
         {
           listScale.push_back(aBlanks + 1);
           tempString << tempBlanks + 1;
@@ -1272,7 +1274,7 @@ void FPGA::schedule2HTML(std::ofstream &myfile)
         unsigned int aLength = aCurrTrans->getOperationLength();
 
         // Issue #4
-        TMLTask *task = aCurrTrans->getCommand()->getTask();
+        //  TMLTask *task = aCurrTrans->getCommand()->getTask();
         //	std::cout<<"what is this task?"<<task->toString()<<std::endl;
         const std::string cellClass = determineHTMLCellClass(nextCellClassIndex);
         if (!(!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction()))
diff --git a/simulators/c++2/src_simulator/arch/MultiCoreCPU.cpp b/simulators/c++2/src_simulator/arch/MultiCoreCPU.cpp
index 118e6de0b73a36a961aef3d062cb959272209cc8..fbe97a71b32dbc17806dc7ce77f28153799a1758 100644
--- a/simulators/c++2/src_simulator/arch/MultiCoreCPU.cpp
+++ b/simulators/c++2/src_simulator/arch/MultiCoreCPU.cpp
@@ -611,7 +611,7 @@ std::cout << std::endl << "---- Multicore HTML ----- " << std::endl;
         isBlankTooBig = true;
         changeCssClass = true;
     }
-    if ( aBlanks >= 0 && (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction()) ){
+    if (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction()){
 
         listScale.push_back(aBlanks+1);
         std::cout << "ListScale: " << (aBlanks+1) << '\n';
diff --git a/simulators/c++2/src_simulator/arch/OrderScheduler.cpp b/simulators/c++2/src_simulator/arch/OrderScheduler.cpp
index c2e3a67f8993f01305b59ec190dac48032f320d2..e5148f1d4e9dd98e0b7109e4351c22d6dd5ac6df 100644
--- a/simulators/c++2/src_simulator/arch/OrderScheduler.cpp
+++ b/simulators/c++2/src_simulator/arch/OrderScheduler.cpp
@@ -51,7 +51,7 @@ TMLTime OrderScheduler::schedule(TMLTime iEndSchedule){
 	TaskList::iterator i;
 
     //std::cout << _name << ": Schedule called \n";
-    TMLTransaction *anOldTransaction = _nextTransaction, *aTempTrans;
+    TMLTransaction *aTempTrans;
     TMLTime aLowestRunnableTimeFuture=-1, aRunnableTime, aLowestRunnableTimePast=-1;
     WorkloadSource *aSourcePast=0, *aSourceFuture=0;
         //std::cout << _name << ": Second if\n";
diff --git a/simulators/c++2/src_simulator/arch/ReconfigScheduler.cpp b/simulators/c++2/src_simulator/arch/ReconfigScheduler.cpp
index 95c2d6af7cc4b62c30a2078c46d1e16f3296d41e..85ffe77eeb8d458265594257133dd9584f1d9dbb 100644
--- a/simulators/c++2/src_simulator/arch/ReconfigScheduler.cpp
+++ b/simulators/c++2/src_simulator/arch/ReconfigScheduler.cpp
@@ -49,9 +49,9 @@ ReconfigScheduler::ReconfigScheduler(const std::string& iName, Priority iPrio, W
 TMLTime ReconfigScheduler::schedule(TMLTime iEndSchedule){
   std::cout<<"reconfig scheduler"<<std::endl;
 	TaskList::iterator i;
-	TMLTransaction *aMarkerPast=0, *aMarkerFuture=0,*aTempTrans;
+	TMLTransaction *aMarkerPast=0, *aTempTrans;
 	TMLTask* aTempTask;
-	TMLTime aTransTimeFuture=-1,aRunnableTime,aLowestRunnableTimePast=-1;;
+	TMLTime aRunnableTime,aLowestRunnableTimePast=-1;;
 	WorkloadSource *aSourcePast=0, *aSourceFuture=0;  //NEW
 	std::vector<std::string> getTaskOrder;
     std::string _tempTaskOrder, taskOrderCopy;
@@ -80,7 +80,7 @@ TMLTime ReconfigScheduler::schedule(TMLTime iEndSchedule){
 	    std::cout<<"taskName "<<taskName.substr(indexTask+1,taskNameLength)<<std::endl;
 #endif
         // set priority to task base on order of user
-        for(int z = 0; z < getTaskOrder.size(); z++){
+        for(unsigned int z = 0; z < getTaskOrder.size(); z++){
              std::string::size_type position=getTaskOrder[z].find(taskName.substr(indexTask+1,taskNameLength));
                     if(position!=_tempTaskOrder.npos){
                         (*i)->setPriority(z);
diff --git a/simulators/c++2/src_simulator/arch/SchedulableDevice.cpp b/simulators/c++2/src_simulator/arch/SchedulableDevice.cpp
index 7c306e487d81a8927021eb06182b81b5194f82e6..240425701f7c5f4ff1186aeba38132324e693546 100644
--- a/simulators/c++2/src_simulator/arch/SchedulableDevice.cpp
+++ b/simulators/c++2/src_simulator/arch/SchedulableDevice.cpp
@@ -339,7 +339,7 @@ std::map<TMLTask *, std::string> SchedulableDevice::HWTIMELINE2HTML(std::ostring
   TransactionList _transactListClone;
   std::string taskList = iTracetaskList.c_str();
   maxScale = 0;
-  for (int z = 0; z < _transactList.size(); z++)
+  for (unsigned int  z = 0; z < _transactList.size(); z++)
   {
     std::string taskName = _transactList[z]->getCommand()->getTask()->toString();
     std::size_t pos = taskList.find(taskName); /*pos1 = position of "bin" if we working with open model*/
@@ -400,7 +400,7 @@ std::map<TMLTask *, std::string> SchedulableDevice::HWTIMELINE2HTML(std::ostring
         isBlankTooBig = true;
         changeCssClass = true;
       }
-      if (aBlanks >= 0 && (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction()))
+      if (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction())
       {
         // std::cout << "Case blank #1: assign transaction " << aCurrTrans->toShortString() << std::endl;
         listScale.push_back(aBlanks + 1);
@@ -647,7 +647,7 @@ void SchedulableDevice::HW2HTML(std::ofstream &myfile) const
         isBlankTooBig = true;
         changeCssClass = true;
       }
-      if (aBlanks >= 0 && (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction()))
+      if (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction())
       {
         listScale.push_back(aBlanks + 1);
         tempString << tempBlanks + 1;
@@ -834,7 +834,7 @@ void SchedulableDevice::schedule2HTML(std::ofstream &myfile) const
         isBlankTooBig = true;
         changeCssClass = true;
       }
-      if (aBlanks >= 0 && (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction()))
+      if (!(aCurrTrans->getCommand()->getActiveDelay()) && aCurrTrans->getCommand()->isDelayTransaction())
       {
 
         listScale.push_back(aBlanks + 1);
diff --git a/simulators/c++2/src_simulator/definitions.h b/simulators/c++2/src_simulator/definitions.h
index 46726be2dc50151cb0ad78173c57ea3211e5ab69..2cf89988ce176ca67ec4a4841ac8e1e8e46c2c61 100644
--- a/simulators/c++2/src_simulator/definitions.h
+++ b/simulators/c++2/src_simulator/definitions.h
@@ -72,6 +72,7 @@ Ludovic Apvrille, Renaud Pacalet
 #include <sys/resource.h>
 #include <unistd.h>
 #include "penalties.h"
+#include <assert.h>
 
 
 #define WRITE_STREAM(s,v) s.write((char*) &v,sizeof(v)); 
@@ -275,7 +276,7 @@ using std::max;
 #define SCHED_HTML_TITLE_HW "<h1> Summary HW </h1>"
 #define SCHED_HTML_TITLE_TASK "<h1> Summary tasks </h1>"
 #define SCHED_HTML_TITLE_DEVICE "<h1> Device scheduling </h1>"
-#define SCHED_HTML_BOARD "<table width=\"170px\" style=\"float: left\">\n \<tr><td style=\"max-width: unset;\">"
+#define SCHED_HTML_BOARD "<table width=\"170px\" style=\"float: left\">\n <tr><td style=\"max-width: unset;\">"
 #define SCHED_HTML_BOARD2 "<table style=\"float: left\">"
 
 #define SCHED_HTML_JS_LINK1 "<script src=\"https://code.jquery.com/jquery-3.4.1.min.js\">"
@@ -684,7 +685,9 @@ typedef std::deque<Parameter* > ParamQueue;
 ///Type of member function pointer used to indicate a function encapsulating a condition (for TMLChoiceCommand)
 typedef unsigned int (TMLTask::*CondFuncPointer) ();
 ///Type of member function pointer used to indicate a function encapsulating an action (for TMLActionCommand)
-typedef int (TMLTask::*ActionFuncPointer) ();
+typedef void (TMLTask::*ActionFuncPointer) ();
+///Type of member function pointer used to indicate a function encapsulating a delay action (for TMLDelayCommand)
+typedef TMLTime (TMLTask::*DelayActionFuncPointer) ();
 ///Type of member function pointer used to indicate a function encapsulating a condition (for TMLChoiceCommand)
 typedef TMLTime (TMLTask::*LengthFuncPointer) ();
 ///Type of pointer to indicate a function encapsulating a TEPE condition
@@ -775,15 +778,15 @@ inline T StringToNum(const std::string& iStr){
 */
 template<typename T>
 T* array(unsigned int noArgs, T arg1 ...){
-	T arg=arg1;
+	assert(noArgs > 0);
 	T* newArray;
 	unsigned int i;
 	va_list args; // argument list
 	va_start(args, arg1); // initialize args
 	newArray=new T[noArgs];
-	for (i=0;i<noArgs;i++){
-		newArray[i]=arg;
-		arg=va_arg(args, T);
+	newArray[0] = arg1;
+	for (i=1;i<noArgs;i++){
+		newArray[i]=va_arg(args, T);
 	}
 	va_end(args); // clean up args
 	return newArray;
@@ -841,7 +844,7 @@ namespace std{
 		return p1->_time > p2->_time;
 	}
 	};
-};
+}
 
 ///Priority queue for SignalChangeData objects, keeps track of the temporal ordering of signal changes (for VCD output)
 typedef std::priority_queue<SignalChangeData*, std::vector<SignalChangeData*>, std::greater<SignalChangeData*> > SignalChangeQueue;
diff --git a/simulators/c++2/src_simulator/evt/ListenersSimCmd.cpp b/simulators/c++2/src_simulator/evt/ListenersSimCmd.cpp
index 918ea3ae24d40646e444046f6ddff62d550b71d1..a469357ea430ca4da1cec3f99f92d39a4e750ac4 100644
--- a/simulators/c++2/src_simulator/evt/ListenersSimCmd.cpp
+++ b/simulators/c++2/src_simulator/evt/ListenersSimCmd.cpp
@@ -159,7 +159,7 @@ CondBreakpoint::CondBreakpoint(SimComponents* iSimComp, std::string iCond, TMLTa
 		std::cout << "Error " << dlerror() << " occurred when opening shared library.\n";
 		return;
 	}
-	_condFunc = (BreakCondFunc) dlsym( _dlHandle, "condFunc");
+	_condFunc = (BreakCondFunc)(intptr_t) dlsym( _dlHandle, "condFunc");
 	if (dlerror() != NULL) {
 		std::cout << "Error when getting function handle\n";
     		return;
diff --git a/simulators/c++2/src_simulator/sim/ServerHelp.cpp b/simulators/c++2/src_simulator/sim/ServerHelp.cpp
index bc95e02cd81672d9af2346bc2c399a9cda3a05ef..c71ea9537a2056f32b6fe5c77d5a7be4d3decbf5 100644
--- a/simulators/c++2/src_simulator/sim/ServerHelp.cpp
+++ b/simulators/c++2/src_simulator/sim/ServerHelp.cpp
@@ -95,12 +95,10 @@ void ServerHelp::parseHtml(std::string filePath) {
     std::string searchEnd = "</tr>";
     std::string delimiter = "</td>";
 //    std::string breakLine = "<br />";
-    unsigned int curLine = 0;
 
     std::istringstream data(filePath.c_str());
 
     while(std::getline(data, line)) {
-        curLine++;
         if (line.find(searchStart1, 0) != std::string::npos || line.find(searchStart2, 0) != std::string::npos) {
             check = true;
             continue;
@@ -200,4 +198,4 @@ std::vector<std::string> ServerHelp::splitData (std::string s, std::string delim
         token = trim(token.substr(pos + 2));
     res.push_back(token);
     return res;
-}
\ No newline at end of file
+}
diff --git a/simulators/c++2/src_simulator/sim/ServerHelp.h b/simulators/c++2/src_simulator/sim/ServerHelp.h
index 42bc3e450b4b622296fd7fda8b4cf15c1b85f976..297d87519071c4a5397bc00b25a2f5c837621e36 100644
--- a/simulators/c++2/src_simulator/sim/ServerHelp.h
+++ b/simulators/c++2/src_simulator/sim/ServerHelp.h
@@ -86,4 +86,4 @@ public:
 	std::map <std::string, std::string> aliasMapWithName;
 	std::string helpServerContent;
 
-};
\ No newline at end of file
+};
diff --git a/simulators/c++2/src_simulator/sim/ServerLocal.cpp b/simulators/c++2/src_simulator/sim/ServerLocal.cpp
index b1bf9a6de0f30a9f971a3c0024a33897da6263b2..4243f491504d69a894ebb304047b0dbbcd51286b 100644
--- a/simulators/c++2/src_simulator/sim/ServerLocal.cpp
+++ b/simulators/c++2/src_simulator/sim/ServerLocal.cpp
@@ -49,7 +49,7 @@ int ServerLocal::run(){
 	char aCmd[BUFFER_SIZE];
 	int aNumberOfBytes;
 	if (aCmdFileH.is_open()){
-		std::cout << "Reading command file " << aCmdFileH << std::endl;
+		std::cout << "Reading command file " << _cmdFile << std::endl;
 		while(!(_syncInfo->_terminate || aCmdFileH.eof())) {
 			aCmdFileH.getline(aCmd,BUFFER_SIZE-1);
 			aNumberOfBytes=strlen(aCmd);
diff --git a/simulators/c++2/src_simulator/sim/Simulator.cpp b/simulators/c++2/src_simulator/sim/Simulator.cpp
index 90ab98b8d7559fe6232a747f7a67e5d98e9beb5b..83a6d722c721888ca13de3c8aab82e37b888b008 100644
--- a/simulators/c++2/src_simulator/sim/Simulator.cpp
+++ b/simulators/c++2/src_simulator/sim/Simulator.cpp
@@ -1124,6 +1124,8 @@ bool Simulator::simulate(TMLTransaction *&oLastTrans) {
   //  bool isHanging = false;
   //  long countMaxTrans = 0;
 
+  oLastTrans = NULL;
+
 #ifdef DEBUG_KERNEL
   std::cout << "kernel:simulate: first schedule" << std::endl;
 #endif
@@ -1487,9 +1489,9 @@ std::string to_string(const T &n)
   return stm.str();
 }
 
-int countLineNumber(std::string &filename)
+unsigned int countLineNumber(std::string &filename)
 {
-  int number_of_lines = 0;
+  unsigned int number_of_lines = 0;
   std::string line;
   std::ifstream myfile(filename.c_str());
 
@@ -1563,10 +1565,10 @@ ServerIF *Simulator::run(int iLen, char **iArgs)
   aArgString = getArgs("-signals", "signals.txt", iLen, iArgs);
   if (!aArgString.empty())
   {
-    int lineNumber = countLineNumber(aArgString);
+    unsigned int lineNumber = countLineNumber(aArgString);
     std::vector<std::string> parameters = readFromFile(aArgString);
     std::string aNewCmd;
-    int previousTransTime = 0;
+    unsigned int previousTransTime = 0;
     if ((parameters.size() != (lineNumber * 4)))
     {
       std::cout << "Error: Wrong format, each line should contains 4 parameters.\n";
@@ -1575,7 +1577,7 @@ ServerIF *Simulator::run(int iLen, char **iArgs)
     {
       if (lineNumber != 0)
       {
-        for (int i = 0; i < lineNumber; i++)
+        for (unsigned int i = 0; i < lineNumber; i++)
         {
           std::string channelName = _simComp->getChannelList(parameters[i * 4 + 1]);
           TMLChannel *t = _simComp->getChannelByName(channelName);
@@ -2473,6 +2475,7 @@ void Simulator::decodeCommand(std::string iCmd, std::ostream &iXmlOutStream)
     case 3: // XML
       aGlobMsg << TAG_MSGo << "Schedule output in XML format" << TAG_MSGc << std::endl;
       schedule2XML(anEntityMsg, aStrParam);
+      break;
     case 4:
     { // Timeline diagram
       aGlobMsg << TAG_MSGo << "Schedule output in timeline format" << TAG_MSGc << std::endl;
@@ -2540,7 +2543,13 @@ void Simulator::decodeCommand(std::string iCmd, std::ostream &iXmlOutStream)
     aInpStream >> aParam1;
 
     std::cout << "printhtis" << std::endl;
-    std::cout << TAG_MSGo << oLastTrans->toString() << aStrParam << TAG_MSGc << std::endl;
+    std::string oLastTransString;
+    if (oLastTrans == NULL) {
+      oLastTransString = "<null>";
+    } else {
+      oLastTransString = oLastTrans->toString();
+    }
+    std::cout << TAG_MSGo << oLastTransString << aStrParam << TAG_MSGc << std::endl;
     switch (aParam1)
     {
     case 0:
@@ -2737,6 +2746,7 @@ void Simulator::decodeCommand(std::string iCmd, std::ostream &iXmlOutStream)
     std::cout << "Calculate latencies between " << aParam1 << " and " << aParam2 << std::endl;
     addLatencyIds(aParam1, aParam2);
     std::cout << "latencies " << &anEntityMsg << std::endl;
+    break;
   case 25: // Get list of all transactions belogn to a task
     aInpStream >> aStrParam;
     std::cout << "Get list of all transactions belong to " << aStrParam << std::endl;
diff --git a/simulators/c++av/src_simulator/definitions.h b/simulators/c++av/src_simulator/definitions.h
index f3f9279a51a615feb1e070fb0c19b30a082c5d02..09519370a80c1df423fadb43f0db605e47493f0d 100644
--- a/simulators/c++av/src_simulator/definitions.h
+++ b/simulators/c++av/src_simulator/definitions.h
@@ -64,6 +64,7 @@ Ludovic Apvrille, Renaud Pacalet
 #include <netinet/in.h>
 #include <pthread.h>
 #include <dlfcn.h> 
+#include <assert.h>
 
 #define xx__VARS(a1, a2, a3, a4, a5, a6, a7, a8, ...) (void*)&(a1), sizeof(a1), (void*)&(a2), sizeof(a2), (void*)&(a3), sizeof(a3), (void*)&(a4), sizeof(a4), (void*)&(a5), sizeof(a5), (void*)&(a6), sizeof(a6), (void*)&(a7), sizeof(a7), (void*)&(a8), sizeof(a8)
 #define xx__SIZE(a1, a2, a3, a4, a5, a6, a7, a8, ...) sizeof(a1)+sizeof(a2)+sizeof(a3)+sizeof(a4)+sizeof(a5)+sizeof(a6)+sizeof(a7)+sizeof(a8)
@@ -138,15 +139,14 @@ public:
 */
 template<typename T>
 T* array(unsigned int noArgs, T arg1 ...){
-	T arg=arg1;
+	assert(noArgs > 0);
 	T* newArray;
 	unsigned int i;
 	va_list args; // argument list
 	va_start(args, arg1); // initialize args
 	newArray=new T[noArgs];
-	for (i=0;i<noArgs;i++){
-		newArray[i]=arg;
-		arg=va_arg(args, T);
+	for (i=1;i<noArgs;i++){
+		newArray[i]=va_arg(args, T);
 	}
 	va_end(args); // clean up args
 	return newArray;
diff --git a/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java b/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java
index 0c0d7a9d1b59e4a147a248d72b7a8d834d95dbc5..1069857f6a7ae791f7be1131314336351d045ed2 100644
--- a/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java
+++ b/src/main/java/tmltranslator/tomappingsystemc2/MappedSystemCTask.java
@@ -587,10 +587,10 @@ public class MappedSystemCTask {
                     idString = String.valueOf(currElem.getID());
                 }
                 hcode += "TMLDelayCommand " + cmdName + SCCR;
-                initCommand += "," + cmdName + "(" + idString + ",this,1,(ActionFuncPointer)&" + reference + "::" + cmdName +
+                initCommand += "," + cmdName + "(" + idString + ",this,1,(DelayActionFuncPointer)&" + reference + "::" + cmdName +
                                "_func," +
                                " " + getFormattedLiveVarStr(currElem) + ", " + delay.getActiveDelay() + ")" + CR;
-                //initCommand += "," + cmdName + "(" + idString + ",this,"+ delayLen +",(ActionFuncPointer)&" + reference + "::" + cmdName +
+                //initCommand += "," + cmdName + "(" + idString + ",this,"+ delayLen +",(DelayActionFuncPointer)&" + reference + "::" + cmdName +
                  //       "_func," +
                  //       " " + getFormattedLiveVarStr(currElem) + ", " + delay.getActiveDelay() + ")" + CR;
                 nextCommand = cmdName + ".setNextCommand(array(1,(TMLCommand*)" + makeCommands(currElem.getNextElement(0), false, retElement, null) + "));\n";
@@ -845,6 +845,7 @@ public class MappedSystemCTask {
                             noOfGuards++;
                         }
                     }
+                    code += "assert(false)" + SCCR + "abort()" + SCCR;
 
                 } else {
                     int indElseGuard = choice.getElseGuard(), newIndElseGuard = -1;
@@ -1131,7 +1132,10 @@ public class MappedSystemCTask {
         //code += "ParamType arg2__req" + SCCR;
         //code += "ParamType arg3__req" + SCCR;
         code += "ParamType rnd__0" + SCCR;
-        code += "TMLChannel* _channels[" + (channels.size() + events.size() + (task.isRequested() ? 1 : 0)) + "]" + SCCR;
+        int num = channels.size() + events.size() + (task.isRequested() ? 1 : 0);
+        if (num > 0) {
+          code += "TMLChannel* _channels[" + num + "]" + SCCR;
+        }
         return code;
     }
 
diff --git a/src/main/java/tmltranslator/tomappingsystemc2/Penalties.java b/src/main/java/tmltranslator/tomappingsystemc2/Penalties.java
index c9f8ad5da934e02aead7e9f83bd23376f93b0398..4ebac721f047df85551fa1b6f4834b54599e8207 100644
--- a/src/main/java/tmltranslator/tomappingsystemc2/Penalties.java
+++ b/src/main/java/tmltranslator/tomappingsystemc2/Penalties.java
@@ -106,9 +106,9 @@ public class Penalties {
 
         data = FILE_HEADER + "\n";
         if (mustHandlePenalties) {
-            data += ACTIVATED;
+            data += ACTIVATED + "\n";
         } else {
-            data += NOT_ACTIVATED;
+            data += NOT_ACTIVATED + "\n";
         }
 
         try {