diff --git a/src/dseengine/DSEConfiguration.java b/src/dseengine/DSEConfiguration.java
index d9617a95ad78dfc1abb52762afb1c97af1814b70..a2cd620b10f97d1f903359fd0eb9f804657e9756 100755
--- a/src/dseengine/DSEConfiguration.java
+++ b/src/dseengine/DSEConfiguration.java
@@ -94,7 +94,7 @@ public class DSEConfiguration implements Runnable  {
 	private File taskModelFile = null;
 	
 	private boolean outputVCD = false;
-	private boolean outputHTML = false;
+	private boolean outputHTML = true;
 	private boolean outputTXT = false;
 	private boolean outputXML = false;
 	
diff --git a/src/tmltranslator/HwBridge.java b/src/tmltranslator/HwBridge.java
index 3a288d4031b402aa0413b1f5792b80493ef0ceb4..93560e8f4d655df7d6ba040464c6aa0e3227ac6b 100755
--- a/src/tmltranslator/HwBridge.java
+++ b/src/tmltranslator/HwBridge.java
@@ -50,11 +50,10 @@ import java.util.*;
 
 public class HwBridge extends HwCommunicationNode  {
 	
-	public static final int DEFAULT_BUFFER_BYTE_DATA_SIZE = 4;
-	
-    public int bufferByteSize = DEFAULT_BUFFER_BYTE_DATA_SIZE; // In bytes. Should more than 0
+    public static final int DEFAULT_BUFFER_BYTE_DATA_SIZE = 4;
     public boolean isFirewall;
-    public ArrayList<String> firewallRules = new ArrayList<String>();
+    public ArrayList<String> firewallRules = new ArrayList<String>();	
+    public int bufferByteSize = DEFAULT_BUFFER_BYTE_DATA_SIZE; // In bytes. Should more than 0
     public HwBridge(String _name) {
 		super(_name);
     }
diff --git a/src/tmltranslator/HwCPU.java b/src/tmltranslator/HwCPU.java
index 42b266d8551308ce48e375b5f2718bdcdfec30fe..35e63f80b39c2e26c26e369b6b52eee4948eb3c9 100755
--- a/src/tmltranslator/HwCPU.java
+++ b/src/tmltranslator/HwCPU.java
@@ -79,7 +79,6 @@ public class HwCPU extends HwExecutionNode  {
 	public int sliceTime = DEFAULT_SLICE_TIME;
 	public ArchUnitMEC MEC = DEFAULT_MODEL_EXTENSION_CONSTRUCT;
 	
-	
     public HwCPU(String _name) {
 		super(_name);
 		maximumNbOfTasks = 100;
diff --git a/src/tmltranslator/TMLArchitecture.java b/src/tmltranslator/TMLArchitecture.java
index 26d721f60268b0c03cb4b35530b53ff7e8841de8..2e7169674f21c57ac5b029a8cf61a73ec7db4953 100755
--- a/src/tmltranslator/TMLArchitecture.java
+++ b/src/tmltranslator/TMLArchitecture.java
@@ -286,7 +286,18 @@ public class TMLArchitecture {
         }
         return null;
     }
-
+    public List<HwBridge> getFirewalls(){
+	List<HwBridge> firewalls= new ArrayList<HwBridge>();
+	for (HwNode node:hwnodes){
+	    if (node instanceof HwBridge){
+		HwBridge bridge= (HwBridge)node;
+		if (bridge.isFirewall){
+		    firewalls.add(bridge);
+		}
+	    }
+	}
+	return firewalls;
+    }
     public HwCPU getHwCPUByName(String _name) {
         for(HwNode node: hwnodes) {
             if (node.getName().equals(_name)) {
@@ -384,5 +395,13 @@ public class TMLArchitecture {
 
         return complexity;
     }
-
+    public void replaceFirewall(HwBridge firewall, HwCPU newCPU){
+	hwnodes.remove(firewall);
+	addHwNode(newCPU);
+	for (HwLink link:hwlinks){
+	    if (link.hwnode==firewall){
+		link.hwnode=newCPU;
+	    }
+	}
+    }
 }
diff --git a/src/ui/GTMLModeling.java b/src/ui/GTMLModeling.java
index 7c759a58ef59fbbaf49f883409c50010249a3cb2..03f6eb0c0a7aa348734dd9e56b63febf9ded753e 100755
--- a/src/ui/GTMLModeling.java
+++ b/src/ui/GTMLModeling.java
@@ -3365,8 +3365,15 @@ if (tgc instanceof TMLArchiCrossbarNode) {
             }
 
         }
-	if (map.firewall){
-	    TMLTask firewall = new TMLTask("Firewall", null,null);
+	
+	for (HwBridge firewallNode:map.getTMLArchitecture().getFirewalls()){
+
+	TMLCPrimitiveComponent firewallComp = new TMLCPrimitiveComponent(0, 0, tmlcdp.tmlctdp.getMinX(), tmlcdp.tmlctdp.getMaxX(), tmlcdp.tmlctdp.getMinY(), tmlcdp.tmlctdp.getMaxY(), false, null, tmlcdp.tmlctdp);
+	firewallComp.setValueWithChange(firewallNode.getName());
+	tmlcdp.tmlctdp.addComponent(firewallComp,0,0,false,true);
+	TMLActivityDiagramPanel firewallADP = tmlcdp.getTMLActivityDiagramPanel(firewallNode.getName());
+
+	    TMLTask firewall = new TMLTask("task"+firewallNode.getName(), firewallComp,firewallADP);
 	    HashMap<TMLChannel, TMLChannel> inChans = new HashMap<TMLChannel, TMLChannel>();
 	    HashMap<TMLChannel, TMLChannel> outChans = new HashMap<TMLChannel, TMLChannel>();	
 	    ArrayList<TMLChannel> channelsCopy = tmlm.getChannels();
@@ -3388,20 +3395,95 @@ if (tgc instanceof TMLArchiCrossbarNode) {
 	    for (TMLChannel c:toAdd){
 	    	tmlm.addChannel(c);
 	    }
+
+	tmlm.addTask(firewall);
+	
 	TMLActivity act = firewall.getActivityDiagram();
-	TMLStartState start = new TMLStartState("start", null);
+	TMLADStartState adStart = (TMLADStartState) firewallADP.getComponentList().get(0);
+	TMLStartState start = new TMLStartState("start", firewallADP.getComponentList().get(0));
 	act.setFirst(start);
-	tmlm.addTask(firewall);
-	TMLForLoop loop = new TMLForLoop("infiniteloop",null);
+	/*
+	TMLForLoop loop = new TMLForLoop("infiniteloop",firewallADP.getComponentList().get(0));
+	loop.setInit("");
+        loop.setCondition("");
+        loop.setIncrement("");
 	loop.setInfinite(true);
 	start.addNext(loop);
 	act.addElement(loop);
-	TMLChoice choice = new TMLChoice("chooseChannel", null);
+	TMLChoice choice = new TMLChoice("chooseChannel", firewallADP.getComponentList().get(0));
 	act.addElement(choice);
 	loop.addNext(choice);
+	*/
+	TMLADChoice adChoice = new TMLADChoice(200,100, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false,null, firewallADP);
+	firewallADP.addComponent(adChoice, 100,100,false,true);
+	
+	TGConnector tmp =new TGConnectorTMLAD(adChoice.getX(), adChoice.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null,firewallADP,adStart.getTGConnectingPointAtIndex(0), adChoice.getTGConnectingPointAtIndex(0), new Vector());
+	firewallADP.addComponent(tmp, adChoice.getX(),adChoice.getY(),false,true);
+
+
+	TMLChoice choice = new TMLChoice("chooseChannel", adChoice);
+	act.addElement(choice);
+	start.addNext(choice);
+	
+	TMLComponentTaskDiagramPanel tcdp =tmlcdp.tmlctdp;
+
+	for (TMLChannel chan: inChans.keySet()){
+	    TMLChannel newChan = inChans.get(chan);
+	    TMLCChannelOutPort originPort = new TMLCChannelOutPort(0, 0, tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, null, tcdp);
+	    TMLCChannelOutPort destPort = new TMLCChannelOutPort(0, 0, tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, null, tcdp);
+	    for (TGComponent tg: tcdp.getComponentList()){
+		if (tg instanceof TMLCPrimitiveComponent){
+		    if (tg.getValue().equals(newChan.getOriginTask().getName().split("__")[1])){
+			originPort = new TMLCChannelOutPort(tg.getX(), tg.getY(), tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, tg, tcdp);
+			originPort.commName=newChan.getName();
+			tcdp.addComponent(originPort,tg.getX(), tg.getY(),true,true);
+		    }
+		    else if (tg.getValue().equals(firewallNode.getName())){
+			destPort = new TMLCChannelOutPort(tg.getX(), tg.getY(), tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, tg, tcdp);
+			destPort.isOrigin=false;
+			destPort.commName=newChan.getName();
+			tcdp.addComponent(destPort,tg.getX(), tg.getY(),true,true);
+		    }
+	    	}
+	    }
+	    TMLCPortConnector conn = new TMLCPortConnector(0, 0, tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, null, tcdp, originPort.getTGConnectingPointAtIndex(0), destPort.getTGConnectingPointAtIndex(0), new Vector());
+	    tcdp.addComponent(conn, 0,0,false,true);
+	     
+	    TMLChannel wrChan = outChans.get(chan);
+	    /*for (TGComponent tg: tcdp.getComponentList()){
+		if (tg instanceof TMLCPrimitiveComponent){
+		    if (tg.getValue().equals(firewallNode.getName())){
+			originPort = new TMLCChannelOutPort(tg.getX(), tg.getY(), tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, tg, tcdp);
+			originPort.commName=wrChan.getName();
+			tcdp.addComponent(originPort,tg.getX(), tg.getY(),true,true);
+		    }
+		    else if (tg.getValue().equals(wrChan.getDestinationTask().getName().split("__")[1])){
+			destPort = new TMLCChannelOutPort(tg.getX(), tg.getY(), tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, tg, tcdp);
+			destPort.isOrigin=false;
+			destPort.commName=wrChan.getName();
+			tcdp.addComponent(destPort,tg.getX(), tg.getY(),true,true);
+		    }
+	    	}
+	    }
+	    conn = new TMLCPortConnector(0, 0, tcdp.getMinX(), tcdp.getMaxX(), tcdp.getMinY(), tcdp.getMaxX(), true, null, tcdp, originPort.getTGConnectingPointAtIndex(0), destPort.getTGConnectingPointAtIndex(0), new Vector());
+	    tcdp.addComponent(conn, 0,0,false,true);
+	    */
+	}
+
+	int xpos=200;
+	int i=1;
 	for (TMLChannel chan: inChans.keySet()){
+	    //Add Ports to Component Diagram
 	    TMLChannel newChan = inChans.get(chan);
-	    TMLReadChannel rd = new TMLReadChannel(newChan.getName(), chan.getReferenceObject());
+	    TMLADReadChannel adRC = new TMLADReadChannel(xpos,150, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false,null, firewallADP);
+	    adRC.setChannelName(newChan.getName());
+	    adRC.setSamples("1");
+
+	    tmp =new TGConnectorTMLAD(adChoice.getX(), adChoice.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null,firewallADP,adChoice.getTGConnectingPointAtIndex(i), adRC.getTGConnectingPointAtIndex(0), new Vector());
+	    firewallADP.addComponent(tmp, adChoice.getX(),adChoice.getY(),false,true);
+
+	    firewallADP.addComponent(adRC,xpos,150,false,true);
+	    TMLReadChannel rd = new TMLReadChannel(newChan.getName(), adRC);
 	    rd.setNbOfSamples("1");
 	    rd.addChannel(newChan);
 	    choice.addNext(rd);
@@ -3409,7 +3491,16 @@ if (tgc instanceof TMLArchiCrossbarNode) {
 	    act.addElement(rd);
 	    if (channelAllowed(chan)){
 	        TMLChannel wrChan = outChans.get(chan);
-	        TMLWriteChannel wr = new TMLWriteChannel(wrChan.getName(), chan.getReferenceObject());
+
+		TMLADWriteChannel adWC = new TMLADWriteChannel(xpos,200, firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false,null, firewallADP);
+	        adWC.setChannelName(wrChan.getName());
+	    	adWC.setSamples("1");
+		firewallADP.addComponent(adWC, xpos,200, false,true);
+
+		tmp =new TGConnectorTMLAD(adChoice.getX(), adChoice.getY(), firewallADP.getMinX(), firewallADP.getMaxX(), firewallADP.getMinY(), firewallADP.getMaxY(), false, null,firewallADP,adRC.getTGConnectingPointAtIndex(1), adWC.getTGConnectingPointAtIndex(0), new Vector());
+		firewallADP.addComponent(tmp, adChoice.getX(),adChoice.getY(),false,true);
+
+	        TMLWriteChannel wr = new TMLWriteChannel(wrChan.getName(), adWC);
 	        wr.setNbOfSamples("1");
 	        wr.addChannel(wrChan);
 		rd.addNext(wr);
@@ -3420,8 +3511,14 @@ if (tgc instanceof TMLArchiCrossbarNode) {
 	        actd.replaceWriteChannelWith(chan,newChan);
 		actd.replaceReadChannelWith(chan, outChans.get(chan));
 	    }
+	    xpos+=100;
+	    i++;
 	}
+	HwCPU cpu = new HwCPU(firewallNode.getName());
+	map.getTMLArchitecture().replaceFirewall(firewallNode,cpu);
+	map.addTaskToHwExecutionNode(firewall,cpu);
 	}
+	
 /*	for (TMLActivityElement el:act.getElements()){
 	    System.out.println(el);
 	}*/
diff --git a/src/ui/GTURTLEModeling.java b/src/ui/GTURTLEModeling.java
index 89e28f10fdb1a34d09b1060168956e6886f7ebfb..49ff442d01b75913ecafce06d0058a25d9cd372c 100755
--- a/src/ui/GTURTLEModeling.java
+++ b/src/ui/GTURTLEModeling.java
@@ -978,7 +978,6 @@ public class GTURTLEModeling {
 			//System.out.println("channel " + chan);
 			if (chan!=null){
 			    if (chan.checkConf){
-				System.out.println("F#$%^&*( ");
 			    	if (!securePath(map, chan.getOriginTask(), chan.getDestinationTask())){
 		    		    insecureOutChannels.get(chan.getOriginTask()).add(writeChannel.getChannelName());
 		    		    insecureInChannels.get(chan.getDestinationTask()).add(writeChannel.getChannelName());
@@ -991,7 +990,6 @@ public class GTURTLEModeling {
 		}
 	    }
 	}
-	System.out.println("tosecure " + toSecure);
 	int num=0;
 	int nonceNum=0;
 	//Create reverse channels to send nonces if they don't already exist
@@ -7842,6 +7840,9 @@ public class GTURTLEModeling {
 	    addStates(start, smx, smy, smp, bl, SMDMap, locMap, tranDestMap, tranSourceMap);
 	    //Add transitions
 	    for (AvatarTransition t: tranSourceMap.keySet()){
+		if (tranSourceMap.get(t)==null || tranDestMap.get(t)==null){
+		    continue;
+		}
 		int x=tranSourceMap.get(t).getX()+tranSourceMap.get(t).getWidth()/2;
 		int y=tranSourceMap.get(t).getY()+tranSourceMap.get(t).getHeight();
 
diff --git a/src/ui/TGComponent.java b/src/ui/TGComponent.java
index dca685bb1ffe0d797bbdca480b1335a3e0a325e5..b9d53e00b312cc42e8be0d93406e78f9e621150e 100755
--- a/src/ui/TGComponent.java
+++ b/src/ui/TGComponent.java
@@ -1080,6 +1080,7 @@ public abstract class TGComponent implements CDElement, GenericTree {
 				}				
 			    }
 			}
+			synchronized(this) {
 			Map<String, String> statMap = tdp.getMGUI().getStatus(getDIPLOID());
 			for (String name:statMap.keySet()){
 			    String stat =statMap.get(name);
@@ -1097,6 +1098,7 @@ public abstract class TGComponent implements CDElement, GenericTree {
 			}
 		    
                     }
+		    }
                     /*if (this instanceof TMLArchiCPUNode) {
 
                       }
diff --git a/src/ui/tmlad/TMLADReadChannel.java b/src/ui/tmlad/TMLADReadChannel.java
index 8f72bc3dc0dfa2362aba6d631e242e9af3fc66b9..7842c7b94fb61988d7dddeaa38b0030c61fdb642 100755
--- a/src/ui/tmlad/TMLADReadChannel.java
+++ b/src/ui/tmlad/TMLADReadChannel.java
@@ -262,7 +262,10 @@ public class TMLADReadChannel extends TGCWithoutInternalComponent implements Che
         return false;
 
     }
-
+    public void setSamples(String sp){
+	nbOfSamples=sp;
+	makeValue();
+    }
     protected String translateExtraParam() {
         StringBuffer sb = new StringBuffer("<extraparam>\n");
         sb.append("<Data channelName=\"");
@@ -327,6 +330,7 @@ public class TMLADReadChannel extends TGCWithoutInternalComponent implements Che
     }
     public void setChannelName(String s){
 	channelName=s;
+	makeValue();
     }
 
 }
diff --git a/src/ui/tmlad/TMLADWriteChannel.java b/src/ui/tmlad/TMLADWriteChannel.java
index 1f15811b8b44b7cc1277d5498c19a13fe98442bb..943274d9d1e1e3f9084462692ad2049c6ab6cc83 100755
--- a/src/ui/tmlad/TMLADWriteChannel.java
+++ b/src/ui/tmlad/TMLADWriteChannel.java
@@ -319,8 +319,12 @@ public class TMLADWriteChannel extends TGCWithoutInternalComponent implements Ch
     }
     public void setChannelName(String s){
 	channelName=s;
+	makeValue();
+    } 
+    public void setSamples(String sp){
+	nbOfSamples=sp;
+	makeValue();
     }
-
     public void setStateAction(int _stateAction) {
         stateOfError = _stateAction;
     }
diff --git a/src/ui/tmldd/TMLArchiFirewallNode.java b/src/ui/tmldd/TMLArchiFirewallNode.java
index caa741a3cd573512f95f063d431446402bd38db1..7c06694f86ce77810f6702917bb2500f6554df0b 100644
--- a/src/ui/tmldd/TMLArchiFirewallNode.java
+++ b/src/ui/tmldd/TMLArchiFirewallNode.java
@@ -280,7 +280,6 @@ public class TMLArchiFirewallNode extends TMLArchiCommunicationNode implements S
 		  return latency;
 	  }
 	public ArrayList<String> getRules(){
-	    System.out.println("FIREWALL rules " + rules);
 	    return rules;
 	}
 	  public String getAttributes() {
diff --git a/src/ui/window/JDialogDSE.java b/src/ui/window/JDialogDSE.java
index 02a66667388be83475631ad4f7a36876bc43a533..ea9fdafa4a8227438ae8f13d0116e847cf41aa61 100644
--- a/src/ui/window/JDialogDSE.java
+++ b/src/ui/window/JDialogDSE.java
@@ -739,7 +739,7 @@ public class JDialogDSE extends javax.swing.JDialog implements ActionListener, R
 	    }
 
 	    config.setOutputTXT("true");
-	   // config.setOutputHTML("true");
+	    config.setOutputHTML("true");
 	   // config.setOutputVCD("true");
 	   // config.setOutputXML("true");
 	    config.setRecordResults("true");