diff --git a/src/main/java/ui/ActionPerformer.java b/src/main/java/ui/ActionPerformer.java
index affd9326879617c37bc64710a684a695f7eceac9..483799bd63056afa0c6c29010dee3c523d30ea01 100755
--- a/src/main/java/ui/ActionPerformer.java
+++ b/src/main/java/ui/ActionPerformer.java
@@ -61,7 +61,9 @@ public class ActionPerformer {
 	
         // Compare the action command to the known actions.
         if (command.equals(mgui.actions[TGUIAction.ACT_NEW].getActionCommand()))  {
-            mgui.newProject();
+        	mgui.newProject();
+        } else if (command.equals(mgui.actions[TGUIAction.ACT_NEW_PROJECT].getActionCommand()))  {
+        	mgui.newProjectDir();
         } else if (command.equals(mgui.actions[TGUIAction.ACT_NEW_DESIGN].getActionCommand())) {
             mgui.newDesign();
         } else if (command.equals(mgui.actions[TGUIAction.ACT_NEW_ANALYSIS].getActionCommand())) {
diff --git a/src/main/java/ui/JMenuBarTurtle.java b/src/main/java/ui/JMenuBarTurtle.java
index 8e2c0d40d910a76e5d95c8001d06ebf9753bbcc2..756394c45b6dbd1c2ce613c83f00a617317c6730 100755
--- a/src/main/java/ui/JMenuBarTurtle.java
+++ b/src/main/java/ui/JMenuBarTurtle.java
@@ -96,6 +96,8 @@ public  class JMenuBarTurtle extends JMenuBar   {
         // FILE
         menuItem = file.add(mgui.actions[TGUIAction.ACT_NEW]);
         menuItem.addMouseListener(mgui.mouseHandler);
+        menuItem = file.add(mgui.actions[TGUIAction.ACT_NEW_PROJECT]);
+        menuItem.addMouseListener(mgui.mouseHandler);
         menuItem = file.add(mgui.actions[TGUIAction.ACT_OPEN]);
         menuItem.addMouseListener(mgui.mouseHandler);
 	menuItem = file.add(mgui.actions[TGUIAction.ACT_OPEN_FROM_NETWORK]);
diff --git a/src/main/java/ui/JToolBarMainTurtle.java b/src/main/java/ui/JToolBarMainTurtle.java
index 92b08986e8523b8cf8fcb0460d9ceeeea8d5ceaf..5c26da192e2423721e85086ae775b89e0404cc2c 100755
--- a/src/main/java/ui/JToolBarMainTurtle.java
+++ b/src/main/java/ui/JToolBarMainTurtle.java
@@ -83,6 +83,8 @@ public  class JToolBarMainTurtle extends JToolBar implements ActionListener
 
         button = add(mgui.actions[TGUIAction.ACT_NEW]);
         button.addMouseListener(mgui.mouseHandler);
+        button = add(mgui.actions[TGUIAction.ACT_NEW_PROJECT]);
+        button.addMouseListener(mgui.mouseHandler);
         button = add(mgui.actions[TGUIAction.ACT_OPEN]);
         button.addMouseListener(mgui.mouseHandler);
         button = add(mgui.actions[TGUIAction.ACT_SAVE]);
diff --git a/src/main/java/ui/MainGUI.java b/src/main/java/ui/MainGUI.java
index 1fc2a218c6cc04f5e06be6a162e683ed0b79a3b1..ff55e03bbe09812e0ab5fc8b5da9551871fb9cee 100644
--- a/src/main/java/ui/MainGUI.java
+++ b/src/main/java/ui/MainGUI.java
@@ -134,6 +134,8 @@ public  class MainGUI implements ActionListener, WindowListener, KeyListener, Pe
     public static boolean experimentalOn;
     public static boolean avatarOnly;
     public static boolean turtleOn;
+    
+    public boolean isxml = false;
 
     public final static int LOTOS = 0;
     public final static int RT_LOTOS = 1;
@@ -282,6 +284,7 @@ public  class MainGUI implements ActionListener, WindowListener, KeyListener, Pe
     private Plugin pluginSelected;
 
     private File file;
+    private File dir;
     private File lotosfile;
     private File simfile;
     private File dtafile;
@@ -1617,13 +1620,11 @@ public  class MainGUI implements ActionListener, WindowListener, KeyListener, Pe
 
     public void closeTurtleModeling() {
         if (mode != NOT_OPENED) {
-            setMode(NOT_OPENED);
-
             // tabbed pane
             for(int i=0; i<tabs.size(); i++) {
                 tabs.elementAt(i).tabbedPane.removeAll();
             }
-
+            setMode(NOT_OPENED);
             tabs = null;
             mainTabbedPane = null;
             panelForTab.removeAll();
@@ -1904,6 +1905,33 @@ public  class MainGUI implements ActionListener, WindowListener, KeyListener, Pe
             frame.setTitle("TTool: unsaved project");
         }
     }
+    
+    public void newProjectDir() {
+    	if (mode == NOT_OPENED) {
+    		int val = createFileDialog();
+    		if (val == JFileChooser.APPROVE_OPTION) 
+    			createFile();      
+        }
+        else {
+            //  check if previous modeling is saved
+            boolean b = actions[TGUIAction.ACT_SAVE].isEnabled();
+            if (b) {
+                if (!saveBeforeAction("Save and Start New Modeling", "Start New modeling")) {
+                    return;
+                }
+                /*int back = JOptionPane.showConfirmDialog(frame, "Modeling has not been saved\nDo you really want to open a new one ?", "Attention: current modeling not saved ?", JOptionPane.OK_CANCEL_OPTION);
+                  if (back == JOptionPane.CANCEL_OPTION) {
+                  return;       */
+                /*}*/
+            }
+            int val = createFileDialog();
+            if (val == JFileChooser.APPROVE_OPTION) {
+            // close current modeling
+            	closeTurtleModeling();
+            	createFile();
+            }
+        }
+    }
 
     public String loadFile(File f) {
         String s = null;
@@ -2299,13 +2327,21 @@ public  class MainGUI implements ActionListener, WindowListener, KeyListener, Pe
     }
 
     public void openProjectFromFile(File _f) {
-    	file = _f;
+    	if (FileUtils.getExtension(_f).equals("ttool")) {
+    		dir = _f;
+    		String filename = dir.getAbsolutePath() + dir.getName().replaceAll(".ttool", ".xml");
+    		file = new File(filename);
+    	}
+    	else {
+    		dir = null;
+    		file = _f;
+    	}
         
-    	if(checkFileForOpen(_f)) {
+    	if(checkFileForOpen(file)) {
             String s = null;
 
             try {
-                FileInputStream fis = new FileInputStream(_f);
+                FileInputStream fis = new FileInputStream(file);
                 int nb = fis.available();
 
                 byte [] ba = new byte[nb];
@@ -2326,7 +2362,7 @@ public  class MainGUI implements ActionListener, WindowListener, KeyListener, Pe
 //            gtm.enableUndo(false);
 
             // Update configuration
-            updateLastOpenFile(_f);
+            updateLastOpenFile(file);
 
             // Issue #41: Moved to common method
             loadModels( s, "loaded" );
@@ -2349,7 +2385,8 @@ public  class MainGUI implements ActionListener, WindowListener, KeyListener, Pe
 //            gtm.enableUndo(true);
 //            gtm.saveOperation(getCurrentSelectedPoint());
 //            dtree.forceUpdate();
-            getCurrentTDiagramPanel().repaint();
+            if (getCurrentTDiagramPanel() != null)
+              getCurrentTDiagramPanel().repaint();
         }
     }
 
@@ -2587,23 +2624,57 @@ public  class MainGUI implements ActionListener, WindowListener, KeyListener, Pe
 
     }
 
+    private int createFileDialog() {
+    	int returnVal = jfc.showSaveDialog(frame);
+        if(returnVal == JFileChooser.APPROVE_OPTION) {
+        	dir = jfc.getSelectedFile();
+        	dir = FileUtils.addFileExtensionIfMissing(dir, "ttool");
+        	dir.mkdir();
+        	String newname = FileUtils.removeFileExtension(dir.getName());
+            file = new File(dir, newname);
+            file = FileUtils.addFileExtensionIfMissing(file, TFileFilter.getExtension());
+        }
+        
+        return returnVal;
+    }
+    
+    private void createFile() {
+        newTurtleModeling();
+    	frame.setTitle(file.getName());
+    	try {
+    		String s = gtm.makeXMLFromTurtleModeling(-1);
+    		if (s == null) {
+    			throw new Exception("Internal model Error 2");
+    		}
+    		FileOutputStream fos = new FileOutputStream(file);
+    		fos.write(s.getBytes());
+    		fos.close();
+    		updateLastOpenFile(file);
+    		setMode(MODEL_SAVED);
+    		String title = "TTool: " + file.getAbsolutePath();
+    		if (!frame.getTitle().equals(title)) {
+    			frame.setTitle(title);
+    		}
+    		if (lotosfile == null) {
+    			makeLotosFile();
+    		}
+    	}
+        catch(Exception e) {
+            JOptionPane.showMessageDialog(frame, "File could not be saved because " + e.getMessage(), "File Error", JOptionPane.INFORMATION_MESSAGE);
+        }
+    }
+    	
     protected boolean saveProject() {
         if (file == null) {
-            //jfc.setApproveButtonText("Save");
-            int returnVal = jfc.showSaveDialog(frame);
-            if(returnVal == JFileChooser.APPROVE_OPTION) {
-                file = jfc.getSelectedFile();
-                file = FileUtils.addFileExtensionIfMissing(file, TFileFilter.getExtension());
-            }
+            createFileDialog();
         }
 
         if( checkFileForSave(file)) {
-            String s = gtm.makeXMLFromTurtleModeling(-1);
-
             try {
                 if (gtm == null) {
                     throw new Exception("Internal model Error 1");
                 }
+                String s = gtm.makeXMLFromTurtleModeling(-1);
                 if (s == null) {
                     throw new Exception("Internal model Error 2");
                 }
diff --git a/src/main/java/ui/ModeManager.java b/src/main/java/ui/ModeManager.java
index a8a33ab8ad617461bba039f230a18170ed531d11..6ce18740b3313d1f5cf66660e3bb8636e17a6bdc 100755
--- a/src/main/java/ui/ModeManager.java
+++ b/src/main/java/ui/ModeManager.java
@@ -60,6 +60,7 @@ public class ModeManager {
         case MainGUI.NOT_OPENED:
             mgui.activeActions(false);
             actions[TGUIAction.ACT_NEW].setEnabled(true);
+            actions[TGUIAction.ACT_NEW_PROJECT].setEnabled(true);
             actions[TGUIAction.ACT_OPEN].setEnabled(true);
             actions[TGUIAction.ACT_OPEN_FROM_NETWORK].setEnabled(true);
             actions[TGUIAction.ACT_OPEN_TIF].setEnabled(true);
diff --git a/src/main/java/ui/TGUIAction.java b/src/main/java/ui/TGUIAction.java
index 60f8abdd1ba9123c443be75a8aea9bb2b23ba7de..dc5bae5c4381a3b9085e17c02e31a4c24bf46f37 100755
--- a/src/main/java/ui/TGUIAction.java
+++ b/src/main/java/ui/TGUIAction.java
@@ -67,6 +67,7 @@ public class TGUIAction extends AbstractAction {
 	
 	// Actions
     public static final int ACT_NEW = 0;
+    public static final int ACT_NEW_PROJECT = 467;
     public static final int ACT_NEW_DESIGN = 100;
     public static final int ACT_NEW_ANALYSIS = 101;
     public static final int ACT_OPEN = 1;
@@ -621,7 +622,7 @@ public class TGUIAction extends AbstractAction {
     public static final int ACT_LEFT = 465;
     public static final int ACT_RIGHT = 466;
     
-    public static final int NB_ACTION = 467;
+    public static final int NB_ACTION = 468;
 
     private static final TAction [] actions = new TAction[NB_ACTION];
 
@@ -675,6 +676,7 @@ public class TGUIAction extends AbstractAction {
 
     public void init() {
         actions[ACT_NEW] = new TAction("new-command", "New", IconManager.imgic20, IconManager.imgic21, "New", "New modeling", 'N');
+        actions[ACT_NEW_PROJECT] = new TAction("new-project-command", "New project", IconManager.imgic20, IconManager.imgic21, "New project", "New project", 0);
         actions[ACT_NEW_DESIGN] = new TAction("new-command-design", "New design", IconManager.imgic14, IconManager.imgic14, "New design", "New TURTLE design", 0);
         actions[ACT_NEW_ANALYSIS] = new TAction("new-command-analysis", "New analysis", IconManager.imgic17, IconManager.imgic17, "New analysis", "New TURTLE analysis", 0);
         actions[ACT_OPEN] = new TAction("open-command","Open", IconManager.imgic22, IconManager.imgic23, "Open", "Open an existing TTool model",'O', true);