diff --git a/src/main/java/myutil/BoolExpressionEvaluator.java b/src/main/java/myutil/BoolExpressionEvaluator.java
index e9f8714ded40eb4f313993a8c2314ce38988d769..c74f9ef612967110cf37766bb04ec0c71f027562 100755
--- a/src/main/java/myutil/BoolExpressionEvaluator.java
+++ b/src/main/java/myutil/BoolExpressionEvaluator.java
@@ -713,8 +713,8 @@ public class BoolExpressionEvaluator {
         _expr = Conversion.replaceAllString(_expr, "and", "&").trim();
         _expr = Conversion.replaceAllString(_expr, "==", "=").trim();
         _expr = Conversion.replaceAllString(_expr, "!=", "$").trim();
-        //_expr = Conversion.replaceAllString(_expr, ">=", ":").trim();
-        //_expr = Conversion.replaceAllString(_expr, "<=", ";").trim();
+        _expr = Conversion.replaceAllString(_expr, ">=", ":").trim();
+        _expr = Conversion.replaceAllString(_expr, "<=", ";").trim();
 
         // For not() -> must find the closing bracket
 
diff --git a/src/main/java/ui/MainGUI.java b/src/main/java/ui/MainGUI.java
index d237a2ed2e5ddfa79fdc78f205fa4851e2caf463..2e4d2f814fc7ae7eb3d626ec61a18ba8837fdd4d 100644
--- a/src/main/java/ui/MainGUI.java
+++ b/src/main/java/ui/MainGUI.java
@@ -686,6 +686,13 @@ public  class MainGUI implements ActionListener, WindowListener, KeyListener, Pe
         jfm.setVisible(true);
     }
 
