diff --git a/src/ui/JMenuBarTurtle.java b/src/ui/JMenuBarTurtle.java
index 34f8fede4087a5f4b7f7691b1518792400232ebc..9fc2612f84a38d784e6c580ca8f68463a35b1d79 100755
--- a/src/ui/JMenuBarTurtle.java
+++ b/src/ui/JMenuBarTurtle.java
@@ -536,6 +536,9 @@ public	class JMenuBarTurtle extends JMenuBar	{
 		menuItem = tool.add(mgui.actions[TGUIAction.ACT_GEN_DOC]);
 		menuItem.addMouseListener(mgui.mouseHandler);
 		
+		menuItem = tool.add(mgui.actions[TGUIAction.ACT_GEN_DOC_REQ]);
+		menuItem.addMouseListener(mgui.mouseHandler);
+		
 		if ((ConfigurationTTool.ExternalCommand1.length() > 0) && (ConfigurationTTool.ExternalCommand1Host.length() > 0)) {
 			menuItem = tool.add(mgui.actions[TGUIAction.EXTERNAL_ACTION_1]);
 			menuItem.addMouseListener(mgui.mouseHandler);
diff --git a/src/ui/MainGUI.java b/src/ui/MainGUI.java
index 2f2e792d765375166b870b332b0eb9aec41903bd..74ab8afa0af96d76276b674edbf5b6d30164ba8f 100755
--- a/src/ui/MainGUI.java
+++ b/src/ui/MainGUI.java
@@ -3502,7 +3502,7 @@ public	class MainGUI implements ActionListener, WindowListener, KeyListener {
 		System.out.println("Frame Req");
 		JFrameRequirementTable jfrt = new JFrameRequirementTable("Requirement table", tabs);
         jfrt.setIconImage(IconManager.img8);
-        jfrt.setSize(600, 600);
+        jfrt.setSize(1024, 768);
         GraphicLib.centerOnParent(jfrt);
         jfrt.setVisible(true);
 		System.out.println("Done");
diff --git a/src/ui/req/Requirement.java b/src/ui/req/Requirement.java
index d1a4aeb6d5b152145b3feb717921f754fc58d0f1..5377f06c79b8ca42533461a2429c0846b3c067ab 100755
--- a/src/ui/req/Requirement.java
+++ b/src/ui/req/Requirement.java
@@ -63,7 +63,7 @@ public class Requirement extends TGCScalableWithInternalComponent implements Wit
     protected int textY = 22;
 	protected int lineHeight = 30;
 	private double dlineHeight = 0.0;
-    protected int type = 0;
+    protected int reqType = 0;
 	// 0: normal, 1: formal, 2: security
     //protected int startFontSize = 10;
     protected Graphics graphics;
@@ -158,7 +158,7 @@ public class Requirement extends TGCScalableWithInternalComponent implements Wit
         userResizable = true;
 		multieditable = true;
 		
-        type = 0;
+        reqType = 0;
 		
 		id = "0";
         
@@ -226,10 +226,10 @@ public class Requirement extends TGCScalableWithInternalComponent implements Wit
 		if (displayText) {
 			size = currentFontSize - 2;
 			g.setFont(myFont.deriveFont((float)(myFont.getSize() - 2)));
-			if (type == 1) {
+			if (reqType == 1) {
 				drawLimitedString(g, FORMAL_REQ, x, y + size, width, 1);
 			} else {
-				if (type == 0) {
+				if (reqType == 0) {
 					drawLimitedString(g, REGULAR_REQ, x, y + size, width, 1);
 				} else {
 					drawLimitedString(g, SECURITY_REQ, x, y + size, width, 1);
@@ -263,7 +263,7 @@ public class Requirement extends TGCScalableWithInternalComponent implements Wit
 		
 		g.setFont(myFont);
 		String texti;
-		if (type == 1) {
+		if (reqType == 1) {
 			texti = "TRDD";
 		} else {
 			texti = "Text";
@@ -301,7 +301,7 @@ public class Requirement extends TGCScalableWithInternalComponent implements Wit
 			if (size < (height - 2)) {
 				drawLimitedString(g, "Risk=\"" + criticality + "\"", x + textX, y + size, width, 0);
 				size += currentFontSize;
-				if ((size < (height - 2)) && (type == 2)) {
+				if ((size < (height - 2)) && (reqType == 2)) {
 					drawLimitedString(g, "Attack Tree Nodes=\"" + attackTreeNode + "\"", x + textX, y + size, width, 0);
 				}
 			}
@@ -370,7 +370,7 @@ public class Requirement extends TGCScalableWithInternalComponent implements Wit
 	
 	public boolean editAttributes() {
 		//String oldValue = value;
-        JDialogRequirement jdr = new JDialogRequirement(tdp.getGUI().getFrame(), "Setting attributes of Requirement " + getRequirementName(), id, text, kind, criticality, violatedAction, type, attackTreeNode);
+        JDialogRequirement jdr = new JDialogRequirement(tdp.getGUI().getFrame(), "Setting attributes of Requirement " + getRequirementName(), id, text, kind, criticality, violatedAction, reqType, attackTreeNode);
         jdr.setSize(750, 400);
         GraphicLib.centerOnParent(jdr);
         jdr.show();
@@ -413,13 +413,23 @@ public class Requirement extends TGCScalableWithInternalComponent implements Wit
     }
     
     public boolean isFormal() {
-        return (type == 1);
+        return (reqType == 1);
     }
     
-    public void setType(int _type) {
-        type = _type;
+    public void setRequirementType(int _type) {
+        reqType = _type;
     }
     
+    public int getRequirementType() {
+	    return reqType;
+    }
+    
+    public boolean isSatisfied() {
+	    return satisfied;
+    }
+    
+    
+    
     public  int getType() {
         return TGComponentManager.TREQ_REQUIREMENT;
     }
@@ -467,15 +477,15 @@ public class Requirement extends TGCScalableWithInternalComponent implements Wit
         String s = e.getActionCommand();
         if (s.indexOf("regular") > -1) {
             //System.out.println("Set to regular");
-            type = 0;
+            reqType = 0;
         } else {
 			if (s.indexOf("formal") > 1) {
 				//System.out.println("Set to formal");
-				type = 1;
+				reqType = 1;
 			} else {
 				if (s.indexOf("security") > 1) {
 				//System.out.println("Set to formal");
-				type = 2;
+				reqType = 2;
 				} else {
 					if (s.indexOf("non") > 1) {
 						satisfied = false;
@@ -497,10 +507,10 @@ public class Requirement extends TGCScalableWithInternalComponent implements Wit
 		
 		ret += "ID=" + id;
 		
-        if (type == 1) {
+        if (reqType == 1) {
             ret = ret + " " + FORMAL_REQ;
         }  else {
-			if (type == 0) {
+			if (reqType == 0) {
 				ret = ret + " " + REGULAR_REQ;
 			} else {
 				ret = ret + " " + SECURITY_REQ;
@@ -510,11 +520,11 @@ public class Requirement extends TGCScalableWithInternalComponent implements Wit
 		ret += " " + text;
 		ret += " criticality=" + criticality;
 		
-		if (type == 1) {
+		if (reqType == 1) {
 			ret += " violatedAction=" + violatedAction;
 		}
 		
-		if (type == 2) {
+		if (reqType == 2) {
 			ret += " attackTreeNode =" + attackTreeNode;
 		}
 		
@@ -530,7 +540,7 @@ public class Requirement extends TGCScalableWithInternalComponent implements Wit
             sb.append("false\" />\n");
         }*/
 		sb.append("<type data=\"");
-		sb.append("" + type + "\" />\n");
+		sb.append("" + reqType + "\" />\n");
 		
 		if (texts != null) {
             for(int i=0; i<texts.length; i++) {
@@ -586,17 +596,17 @@ public class Requirement extends TGCScalableWithInternalComponent implements Wit
                             if (elt.getTagName().equals("Formal")) {
                                 s = elt.getAttribute("isFormal");
                                 if (s.equals("true")) {
-                                    type = 1;
+                                    reqType = 1;
                                 } else {
-                                    type = 0;
+                                    reqType = 0;
                                 }
                             } else if (elt.getTagName().equals("type")) {
                                 //System.out.println("Analyzing line0");
                                 s = elt.getAttribute("data");
                                 if (s.equals("null")) {
-                                    type = 0;
+                                    reqType = 0;
                                 }
-								type = Integer.decode(s).intValue();
+								reqType = Integer.decode(s).intValue();
                             } else if (elt.getTagName().equals("textline")) {
                                 //System.out.println("Analyzing line0");
                                 s = elt.getAttribute("data");
@@ -670,17 +680,21 @@ public class Requirement extends TGCScalableWithInternalComponent implements Wit
         return violatedAction;
     }
 	
-	public String getAttackTreeNode() {
+    public String getAttackTreeNode() {
         return attackTreeNode;
     }
     
     public String getText() {
         return text;
     }
-	
+    
 	public String getID() {
 		return id;
 	}
+	
+	public String getKind() {
+		return kind;
+	}
     
     public int getCriticality() {
         //System.out.println("Criticality=" + criticality);
@@ -695,14 +709,14 @@ public class Requirement extends TGCScalableWithInternalComponent implements Wit
 	
 	public String getAttributes() {
 		String attr = "ID=" + id + "\n";
-		if (type == 1) {
+		if (reqType == 1) {
 			attr += "TRDD= " + text + "\n";
 		} else {
 			attr += "Text= " + text + "\n";
 		}
 		attr += "Kind= " + kind + "\n";
 		attr += "Risk= " + criticality + "\n";
-		if (type == 2) {
+		if (reqType == 2) {
 			attr += "AttackTreeNode=" + attackTreeNode + "\n";
 		}
 		return attr;
@@ -722,11 +736,11 @@ public class Requirement extends TGCScalableWithInternalComponent implements Wit
 		
 		// Must find for both modes which width is desirable
 		String s0, s1;
-		if (type == 1) {
+		if (reqType == 1) {
 			s0 = FORMAL_REQ;
 			s1 = "TRDD=";
 		} else {
-			if (type == 0) {
+			if (reqType == 0) {
 				s0 = REGULAR_REQ;
 				s1 = "Text=";
 			} else {
@@ -768,7 +782,7 @@ public class Requirement extends TGCScalableWithInternalComponent implements Wit
 		w3 = graphics.getFontMetrics().stringWidth("ID=\"" + id + "\"") + 2;
 		w4 = Math.max(w4, w3);
 		
-		if (type == 2) {
+		if (reqType == 2) {
 			w3 = graphics.getFontMetrics().stringWidth("Attack Tree Node=\"" + attackTreeNode + "\"") + 2;
 			w4 = Math.max(w4, w3);
 		}
diff --git a/src/ui/req/RequirementDiagramPanel.java b/src/ui/req/RequirementDiagramPanel.java
index 7cbb84e327c8d7b64680b3ebccefdc21e1cc2682..8ce53de8df43c142b4fe5d070154b635ad51a3bc 100755
--- a/src/ui/req/RequirementDiagramPanel.java
+++ b/src/ui/req/RequirementDiagramPanel.java
@@ -167,6 +167,23 @@ public class RequirementDiagramPanel extends TDiagramPanel implements TDPWithAtt
         
         return cpt;
     }
+	
+	public LinkedList<Requirement> getAllRequirements() {
+		LinkedList<Requirement> list = new LinkedList<Requirement>();
+		TGComponent tgc;
+		
+		ListIterator iterator = getComponentList().listIterator();
+		
+		while(iterator.hasNext()) {
+            tgc = (TGComponent)(iterator.next());
+            if (tgc instanceof Requirement) {
+				list.add((Requirement)tgc);
+			}
+		}
+		
+		return list;
+		
+	}
     
     public boolean isLinkedByVerifyTo(TGComponent tgc1, TGComponent tgc2) {
         ListIterator iterator = getComponentList().listIterator();
diff --git a/src/ui/window/JFrameRequirementTable.java b/src/ui/window/JFrameRequirementTable.java
index 244b7dc204a960f8708448142822022dbfadf69c..b5489828ce373978cf007258ddbe0cf611043990 100755
--- a/src/ui/window/JFrameRequirementTable.java
+++ b/src/ui/window/JFrameRequirementTable.java
@@ -58,6 +58,7 @@ import java.util.*;
 import myutil.*;
 import ui.*;
 import ui.file.*;
+import ui.req.*;
 
 import nc.*;
 
@@ -133,347 +134,64 @@ public	class JFrameRequirementTable extends JFrame implements ActionListener /*,
 		sw.setText(""+nc.switches.size());
 		jp.add(sw, c0);*/
 		
-		// Information
-		/*GeneralInfoNCTableModel tmgi = new GeneralInfoNCTableModel(ncs);
-		TableSorter sorterGI = new TableSorter(tmgi);
-		JTable jtableGI = new JTable(sorterGI);
-		sorterGI.setTableHeader(jtableGI.getTableHeader());
-			
-
-		((jtableGI.getColumnModel()).getColumn(0)).setPreferredWidth(100);
-		((jtableGI.getColumnModel()).getColumn(1)).setPreferredWidth(25);
-		jtableGI.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
-		jspGeneralInfo = new JScrollPane(jtableGI);
-		jspGeneralInfo.setWheelScrollingEnabled(true);
-		jspGeneralInfo.getVerticalScrollBar().setUnitIncrement(10);
-		
-		// Equipments
-		EquipmentsNCTableModel enctm = new EquipmentsNCTableModel(ncs);
-		TableSorter sorterEI = new TableSorter(enctm);
-		JTable jtableEI = new JTable(sorterEI);
-		sorterEI.setTableHeader(jtableEI.getTableHeader());
-			
-
-		((jtableEI.getColumnModel()).getColumn(0)).setPreferredWidth(100);
-		((jtableEI.getColumnModel()).getColumn(1)).setPreferredWidth(150);
-		((jtableEI.getColumnModel()).getColumn(2)).setPreferredWidth(150);
-		jtableEI.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
-		jspEquipmentInfo = new JScrollPane(jtableEI);
-		jspEquipmentInfo.setWheelScrollingEnabled(true);
-		jspEquipmentInfo.getVerticalScrollBar().setUnitIncrement(10);
-		
-		// Switchs
-		SwitchesNCTableModel snctm = new SwitchesNCTableModel(ncs);
-		TableSorter sorterSI = new TableSorter(snctm);
-		JTable jtableSI = new JTable(sorterSI);
-		sorterSI.setTableHeader(jtableSI.getTableHeader());
-			
-
-		((jtableSI.getColumnModel()).getColumn(0)).setPreferredWidth(100);
-		((jtableSI.getColumnModel()).getColumn(1)).setPreferredWidth(150);
-		((jtableSI.getColumnModel()).getColumn(2)).setPreferredWidth(100);
-		jtableSI.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
-		jspSwitchInfo = new JScrollPane(jtableSI);
-		jspSwitchInfo.setWheelScrollingEnabled(true);
-		jspSwitchInfo.getVerticalScrollBar().setUnitIncrement(10);
-		
-		// Traffics
-		TrafficsNCTableModel tnctm = new TrafficsNCTableModel(ncs);
-		TableSorter sorterTI = new TableSorter(tnctm);
-		JTable jtableTI = new JTable(sorterTI);
-		sorterTI.setTableHeader(jtableTI.getTableHeader());
-			
-
-		((jtableTI.getColumnModel()).getColumn(0)).setPreferredWidth(100);
-		((jtableTI.getColumnModel()).getColumn(1)).setPreferredWidth(100);
-		((jtableTI.getColumnModel()).getColumn(2)).setPreferredWidth(100);
-		((jtableTI.getColumnModel()).getColumn(3)).setPreferredWidth(100);
-		((jtableTI.getColumnModel()).getColumn(4)).setPreferredWidth(100);
-		jtableTI.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
-		jspTrafficInfo = new JScrollPane(jtableTI);
-		jspTrafficInfo.setWheelScrollingEnabled(true);
-		jspTrafficInfo.getVerticalScrollBar().setUnitIncrement(10);
-		
-		// Links
-		LinksNCTableModel lnctm = new LinksNCTableModel(ncs);
-		TableSorter sorterLI = new TableSorter(lnctm);
-		JTable jtableLI = new JTable(sorterLI);
-		sorterLI.setTableHeader(jtableLI.getTableHeader());
-			
-
-		((jtableLI.getColumnModel()).getColumn(0)).setPreferredWidth(100);
-		((jtableLI.getColumnModel()).getColumn(1)).setPreferredWidth(100);
-		((jtableLI.getColumnModel()).getColumn(2)).setPreferredWidth(150);
-		jtableLI.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
-		jspLinkInfo = new JScrollPane(jtableLI);
-		jspLinkInfo.setWheelScrollingEnabled(true);
-		jspLinkInfo.getVerticalScrollBar().setUnitIncrement(10);
-		
-		// Paths
-		PathsNCTableModel pnctm = new PathsNCTableModel(ncs);
-		TableSorter sorterPI = new TableSorter(pnctm);
-		JTable jtablePI = new JTable(sorterPI);
-		sorterPI.setTableHeader(jtablePI.getTableHeader());
-			
-
-		((jtablePI.getColumnModel()).getColumn(0)).setPreferredWidth(100);
-		((jtablePI.getColumnModel()).getColumn(1)).setPreferredWidth(100);
-		((jtablePI.getColumnModel()).getColumn(2)).setPreferredWidth(300);
-		jtablePI.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
-		jspPathInfo = new JScrollPane(jtablePI);
-		jspPathInfo.setWheelScrollingEnabled(true);
-		jspPathInfo.getVerticalScrollBar().setUnitIncrement(10);*/
-		
-		/*
-		// Table
-		//System.out.println("Building deadlock elements");
-		JPanel jp1 = new JPanel();
-		JPanel jp2 = new JPanel();
-		JPanel jp3 = new JPanel();
-		JPanel jp4 = new JPanel();
-		//if (graph.getNbTransition() < MAX_TRANSITIONS) { 
-			DeadlockTableModel tmDeadlock = new DeadlockTableModel(graph, MAX_TRANSITIONS);
-			
-			if (shouldIStop()) {
-				return;
-			}
-			
-			TableSorter sorterDeadlock = new TableSorter(tmDeadlock);
-			
-			if (shouldIStop()) {
-				return;
-			}
-			
-			JTable jtableDeadlock = new JTable(sorterDeadlock);
-			
-			if (shouldIStop()) {
-				return;
-			}
-			
-			sorterDeadlock.setTableHeader(jtableDeadlock.getTableHeader());
-			
-			if (shouldIStop()) {
-				return;
-			}
-			
-			//System.out.println("Deadlock table");
-			
-			((jtableDeadlock.getColumnModel()).getColumn(0)).setPreferredWidth(Math.max(maxLengthColumn(framePanel, tmDeadlock, 0) + 20, 50));
-			((jtableDeadlock.getColumnModel()).getColumn(1)).setPreferredWidth(Math.max(maxLengthColumn(framePanel, tmDeadlock, 1) + 15, 100));
-			((jtableDeadlock.getColumnModel()).getColumn(2)).setPreferredWidth(Math.max(maxLengthColumn(framePanel, tmDeadlock, 2) + 15, 400));
-			jtableDeadlock.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
-			jspDeadlock = new JScrollPane(jtableDeadlock);
-			jspDeadlock.setWheelScrollingEnabled(true);
-			jspDeadlock.getVerticalScrollBar().setUnitIncrement(10);
-			
-			if (shouldIStop()) {
-				return;
-			}
-			
-			//System.out.println("End Deadlock table");
-			
-			// shortest paths
-			GridBagLayout gridbag1 = new GridBagLayout();
-			GridBagConstraints c1 = new GridBagConstraints();
-			jp1.setLayout(gridbag1);
-			jp2.setLayout(new BorderLayout());
-			
-			//jp1.setBorder(new javax.swing.border.TitledBorder("Simulation options"));
-			
-			// first line panel1
-			//c1.gridwidth = 3;
-			c1.gridheight = 1;
-			c1.weighty = 1.0;
-			c1.weightx = 1.0;
-			c1.gridwidth = 1; //GridBagConstraints.REMAINDER; //end row
-			c1.fill = GridBagConstraints.HORIZONTAL;
-			c1.gridheight = 1;
-			
-			JLabel label1 = new JLabel("Shortest path from ");
-			jp1.add(label1, c1);
-			
-			if (shouldIStop()) {
-				return;
-			}
-			
-			//System.out.println("Graphical");
-			
-			Integer[] tab1 = new Integer[graph.getNbState()];
-			
-			if (shouldIStop()) {
-				return;
-			}
-			
-			Integer[] tab2 = new Integer[graph.getNbState()];
-			
-			if (shouldIStop()) {
-				return;
-			}
-			
-			for(int i=0; i<graph.getNbState(); i++) {
-				tab1[i] = new Integer(i);
-				tab2[i] = new Integer(i);
-			}
-			
-			//combo1 = new JComboBox(tab1);
-			combo1 = new JTextField("0", 10);
-			jp1.add(combo1, c1);
-			
-			JLabel label2 = new JLabel("   to ");
-			jp1.add(label2, c1);
-			
-			c1.gridwidth = GridBagConstraints.REMAINDER; //end row
-			//combo2 = new JComboBox(tab2);
-			combo2 = new JTextField("" + (graph.getNbState() - 1), 10);
-			jp1.add(combo2, c1);
-			//jp2.add(jp1, BorderLayout.NORTH);
-			
-			goPath = new JButton("Compute", IconManager.imgic16);
-			goPath.addActionListener(this);
-			jp1.add(goPath, c1);
-			
-			savePath = new JButton("Save last path as a graph", IconManager.imgic24);
-			savePath.addActionListener(this);
-			jp1.add(savePath, c1);
-			savePath.setEnabled(false);
-			
-			jp2.add(jp1, BorderLayout.NORTH);
-			
-			text1 = new JTextField(300);
-			JScrollPane jspText = new JScrollPane(text1);
-			jspText.setWheelScrollingEnabled(true);
-			jspText.getVerticalScrollBar().setUnitIncrement(10);
-			jp2.add(jspText, BorderLayout.CENTER);
-			
-			// Longest path
-			GridBagLayout gridbag2 = new GridBagLayout();
-			GridBagConstraints c2 = new GridBagConstraints();
-			jp3.setLayout(gridbag2);
-			jp4.setLayout(new BorderLayout());
-			
-			//jp1.setBorder(new javax.swing.border.TitledBorder("Simulation options"));
-			
-			// first line panel1
-			//c1.gridwidth = 3;
-			c2.gridheight = 1;
-			c2.weighty = 1.0;
-			c2.weightx = 1.0;
-			c2.gridwidth = 1; //GridBagConstraints.REMAINDER; //end row
-			c2.fill = GridBagConstraints.HORIZONTAL;
-			c2.gridheight = 1;
-			
-			cycleDone = true;
-			//System.out.println("Searching for cycles");
-			if (graph.getNbTransition() < MAX_TRANSITIONS) {
-				hasCycle = GraphAlgorithms.hasCycle(graph);
-				cycleComputed = true;
-			} else {
-				cycleComputed = false;
-			}
-			//System.out.println("End searching for cycles");
-			
-			if (shouldIStop()) {
-				return;
-			}
-			
-			//System.out.println("G comp");
-			
-			label2 = new JLabel("Longest path from ");
-			jp3.add(label2, c2);
-			
-			if (shouldIStop()) {
-				return;
-			}
-			
-			tab1 = new Integer[graph.getNbState()];
-			
-			if (shouldIStop()) {
-				return;
-			}
-			
-			tab2 = new Integer[graph.getNbState()];
-			
-			if (shouldIStop()) {
-				return;
-			}
-			
-			for(int i=0; i<graph.getNbState(); i++) {
-				tab1[i] = new Integer(i);
-				tab2[i] = new Integer(i);
-			}
-			
-			//combo3 = new JComboBox(tab1);
-			combo3 = new JTextField("0", 10);
-			//graph.getNbState()
-			jp3.add(combo3, c2);
-			
-			label2 = new JLabel("   to ");
-			jp3.add(label2, c2);
-			
-			c2.gridwidth = GridBagConstraints.REMAINDER; //end row
-			//combo4 = new JComboBox(tab2);
-			combo4 = new JTextField("" + (graph.getNbState() - 1), 10);
-			jp3.add(combo4, c2);
-			//jp2.add(jp1, BorderLayout.NORTH);
-			
-			goPathL = new JButton("Compute", IconManager.imgic16);
-			goPathL.addActionListener(this);
-			jp3.add(goPathL, c2);
-			
-			savePathL = new JButton("Save last path as a graph", IconManager.imgic24);
-			savePathL.addActionListener(this);
-			jp3.add(savePathL, c2);
-			savePathL.setEnabled(false);
-			
-			jp4.add(jp3, BorderLayout.NORTH);
-			
-			text2 = new JTextField(300);
-			jspText = new JScrollPane(text2);
-			jspText.setWheelScrollingEnabled(true);
-			jspText.getVerticalScrollBar().setUnitIncrement(10);
-			jp4.add(jspText, BorderLayout.CENTER);
-			
-			if (cycleComputed) {
-				if (hasCycle) {
-					text2.setText("The graph contains cycle -> longest path is infinite");
-					goPathL.setEnabled(false);
-				}
-			} else {
-				text2.setText("Graph may contain cycles -> in that case, the longest path cannot be computed");
-			}
-		//}
-		
-		
-		//System.out.println("Making last elements");
-		
 		mainTabbedPane = new JTabbedPane();
-		mainTabbedPane.addTab("General info.", IconManager.imgic13, jp, "# states, #transitions");
-		mainTabbedPane.addTab("Statistics", IconManager.imgic13, jsp, "Statistics on states & transitions");
-		//if (graph.getNbTransition() < MAX_TRANSITIONS) { 
-			mainTabbedPane.addTab("Deadlocks", IconManager.imgic13, jspDeadlock, "Potential deadlocks");
-			mainTabbedPane.addTab("Shortest Paths", IconManager.imgic13, jp2, "Shortest paths");
-			mainTabbedPane.addTab("Longest Paths", IconManager.imgic13, jp4, "Longest paths");
-		//}
-		//}
-		
 		
+		// Information
+		TURTLEPanel tp;
+		int i, j;
+		TDiagramPanel tdp;
+		RequirementDiagramPanel rdp;
+		LinkedList<Requirement> all, list;
+		all = new LinkedList<Requirement>();
+		String title;
 		
-		*/
+		for(i=0; i<tabs.size(); i++) {
+			tp = (TURTLEPanel)(tabs.elementAt(i));
+			if (tp instanceof RequirementPanel) {
+				for(j=0; j<tp.panels.size(); j++) {
+					if (tp.panels.elementAt(j) instanceof RequirementDiagramPanel) {
+						rdp = (RequirementDiagramPanel)(tp.panels.elementAt(j));
+						list = rdp.getAllRequirements();
+						all.addAll(list);
+						
+						title = tp.tabbedPane.getTitleAt(j);
+						
+						makeJScrollPane(list, mainTabbedPane, title);
+					}
+				}
+			}
+		}
 		
-		mainTabbedPane = new JTabbedPane();
-		/*mainTabbedPane.addTab("General info.", IconManager.imgic13, jspGeneralInfo, "Information on diagram");
-		mainTabbedPane.addTab("Equipments", IconManager.imgic13, jspEquipmentInfo, "Information on equipments");
-		mainTabbedPane.addTab("Switches", IconManager.imgic13, jspSwitchInfo, "Information on switches");
-		mainTabbedPane.addTab("Traffics", IconManager.imgic13, jspTrafficInfo, "Information on traffics");
-		mainTabbedPane.addTab("Links", IconManager.imgic13, jspLinkInfo, "Information on links");
-		mainTabbedPane.addTab("Paths", IconManager.imgic13, jspPathInfo, "Information on paths");*/
+		makeJScrollPane(all, mainTabbedPane, "All requirements");
 		
 		framePanel.add(mainTabbedPane, BorderLayout.CENTER);
 		
-		
 		pack();
 		
-		System.out.println("GG comp done");
+		System.out.println("Requirements computed");
+	}
+	
+	private void makeJScrollPane(LinkedList<Requirement> list, JTabbedPane tab, String title) {
+		RequirementsTableModel rtm = new RequirementsTableModel(list);
+		TableSorter sorterRTM = new TableSorter(rtm);
+		JTable jtableRTM = new JTable(sorterRTM);
+		sorterRTM.setTableHeader(jtableRTM.getTableHeader());
+		
+		((jtableRTM.getColumnModel()).getColumn(0)).setPreferredWidth(50);
+		((jtableRTM.getColumnModel()).getColumn(1)).setPreferredWidth(150);
+		((jtableRTM.getColumnModel()).getColumn(2)).setPreferredWidth(120);
+		((jtableRTM.getColumnModel()).getColumn(3)).setPreferredWidth(300);
+		((jtableRTM.getColumnModel()).getColumn(4)).setPreferredWidth(100);
+		((jtableRTM.getColumnModel()).getColumn(5)).setPreferredWidth(100);
+		((jtableRTM.getColumnModel()).getColumn(6)).setPreferredWidth(100);
+		((jtableRTM.getColumnModel()).getColumn(7)).setPreferredWidth(100);
+		((jtableRTM.getColumnModel()).getColumn(8)).setPreferredWidth(75);
+		//jtableRTM.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+		JScrollPane jspRTM = new JScrollPane(jtableRTM);
+		jspRTM.setWheelScrollingEnabled(true);
+		jspRTM.getVerticalScrollBar().setUnitIncrement(10);
+		
+		tab.addTab(title, IconManager.imgic13, jspRTM, title);
 	}
 	
 	public void	actionPerformed(ActionEvent evt)  {
@@ -484,22 +202,22 @@ public	class JFrameRequirementTable extends JFrame implements ActionListener /*,
 			dispose();
 			return;
 		} /*else if (evt.getSource() == goPath) {
-			compute(1);
+		compute(1);
 		} else if (evt.getSource() == goPathL) {
-			compute(2);
+		compute(2);
 		}*/
 	}
 	
-
+	
 	
 	private void compute(int idFunc) {
 		/*computingPath = true;
 		GraphAlgorithms.go = true;
 		String info;
 		if (idFunc == 1) {
-			info = "Calculating shortest path...";
+		info = "Calculating shortest path...";
 		} else {
-			info = "Calculating longest path...";
+		info = "Calculating longest path...";
 		}
 		
 		int from;
@@ -507,80 +225,80 @@ public	class JFrameRequirementTable extends JFrame implements ActionListener /*,
 		JTextField text;
 		
 		if (idFunc == 1) {
-			text = text1;
-			try {
-				from = Integer.decode(combo1.getText()).intValue(); 
-			} catch (Exception e) {
-				text1.setText("Invalid value:" + combo1.getText());
-				return;
-			}
-			try {
-				to = Integer.decode(combo2.getText()).intValue(); 
-			} catch (Exception e) {
-				text1.setText("Invalid value:" + combo2.getText());
-				return;
-			}
-			
-			if(from<0) {
-				text.setText("Invalid value:" + combo1.getText() + ". Minimun value is 0");
-				return;
-			}
-			
-			if(to<0) {
-				text.setText("Invalid value:" + combo2.getText() + ". Minimun value is 0");
-				return;
-			}
-			
-			if(from>=graph.getNbState()) {
-				text1.setText("Invalid value:" + combo1.getText() + ". Maximum value is: " + (graph.getNbState()-1));
-				return;
-			}
-			
-			if(to>=graph.getNbState()) {
-				text1.setText("Invalid value:" + combo2.getText() + ". Maximum value is: " + (graph.getNbState()-1));
-				return;
-			}
-			
+		text = text1;
+		try {
+		from = Integer.decode(combo1.getText()).intValue(); 
+		} catch (Exception e) {
+		text1.setText("Invalid value:" + combo1.getText());
+		return;
+		}
+		try {
+		to = Integer.decode(combo2.getText()).intValue(); 
+		} catch (Exception e) {
+		text1.setText("Invalid value:" + combo2.getText());
+		return;
+		}
+		
+		if(from<0) {
+		text.setText("Invalid value:" + combo1.getText() + ". Minimun value is 0");
+		return;
+		}
+		
+		if(to<0) {
+		text.setText("Invalid value:" + combo2.getText() + ". Minimun value is 0");
+		return;
+		}
+		
+		if(from>=graph.getNbState()) {
+		text1.setText("Invalid value:" + combo1.getText() + ". Maximum value is: " + (graph.getNbState()-1));
+		return;
+		}
+		
+		if(to>=graph.getNbState()) {
+		text1.setText("Invalid value:" + combo2.getText() + ". Maximum value is: " + (graph.getNbState()-1));
+		return;
+		}
+		
 		} else {
-			text = text2;
-			
-			try {
-				from = Integer.decode(combo3.getText()).intValue(); 
-			} catch (Exception e) {
-				text2.setText("Invalid value:" + combo3.getText());
-				return;
-			}
-			try {
-				to = Integer.decode(combo4.getText()).intValue(); 
-			} catch (Exception e) {
-				text2.setText("Invalid value:" + combo4.getText());
-				return;
-			}
-			
-			if(from<0) {
-				text2.setText("Invalid value:" + combo3.getText() + ". Minimun value is 0");
-				return;
-			}
-			
-			if(to<0) {
-				text2.setText("Invalid value:" + combo4.getText() + ". Minimun value is 0");
-				return;
-			}
-			
-			if(from>=graph.getNbState()) {
-				text1.setText("Invalid value:" + combo3.getText() + ". Maximum value is: " + (graph.getNbState()-1));
-				return;
-			}
-			
-			if(to>=graph.getNbState()) {
-				text2.setText("Invalid value:" + combo4.getText() + ". Maximum value is: " + (graph.getNbState()-1));
-				return;
-			}
-			
-			if (!cycleComputed) {
-				hasCycle = GraphAlgorithms.hasCycle(graph);
-				cycleComputed = true;
-			}
+		text = text2;
+		
+		try {
+		from = Integer.decode(combo3.getText()).intValue(); 
+		} catch (Exception e) {
+		text2.setText("Invalid value:" + combo3.getText());
+		return;
+		}
+		try {
+		to = Integer.decode(combo4.getText()).intValue(); 
+		} catch (Exception e) {
+		text2.setText("Invalid value:" + combo4.getText());
+		return;
+		}
+		
+		if(from<0) {
+		text2.setText("Invalid value:" + combo3.getText() + ". Minimun value is 0");
+		return;
+		}
+		
+		if(to<0) {
+		text2.setText("Invalid value:" + combo4.getText() + ". Minimun value is 0");
+		return;
+		}
+		
+		if(from>=graph.getNbState()) {
+		text1.setText("Invalid value:" + combo3.getText() + ". Maximum value is: " + (graph.getNbState()-1));
+		return;
+		}
+		
+		if(to>=graph.getNbState()) {
+		text2.setText("Invalid value:" + combo4.getText() + ". Maximum value is: " + (graph.getNbState()-1));
+		return;
+		}
+		
+		if (!cycleComputed) {
+		hasCycle = GraphAlgorithms.hasCycle(graph);
+		cycleComputed = true;
+		}
 		}
 		
 		ThreadGUIElement t = new ThreadGUIElement(this, idFunc, info, "Please wait", "");
@@ -590,7 +308,7 @@ public	class JFrameRequirementTable extends JFrame implements ActionListener /*,
 	}
 	
 	
-
+	
 	
 	private int maxLengthColumn(Component c, AbstractTableModel tm, int index) {
 		int w = 0, wtmp;