diff --git a/plugins/howto b/plugins/howto
index a4e2751530381b4be9a0fe31ce1985b7889f9640..7779572b3c3f284b717facde9af36224f71b6b4b 100644
--- a/plugins/howto
+++ b/plugins/howto
@@ -1,4 +1,21 @@
-1) Create your plugin and put it in this directory (preferably)
+# To test plugins:
+If you want to test plugins:
+$cd testPluginCodeGeneration
+$make
+
+Then, edit the configuration file of TTool (default: TTool/bin/config.xml) and add:
+<PLUGIN_JAVA_CODE_GENERATOR data="../plugins/CustomizerAvatarCodeGeneration.jar" />
+
+Then, start TTool, and generated Java code from an avatar model.
+
+
+# To create a new plugin
+1) Create your plugin and put it in this directory (preferably) under a jar file
+
 2) Add the plugin reference in config.xml
-3) Load the configuration information in ConfigurationTTool
+For example:
+<PLUGIN_JAVA_CODE_GENERATOR data="../plugins/CustomizerAvatarCodeGeneration.jar" />
+
+3) Load the configuration information in ConfigurationTTool.java
+
 4) Use the plugin facility as shown in src/avatartranslator/toexecutable/MainFile.java
diff --git a/src/avatartranslator/toexecutable/MainFile.java b/src/avatartranslator/toexecutable/MainFile.java
index 230e497006c9933b821fcaa1034b3c20cc9dc915..cdd7ee4b9d5535bea72ca18a934da5dfe0b3c768 100755
--- a/src/avatartranslator/toexecutable/MainFile.java
+++ b/src/avatartranslator/toexecutable/MainFile.java
@@ -109,8 +109,10 @@ public class MainFile {
 
         String mainDec = MAIN_DEC;
 
-        try {
+	
 
+        try {
+	    //mainDec = MainGUI.pluginManager.execute(plugin, CustomizerAvatarJavaCodeGeneration, getMainDeclaration)
             File file = new File(plugin);
             TraceManager.addDev("Loading plugin=" + plugin);
             URL[] urls = new URL[] { file.toURI().toURL() };
diff --git a/src/myutil/Plugin.java b/src/myutil/Plugin.java
new file mode 100755
index 0000000000000000000000000000000000000000..749b306bb9928f4da658aa5dc9232ca292bfcdf8
--- /dev/null
+++ b/src/myutil/Plugin.java
@@ -0,0 +1,94 @@
+/**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.
+
+   /**
+   * Class Plugin
+   * Creation: 24/05/2017
+   * Version 1.0 24/05/2017
+   * @author Ludovic APVRILLE
+   * @see
+   */
+
+package myutil;
+
+import java.util.*;
+import java.io.*;
+import java.lang.reflect.*;
+import java.net.*;
+
+public class Plugin {
+    private String name;
+    private File file;
+    private HashMap<String, Class> listOfClasses;
+
+    public Plugin(String _name) {
+        name = _name;
+        listOfClasses = new HashMap<String, Class>();
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public Method getMethod(String _className, String _methodName) {
+        Class c = listOfClasses.get(_className);
+
+        try {
+            if (c == null) {
+                file = new File(name);
+                TraceManager.addDev("Loading plugin=" + name);
+                URL[] urls = new URL[] { file.toURI().toURL() };
+                ClassLoader loader = new URLClassLoader(urls);
+                TraceManager.addDev("Loader created");
+                c = loader.loadClass(_className);
+                if (c == null) {
+                    return null;
+                }
+                listOfClasses.put(_className, c);
+            }
+
+            Method method = c.getMethod(_methodName);
+	    return method;
+        } catch (Exception e) {
+	    TraceManager.addDev("Exception when using plugin " + name + " with className=" + _className + " and method " + _methodName);
+	    return null;
+        }
+
+    }
+
+
+}
diff --git a/src/myutil/PluginManager.java b/src/myutil/PluginManager.java
new file mode 100755
index 0000000000000000000000000000000000000000..af95e50750594c7b1bb0a3e76c6fbfed3c191770
--- /dev/null
+++ b/src/myutil/PluginManager.java
@@ -0,0 +1,101 @@
+/**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.
+
+   /**
+   * Class PluginManager
+   * Creation: 24/05/2017
+   * Version 1.0 24/05/2017
+   * @author Ludovic APVRILLE
+   * @see
+   */
+
+package myutil;
+
+import java.util.*;
+import java.lang.reflect.*;
+
+public class PluginManager  {
+    public ArrayList<Plugin> plugins;
+
+    public PluginManager() {
+	plugins = new ArrayList<Plugin>();
+    }
+
+    public void addPlugin(Plugin _plugin) {
+	plugins.add(_plugin);
+    }
+
+    public Plugin getPlugin(String _name) {
+	for(Plugin plugin: plugins) {
+	    if (plugin.getName().compareTo(_name) == 0) {
+		return plugin;
+	    }
+	}
+	return null;
+    }
+
+    public Plugin createPlugin(String _name) {
+	Plugin plugin = new Plugin(_name);
+	addPlugin(plugin);
+	return plugin;
+    }
+    
+    public String executeString(String _pluginName, String _className, String _methodName) {
+	Plugin plugin = getPlugin(_pluginName);
+	if (plugin == null) {
+	    plugin = createPlugin(_pluginName);
+	    if (plugin == null) {
+		return null;
+	    }
+	}
+
+	// We have a valid plugin. We now need to get the Method
+	Method m = plugin.getMethod(_className, _methodName);
+	if (m == null) {
+	    return null;
+	}
+
+	try {
+	    return (String)(m.invoke(null));
+	} catch (Exception e) {
+	    TraceManager.addDev("Exception occured when executing method " + _methodName);
+	    return null;
+	}
+    }
+
+
+}
diff --git a/src/ui/MainGUI.java b/src/ui/MainGUI.java
index 66803074ab65188ea1890b3f8225eb6a6dcf85d3..d183de2c72ad92aabd0eb96c824f25121a5db8a7 100644
--- a/src/ui/MainGUI.java
+++ b/src/ui/MainGUI.java
@@ -105,13 +105,7 @@ import ddtranslatorSoclib.AvatarddSpecification;
 import ddtranslatorSoclib.toSoclib.TasksAndMainGenerator;
 import launcher.RemoteExecutionThread;
 import launcher.RshClient;
-import myutil.BrowserControl;
-import myutil.FileException;
-import myutil.FileUtils;
-import myutil.GraphicLib;
-import myutil.PeriodicBehavior;
-import myutil.PeriodicBehaviorThread;
-import myutil.TraceManager;
+import myutil.*;
 import proverifspec.ProVerifOutputAnalyzer;
 import translator.MasterGateManager;
 import ui.ad.TActivityDiagramPanel;
@@ -362,11 +356,15 @@ public  class MainGUI implements ActionListener, WindowListener, KeyListener, Pe
     // Invariants
     Invariant currentInvariant;
 
-    // Thread fof autosave
+    // Thread for autosave
     PeriodicBehaviorThread pbt;
 
     private TMLArchiPanel tmlap;    // USed to retrieve the currently opened architecture panel
 
+    // Plugin management
+    public static PluginManager pluginManager;
+    
+
     public MainGUI(boolean _turtleOn, boolean _systemcOn, boolean _lotosOn, boolean _proactiveOn, boolean _tpnOn, boolean _osOn, boolean _uppaalOn, boolean _ncOn, boolean _avatarOn, boolean _proverifOn, boolean
                    _avatarOnly, boolean _experimental) {
         turtleOn = _turtleOn;
@@ -386,6 +384,8 @@ public  class MainGUI implements ActionListener, WindowListener, KeyListener, Pe
 
         pbt = new PeriodicBehaviorThread(this, 120000); // save every two minutes
 
+	pluginManager = new PluginManager();
+
     }
 
     public void setKey(String _sk) {