+    public void makeRefusalGraph(RG inputGraph) {
+        JFrameRefusalGraph jfm = new JFrameRefusalGraph(frame, this, "Refusal Graph Construction", inputGraph);
+        //jfm.setSize(900, 700);
+        GraphicLib.centerOnParent(jfm, 900, 700);
+        jfm.setVisible(true);
+    }
+
 
     public void setCurrentInvariant(Invariant inv) {
         currentInvariant = inv;
diff --git a/src/main/java/ui/graph/AUTGraph.java b/src/main/java/ui/graph/AUTGraph.java
index 22f8b887479af0f4a767b5363edcbc118bdc7a83..d6ea09efecffa2a3ed62a416aa292aef1c5128dc 100755
--- a/src/main/java/ui/graph/AUTGraph.java
+++ b/src/main/java/ui/graph/AUTGraph.java
@@ -268,6 +268,10 @@ public class AUTGraph implements myutil.Graph {
         statesComputed = false;
     }
 
+    public void addState(AUTState _st) {
+	states.add(_st);
+    }
+
 
 
     public int getNbPotentialDeadlocks(){
@@ -1316,6 +1320,57 @@ public class AUTGraph implements myutil.Graph {
     }
 
 
+    public AUTGraph generateRefusalGraph() {
+	computeStates();
+	
+	AUTState currentState = new AUTState(0);
+	ArrayList<AUTState> newStates = new ArrayList<AUTState>();
+	ArrayList<AUTTransition> newTransitions = new ArrayList<AUTTransition>();
+	newStates.add(currentState);
+
+	// We go thru the graph, starting at state1. Each time we meet an already handled state, we stop.
+	HashSet<AUTState> metStates = new HashSet<AUTState>(); // in origin Graph
+	HashMap<AUTState, AUTState> toRefusalState = new HashMap<AUTState, AUTState>();
+	LinkedList<AUTState> toHandle = new LinkedList<AUTState>();
+	toHandle.add(states.get(0));
+	toRefusalState.put(states.get(0), currentState);
+
+	while(toHandle.size() > 0) {
+	    AUTState current = toHandle.get(0);
+	    toHandle.remove(0);
+	    metStates.add(current);
+	    AUTState currentRefusal = toRefusalState.get(current);
+	    if (currentRefusal == null) {
+		TraceManager.addDev("NULL current Refusal");
+	    } else {	
+		// For each possible transition, we create a new transition to a new destination state
+		for(AUTTransition tr: current.outTransitions) {
+		    // Create new transition. Is a new staqte necessary?
+		    AUTState destState = states.get(tr.destination);
+		    AUTState stRefusal;
+		    stRefusal = new AUTState(newStates.size());
+		    newStates.add(stRefusal);
+		    toRefusalState.put(destState, stRefusal);
+		    AUTTransition trRefusal = new AUTTransition(current.id, tr.transition, stRefusal.id);
+		    newTransitions.add(trRefusal);
+		    stRefusal.addInTransition(trRefusal);
+		    currentRefusal.addOutTransition(trRefusal);
+
+		    if (!metStates.contains(destState)) {
+			if (!(toHandle.contains(destState))) {
+			    toHandle.add(destState);
+			}
+		    }
+		    
+		}
+	    }
+	}
+	AUTGraph refusalGraph = new AUTGraph(newStates, newTransitions);
+	
+	return refusalGraph;
+    }
+
+
     private void printConfiguration(AUTPartition _part, AUTSplitter _w) {
         TraceManager.addDev("P={" + _part.toString() + "}");
         TraceManager.addDev("W={" + _w.toString() + "}");
diff --git a/src/main/java/ui/graph/RG.java b/src/main/java/ui/graph/RG.java
index 0fbd85f3eb9defec47b0542539c01cafecd9c893..2bcc48231765cd342e40241b7c7a12ebeb23e1fc 100755
--- a/src/main/java/ui/graph/RG.java
+++ b/src/main/java/ui/graph/RG.java
@@ -41,6 +41,8 @@
 
 package ui.graph;
 
+import myutil.*;
+
 /**
    * Class RG
    * Creation : 07/12/2016
@@ -71,4 +73,26 @@ public class RG {
 	return name + " " + nbOfStates + " states, " + nbOfTransitions + " transitions";
     }
 
+    public RG generateRefusalGraph() {
+	if (graph == null) {
+	    if (data == null){
+		return null;
+	    }
+	    graph = new AUTGraph();
+	    graph.buildGraph(data);
+	}
+
+	TraceManager.addDev("Making Ref. G");
+	AUTGraph refusalGraph = graph.generateRefusalGraph();
+	//TraceManager.addDev("Null graph?");
+	if (refusalGraph == null) {
+	    TraceManager.addDev("Null graph...");
+	    return null;
+	}
+
+	RG ret = new RG(name+"_RF");
+	ret.graph = refusalGraph;
+	return ret;
+    }
+
 }
diff --git a/src/main/java/ui/tree/JDiagramTree.java b/src/main/java/ui/tree/JDiagramTree.java
index a28235bc137348b4bba4ec918e1c0dec53a943da..fb8d9a5fac597137fb9678fff137d9d2e9d4c10a 100755
--- a/src/main/java/ui/tree/JDiagramTree.java
+++ b/src/main/java/ui/tree/JDiagramTree.java
@@ -86,6 +86,7 @@ public class JDiagramTree extends javax.swing.JTree implements ActionListener, M
     protected JMenuItem jmiAnalyze;
     protected JMenuItem jmiShow;
     protected JMenuItem jmiMinimize;
+    protected JMenuItem jmiRefusalGraph;
     protected JMenuItem jmiRemove;
     protected JPopupMenu popupTree;
     protected RG selectedRG;
@@ -192,11 +193,14 @@ public class JDiagramTree extends javax.swing.JTree implements ActionListener, M
                 jmiShow.addActionListener(this);
                 jmiMinimize = new JMenuItem("Minimize");
                 jmiMinimize.addActionListener(this);
+		jmiRefusalGraph = new JMenuItem("Make Refusal Graph");
+                jmiRefusalGraph.addActionListener(this);
                 jmiRemove = new JMenuItem("Remove from tree");
                 jmiRemove.addActionListener(this);
                 popupTree.add(jmiAnalyze);
                 popupTree.add(jmiShow);
                 popupTree.add(jmiMinimize);
+		popupTree.add(jmiRefusalGraph);
                 popupTree.addSeparator();
                 popupTree.add(jmiRemove);
             }
@@ -392,7 +396,11 @@ public class JDiagramTree extends javax.swing.JTree implements ActionListener, M
                 if (selectedRG != null) {
                     mgui.minimizeRG(selectedRG);
                 }
-            }
+            } else if (ae.getSource() == jmiRefusalGraph) {
+                if (selectedRG != null) {
+                    mgui.makeRefusalGraph(selectedRG);
+                }
+	    }
 
         }
 
diff --git a/src/main/java/ui/window/JFrameRefusalGraph.java b/src/main/java/ui/window/JFrameRefusalGraph.java
new file mode 100755
index 0000000000000000000000000000000000000000..aebb1f30290d23b87c42f1e5aec8ccd42f584023
--- /dev/null
+++ b/src/main/java/ui/window/JFrameRefusalGraph.java
@@ -0,0 +1,238 @@
+/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
+ * 
+ * ludovic.apvrille AT enst.fr
+ * 
+ * This software is a computer program whose purpose is to allow the
+ * edition of TURTLE analysis, design and deployment diagrams, to
+ * allow the generation of RT-LOTOS or Java code from this diagram,
+ * and at last to allow the analysis of formal validation traces
+ * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
+ * from INRIA Rhone-Alpes.
+ * 
+ * This software is governed by the CeCILL  license under French law and
+ * abiding by the rules of distribution of free software.  You can  use,
+ * modify and/ or redistribute the software under the terms of the CeCILL
+ * license as circulated by CEA, CNRS and INRIA at the following URL
+ * "http://www.cecill.info".
+ * 
+ * As a counterpart to the access to the source code and  rights to copy,
+ * modify and redistribute granted by the license, users are provided only
+ * with a limited warranty  and the software's author,  the holder of the
+ * economic rights,  and the successive licensors  have only  limited
+ * liability.
+ * 
+ * In this respect, the user's attention is drawn to the risks associated
+ * with loading,  using,  modifying and/or developing or reproducing the
+ * software by the user in light of its specific status of free software,
+ * that may mean  that it is complicated to manipulate,  and  that  also
+ * therefore means  that it is reserved for developers  and  experienced
+ * professionals having in-depth computer knowledge. Users are therefore
+ * encouraged to load and test the software's suitability as regards their
+ * requirements in conditions enabling the security of their systems and/or
+ * data to be ensured and,  more generally, to use and operate it in the
+ * same conditions as regards security.
+ * 
+ * The fact that you are presently reading this means that you have had
+ * knowledge of the CeCILL license and that you accept its terms.
+ */
+
+
+
+
+package ui.window;
+
+import myutil.ScrolledJTextArea;
+import ui.util.IconManager;
+import ui.MainGUI;
+import ui.graph.AUTGraph;
+import ui.graph.RG;
+
+import javax.swing.*;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+
+
+/**
+ * Class JFrameRefusalGraph
+ * Frame for handling the construction of the refusal graph
+ * Creation: 18/08/2017
+ * @version 1.0 18/08/2017
+ * @author Ludovic APVRILLE
+ */
+public class JFrameRefusalGraph extends javax.swing.JFrame implements ActionListener, Runnable  {
+    /*private static boolean isAldebaranSelected = false;
+    private static boolean isOminSelected = false;
+    private static boolean isStrongSelected = true;*/
+
+    
+    private MainGUI mgui;
+    private RG rg;
+    private RG newRG;
+    
+    protected Thread t;
+
+    private int mode;
+   
+    protected final static int NOT_STARTED = 1;
+    protected final static int STARTED = 2;
+    protected final static int STOPPED = 3;
+    
+    //subpanels
+    private JPanel panel2;
+    
+    // Main Panel
+    private ScrolledJTextArea jta;
+    private JButton start, stop, close;
+    
+    /** Creates new form  */
+    public JFrameRefusalGraph(Frame _f, MainGUI _mgui, String _title, RG _rg) {
+        super(_title);
+        
+        mgui = _mgui;
+	rg = _rg;
+                
+        initComponents();
+        myInitComponents();
+        pack();
+        
+        //getGlassPane().addMouseListener( new MouseAdapter() {});
+        getGlassPane().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
+    }
+    
+    
+    private void myInitComponents() {
+        mode = NOT_STARTED;
+     }
+    
+    private void initComponents() {
+        Container c = getContentPane();
+	setFont(new Font("Helvetica", Font.PLAIN, 14));
+        c.setLayout(new BorderLayout());
+        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
+        
+ 
+        
+        // textarea panel
+        jta = new ScrolledJTextArea();
+        jta.setEditable(false);
+        jta.setMargin(new Insets(10, 10, 10, 10));
+        jta.setTabSize(3);
+        jta.append("Select actions and then, click on 'start' to start minimization\n");
+        Font f = new Font("Courrier", Font.BOLD, 12);
+        jta.setFont(f);
+        JScrollPane jsp = new JScrollPane(jta, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
+        
+        c.add(jsp, BorderLayout.CENTER);
+        
+        
+        // Button panel;
+        start = new JButton("Start", IconManager.imgic53);
+        stop = new JButton("Stop", IconManager.imgic55);
+        close = new JButton("Close", IconManager.imgic27);
+        
+        start.setPreferredSize(new Dimension(150, 30));
+        stop.setPreferredSize(new Dimension(150, 30));
+        close.setPreferredSize(new Dimension(150, 30));
+        
+        start.addActionListener(this);
+        stop.addActionListener(this);
+        close.addActionListener(this);
+        
+        JPanel jp2 = new JPanel();
+        jp2.add(start);
+        jp2.add(stop);
+        jp2.add(close);
+        
+        c.add(jp2, BorderLayout.SOUTH);
+    }
+    
+    public void	actionPerformed(ActionEvent evt)  {
+        String command = evt.getActionCommand();
+        
+        // Compare the action command to the known actions.
+        if (command.equals("Start"))  {
+            startProcess();
+        } else if (command.equals("Stop")) {
+            stopProcess();
+        } else if (command.equals("Close")) {
+            closeDialog();
+        } 
+    }
+
+
+
+      
+    private void setButtons() {
+        switch(mode) {
+              case NOT_STARTED:
+                 start.setEnabled(true);
+		 stop.setEnabled(false);
+		 close.setEnabled(true);
+		 getGlassPane().setVisible(false);
+		 break;
+	case STARTED:
+                 start.setEnabled(false);
+                stop.setEnabled(true);
+                close.setEnabled(false);
+		getGlassPane().setVisible(false);
+                break;
+            case STOPPED:
+            default:
+                start.setEnabled(false);
+                stop.setEnabled(false);
+                close.setEnabled(true);
+                getGlassPane().setVisible(false);
+                break;
+        }
+    }
+    
+     
+    public void closeDialog() {
+        if (mode == STARTED) {
+            stopProcess();
+        }
+        dispose();
+    }
+    
+    public void stopProcess() {
+        
+        mode = 	STOPPED;
+        setButtons();
+    }
+    
+    public void startProcess() {
+        t = new Thread(this);
+        mode = STARTED;
+        setButtons();
+        t.start();
+    }
+
+
+    
+    public void run() {
+
+	jta.append("\nBuilding refusal graph...\n");
+
+	newRG = rg.generateRefusalGraph();
+
+	if (newRG != null) {
+	    newRG.nbOfStates = newRG.graph.getNbOfStates();
+	    newRG.nbOfTransitions = newRG.graph.getTransitions().size();
+	    mgui.addRG(newRG);
+	    jta.append("\nRefusal Graph: " + newRG.nbOfStates + " states, " + newRG.nbOfTransitions + " transitions\n");
+	} else {
+	    jta.append("\nCould not build Refusal Graph\n"); 
+	}
+	
+        mode = STOPPED;
+        setButtons();
+    }
+    
+
+}