merge
authorEdouard Tisserant <edouard.tisserant@gmail.com>
Sat, 23 Jun 2018 09:17:20 +0200
changeset 2192 09d5d1456616
parent 2191 b579e2155d02 (diff)
parent 2165 02a2b5dee5e3 (current diff)
child 2227 f150783ee8e7
child 2641 c9deff128c37
merge
--- a/Beremiz_service.py	Sat Jun 23 09:08:13 2018 +0200
+++ b/Beremiz_service.py	Sat Jun 23 09:17:20 2018 +0200
@@ -205,24 +205,13 @@
         stopicon = wx.Image(Bpath("images", "icostop24.png"))
 
         class ParamsEntryDialog(wx.TextEntryDialog):
-            if wx.VERSION < (2, 6, 0):
-                def Bind(self, event, function, id=None):
-                    if id is not None:
-                        event(self, id, function)
-                    else:
-                        event(self, function)
 
             def __init__(self, parent, message, caption=_("Please enter text"), defaultValue="",
                          style=wx.OK | wx.CANCEL | wx.CENTRE, pos=wx.DefaultPosition):
                 wx.TextEntryDialog.__init__(self, parent, message, caption, defaultValue, style, pos)
 
                 self.Tests = []
-                if wx.VERSION >= (2, 8, 0):
-                    self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.GetAffirmativeId())
-                elif wx.VERSION >= (2, 6, 0):
-                    self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.GetSizer().GetItem(3).GetSizer().GetAffirmativeButton().GetId())
-                else:
-                    self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.GetSizer().GetItem(3).GetSizer().GetChildren()[0].GetSizer().GetChildren()[0].GetWindow().GetId())
+                self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.GetAffirmativeId())
 
             def OnOK(self, event):
                 value = self.GetValue()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CONTRIBUTING.md	Sat Jun 23 09:17:20 2018 +0200
@@ -0,0 +1,21 @@
+How Do I Submit A Good Pull Request?
+----------------------------------
+
+It's highly recommended to write nice and clean python code. Beremiz
+project tries to follows most of PEP-8 recommendations. They are
+automatically checked on every push and merge by Bitbucket pipelines.
+
+To avoid pushing "unclean" code, i's recommended to add one of the following
+commands to pre commit Mercurial hook into .hg/hgrc configuration file.
+
+```
+[hooks]
+pretxncommit.linter = ./tests/tools/check_source.sh --only-changes
+```
+or the same done using Docker container, so result will be the same as
+on Bitbucket pipeline.
+
+```
+[hooks]
+pretxncommit.linter = hg status -m -n -a -n -I '**.py' --change $HG_NODE > files.lst && docker run --volume=$PWD:/beremiz --workdir="/beremiz" --volume=$PWD/../CanFestival-3:/CanFestival-3 --memory=1g --entrypoint=/beremiz/tests/tools/check_source.sh skvorl/beremiz-requirements --files-to-check files.lst
+```
--- a/ConfigTreeNode.py	Sat Jun 23 09:08:13 2018 +0200
+++ b/ConfigTreeNode.py	Sat Jun 23 09:17:20 2018 +0200
@@ -501,7 +501,7 @@
         # Delete confnode dir
         try:
             shutil.rmtree(CTNInstance.CTNPath())
-        except:
+        except Exception:
             pass
         # Remove child of Children
         self.Children[CTNInstance.CTNType].remove(CTNInstance)
--- a/IDEFrame.py	Sat Jun 23 09:08:13 2018 +0200
+++ b/IDEFrame.py	Sat Jun 23 09:17:20 2018 +0200
@@ -211,13 +211,7 @@
 
 
 def AppendMenu(parent, help, id, kind, text):
-    """
-    Compatibility function for wx versions < 2.6
-    """
-    if wx.VERSION >= (2, 6, 0):
-        parent.Append(help=help, id=id, kind=kind, text=text)
-    else:
-        parent.Append(helpString=help, id=id, kind=kind, item=text)
+    parent.Append(help=help, id=id, kind=kind, text=text)
 
 
 [
@@ -323,7 +317,7 @@
                 split = (wx.RIGHT, 1.0 - float(tab["size"][0]) / float(rect.width))
                 split_rect = wx.Rect(rect.x, rect.y,
                                      rect.width - tab["size"][0] - TAB_BORDER, rect.height)
-            split_id = id
+            split_id = idx
             break
     if split is not None:
         split_tab = tabs.pop(split_id)
@@ -341,13 +335,6 @@
 
 class IDEFrame(wx.Frame):
     """IDEFrame Base Class"""
-    # Compatibility function for wx versions < 2.6
-    if wx.VERSION < (2, 6, 0):
-        def Bind(self, event, function, id=None):
-            if id is not None:
-                event(self, id, function)
-            else:
-                event(self, function)
 
     def _init_coll_MenuBar_Menus(self, parent):
         parent.Append(menu=self.FileMenu, title=_(u'&File'))
@@ -953,11 +940,14 @@
             return data
         else:
             wx.TheClipboard.UsePrimarySelection(primary_selection)
-        if wx.TheClipboard.Open():
+
+        if not wx.TheClipboard.IsOpened():
             dataobj = wx.TextDataObject()
-            if wx.TheClipboard.GetData(dataobj):
-                data = dataobj.GetText()
-            wx.TheClipboard.Close()
+            if wx.TheClipboard.Open():
+                success = wx.TheClipboard.GetData(dataobj)
+                wx.TheClipboard.Close()
+                if success:
+                    data = dataobj.GetText()
         return data
 
     def SetCopyBuffer(self, text, primary_selection=False):
@@ -965,13 +955,14 @@
             return
         else:
             wx.TheClipboard.UsePrimarySelection(primary_selection)
-        if wx.TheClipboard.Open():
+        if not wx.TheClipboard.IsOpened():
             data = wx.TextDataObject()
             data.SetText(text)
-            wx.TheClipboard.SetData(data)
-            wx.TheClipboard.Flush()
-            wx.TheClipboard.Close()
-        self.RefreshEditMenu()
+            if wx.TheClipboard.Open():
+                wx.TheClipboard.SetData(data)
+                wx.TheClipboard.Flush()
+                wx.TheClipboard.Close()
+        wx.CallAfter(self.RefreshEditMenu)
 
     def GetDrawingMode(self):
         return self.DrawingMode
@@ -2125,10 +2116,7 @@
         EditorToolBar = self.Panes["EditorToolBar"]
 
         for item in self.CurrentEditorToolBar:
-            if wx.VERSION >= (2, 6, 0):
-                self.Unbind(wx.EVT_MENU, id=item)
-            else:
-                self.Disconnect(id=item, eventType=wx.wxEVT_COMMAND_MENU_SELECTED)
+            self.Unbind(wx.EVT_MENU, id=item)
 
             if EditorToolBar:
                 EditorToolBar.DeleteTool(item)
--- a/PLCOpenEditor.py	Sat Jun 23 09:08:13 2018 +0200
+++ b/PLCOpenEditor.py	Sat Jun 23 09:17:20 2018 +0200
@@ -70,14 +70,6 @@
 
 class PLCOpenEditor(IDEFrame):
 
-    # Compatibility function for wx versions < 2.6
-    if wx.VERSION < (2, 6, 0):
-        def Bind(self, event, function, id=None):
-            if id is not None:
-                event(self, id, function)
-            else:
-                event(self, function)
-
     def _init_coll_FileMenu_Items(self, parent):
         AppendMenu(parent, help='', id=wx.ID_NEW,
                    kind=wx.ITEM_NORMAL, text=_(u'New') + '\tCTRL+N')
--- a/bacnet/runtime/server.c	Sat Jun 23 09:08:13 2018 +0200
+++ b/bacnet/runtime/server.c	Sat Jun 23 09:17:20 2018 +0200
@@ -428,6 +428,10 @@
 }
 
 
+// This mutex blocks execution of __init_%(locstr)s() until initialization is done
+static int init_done = 0;
+static pthread_mutex_t init_done_lock = PTHREAD_MUTEX_INITIALIZER;
+static pthread_cond_t init_done_cond = PTHREAD_COND_INITIALIZER;
 
 /** Main function of server demo. **/
 int bn_server_run(server_node_t *server_node) {
@@ -450,6 +454,12 @@
     bvlc_bdt_restore_local();
     /* Initiliaze the bacnet server 'device' */    
     Device_Init(server_node->device_name);
+
+    pthread_mutex_lock(&init_done_lock);
+    init_done = 1;
+    pthread_cond_signal(&init_done_cond);
+    pthread_mutex_unlock(&init_done_lock);
+
     /* Set the password (max 31 chars) for Device Communication Control request. */
     /* Default in the BACnet stack is hardcoded as "filister" */
     /* (char *) cast is to remove the cast. The function is incorrectly declared/defined in the BACnet stack! */
@@ -549,6 +559,7 @@
 int __init_%(locstr)s (int argc, char **argv){
 	int index;
 
+    init_done = 0;
 	/* init each local server */
 	/* NOTE: All server_nodes[].init_state are initialised to 0 in the code 
 	 *       generated by the BACnet plugin 
@@ -567,6 +578,13 @@
 			goto error_exit;
 		}
 	}
+
+    pthread_mutex_lock(&init_done_lock);
+    while (!init_done) {
+        pthread_cond_wait(&init_done_cond, &init_done_lock);
+    }
+    pthread_mutex_unlock(&init_done_lock);
+
 	server_node.init_state = 2; // we have created the node and thread
 
 	return 0;
--- a/connectors/PYRO/dialog.py	Sat Jun 23 09:08:13 2018 +0200
+++ b/connectors/PYRO/dialog.py	Sat Jun 23 09:17:20 2018 +0200
@@ -10,8 +10,9 @@
 from __future__ import print_function
 
 import wx
+from zope.interface import implementer
+
 from controls.UriLocationEditor import IConnectorPanel
-from zope.interface import implementer
 
 URITypes = ["LOCAL", "PYRO", "PYROS"]
 
@@ -19,7 +20,6 @@
 def PYRO_connector_dialog(confnodesroot):
     [ID_IPTEXT, ID_PORTTEXT] = [wx.NewId() for _init_ctrls in range(2)]
 
-
     @implementer(IConnectorPanel)
     class PYROConnectorPanel(wx.Panel):
         def __init__(self, typeConnector, parrent, *args, **kwargs):
@@ -31,24 +31,18 @@
             self.uri = None
 
         def _init_ctrls(self):
-            self.IpText = wx.TextCtrl(parent=self, id=ID_IPTEXT, size = wx.Size(200, -1))
-            self.PortText = wx.TextCtrl(parent=self, id=ID_PORTTEXT, size = wx.Size(200, -1))
+            self.IpText = wx.TextCtrl(parent=self, id=ID_IPTEXT, size=wx.Size(200, -1))
+            self.PortText = wx.TextCtrl(parent=self, id=ID_PORTTEXT, size=wx.Size(200, -1))
 
         def _init_sizers(self):
-            self.mainSizer = wx.BoxSizer(wx.VERTICAL)
-            self.uriSizer = wx.BoxSizer(wx.HORIZONTAL)
-            self.portSizer = wx.BoxSizer(wx.HORIZONTAL)
+            self.mainSizer = wx.FlexGridSizer(cols=2, hgap=10, rows=5, vgap=10)
+            self.mainSizer.AddWindow(wx.StaticText(self, label=_("URI host:")),
+                                     flag=wx.ALIGN_CENTER_VERTICAL)
+            self.mainSizer.AddWindow(self.IpText, flag=wx.GROW)
 
-            self.uriSizer.Add(wx.StaticText(self, wx.ID_ANY, "URI host:", size = wx.Size(70, -1)), proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
-            self.uriSizer.AddSpacer((0,0))
-            self.uriSizer.Add(self.IpText, proportion=1, flag=wx.ALIGN_RIGHT)
-            self.mainSizer.Add(self.uriSizer, border=2, flag=wx.ALL)
-
-            self.portSizer.Add(wx.StaticText(self, wx.ID_ANY, "URI port:", size = wx.Size(70, -1)), proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
-            self.portSizer.AddSpacer((0,0))
-            self.portSizer.Add(self.PortText, proportion=1, flag=wx.ALIGN_RIGHT)
-            self.mainSizer.Add(self.portSizer, border=2, flag=wx.ALL)
-
+            self.mainSizer.AddWindow(wx.StaticText(self, label=_("URI port:")),
+                                     flag=wx.ALIGN_CENTER_VERTICAL)
+            self.mainSizer.AddWindow(self.PortText, flag=wx.GROW)
             self.SetSizer(self.mainSizer)
 
         def SetURI(self, uri):
@@ -61,7 +55,6 @@
             elif length == 2:
                 self.IpText.SetValue(uri_list[1].strip("/"))
 
-
         def GetURI(self):
             self.uri = self.type+"://"+self.IpText.GetValue()+":"+self.PortText.GetValue()
             return self.uri
--- a/connectors/WAMP/dialog.py	Sat Jun 23 09:08:13 2018 +0200
+++ b/connectors/WAMP/dialog.py	Sat Jun 23 09:17:20 2018 +0200
@@ -8,9 +8,11 @@
 
 from __future__ import absolute_import
 from __future__ import print_function
+
 import wx
+from zope.interface import implementer
+
 from controls.UriLocationEditor import IConnectorPanel
-from zope.interface import implementer
 
 URITypes = ["WAMP", "WAMPS"]
 
@@ -18,7 +20,6 @@
 def WAMP_connector_dialog(confnodesroot):
     [ID_IPTEXT, ID_PORTTEXT, ID_REALMTEXT, ID_WAMPIDTEXT, ID_SECURECHECKBOX] = [wx.NewId() for _init_ctrls in range(5)]
 
-
     @implementer(IConnectorPanel)
     class WAMPConnectorPanel(wx.Panel):
         def __init__(self, typeConnector, parrent, *args, **kwargs):
@@ -30,40 +31,32 @@
             self.uri = None
 
         def _init_ctrls(self):
-            self.IpText = wx.TextCtrl(parent=self, id=ID_IPTEXT, size = wx.Size(200, -1))
-            self.PortText = wx.TextCtrl(parent=self, id=ID_PORTTEXT, size = wx.Size(200, -1))
-            self.RealmText = wx.TextCtrl(parent=self, id=ID_REALMTEXT, size = wx.Size(200, -1))
-            self.WAMPIDText = wx.TextCtrl(parent=self, id=ID_WAMPIDTEXT, size = wx.Size(200, -1))
+            self.IpText = wx.TextCtrl(parent=self, id=ID_IPTEXT, size=wx.Size(200, -1))
+            self.PortText = wx.TextCtrl(parent=self, id=ID_PORTTEXT, size=wx.Size(200, -1))
+            self.RealmText = wx.TextCtrl(parent=self, id=ID_REALMTEXT, size=wx.Size(200, -1))
+            self.WAMPIDText = wx.TextCtrl(parent=self, id=ID_WAMPIDTEXT, size=wx.Size(200, -1))
             self.SecureCheckbox = wx.CheckBox(self, ID_SECURECHECKBOX, _("Is connection secure?"))
 
         def _init_sizers(self):
-            self.mainSizer = wx.BoxSizer(wx.VERTICAL)
-            self.uriSizer = wx.BoxSizer(wx.HORIZONTAL)
-            self.portSizer = wx.BoxSizer(wx.HORIZONTAL)
-            self.realmSizer = wx.BoxSizer(wx.HORIZONTAL)
-            self.wampIDSizer = wx.BoxSizer(wx.HORIZONTAL)
+            self.mainSizer = wx.FlexGridSizer(cols=2, hgap=10, rows=5, vgap=10)
+            self.mainSizer.AddWindow(wx.StaticText(self, label=_("URI host:")),
+                                     flag=wx.ALIGN_CENTER_VERTICAL)
+            self.mainSizer.AddWindow(self.IpText, flag=wx.GROW)
 
-            self.uriSizer.Add(wx.StaticText(self, wx.ID_ANY, _("URI host:"), size = wx.Size(70, -1)), proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
-            self.uriSizer.AddSpacer((0,0))
-            self.uriSizer.Add(self.IpText, proportion=1, flag=wx.ALIGN_RIGHT)
-            self.mainSizer.Add(self.uriSizer, border=2, flag=wx.ALL)
+            self.mainSizer.AddWindow(wx.StaticText(self, label=_("URI port:")),
+                                     flag=wx.ALIGN_CENTER_VERTICAL)
+            self.mainSizer.AddWindow(self.PortText, flag=wx.GROW)
 
-            self.portSizer.Add(wx.StaticText(self, wx.ID_ANY, _("URI port:"), size = wx.Size(70, -1)), proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
-            self.portSizer.AddSpacer((0,0))
-            self.portSizer.Add(self.PortText, proportion=1, flag=wx.ALIGN_RIGHT)
-            self.mainSizer.Add(self.portSizer, border=2, flag=wx.ALL)
+            self.mainSizer.AddWindow(wx.StaticText(self, label=_("Realm:")),
+                                     flag=wx.ALIGN_CENTER_VERTICAL)
+            self.mainSizer.AddWindow(self.RealmText, flag=wx.GROW)
 
-            self.realmSizer.Add(wx.StaticText(self, wx.ID_ANY, _("Realm:"), size = wx.Size(70, -1)), proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
-            self.realmSizer.AddSpacer((0, 0))
-            self.realmSizer.Add(self.RealmText, proportion=1, flag=wx.ALIGN_RIGHT)
-            self.mainSizer.Add(self.realmSizer, border=2, flag=wx.ALL)
+            self.mainSizer.AddWindow(wx.StaticText(self, label=_("WAMP ID:")),
+                                     flag=wx.ALIGN_CENTER_VERTICAL)
+            self.mainSizer.AddWindow(self.WAMPIDText, flag=wx.GROW)
 
-            self.wampIDSizer.Add(wx.StaticText(self, wx.ID_ANY, _("WAMP ID:"), size = wx.Size(70, -1)), proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
-            self.wampIDSizer.AddSpacer((0, 0))
-            self.wampIDSizer.Add(self.WAMPIDText, proportion=1, flag=wx.ALIGN_RIGHT)
-            self.mainSizer.Add(self.wampIDSizer, border=2, flag=wx.ALL)
-
-            self.mainSizer.Add(self.SecureCheckbox, proportion=1, flag=wx.ALIGN_LEFT)
+            self.mainSizer.AddWindow(wx.StaticText(self, label=""), flag=wx.ALIGN_CENTER_VERTICAL)
+            self.mainSizer.AddWindow(self.SecureCheckbox, flag=wx.GROW)
 
             self.SetSizer(self.mainSizer)
 
--- a/connectors/__init__.py	Sat Jun 23 09:08:13 2018 +0200
+++ b/connectors/__init__.py	Sat Jun 23 09:17:20 2018 +0200
@@ -36,9 +36,11 @@
 def _GetLocalConnectorClassFactory(name):
     return lambda: getattr(__import__(name, globals(), locals()), name + "_connector_factory")
 
+
 def _GetLocalConnectorClassDialog(name):
     return lambda: getattr(__import__(name + '.dialog', globals(), locals(), fromlist=['dialog']), name + "_connector_dialog")
 
+
 def _GetLocalConnectorURITypes(name):
     return lambda: getattr(__import__(name + '.dialog', globals(), locals(), fromlist=['dialog']), "URITypes", None)
 
@@ -50,7 +52,7 @@
                   not name.startswith("__"))}
 
 connectors_dialog = {name:
-                     {"function":_GetLocalConnectorClassDialog(name), "URITypes": _GetLocalConnectorURITypes(name)}
+                     {"function": _GetLocalConnectorClassDialog(name), "URITypes": _GetLocalConnectorURITypes(name)}
                      for name in listdir(_base_path)
                      if (path.isdir(path.join(_base_path, name)) and
                          not name.startswith("__"))}
@@ -81,6 +83,7 @@
     connectorclass = connectors[servicetype]()
     return connectorclass(uri, confnodesroot)
 
+
 def ConnectorDialog(conn_type, confnodesroot):
     if conn_type not in connectors_dialog:
         return None
@@ -88,6 +91,7 @@
     connectorclass = connectors_dialog[conn_type]["function"]()
     return connectorclass(confnodesroot)
 
+
 def GetConnectorFromURI(uri):
     typeOfConnector = None
     for conn_type in connectors_dialog:
--- a/controls/SearchResultPanel.py	Sat Jun 23 09:08:13 2018 +0200
+++ b/controls/SearchResultPanel.py	Sat Jun 23 09:17:20 2018 +0200
@@ -58,13 +58,6 @@
 
 class SearchResultPanel(wx.Panel):
 
-    if wx.VERSION < (2, 6, 0):
-        def Bind(self, event, function, id=None):
-            if id is not None:
-                event(self, id, function)
-            else:
-                event(self, function)
-
     def _init_coll_MainSizer_Items(self, parent):
         parent.AddSizer(self.HeaderSizer, 0, border=0, flag=wx.GROW)
         parent.AddWindow(self.SearchResultsTree, 1, border=0, flag=wx.GROW)
--- a/controls/UriLocationEditor.py	Sat Jun 23 09:08:13 2018 +0200
+++ b/controls/UriLocationEditor.py	Sat Jun 23 09:17:20 2018 +0200
@@ -1,52 +1,57 @@
+from __future__ import absolute_import
+
 import wx
 from zope.interface import Interface, Attribute
 from zope.interface.verify import verifyObject
 from connectors import connectors_dialog, ConnectorDialog, GetConnectorFromURI
 
 
-[ID_URIWIZARDDIALOG,ID_URITYPECHOICE] = [wx.NewId() for _init_ctrls in range(2)]
+[ID_URIWIZARDDIALOG, ID_URITYPECHOICE] = [wx.NewId() for _init_ctrls in range(2)]
+
 
 class IConnectorPanel(Interface):
     """This is interface for panel of seperate connector type"""
     uri = Attribute("""uri of connections""")
     type = Attribute("""type of connector""")
 
-    def SetURI(uri):
+    def SetURI(uri):     # pylint: disable=no-self-argument
         """methode for set uri"""
 
-    def GetURI():
+    def GetURI():        # pylint: disable=no-self-argument
         """metohde for get uri"""
 
 
 class UriLocationEditor(wx.Dialog):
     def _init_ctrls(self, parent):
-        wx.Dialog.__init__(self, id=ID_URIWIZARDDIALOG,
-              name='UriLocationEditor', parent=parent,
-              title='Uri location')
-        self.UriTypeChoice = wx.Choice(parent=self, id=ID_URIWIZARDDIALOG, choices = self.URITYPES)
+        self.UriTypeChoice = wx.Choice(parent=self, id=ID_URIWIZARDDIALOG, choices=self.URITYPES)
         self.UriTypeChoice.SetSelection(0)
         self.Bind(wx.EVT_CHOICE, self.OnTypeChoice, self.UriTypeChoice)
         self.PanelSizer = wx.BoxSizer(wx.HORIZONTAL)
-        self.ButtonSizer = self.CreateButtonSizer(wx.OK|wx.CANCEL)
+        self.ButtonSizer = self.CreateButtonSizer(wx.OK | wx.CANCEL)
 
     def _init_sizers(self):
         self.mainSizer = wx.BoxSizer(wx.VERTICAL)
         typeSizer = wx.BoxSizer(wx.HORIZONTAL)
-        typeSizer.Add(wx.StaticText(self,wx.ID_ANY,"URI type:"), border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL)
+        typeSizer.Add(wx.StaticText(self, wx.ID_ANY, _("URI type:")), border=5, flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL)
         typeSizer.Add(self.UriTypeChoice, border=5, flag=wx.ALL)
         self.mainSizer.Add(typeSizer)
 
         self.mainSizer.Add(self.PanelSizer, border=5, flag=wx.ALL)
-        self.mainSizer.Add(self.ButtonSizer, border=5, flag=wx.BOTTOM|wx.ALIGN_CENTER_HORIZONTAL)
+        self.mainSizer.Add(self.ButtonSizer, border=5, flag=wx.BOTTOM | wx.ALIGN_CENTER_HORIZONTAL)
         self.SetSizer(self.mainSizer)
+        self.Layout()
+        self.Fit()
 
     def __init__(self, parent, uri):
-        self.URITYPES = ["- Select URI type -"]
+        wx.Dialog.__init__(self, id=ID_URIWIZARDDIALOG,
+                           name='UriLocationEditor', parent=parent,
+                           title='Uri location')
+        self.URITYPES = [_("- Select URI type -")]
         for connector_type, connector_function in connectors_dialog.iteritems():
             try:
                 connector_function['function']()
                 self.URITYPES.append(connector_type)
-            except Exception as e:
+            except Exception:
                 pass
 
         self.selected = None
--- a/editors/ConfTreeNodeEditor.py	Sat Jun 23 09:08:13 2018 +0200
+++ b/editors/ConfTreeNodeEditor.py	Sat Jun 23 09:17:20 2018 +0200
@@ -359,7 +359,6 @@
 
         dialog.Destroy()
 
-
     def GenerateSizerElements(self, sizer, elements, path, clean=True):
         if clean:
             sizer.Clear(True)
--- a/editors/TextViewer.py	Sat Jun 23 09:08:13 2018 +0200
+++ b/editors/TextViewer.py	Sat Jun 23 09:17:20 2018 +0200
@@ -79,13 +79,6 @@
 
     ID = ID_TEXTVIEWER
 
-    if wx.VERSION < (2, 6, 0):
-        def Bind(self, event, function, id=None):
-            if id is not None:
-                event(self, id, function)
-            else:
-                event(self, function)
-
     def _init_Editor(self, prnt):
         self.Editor = CustomStyledTextCtrl(id=ID_TEXTVIEWERTEXTCTRL,
                                            parent=prnt, name="TextViewer", size=wx.Size(0, 0), style=0)
--- a/editors/Viewer.py	Sat Jun 23 09:08:13 2018 +0200
+++ b/editors/Viewer.py	Sat Jun 23 09:17:20 2018 +0200
@@ -66,10 +66,7 @@
 
 
 def AppendMenu(parent, help, id, kind, text):
-    if wx.VERSION >= (2, 6, 0):
-        parent.Append(help=help, id=id, kind=kind, text=text)
-    else:
-        parent.Append(helpString=help, id=id, kind=kind, item=text)
+    parent.Append(help=help, id=id, kind=kind, text=text)
 
 
 if wx.Platform == '__WXMSW__':
@@ -535,13 +532,6 @@
     manipulating graphic elements
     """
 
-    if wx.VERSION < (2, 6, 0):
-        def Bind(self, event, function, id=None):
-            if id is not None:
-                event(self, id, function)
-            else:
-                event(self, function)
-
     # Add list of menu items to the given menu
     def AddMenuItems(self, menu, items):
         for item in items:
@@ -900,10 +890,7 @@
         else:
             dc = wx.ClientDC(self.Editor)
         dc.SetFont(self.GetFont())
-        if wx.VERSION >= (2, 6, 0):
-            self.Editor.DoPrepareDC(dc)
-        else:
-            self.Editor.PrepareDC(dc)
+        self.Editor.DoPrepareDC(dc)
         dc.SetUserScale(self.ViewScale[0], self.ViewScale[1])
         return dc
 
--- a/i18n/app.fil	Sat Jun 23 09:08:13 2018 +0200
+++ b/i18n/app.fil	Sat Jun 23 09:17:20 2018 +0200
@@ -36,8 +36,10 @@
 ../graphics/SFC_Objects.py
 ../graphics/GraphicCommons.py
 ../connectors/PYRO/__init__.py
+../connectors/PYRO/dialog.py
 ../connectors/__init__.py
 ../connectors/WAMP/__init__.py
+../connectors/WAMP/dialog.py
 ../targets/Generic/XSD
 ../targets/XSD_toolchain_makefile
 ../targets/Xenomai/__init__.py
@@ -53,7 +55,9 @@
 ../py_ext/PythonEditor.py
 ../py_ext/PythonFileCTNMixin.py
 ../wxglade_hmi/wxglade_hmi.py
+../modbus/modbus.py
 ../runtime/NevowServer.py
+../runtime/WampClient.py
 ../runtime/PLCObject.py
 ../runtime/ServicePublisher.py
 ../ConfigTreeNode.py
@@ -77,6 +81,7 @@
 ../controls/CustomTable.py
 ../controls/EnhancedStatusBar.py
 ../controls/LibraryPanel.py
+../controls/UriLocationEditor.py
 ../controls/CustomToolTip.py
 ../controls/LogViewer.py
 ../controls/FolderTree.py
@@ -111,8 +116,15 @@
 ../svgui/svgui.py
 ../svgui/svgui_server.py
 ../svgui/svguilib.py
+../plcopen/InstancesPathCollector.py
+../plcopen/types_enums.py
+../plcopen/InstanceTagnameCollector.py
+../plcopen/BlockInstanceCollector.py
 ../plcopen/iec_std.csv
 ../plcopen/structures.py
+../plcopen/XSLTModelQuery.py
+../plcopen/POUVariablesCollector.py
+../plcopen/VariableInfoCollector.py
 ../plcopen/plcopen.py
 ../plcopen/definitions.py
 ../IDEFrame.py
--- a/i18n/messages.po	Sat Jun 23 09:08:13 2018 +0200
+++ b/i18n/messages.po	Sat Jun 23 09:17:20 2018 +0200
@@ -1,14 +1,14 @@
 # English translations for Beremiz package.
-# Copyright (C) 2017 THE Beremiz'S COPYRIGHT HOLDER
+# Copyright (C) 2018 THE Beremiz'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the Beremiz package.
-# Automatically generated, 2017.
+# Automatically generated, 2018.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: Beremiz\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-07-05 13:02+0300\n"
-"PO-Revision-Date: 2017-07-05 13:02+0300\n"
+"POT-Creation-Date: 2018-06-15 16:39+0300\n"
+"PO-Revision-Date: 2018-06-15 16:39+0300\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
 "Language: en_US\n"
@@ -17,7 +17,7 @@
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: ../BeremizIDE.py:1095 ../PLCOpenEditor.py:418
+#: ../util/ExceptionHandler.py:58
 #, python-format
 msgid ""
 "\n"
@@ -42,151 +42,156 @@
 "\n"
 "Traceback:\n"
 
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
 msgid "   External"
 msgstr "   External"
 
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
 msgid "   InOut"
 msgstr "   InOut"
 
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
 msgid "   Input"
 msgstr "   Input"
 
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
 msgid "   Local"
 msgstr "   Local"
 
-#: ../controls/VariablePanel.py:71
+#: ../controls/VariablePanel.py:89
 msgid "   Output"
 msgstr "   Output"
 
-#: ../controls/VariablePanel.py:73
+#: ../controls/VariablePanel.py:91
 msgid "   Temp"
 msgstr "   Temp"
 
-#: ../dialogs/PouTransitionDialog.py:94 ../dialogs/ProjectDialog.py:69
-#: ../dialogs/PouActionDialog.py:92 ../dialogs/PouDialog.py:114
+#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74
+#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122
 #, python-format
 msgid " and %s"
 msgstr " and %s"
 
-#: ../ProjectController.py:1151
+#: ../ProjectController.py:1182
 msgid " generation failed !\n"
 msgstr " generation failed !\n"
 
-#: ../plcopen/plcopen.py:886
+#: ../plcopen/plcopen.py:1029
 #, python-format
 msgid "\"%s\" Data Type doesn't exist !!!"
 msgstr "\"%s\" Data Type doesn't exist !!!"
 
-#: ../plcopen/plcopen.py:904
+#: ../plcopen/plcopen.py:1047
 #, python-format
 msgid "\"%s\" POU already exists !!!"
 msgstr "\"%s\" POU already exists !!!"
 
-#: ../plcopen/plcopen.py:925
+#: ../plcopen/plcopen.py:1068
 #, python-format
 msgid "\"%s\" POU doesn't exist !!!"
 msgstr "\"%s\" POU doesn't exist !!!"
 
-#: ../editors/Viewer.py:247
+#: ../editors/Viewer.py:288
 #, python-format
 msgid "\"%s\" can't use itself!"
 msgstr "\"%s\" can't use itself!"
 
-#: ../IDEFrame.py:1655 ../IDEFrame.py:1674
+#: ../IDEFrame.py:1688 ../IDEFrame.py:1707
 #, python-format
 msgid "\"%s\" config already exists!"
 msgstr "\"%s\" config already exists!"
 
-#: ../plcopen/plcopen.py:472
+#: ../plcopen/plcopen.py:531
 #, python-format
 msgid "\"%s\" configuration already exists !!!"
 msgstr "\"%s\" configuration already exists !!!"
 
-#: ../IDEFrame.py:1605
+#: ../plcopen/plcopen.py:540
+#, python-format
+msgid "\"%s\" configuration doesn't exist !!!"
+msgstr "\"%s\" configuration doesn't exist !!!"
+
+#: ../IDEFrame.py:1638
 #, python-format
 msgid "\"%s\" data type already exists!"
 msgstr "\"%s\" data type already exists!"
 
-#: ../dialogs/PouTransitionDialog.py:105 ../dialogs/BlockPreviewDialog.py:220
-#: ../dialogs/PouActionDialog.py:103 ../editors/Viewer.py:263
-#: ../editors/Viewer.py:331 ../editors/Viewer.py:355 ../editors/Viewer.py:375
-#: ../editors/TextViewer.py:272 ../editors/TextViewer.py:301
-#: ../controls/VariablePanel.py:396
+#: ../dialogs/PouTransitionDialog.py:112 ../dialogs/BlockPreviewDialog.py:220
+#: ../dialogs/PouActionDialog.py:110 ../editors/Viewer.py:304
+#: ../editors/Viewer.py:374 ../editors/Viewer.py:398 ../editors/Viewer.py:418
+#: ../editors/TextViewer.py:270 ../editors/TextViewer.py:299
+#: ../controls/VariablePanel.py:425
 #, python-format
 msgid "\"%s\" element for this pou already exists!"
 msgstr "\"%s\" element for this pou already exists!"
 
-#: ../BeremizIDE.py:897
+#: ../BeremizIDE.py:928
 #, python-format
 msgid "\"%s\" folder is not a valid Beremiz project\n"
 msgstr "\"%s\" folder is not a valid Beremiz project\n"
 
-#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouTransitionDialog.py:101
-#: ../dialogs/BlockPreviewDialog.py:208 ../dialogs/PouNameDialog.py:50
-#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:121
-#: ../editors/ResourceEditor.py:449 ../editors/ResourceEditor.py:484
-#: ../editors/DataTypeEditor.py:555 ../editors/DataTypeEditor.py:587
-#: ../editors/CodeFileEditor.py:776 ../controls/VariablePanel.py:773
-#: ../IDEFrame.py:1596
+#: ../dialogs/SFCStepNameDialog.py:56 ../dialogs/PouTransitionDialog.py:108
+#: ../dialogs/BlockPreviewDialog.py:209 ../dialogs/PouNameDialog.py:54
+#: ../dialogs/PouActionDialog.py:106 ../dialogs/PouDialog.py:129
+#: ../editors/ResourceEditor.py:483 ../editors/ResourceEditor.py:518
+#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:603
+#: ../editors/CodeFileEditor.py:774 ../controls/VariablePanel.py:787
+#: ../IDEFrame.py:1629
 #, python-format
 msgid "\"%s\" is a keyword. It can't be used!"
 msgstr "\"%s\" is a keyword. It can't be used!"
 
-#: ../plcopen/plcopen.py:2417
+#: ../plcopen/plcopen.py:2836
 #, python-format
 msgid "\"%s\" is an invalid value!"
 msgstr "\"%s\" is an invalid value!"
 
-#: ../PLCOpenEditor.py:349 ../PLCOpenEditor.py:391
+#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365
 #, python-format
 msgid "\"%s\" is not a valid folder!"
 msgstr "\"%s\" is not a valid folder!"
 
-#: ../dialogs/SFCStepNameDialog.py:50 ../dialogs/PouTransitionDialog.py:99
-#: ../dialogs/BlockPreviewDialog.py:204 ../dialogs/PouNameDialog.py:48
-#: ../dialogs/PouActionDialog.py:97 ../dialogs/PouDialog.py:119
-#: ../editors/ResourceEditor.py:447 ../editors/ResourceEditor.py:482
-#: ../editors/DataTypeEditor.py:585 ../editors/CodeFileEditor.py:774
-#: ../controls/VariablePanel.py:771 ../IDEFrame.py:1594
+#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:106
+#: ../dialogs/BlockPreviewDialog.py:205 ../dialogs/PouNameDialog.py:52
+#: ../dialogs/PouActionDialog.py:104 ../dialogs/PouDialog.py:127
+#: ../editors/ResourceEditor.py:481 ../editors/ResourceEditor.py:516
+#: ../editors/DataTypeEditor.py:601 ../editors/CodeFileEditor.py:772
+#: ../controls/VariablePanel.py:785 ../IDEFrame.py:1627
 #, python-format
 msgid "\"%s\" is not a valid identifier!"
 msgstr "\"%s\" is not a valid identifier!"
 
-#: ../IDEFrame.py:2410
+#: ../IDEFrame.py:2436
 #, python-format
 msgid "\"%s\" is used by one or more POUs. Do you wish to continue?"
 msgstr "\"%s\" is used by one or more POUs. Do you wish to continue?"
 
-#: ../dialogs/BlockPreviewDialog.py:212 ../dialogs/PouDialog.py:123
-#: ../editors/Viewer.py:261 ../editors/Viewer.py:316 ../editors/Viewer.py:346
-#: ../editors/Viewer.py:368 ../editors/TextViewer.py:270
-#: ../editors/TextViewer.py:299 ../editors/TextViewer.py:350
-#: ../editors/TextViewer.py:373 ../controls/VariablePanel.py:338
-#: ../IDEFrame.py:1614
+#: ../dialogs/BlockPreviewDialog.py:213 ../dialogs/PouDialog.py:131
+#: ../editors/Viewer.py:302 ../editors/Viewer.py:359 ../editors/Viewer.py:389
+#: ../editors/Viewer.py:411 ../editors/TextViewer.py:268
+#: ../editors/TextViewer.py:297 ../editors/TextViewer.py:351
+#: ../editors/TextViewer.py:374 ../controls/VariablePanel.py:364
+#: ../IDEFrame.py:1647
 #, python-format
 msgid "\"%s\" pou already exists!"
 msgstr "\"%s\" pou already exists!"
 
-#: ../dialogs/SFCStepNameDialog.py:58
+#: ../dialogs/SFCStepNameDialog.py:62
 #, python-format
 msgid "\"%s\" step already exists!"
 msgstr "\"%s\" step already exists!"
 
-#: ../editors/DataTypeEditor.py:550
+#: ../editors/DataTypeEditor.py:566
 #, python-format
 msgid "\"%s\" value already defined!"
 msgstr "\"%s\" value already defined!"
 
-#: ../dialogs/ArrayTypeDialog.py:97 ../editors/DataTypeEditor.py:743
+#: ../dialogs/ArrayTypeDialog.py:105 ../editors/DataTypeEditor.py:759
 #, python-format
 msgid "\"%s\" value isn't a valid array dimension!"
 msgstr "\"%s\" value isn't a valid array dimension!"
 
-#: ../dialogs/ArrayTypeDialog.py:103 ../editors/DataTypeEditor.py:750
+#: ../dialogs/ArrayTypeDialog.py:109 ../editors/DataTypeEditor.py:766
 #, python-format
 msgid ""
 "\"%s\" value isn't a valid array dimension!\n"
@@ -195,207 +200,203 @@
 "\"%s\" value isn't a valid array dimension!\n"
 "Right value must be greater than left value."
 
-#: ../PLCGenerator.py:1101
+#: ../PLCGenerator.py:1133
 #, python-brace-format
 msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected"
 msgstr "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected"
 
-#: ../editors/Viewer.py:251
+#: ../editors/Viewer.py:292
 #, python-brace-format
 msgid "\"{a1}\" is already used by \"{a2}\"!"
 msgstr "\"{a1}\" is already used by \"{a2}\"!"
 
-#: ../plcopen/plcopen.py:496
+#: ../plcopen/plcopen.py:557
 #, python-brace-format
 msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!"
 msgstr "\"{a1}\" resource already exists in \"{a2}\" configuration !!!"
 
-#: ../plcopen/plcopen.py:514
+#: ../plcopen/plcopen.py:577
 #, python-brace-format
 msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!"
 msgstr "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!"
 
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:578
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580
 #, python-format
 msgid "%03gms"
 msgstr "%03gms"
 
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:569
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571
 #, python-format
 msgid "%dd"
 msgstr "%dd"
 
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:56
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:570
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:61
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572
 #, python-format
 msgid "%dh"
 msgstr "%dh"
 
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:55
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:60
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:573
 #, python-format
 msgid "%dm"
 msgstr "%dm"
 
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:53
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:58
 #, python-format
 msgid "%dms"
 msgstr "%dms"
 
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:54
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574
 #, python-format
 msgid "%ds"
 msgstr "%ds"
 
-#: ../PLCControler.py:1533
+#: ../PLCControler.py:1114
 #, python-format
 msgid "%s Data Types"
 msgstr "%s Data Types"
 
-#: ../PLCControler.py:1516
+#: ../PLCControler.py:1097
 #, python-format
 msgid "%s POUs"
 msgstr "%s POUs"
 
-#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:90
+#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97
 #, python-format
 msgid "%s Profile"
 msgstr "%s Profile"
 
-#: ../plcopen/plcopen.py:1650 ../plcopen/plcopen.py:1657
-#: ../plcopen/plcopen.py:1669 ../plcopen/plcopen.py:1677
-#: ../plcopen/plcopen.py:1687
+#: ../plcopen/plcopen.py:1901 ../plcopen/plcopen.py:1908
+#: ../plcopen/plcopen.py:1921 ../plcopen/plcopen.py:1929
+#: ../plcopen/plcopen.py:1939 ../plcopen/plcopen.py:1950
 #, python-format
 msgid "%s body don't have instances!"
 msgstr "%s body don't have instances!"
 
-#: ../plcopen/plcopen.py:1705 ../plcopen/plcopen.py:1712
-#: ../plcopen/plcopen.py:1719
+#: ../plcopen/plcopen.py:1957 ../plcopen/plcopen.py:1964
+#: ../plcopen/plcopen.py:1971
 #, python-format
 msgid "%s body don't have text!"
 msgstr "%s body don't have text!"
 
-#: ../IDEFrame.py:386
+#: ../IDEFrame.py:388
 msgid "&Add Element"
 msgstr "&Add Element"
 
-#: ../dialogs/AboutDialog.py:73 ../dialogs/AboutDialog.py:121
-#: ../dialogs/AboutDialog.py:158
+#: ../dialogs/AboutDialog.py:71 ../dialogs/AboutDialog.py:117
+#: ../dialogs/AboutDialog.py:152
 msgid "&Close"
 msgstr "&Close"
 
-#: ../IDEFrame.py:356
+#: ../IDEFrame.py:361
 msgid "&Configuration"
 msgstr "&Configuration"
 
-#: ../IDEFrame.py:345
+#: ../IDEFrame.py:350
 msgid "&Data Type"
 msgstr "&Data Type"
 
-#: ../IDEFrame.py:390
+#: ../IDEFrame.py:392
 msgid "&Delete"
 msgstr "&Delete"
 
-#: ../IDEFrame.py:337
+#: ../IDEFrame.py:342
 msgid "&Display"
 msgstr "&Display"
 
-#: ../IDEFrame.py:336
+#: ../IDEFrame.py:341
 msgid "&Edit"
 msgstr "&Edit"
 
-#: ../IDEFrame.py:335
+#: ../IDEFrame.py:340
 msgid "&File"
 msgstr "&File"
 
-#: ../IDEFrame.py:347
+#: ../IDEFrame.py:352
 msgid "&Function"
 msgstr "&Function"
 
-#: ../IDEFrame.py:338
+#: ../IDEFrame.py:343
 msgid "&Help"
 msgstr "&Help"
 
-#: ../dialogs/AboutDialog.py:72
+#: ../dialogs/AboutDialog.py:70
 msgid "&License"
 msgstr "&License"
 
-#: ../IDEFrame.py:351
+#: ../IDEFrame.py:356
 msgid "&Program"
 msgstr "&Program"
 
-#: ../PLCOpenEditor.py:127
+#: ../PLCOpenEditor.py:98
 msgid "&Properties"
 msgstr "&Properties"
 
-#: ../BeremizIDE.py:219
+#: ../BeremizIDE.py:244
 msgid "&Recent Projects"
 msgstr "&Recent Projects"
 
-#: ../IDEFrame.py:353
+#: ../IDEFrame.py:358
 msgid "&Resource"
 msgstr "&Resource"
 
-#: ../controls/SearchResultPanel.py:239
+#: ../controls/SearchResultPanel.py:247
 #, python-brace-format
 msgid "'{a1}' - {a2} match in project"
 msgstr "'{a1}' - {a2} match in project"
 
-#: ../controls/SearchResultPanel.py:241
+#: ../controls/SearchResultPanel.py:249
 #, python-brace-format
 msgid "'{a1}' - {a2} matches in project"
 msgstr "'{a1}' - {a2} matches in project"
 
-#: ../connectors/PYRO/__init__.py:90
+#: ../connectors/PYRO/__init__.py:98
 #, python-brace-format
 msgid "'{a1}' is located at {a2}\n"
 msgstr "'{a1}' is located at {a2}\n"
 
-#: ../controls/SearchResultPanel.py:291
+#: ../controls/SearchResultPanel.py:298
 #, python-format
 msgid "(%d matches)"
 msgstr "(%d matches)"
 
-#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408 ../PLCOpenEditor.py:409
-msgid ",   "
-msgstr ",   "
-
-#: ../dialogs/PouTransitionDialog.py:96 ../dialogs/PouActionDialog.py:94
-#: ../dialogs/PouDialog.py:116
+#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101
+#: ../dialogs/PouDialog.py:124
 #, python-format
 msgid ", %s"
 msgstr ", %s"
 
-#: ../PLCOpenEditor.py:404
-msgid ". "
-msgstr ". "
-
-#: ../controls/LogViewer.py:279
+#: ../controls/UriLocationEditor.py:49
+msgid "- Select URI type -"
+msgstr "- Select URI type -"
+
+#: ../controls/LogViewer.py:287
 msgid "1d"
 msgstr "1d"
 
-#: ../controls/LogViewer.py:280
+#: ../controls/LogViewer.py:288
 msgid "1h"
 msgstr "1h"
 
-#: ../controls/LogViewer.py:281
+#: ../controls/LogViewer.py:289
 msgid "1m"
 msgstr "1m"
 
-#: ../controls/LogViewer.py:282
+#: ../controls/LogViewer.py:290
 msgid "1s"
 msgstr "1s"
 
-#: ../dialogs/PouDialog.py:125 ../IDEFrame.py:1617 ../IDEFrame.py:1663
-#: ../IDEFrame.py:1682
+#: ../dialogs/PouDialog.py:133 ../IDEFrame.py:1650 ../IDEFrame.py:1696
+#: ../IDEFrame.py:1715
 #, python-format
 msgid "A POU has an element named \"%s\". This could cause a conflict. Do you wish to continue?"
 msgstr "A POU has an element named \"%s\". This could cause a conflict. Do you wish to continue?"
 
-#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:103
-#: ../dialogs/PouNameDialog.py:52 ../dialogs/PouActionDialog.py:101
-#: ../controls/VariablePanel.py:775 ../IDEFrame.py:1631 ../IDEFrame.py:1644
+#: ../dialogs/SFCStepNameDialog.py:58 ../dialogs/PouTransitionDialog.py:110
+#: ../dialogs/PouNameDialog.py:56 ../dialogs/PouActionDialog.py:108
+#: ../controls/VariablePanel.py:789 ../IDEFrame.py:1664 ../IDEFrame.py:1677
 #, python-format
 msgid "A POU named \"%s\" already exists!"
 msgstr "A POU named \"%s\" already exists!"
@@ -405,26 +406,26 @@
 msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n"
 msgstr "A child named \"{a1}\" already exists -> \"{a2}\"\n"
 
-#: ../dialogs/BrowseLocationsDialog.py:218
+#: ../dialogs/BrowseLocationsDialog.py:229
 msgid "A location must be selected!"
 msgstr "A location must be selected!"
 
-#: ../editors/ResourceEditor.py:451
+#: ../editors/ResourceEditor.py:485
 msgid "A task with the same name already exists!"
 msgstr "A task with the same name already exists!"
 
-#: ../dialogs/SFCStepNameDialog.py:56 ../controls/VariablePanel.py:777
-#: ../IDEFrame.py:1633 ../IDEFrame.py:1646
+#: ../dialogs/SFCStepNameDialog.py:60 ../controls/VariablePanel.py:791
+#: ../IDEFrame.py:1666 ../IDEFrame.py:1679
 #, python-format
 msgid "A variable with \"%s\" as name already exists in this pou!"
 msgstr "A variable with \"%s\" as name already exists in this pou!"
 
-#: ../editors/CodeFileEditor.py:780
+#: ../editors/CodeFileEditor.py:778
 #, python-format
 msgid "A variable with \"%s\" as name already exists!"
 msgstr "A variable with \"%s\" as name already exists!"
 
-#: ../BeremizIDE.py:283 ../dialogs/AboutDialog.py:48 ../PLCOpenEditor.py:168
+#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142
 msgid "About"
 msgstr "About"
 
@@ -432,125 +433,125 @@
 msgid "Absolute number"
 msgstr "Absolute number"
 
-#: ../dialogs/SFCStepDialog.py:73 ../dialogs/ActionBlockDialog.py:43
+#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47
 msgid "Action"
 msgstr "Action"
 
-#: ../editors/Viewer.py:614 ../editors/Viewer.py:2394
+#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427
 msgid "Action Block"
 msgstr "Action Block"
 
-#: ../dialogs/PouActionDialog.py:82
+#: ../dialogs/PouActionDialog.py:89
 msgid "Action Name"
 msgstr "Action Name"
 
-#: ../dialogs/PouActionDialog.py:49
+#: ../dialogs/PouActionDialog.py:56
 msgid "Action Name:"
 msgstr "Action Name:"
 
-#: ../plcopen/plcopen.py:1364
+#: ../plcopen/plcopen.py:1567
 #, python-format
 msgid "Action with name %s doesn't exist!"
 msgstr "Action with name %s doesn't exist!"
 
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
 msgid "Actions"
 msgstr "Actions"
 
-#: ../dialogs/ActionBlockDialog.py:133
+#: ../dialogs/ActionBlockDialog.py:139
 msgid "Actions:"
 msgstr "Actions:"
 
-#: ../editors/Viewer.py:431
+#: ../editors/Viewer.py:473
 msgid "Active"
 msgstr "Active"
 
-#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:101
-#: ../BeremizIDE.py:965 ../editors/Viewer.py:647
+#: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108
+#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686
 msgid "Add"
 msgstr "Add"
 
-#: ../IDEFrame.py:1893 ../IDEFrame.py:1928
+#: ../IDEFrame.py:1924 ../IDEFrame.py:1959
 msgid "Add Action"
 msgstr "Add Action"
 
-#: ../features.py:32
+#: ../features.py:33
 msgid "Add C code accessing located variables synchronously"
 msgstr "Add C code accessing located variables synchronously"
 
-#: ../IDEFrame.py:1876
+#: ../IDEFrame.py:1907
 msgid "Add Configuration"
 msgstr "Add Configuration"
 
-#: ../IDEFrame.py:1856
+#: ../IDEFrame.py:1887
 msgid "Add DataType"
 msgstr "Add DataType"
 
-#: ../editors/Viewer.py:572
+#: ../editors/Viewer.py:609
 msgid "Add Divergence Branch"
 msgstr "Add Divergence Branch"
 
-#: ../dialogs/DiscoveryDialog.py:117
+#: ../dialogs/DiscoveryDialog.py:121
 msgid "Add IP"
 msgstr "Add IP"
 
-#: ../IDEFrame.py:1864
+#: ../IDEFrame.py:1895
 msgid "Add POU"
 msgstr "Add POU"
 
-#: ../features.py:33
+#: ../features.py:34
 msgid "Add Python code executed asynchronously"
 msgstr "Add Python code executed asynchronously"
 
-#: ../IDEFrame.py:1904 ../IDEFrame.py:1954
+#: ../IDEFrame.py:1935 ../IDEFrame.py:1985
 msgid "Add Resource"
 msgstr "Add Resource"
 
-#: ../IDEFrame.py:1882 ../IDEFrame.py:1925
+#: ../IDEFrame.py:1913 ../IDEFrame.py:1956
 msgid "Add Transition"
 msgstr "Add Transition"
 
-#: ../editors/Viewer.py:559
+#: ../editors/Viewer.py:596
 msgid "Add Wire Segment"
 msgstr "Add Wire Segment"
 
-#: ../editors/SFCViewer.py:433
+#: ../editors/SFCViewer.py:447
 msgid "Add a new initial step"
 msgstr "Add a new initial step"
 
-#: ../editors/Viewer.py:2757 ../editors/SFCViewer.py:770
+#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784
 msgid "Add a new jump"
 msgstr "Add a new jump"
 
-#: ../editors/SFCViewer.py:455
+#: ../editors/SFCViewer.py:469
 msgid "Add a new step"
 msgstr "Add a new step"
 
-#: ../features.py:34
+#: ../features.py:35
 msgid "Add a simple WxGlade based GUI."
 msgstr "Add a simple WxGlade based GUI."
 
-#: ../dialogs/ActionBlockDialog.py:137
+#: ../dialogs/ActionBlockDialog.py:143
 msgid "Add action"
 msgstr "Add action"
 
-#: ../editors/DataTypeEditor.py:352
+#: ../editors/DataTypeEditor.py:364
 msgid "Add element"
 msgstr "Add element"
 
-#: ../editors/ResourceEditor.py:268
+#: ../editors/ResourceEditor.py:283
 msgid "Add instance"
 msgstr "Add instance"
 
-#: ../canfestival/NetworkEditor.py:103
+#: ../canfestival/NetworkEditor.py:110
 msgid "Add slave"
 msgstr "Add slave"
 
-#: ../editors/ResourceEditor.py:239
+#: ../editors/ResourceEditor.py:252
 msgid "Add task"
 msgstr "Add task"
 
-#: ../editors/CodeFileEditor.py:658 ../controls/VariablePanel.py:450
+#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481
 msgid "Add variable"
 msgstr "Add variable"
 
@@ -558,44 +559,44 @@
 msgid "Addition"
 msgstr "Addition"
 
-#: ../plcopen/definitions.py:49
+#: ../plcopen/definitions.py:51
 msgid "Additional function blocks"
 msgstr "Additional function blocks"
 
-#: ../editors/Viewer.py:630
+#: ../editors/Viewer.py:669
 msgid "Adjust Block Size"
 msgstr "Adjust Block Size"
 
-#: ../editors/Viewer.py:1686
+#: ../editors/Viewer.py:1720
 msgid "Alignment"
 msgstr "Alignment"
 
-#: ../dialogs/BrowseLocationsDialog.py:40
-#: ../dialogs/BrowseLocationsDialog.py:48
-#: ../dialogs/BrowseLocationsDialog.py:141
-#: ../dialogs/BrowseLocationsDialog.py:144 ../controls/LogViewer.py:298
-#: ../controls/VariablePanel.py:70
+#: ../dialogs/BrowseLocationsDialog.py:42
+#: ../dialogs/BrowseLocationsDialog.py:53
+#: ../dialogs/BrowseLocationsDialog.py:152
+#: ../dialogs/BrowseLocationsDialog.py:155 ../controls/LogViewer.py:307
+#: ../controls/VariablePanel.py:88
 msgid "All"
 msgstr "All"
 
-#: ../editors/FileManagementPanel.py:35
+#: ../editors/FileManagementPanel.py:37
 msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv"
 msgstr "All files (*.*)|*.*|CSV files (*.csv)|*.csv"
 
-#: ../ProjectController.py:1685
+#: ../ProjectController.py:1670
 msgid "Already connected. Please disconnect\n"
 msgstr "Already connected. Please disconnect\n"
 
-#: ../editors/DataTypeEditor.py:591
+#: ../editors/DataTypeEditor.py:607
 #, python-format
 msgid "An element named \"%s\" already exists in this structure!"
 msgstr "An element named \"%s\" already exists in this structure!"
 
-#: ../editors/ResourceEditor.py:486
+#: ../editors/ResourceEditor.py:520
 msgid "An instance with the same name already exists!"
 msgstr "An instance with the same name already exists!"
 
-#: ../dialogs/ConnectionDialog.py:100
+#: ../dialogs/ConnectionDialog.py:103
 msgid "Apply name modification to all continuations with the same name"
 msgstr "Apply name modification to all continuations with the same name"
 
@@ -615,8 +616,8 @@
 msgid "Arithmetic"
 msgstr "Arithmetic"
 
-#: ../editors/DataTypeEditor.py:54 ../editors/DataTypeEditor.py:633
-#: ../controls/VariablePanel.py:858
+#: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649
+#: ../controls/VariablePanel.py:872
 msgid "Array"
 msgstr "Array"
 
@@ -624,45 +625,37 @@
 msgid "Assignment"
 msgstr "Assignment"
 
-#: ../dialogs/FBDVariableDialog.py:222
+#: ../dialogs/FBDVariableDialog.py:226
 msgid "At least a variable or an expression must be selected!"
 msgstr "At least a variable or an expression must be selected!"
 
-#: ../controls/ProjectPropertiesPanel.py:100
+#: ../controls/ProjectPropertiesPanel.py:111
 msgid "Author"
 msgstr "Author"
 
-#: ../controls/ProjectPropertiesPanel.py:97
+#: ../controls/ProjectPropertiesPanel.py:108
 msgid "Author Name (optional):"
 msgstr "Author Name (optional):"
 
-#: ../dialogs/FindInPouDialog.py:77
+#: ../dialogs/FindInPouDialog.py:80
 msgid "Backward"
 msgstr "Backward"
 
-#: ../util/Zeroconf.py:599
-msgid "Bad domain name (circular) at "
-msgstr "Bad domain name (circular) at "
-
-#: ../util/Zeroconf.py:602
-msgid "Bad domain name at "
-msgstr "Bad domain name at "
-
-#: ../canfestival/config_utils.py:342 ../canfestival/config_utils.py:630
+#: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672
 #, python-format
 msgid "Bad location size : %s"
 msgstr "Bad location size : %s"
 
-#: ../dialogs/ArrayTypeDialog.py:54 ../editors/DataTypeEditor.py:175
-#: ../editors/DataTypeEditor.py:205 ../editors/DataTypeEditor.py:297
+#: ../dialogs/ArrayTypeDialog.py:57 ../editors/DataTypeEditor.py:183
+#: ../editors/DataTypeEditor.py:213 ../editors/DataTypeEditor.py:307
 msgid "Base Type:"
 msgstr "Base Type:"
 
-#: ../editors/DataTypeEditor.py:623 ../controls/VariablePanel.py:816
+#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830
 msgid "Base Types"
 msgstr "Base Types"
 
-#: ../BeremizIDE.py:455
+#: ../BeremizIDE.py:483
 msgid "Beremiz"
 msgstr "Beremiz"
 
@@ -694,85 +687,85 @@
 msgid "Bitwise inverting"
 msgstr "Bitwise inverting"
 
-#: ../editors/Viewer.py:584 ../editors/Viewer.py:2407
+#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440
 msgid "Block"
 msgstr "Block"
 
-#: ../dialogs/FBDBlockDialog.py:60
+#: ../dialogs/FBDBlockDialog.py:63
 msgid "Block Properties"
 msgstr "Block Properties"
 
-#: ../editors/TextViewer.py:262
+#: ../editors/TextViewer.py:260
 msgid "Block name"
 msgstr "Block name"
 
-#: ../editors/Viewer.py:550
+#: ../editors/Viewer.py:586
 msgid "Bottom"
 msgstr "Bottom"
 
-#: ../ProjectController.py:1363
+#: ../ProjectController.py:1400
 msgid "Broken"
 msgstr "Broken"
 
-#: ../dialogs/BrowseValuesLibraryDialog.py:38
+#: ../dialogs/BrowseValuesLibraryDialog.py:40
 #, python-format
 msgid "Browse %s values library"
 msgstr "Browse %s values library"
 
-#: ../dialogs/BrowseLocationsDialog.py:65
+#: ../dialogs/BrowseLocationsDialog.py:72
 msgid "Browse Locations"
 msgstr "Browse Locations"
 
-#: ../ProjectController.py:1832
+#: ../ProjectController.py:1815
 msgid "Build"
 msgstr "Build"
 
-#: ../ProjectController.py:1297
+#: ../ProjectController.py:1335
 msgid "Build directory already clean\n"
 msgstr "Build directory already clean\n"
 
-#: ../ProjectController.py:1833
+#: ../ProjectController.py:1816
 msgid "Build project into build folder"
 msgstr "Build project into build folder"
 
-#: ../ProjectController.py:1080
+#: ../ProjectController.py:1108
 msgid "C Build crashed !\n"
 msgstr "C Build crashed !\n"
 
-#: ../ProjectController.py:1077
+#: ../ProjectController.py:1105
 msgid "C Build failed.\n"
 msgstr "C Build failed.\n"
 
-#: ../c_ext/CFileEditor.py:63
+#: ../c_ext/CFileEditor.py:66
 msgid "C code"
 msgstr "C code"
 
-#: ../ProjectController.py:1155
+#: ../ProjectController.py:1186
 msgid "C code generated successfully.\n"
 msgstr "C code generated successfully.\n"
 
-#: ../targets/toolchain_makefile.py:122
+#: ../targets/toolchain_makefile.py:126
 msgid "C compilation failed.\n"
 msgstr "C compilation failed.\n"
 
-#: ../targets/toolchain_gcc.py:192
+#: ../targets/toolchain_gcc.py:199
 #, python-format
 msgid "C compilation of %s failed.\n"
 msgstr "C compilation of %s failed.\n"
 
-#: ../features.py:32
+#: ../features.py:33
 msgid "C extension"
 msgstr "C extension"
 
-#: ../dialogs/AboutDialog.py:71
+#: ../dialogs/AboutDialog.py:69
 msgid "C&redits"
 msgstr "C&redits"
 
-#: ../canfestival/NetworkEditor.py:52
+#: ../canfestival/NetworkEditor.py:58
 msgid "CANOpen network"
 msgstr "CANOpen network"
 
-#: ../canfestival/SlaveEditor.py:44
+#: ../canfestival/SlaveEditor.py:48
 msgid "CANOpen slave"
 msgstr "CANOpen slave"
 
@@ -780,34 +773,34 @@
 msgid "CANopen support"
 msgstr "CANopen support"
 
-#: ../plcopen/plcopen.py:1589 ../plcopen/plcopen.py:1603
-#: ../plcopen/plcopen.py:1627 ../plcopen/plcopen.py:1643
+#: ../plcopen/plcopen.py:1839 ../plcopen/plcopen.py:1853
+#: ../plcopen/plcopen.py:1878 ../plcopen/plcopen.py:1894
 msgid "Can only generate execution order on FBD networks!"
 msgstr "Can only generate execution order on FBD networks!"
 
-#: ../controls/VariablePanel.py:267
+#: ../controls/VariablePanel.py:291
 msgid "Can only give a location to local or global variables"
 msgstr "Can only give a location to local or global variables"
 
-#: ../PLCOpenEditor.py:344
+#: ../PLCOpenEditor.py:318
 #, python-format
 msgid "Can't generate program to file %s!"
 msgstr "Can't generate program to file %s!"
 
-#: ../controls/VariablePanel.py:265
+#: ../controls/VariablePanel.py:289
 msgid "Can't give a location to a function block instance"
 msgstr "Can't give a location to a function block instance"
 
-#: ../PLCOpenEditor.py:389
+#: ../PLCOpenEditor.py:363
 #, python-format
 msgid "Can't save project to file %s!"
 msgstr "Can't save project to file %s!"
 
-#: ../controls/VariablePanel.py:313
+#: ../controls/VariablePanel.py:339
 msgid "Can't set an initial value to a function block instance"
 msgstr "Can't set an initial value to a function block instance"
 
-#: ../ConfigTreeNode.py:529
+#: ../ConfigTreeNode.py:532
 #, python-brace-format
 msgid "Cannot create child {a1} of type {a2} "
 msgstr "Cannot create child {a1} of type {a2} "
@@ -817,44 +810,48 @@
 msgid "Cannot find lower free IEC channel than %d\n"
 msgstr "Cannot find lower free IEC channel than %d\n"
 
-#: ../connectors/PYRO/__init__.py:131
+#: ../connectors/PYRO/__init__.py:139
 msgid "Cannot get PLC status - connection failed.\n"
 msgstr "Cannot get PLC status - connection failed.\n"
 
-#: ../ProjectController.py:943
+#: ../ProjectController.py:967
 msgid "Cannot open/parse VARIABLES.csv!\n"
 msgstr "Cannot open/parse VARIABLES.csv!\n"
 
-#: ../canfestival/config_utils.py:374
+#: ../canfestival/config_utils.py:400
 #, python-brace-format
 msgid "Cannot set bit offset for non bool '{a1}' variable (ID:{a2},Idx:{a3},sIdx:{a4}))"
 msgstr "Cannot set bit offset for non bool '{a1}' variable (ID:{a2},Idx:{a3},sIdx:{a4}))"
 
-#: ../dialogs/SearchInProjectDialog.py:59 ../dialogs/FindInPouDialog.py:86
+#: ../ProjectController.py:1761
+msgid "Cannot transfer while PLC is running. Stop it now?"
+msgstr "Cannot transfer while PLC is running. Stop it now?"
+
+#: ../dialogs/SearchInProjectDialog.py:63 ../dialogs/FindInPouDialog.py:89
 msgid "Case sensitive"
 msgstr "Case sensitive"
 
-#: ../editors/Viewer.py:545
+#: ../editors/Viewer.py:581
 msgid "Center"
 msgstr "Center"
 
-#: ../Beremiz_service.py:268
+#: ../Beremiz_service.py:276
 msgid "Change IP of interface to bind"
 msgstr "Change IP of interface to bind"
 
-#: ../Beremiz_service.py:267
+#: ../Beremiz_service.py:275
 msgid "Change Name"
 msgstr "Change Name"
 
-#: ../IDEFrame.py:1946
+#: ../IDEFrame.py:1977
 msgid "Change POU Type To"
 msgstr "Change POU Type To"
 
-#: ../Beremiz_service.py:269
+#: ../Beremiz_service.py:277
 msgid "Change Port Number"
 msgstr "Change Port Number"
 
-#: ../Beremiz_service.py:270
+#: ../Beremiz_service.py:278
 msgid "Change working directory"
 msgstr "Change working directory"
 
@@ -862,115 +859,119 @@
 msgid "Character string"
 msgstr "Character string"
 
-#: ../svgui/svgui.py:128
+#: ../svgui/svgui.py:136
 msgid "Choose a SVG file"
 msgstr "Choose a SVG file"
 
-#: ../ProjectController.py:542
+#: ../ProjectController.py:561
 msgid "Choose a directory to save project"
 msgstr "Choose a directory to save project"
 
-#: ../canfestival/canfestival.py:162 ../PLCOpenEditor.py:302
-#: ../PLCOpenEditor.py:334 ../PLCOpenEditor.py:383
+#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276
+#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357
 msgid "Choose a file"
 msgstr "Choose a file"
 
-#: ../BeremizIDE.py:833 ../BeremizIDE.py:869
+#: ../BeremizIDE.py:900
 msgid "Choose a project"
 msgstr "Choose a project"
 
-#: ../dialogs/BrowseValuesLibraryDialog.py:41
+#: ../dialogs/BrowseValuesLibraryDialog.py:43
 #, python-format
 msgid "Choose a value for %s:"
 msgstr "Choose a value for %s:"
 
-#: ../Beremiz_service.py:325
+#: ../Beremiz_service.py:333
 msgid "Choose a working directory "
 msgstr "Choose a working directory "
 
-#: ../ProjectController.py:449
+#: ../BeremizIDE.py:864
+msgid "Choose an empty directory for new project"
+msgstr "Choose an empty directory for new project"
+
+#: ../ProjectController.py:468
 msgid "Chosen folder doesn't contain a program. It's not a valid project!"
 msgstr "Chosen folder doesn't contain a program. It's not a valid project!"
 
-#: ../ProjectController.py:416
+#: ../ProjectController.py:435
 msgid "Chosen folder isn't empty. You can't use it for a new project!"
 msgstr "Chosen folder isn't empty. You can't use it for a new project!"
 
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../controls/VariablePanel.py:60
 msgid "Class"
 msgstr "Class"
 
-#: ../controls/VariablePanel.py:441
+#: ../controls/VariablePanel.py:472
 msgid "Class Filter:"
 msgstr "Class Filter:"
 
-#: ../dialogs/FBDVariableDialog.py:70
+#: ../dialogs/FBDVariableDialog.py:74
 msgid "Class:"
 msgstr "Class:"
 
-#: ../ProjectController.py:1836
+#: ../ProjectController.py:1821
 msgid "Clean"
 msgstr "Clean"
 
-#: ../controls/LogViewer.py:318
+#: ../controls/LogViewer.py:327
 msgid "Clean log messages"
 msgstr "Clean log messages"
 
-#: ../ProjectController.py:1838
+#: ../ProjectController.py:1822
 msgid "Clean project build folder"
 msgstr "Clean project build folder"
 
-#: ../ProjectController.py:1294
+#: ../ProjectController.py:1332
 msgid "Cleaning the build directory\n"
 msgstr "Cleaning the build directory\n"
 
-#: ../IDEFrame.py:435
+#: ../IDEFrame.py:437
 msgid "Clear Errors"
 msgstr "Clear Errors"
 
-#: ../editors/Viewer.py:641
+#: ../editors/Viewer.py:680
 msgid "Clear Execution Order"
 msgstr "Clear Execution Order"
 
-#: ../dialogs/SearchInProjectDialog.py:103 ../dialogs/FindInPouDialog.py:109
+#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112
 msgid "Close"
 msgstr "Close"
 
-#: ../BeremizIDE.py:595 ../PLCOpenEditor.py:209
+#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183
 msgid "Close Application"
 msgstr "Close Application"
 
-#: ../BeremizIDE.py:228 ../BeremizIDE.py:539 ../PLCOpenEditor.py:110
-#: ../IDEFrame.py:1013
+#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81
+#: ../IDEFrame.py:1040
 msgid "Close Project"
 msgstr "Close Project"
 
-#: ../BeremizIDE.py:226 ../PLCOpenEditor.py:108
+#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79
 msgid "Close Tab"
 msgstr "Close Tab"
 
-#: ../editors/Viewer.py:600 ../editors/Viewer.py:2415
+#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448
 msgid "Coil"
 msgstr "Coil"
 
-#: ../editors/Viewer.py:620 ../editors/LDViewer.py:506
+#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517
 msgid "Comment"
 msgstr "Comment"
 
-#: ../BeremizIDE.py:276 ../BeremizIDE.py:279 ../PLCOpenEditor.py:161
-#: ../PLCOpenEditor.py:164
+#: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134
+#: ../PLCOpenEditor.py:138
 msgid "Community support"
 msgstr "Community support"
 
-#: ../dialogs/ProjectDialog.py:60
+#: ../dialogs/ProjectDialog.py:65
 msgid "Company Name"
 msgstr "Company Name"
 
-#: ../controls/ProjectPropertiesPanel.py:95
+#: ../controls/ProjectPropertiesPanel.py:106
 msgid "Company Name (required):"
 msgstr "Company Name (required):"
 
-#: ../controls/ProjectPropertiesPanel.py:96
+#: ../controls/ProjectPropertiesPanel.py:107
 msgid "Company URL (optional):"
 msgstr "Company URL (optional):"
 
@@ -978,7 +979,7 @@
 msgid "Comparison"
 msgstr "Comparison"
 
-#: ../ProjectController.py:734
+#: ../ProjectController.py:756
 msgid "Compiling IEC Program into C code...\n"
 msgstr "Compiling IEC Program into C code...\n"
 
@@ -986,93 +987,93 @@
 msgid "Concatenation"
 msgstr "Concatenation"
 
-#: ../editors/ConfTreeNodeEditor.py:230
+#: ../editors/ConfTreeNodeEditor.py:241
 msgid "Config"
 msgstr "Config"
 
-#: ../editors/ProjectNodeEditor.py:36
+#: ../editors/ProjectNodeEditor.py:39
 msgid "Config variables"
 msgstr "Config variables"
 
-#: ../dialogs/SearchInProjectDialog.py:40
+#: ../dialogs/SearchInProjectDialog.py:43
 msgid "Configuration"
 msgstr "Configuration"
 
-#: ../PLCControler.py:99
+#: ../plcopen/types_enums.py:77
 msgid "Configurations"
 msgstr "Configurations"
 
-#: ../editors/Viewer.py:308 ../editors/Viewer.py:338 ../editors/Viewer.py:360
-#: ../editors/TextViewer.py:291 ../editors/TextViewer.py:342
-#: ../editors/TextViewer.py:365 ../controls/VariablePanel.py:328
+#: ../editors/Viewer.py:351 ../editors/Viewer.py:381 ../editors/Viewer.py:403
+#: ../editors/TextViewer.py:289 ../editors/TextViewer.py:343
+#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:354
 msgid "Confirm or change variable name"
 msgstr "Confirm or change variable name"
 
-#: ../ProjectController.py:1851
+#: ../ProjectController.py:1842
 msgid "Connect"
 msgstr "Connect"
 
-#: ../ProjectController.py:1852
+#: ../ProjectController.py:1843
 msgid "Connect to the target PLC"
 msgstr "Connect to the target PLC"
 
-#: ../ProjectController.py:1354
+#: ../ProjectController.py:1391
 #, python-format
 msgid "Connected to URI: %s"
 msgstr "Connected to URI: %s"
 
-#: ../dialogs/SFCTransitionDialog.py:77 ../editors/Viewer.py:586
-#: ../editors/Viewer.py:2408
+#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623
+#: ../editors/Viewer.py:2441
 msgid "Connection"
 msgstr "Connection"
 
-#: ../dialogs/ConnectionDialog.py:53
+#: ../dialogs/ConnectionDialog.py:55
 msgid "Connection Properties"
 msgstr "Connection Properties"
 
-#: ../ProjectController.py:1709
+#: ../ProjectController.py:1691
 msgid "Connection canceled!\n"
 msgstr "Connection canceled!\n"
 
-#: ../ProjectController.py:1734
+#: ../ProjectController.py:1714
 #, python-format
 msgid "Connection failed to %s!\n"
 msgstr "Connection failed to %s!\n"
 
-#: ../connectors/PYRO/__init__.py:115 ../connectors/WAMP/__init__.py:111
+#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120
 msgid "Connection lost!\n"
 msgstr "Connection lost!\n"
 
-#: ../connectors/PYRO/__init__.py:102
+#: ../connectors/PYRO/__init__.py:110
 #, python-format
 msgid "Connection to '%s' failed.\n"
 msgstr "Connection to '%s' failed.\n"
 
-#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1643
+#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676
 msgid "Connector"
 msgstr "Connector"
 
-#: ../dialogs/SFCStepDialog.py:66
+#: ../dialogs/SFCStepDialog.py:68
 msgid "Connectors:"
 msgstr "Connectors:"
 
-#: ../BeremizIDE.py:350
+#: ../BeremizIDE.py:378
 msgid "Console"
 msgstr "Console"
 
-#: ../controls/VariablePanel.py:60
+#: ../controls/VariablePanel.py:75
 msgid "Constant"
 msgstr "Constant"
 
-#: ../editors/Viewer.py:596 ../editors/Viewer.py:2411
+#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444
 msgid "Contact"
 msgstr "Contact"
 
-#: ../controls/ProjectPropertiesPanel.py:198
+#: ../controls/ProjectPropertiesPanel.py:217
 msgid "Content Description (optional):"
 msgstr "Content Description (optional):"
 
-#: ../dialogs/ConnectionDialog.py:66 ../editors/Viewer.py:1644
+#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677
 msgid "Continuation"
 msgstr "Continuation"
 
@@ -1092,20 +1093,20 @@
 msgid "Conversion to time-of-day"
 msgstr "Conversion to time-of-day"
 
-#: ../editors/Viewer.py:656 ../controls/LogViewer.py:704 ../IDEFrame.py:370
-#: ../IDEFrame.py:425
+#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372
+#: ../IDEFrame.py:427
 msgid "Copy"
 msgstr "Copy"
 
-#: ../IDEFrame.py:1933
+#: ../IDEFrame.py:1964
 msgid "Copy POU"
 msgstr "Copy POU"
 
-#: ../editors/FileManagementPanel.py:65
+#: ../editors/FileManagementPanel.py:68
 msgid "Copy file from left folder to right"
 msgstr "Copy file from left folder to right"
 
-#: ../editors/FileManagementPanel.py:64
+#: ../editors/FileManagementPanel.py:67
 msgid "Copy file from right folder to left"
 msgstr "Copy file from right folder to left"
 
@@ -1113,7 +1114,7 @@
 msgid "Cosine"
 msgstr "Cosine"
 
-#: ../ConfigTreeNode.py:656
+#: ../ConfigTreeNode.py:660
 #, python-brace-format
 msgid ""
 "Could not add child \"{a1}\", type {a2} :\n"
@@ -1122,12 +1123,12 @@
 "Could not add child \"{a1}\", type {a2} :\n"
 "{a3}\n"
 
-#: ../py_ext/PythonFileCTNMixin.py:78
+#: ../py_ext/PythonFileCTNMixin.py:81
 #, python-format
 msgid "Couldn't import old %s file."
 msgstr "Couldn't import old %s file."
 
-#: ../ConfigTreeNode.py:626
+#: ../ConfigTreeNode.py:630
 #, python-brace-format
 msgid ""
 "Couldn't load confnode base parameters {a1} :\n"
@@ -1136,7 +1137,7 @@
 "Couldn't load confnode base parameters {a1} :\n"
 " {a2}"
 
-#: ../ConfigTreeNode.py:643 ../CodeFileTreeNode.py:124
+#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127
 #, python-brace-format
 msgid ""
 "Couldn't load confnode parameters {a1} :\n"
@@ -1145,111 +1146,107 @@
 "Couldn't load confnode parameters {a1} :\n"
 " {a2}"
 
-#: ../PLCControler.py:948
+#: ../PLCControler.py:552
 msgid "Couldn't paste non-POU object."
 msgstr "Couldn't paste non-POU object."
 
-#: ../ProjectController.py:1651
+#: ../ProjectController.py:1636
 msgid "Couldn't start PLC !\n"
 msgstr "Couldn't start PLC !\n"
 
-#: ../ProjectController.py:1659
+#: ../ProjectController.py:1644
 msgid "Couldn't stop PLC !\n"
 msgstr "Couldn't stop PLC !\n"
 
-#: ../ProjectController.py:1623
-msgid "Couldn't stop debugger.\n"
-msgstr "Couldn't stop debugger.\n"
-
-#: ../svgui/svgui.py:49
+#: ../svgui/svgui.py:57
 msgid "Create HMI"
 msgstr "Create HMI"
 
-#: ../dialogs/PouDialog.py:46
+#: ../dialogs/PouDialog.py:54
 msgid "Create a new POU"
 msgstr "Create a new POU"
 
-#: ../dialogs/PouActionDialog.py:38
+#: ../dialogs/PouActionDialog.py:45
 msgid "Create a new action"
 msgstr "Create a new action"
 
-#: ../IDEFrame.py:159
+#: ../IDEFrame.py:166
 msgid "Create a new action block"
 msgstr "Create a new action block"
 
-#: ../IDEFrame.py:108 ../IDEFrame.py:138 ../IDEFrame.py:171
+#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178
 msgid "Create a new block"
 msgstr "Create a new block"
 
-#: ../IDEFrame.py:132
+#: ../IDEFrame.py:139
 msgid "Create a new branch"
 msgstr "Create a new branch"
 
-#: ../IDEFrame.py:126
+#: ../IDEFrame.py:133
 msgid "Create a new coil"
 msgstr "Create a new coil"
 
-#: ../IDEFrame.py:102 ../IDEFrame.py:117 ../IDEFrame.py:147
+#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154
 msgid "Create a new comment"
 msgstr "Create a new comment"
 
-#: ../IDEFrame.py:111 ../IDEFrame.py:141 ../IDEFrame.py:174
+#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181
 msgid "Create a new connection"
 msgstr "Create a new connection"
 
-#: ../IDEFrame.py:129 ../IDEFrame.py:180
+#: ../IDEFrame.py:136 ../IDEFrame.py:187
 msgid "Create a new contact"
 msgstr "Create a new contact"
 
-#: ../IDEFrame.py:162
+#: ../IDEFrame.py:169
 msgid "Create a new divergence"
 msgstr "Create a new divergence"
 
-#: ../dialogs/SFCDivergenceDialog.py:53
+#: ../dialogs/SFCDivergenceDialog.py:54
 msgid "Create a new divergence or convergence"
 msgstr "Create a new divergence or convergence"
 
-#: ../IDEFrame.py:150
+#: ../IDEFrame.py:157
 msgid "Create a new initial step"
 msgstr "Create a new initial step"
 
-#: ../IDEFrame.py:165
+#: ../IDEFrame.py:172
 msgid "Create a new jump"
 msgstr "Create a new jump"
 
-#: ../IDEFrame.py:120 ../IDEFrame.py:177
+#: ../IDEFrame.py:127 ../IDEFrame.py:184
 msgid "Create a new power rail"
 msgstr "Create a new power rail"
 
-#: ../IDEFrame.py:123
+#: ../IDEFrame.py:130
 msgid "Create a new rung"
 msgstr "Create a new rung"
 
-#: ../IDEFrame.py:153
+#: ../IDEFrame.py:160
 msgid "Create a new step"
 msgstr "Create a new step"
 
-#: ../dialogs/PouTransitionDialog.py:42 ../IDEFrame.py:156
+#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163
 msgid "Create a new transition"
 msgstr "Create a new transition"
 
-#: ../IDEFrame.py:105 ../IDEFrame.py:135 ../IDEFrame.py:168
+#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175
 msgid "Create a new variable"
 msgstr "Create a new variable"
 
-#: ../dialogs/AboutDialog.py:113
+#: ../dialogs/AboutDialog.py:109
 msgid "Credits"
 msgstr "Credits"
 
-#: ../Beremiz_service.py:434
+#: ../Beremiz_service.py:424
 msgid "Current working directory :"
 msgstr "Current working directory :"
 
-#: ../editors/Viewer.py:655 ../IDEFrame.py:368 ../IDEFrame.py:424
+#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426
 msgid "Cut"
 msgstr "Cut"
 
-#: ../editors/ResourceEditor.py:72
+#: ../editors/ResourceEditor.py:81
 msgid "Cyclic"
 msgstr "Cyclic"
 
@@ -1261,19 +1258,19 @@
 msgid "DEPRECATED"
 msgstr "DEPRECATED"
 
-#: ../canfestival/SlaveEditor.py:76 ../canfestival/NetworkEditor.py:97
+#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104
 msgid "DS-301 Profile"
 msgstr "DS-301 Profile"
 
-#: ../canfestival/SlaveEditor.py:77 ../canfestival/NetworkEditor.py:98
+#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105
 msgid "DS-302 Profile"
 msgstr "DS-302 Profile"
 
-#: ../dialogs/SearchInProjectDialog.py:36
+#: ../dialogs/SearchInProjectDialog.py:39
 msgid "Data Type"
 msgstr "Data Type"
 
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
 msgid "Data Types"
 msgstr "Data Types"
 
@@ -1294,66 +1291,58 @@
 msgid "Date subtraction"
 msgstr "Date subtraction"
 
-#: ../dialogs/DurationEditorDialog.py:44
+#: ../dialogs/DurationEditorDialog.py:46
 msgid "Days:"
 msgstr "Days:"
 
-#: ../ProjectController.py:1756
+#: ../ProjectController.py:1729
 msgid "Debug does not match PLC - stop/transfert/start to re-enable\n"
 msgstr "Debug does not match PLC - stop/transfert/start to re-enable\n"
 
-#: ../controls/PouInstanceVariablesPanel.py:134
+#: ../controls/PouInstanceVariablesPanel.py:144
 msgid "Debug instance"
 msgstr "Debug instance"
 
-#: ../editors/Viewer.py:448
+#: ../editors/Viewer.py:490
 #, python-format
 msgid "Debug: %s"
 msgstr "Debug: %s"
 
-#: ../ProjectController.py:1412
+#: ../ProjectController.py:1471
 #, python-format
 msgid "Debug: Unknown variable '%s'\n"
 msgstr "Debug: Unknown variable '%s'\n"
 
-#: ../ProjectController.py:1410
+#: ../ProjectController.py:1469
 #, python-format
 msgid "Debug: Unsupported type to debug '%s'\n"
 msgstr "Debug: Unsupported type to debug '%s'\n"
 
-#: ../IDEFrame.py:639
+#: ../IDEFrame.py:660
 msgid "Debugger"
 msgstr "Debugger"
 
-#: ../ProjectController.py:1592
-msgid "Debugger disabled\n"
-msgstr "Debugger disabled\n"
-
-#: ../ProjectController.py:1753
+#: ../ProjectController.py:1726
 msgid "Debugger ready\n"
 msgstr "Debugger ready\n"
 
-#: ../ProjectController.py:1625
-msgid "Debugger stopped.\n"
-msgstr "Debugger stopped.\n"
-
-#: ../BeremizIDE.py:968 ../editors/Viewer.py:631 ../IDEFrame.py:1962
+#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993
 msgid "Delete"
 msgstr "Delete"
 
-#: ../editors/Viewer.py:573
+#: ../editors/Viewer.py:610
 msgid "Delete Divergence Branch"
 msgstr "Delete Divergence Branch"
 
-#: ../editors/FileManagementPanel.py:153
+#: ../editors/FileManagementPanel.py:157
 msgid "Delete File"
 msgstr "Delete File"
 
-#: ../editors/Viewer.py:560
+#: ../editors/Viewer.py:597
 msgid "Delete Wire Segment"
 msgstr "Delete Wire Segment"
 
-#: ../controls/CustomEditableListBox.py:41
+#: ../controls/CustomEditableListBox.py:44
 msgid "Delete item"
 msgstr "Delete item"
 
@@ -1361,47 +1350,47 @@
 msgid "Deletion (within)"
 msgstr "Deletion (within)"
 
-#: ../editors/DataTypeEditor.py:153
+#: ../editors/DataTypeEditor.py:161
 msgid "Derivation Type:"
 msgstr "Derivation Type:"
 
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:735
 msgid "Description"
 msgstr "Description"
 
-#: ../controls/VariablePanel.py:432
+#: ../controls/VariablePanel.py:463
 msgid "Description:"
 msgstr "Description:"
 
-#: ../dialogs/ArrayTypeDialog.py:60 ../editors/DataTypeEditor.py:321
+#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332
 msgid "Dimensions:"
 msgstr "Dimensions:"
 
-#: ../dialogs/FindInPouDialog.py:66
+#: ../dialogs/FindInPouDialog.py:69
 msgid "Direction"
 msgstr "Direction"
 
-#: ../dialogs/BrowseLocationsDialog.py:91
+#: ../dialogs/BrowseLocationsDialog.py:102
 msgid "Direction:"
 msgstr "Direction:"
 
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
 msgid "Directly"
 msgstr "Directly"
 
-#: ../ProjectController.py:1860
+#: ../ProjectController.py:1855
 msgid "Disconnect"
 msgstr "Disconnect"
 
-#: ../ProjectController.py:1862
+#: ../ProjectController.py:1856
 msgid "Disconnect from PLC"
 msgstr "Disconnect from PLC"
 
-#: ../ProjectController.py:1364
+#: ../ProjectController.py:1401
 msgid "Disconnected"
 msgstr "Disconnected"
 
-#: ../editors/Viewer.py:615 ../editors/Viewer.py:2403
+#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436
 msgid "Divergence"
 msgstr "Divergence"
 
@@ -1409,120 +1398,120 @@
 msgid "Division"
 msgstr "Division"
 
-#: ../editors/FileManagementPanel.py:152
+#: ../editors/FileManagementPanel.py:156
 #, python-format
 msgid "Do you really want to delete the file '%s'?"
 msgstr "Do you really want to delete the file '%s'?"
 
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../controls/VariablePanel.py:65
 msgid "Documentation"
 msgstr "Documentation"
 
-#: ../PLCOpenEditor.py:338
+#: ../PLCOpenEditor.py:312
 msgid "Done"
 msgstr "Done"
 
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
 msgid "Duration"
 msgstr "Duration"
 
-#: ../canfestival/canfestival.py:165
+#: ../canfestival/canfestival.py:174
 msgid "EDS files (*.eds)|*.eds|All files|*.*"
 msgstr "EDS files (*.eds)|*.eds|All files|*.*"
 
-#: ../editors/Viewer.py:629
+#: ../editors/Viewer.py:668
 msgid "Edit Block"
 msgstr "Edit Block"
 
-#: ../dialogs/LDElementDialog.py:56
+#: ../dialogs/LDElementDialog.py:58
 msgid "Edit Coil Values"
 msgstr "Edit Coil Values"
 
-#: ../dialogs/LDElementDialog.py:54
+#: ../dialogs/LDElementDialog.py:56
 msgid "Edit Contact Values"
 msgstr "Edit Contact Values"
 
-#: ../dialogs/DurationEditorDialog.py:59
+#: ../dialogs/DurationEditorDialog.py:62
 msgid "Edit Duration"
 msgstr "Edit Duration"
 
-#: ../dialogs/SFCStepDialog.py:51
+#: ../dialogs/SFCStepDialog.py:53
 msgid "Edit Step"
 msgstr "Edit Step"
 
-#: ../wxglade_hmi/wxglade_hmi.py:38
+#: ../wxglade_hmi/wxglade_hmi.py:45
 msgid "Edit a WxWidgets GUI with WXGlade"
 msgstr "Edit a WxWidgets GUI with WXGlade"
 
-#: ../dialogs/ActionBlockDialog.py:121
+#: ../dialogs/ActionBlockDialog.py:127
 msgid "Edit action block properties"
 msgstr "Edit action block properties"
 
-#: ../dialogs/ArrayTypeDialog.py:44
+#: ../dialogs/ArrayTypeDialog.py:47
 msgid "Edit array type properties"
 msgstr "Edit array type properties"
 
-#: ../editors/Viewer.py:2626 ../editors/Viewer.py:3055
+#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102
 msgid "Edit comment"
 msgstr "Edit comment"
 
-#: ../editors/FileManagementPanel.py:66
+#: ../editors/FileManagementPanel.py:69
 msgid "Edit file"
 msgstr "Edit file"
 
-#: ../controls/CustomEditableListBox.py:39
+#: ../controls/CustomEditableListBox.py:42
 msgid "Edit item"
 msgstr "Edit item"
 
-#: ../editors/Viewer.py:3014
+#: ../editors/Viewer.py:3059
 msgid "Edit jump target"
 msgstr "Edit jump target"
 
-#: ../ProjectController.py:1874
+#: ../ProjectController.py:1873
 msgid "Edit raw IEC code added to code generated by PLCGenerator"
 msgstr "Edit raw IEC code added to code generated by PLCGenerator"
 
-#: ../editors/SFCViewer.py:799
+#: ../editors/SFCViewer.py:815
 msgid "Edit step name"
 msgstr "Edit step name"
 
-#: ../dialogs/SFCTransitionDialog.py:52
+#: ../dialogs/SFCTransitionDialog.py:53
 msgid "Edit transition"
 msgstr "Edit transition"
 
-#: ../IDEFrame.py:611
+#: ../IDEFrame.py:632
 msgid "Editor ToolBar"
 msgstr "Editor ToolBar"
 
-#: ../ProjectController.py:1257
+#: ../ProjectController.py:1294
 msgid "Editor selection"
 msgstr "Editor selection"
 
-#: ../editors/DataTypeEditor.py:348
+#: ../editors/DataTypeEditor.py:360
 msgid "Elements :"
 msgstr "Elements :"
 
-#: ../ProjectController.py:1362
+#: ../ProjectController.py:1399
 msgid "Empty"
 msgstr "Empty"
 
-#: ../IDEFrame.py:365
-msgid "Enable Undo/Redo"
-msgstr "Enable Undo/Redo"
-
-#: ../Beremiz_service.py:333
+#: ../dialogs/ArrayTypeDialog.py:100
+msgid "Empty dimension isn't allowed."
+msgstr "Empty dimension isn't allowed."
+
+#: ../Beremiz_service.py:341
 msgid "Enter a name "
 msgstr "Enter a name "
 
-#: ../Beremiz_service.py:318
+#: ../Beremiz_service.py:326
 msgid "Enter a port number "
 msgstr "Enter a port number "
 
-#: ../Beremiz_service.py:309
+#: ../Beremiz_service.py:317
 msgid "Enter the IP of the interface to bind"
 msgstr "Enter the IP of the interface to bind"
 
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
 msgid "Enumerated"
 msgstr "Enumerated"
 
@@ -1530,44 +1519,44 @@
 msgid "Equal to"
 msgstr "Equal to"
 
-#: ../BeremizIDE.py:1107 ../dialogs/ForceVariableDialog.py:197
-#: ../dialogs/SearchInProjectDialog.py:168 ../dialogs/SFCStepNameDialog.py:60
-#: ../dialogs/DurationEditorDialog.py:121
-#: ../dialogs/DurationEditorDialog.py:167 ../dialogs/PouTransitionDialog.py:107
-#: ../dialogs/BlockPreviewDialog.py:237 ../dialogs/ProjectDialog.py:74
-#: ../dialogs/ArrayTypeDialog.py:97 ../dialogs/ArrayTypeDialog.py:103
-#: ../dialogs/PouNameDialog.py:54 ../dialogs/BrowseLocationsDialog.py:218
-#: ../dialogs/BrowseValuesLibraryDialog.py:83 ../dialogs/PouActionDialog.py:105
-#: ../dialogs/PouDialog.py:135 ../PLCOpenEditor.py:345 ../PLCOpenEditor.py:350
-#: ../PLCOpenEditor.py:430 ../PLCOpenEditor.py:440
-#: ../editors/ResourceEditor.py:436 ../editors/Viewer.py:424
-#: ../editors/LDViewer.py:666 ../editors/LDViewer.py:882
-#: ../editors/LDViewer.py:886 ../editors/DataTypeEditor.py:550
-#: ../editors/DataTypeEditor.py:555 ../editors/DataTypeEditor.py:574
-#: ../editors/DataTypeEditor.py:743 ../editors/DataTypeEditor.py:750
-#: ../editors/TextViewer.py:389 ../editors/CodeFileEditor.py:762
-#: ../ProjectController.py:372 ../ProjectController.py:512
-#: ../ProjectController.py:519 ../controls/FolderTree.py:217
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:166
-#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:137
-#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:231
-#: ../controls/VariablePanel.py:402 ../controls/VariablePanel.py:759
-#: ../IDEFrame.py:1007 ../IDEFrame.py:1617 ../IDEFrame.py:1658
-#: ../IDEFrame.py:1663 ../IDEFrame.py:1677 ../IDEFrame.py:1682
-#: ../Beremiz_service.py:213
+#: ../dialogs/ForceVariableDialog.py:213
+#: ../dialogs/SearchInProjectDialog.py:172 ../dialogs/SFCStepNameDialog.py:64
+#: ../dialogs/DurationEditorDialog.py:124
+#: ../dialogs/DurationEditorDialog.py:170 ../dialogs/PouTransitionDialog.py:114
+#: ../dialogs/BlockPreviewDialog.py:237 ../dialogs/ProjectDialog.py:80
+#: ../dialogs/ArrayTypeDialog.py:114 ../dialogs/PouNameDialog.py:58
+#: ../dialogs/BrowseLocationsDialog.py:229
+#: ../dialogs/BrowseValuesLibraryDialog.py:87 ../dialogs/PouActionDialog.py:112
+#: ../dialogs/PouDialog.py:143 ../PLCOpenEditor.py:319 ../PLCOpenEditor.py:324
+#: ../editors/ResourceEditor.py:470 ../editors/Viewer.py:467
+#: ../editors/LDViewer.py:677 ../editors/LDViewer.py:893
+#: ../editors/LDViewer.py:897 ../editors/DataTypeEditor.py:566
+#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:590
+#: ../editors/DataTypeEditor.py:759 ../editors/DataTypeEditor.py:766
+#: ../editors/TextViewer.py:390 ../editors/CodeFileEditor.py:760
+#: ../ProjectController.py:391 ../ProjectController.py:531
+#: ../ProjectController.py:538 ../controls/FolderTree.py:222
+#: ../controls/ProjectPropertiesPanel.py:306
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:173
+#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:138
+#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:227
+#: ../controls/VariablePanel.py:431 ../controls/VariablePanel.py:773
+#: ../util/ExceptionHandler.py:70 ../IDEFrame.py:1036 ../IDEFrame.py:1650
+#: ../IDEFrame.py:1691 ../IDEFrame.py:1696 ../IDEFrame.py:1710
+#: ../IDEFrame.py:1715 ../Beremiz_service.py:221
 msgid "Error"
 msgstr "Error"
 
-#: ../ProjectController.py:789
+#: ../ProjectController.py:811
 msgid "Error : At least one configuration and one resource must be declared in PLC !\n"
 msgstr "Error : At least one configuration and one resource must be declared in PLC !\n"
 
-#: ../ProjectController.py:781
+#: ../ProjectController.py:803
 #, python-format
 msgid "Error : IEC to C compiler returned %d\n"
 msgstr "Error : IEC to C compiler returned %d\n"
 
-#: ../ProjectController.py:712
+#: ../ProjectController.py:731
 #, python-format
 msgid ""
 "Error in ST/IL/SFC code generator :\n"
@@ -1576,37 +1565,42 @@
 "Error in ST/IL/SFC code generator :\n"
 "%s\n"
 
-#: ../ConfigTreeNode.py:216
+#: ../ConfigTreeNode.py:219
 #, python-format
 msgid "Error while saving \"%s\"\n"
 msgstr "Error while saving \"%s\"\n"
 
-#: ../canfestival/canfestival.py:170
+#: ../canfestival/canfestival.py:179
 msgid "Error: Export slave failed\n"
 msgstr "Error: Export slave failed\n"
 
-#: ../canfestival/canfestival.py:371
+#: ../modbus/modbus.py:601
+#, python-brace-format
+msgid "Error: Modbus/IP Servers %{a1}.x and %{a2}.x use the same port number {a3}.\n"
+msgstr "Error: Modbus/IP Servers %{a1}.x and %{a2}.x use the same port number {a3}.\n"
+
+#: ../canfestival/canfestival.py:388
 msgid "Error: No Master generated\n"
 msgstr "Error: No Master generated\n"
 
-#: ../canfestival/canfestival.py:366
+#: ../canfestival/canfestival.py:383
 msgid "Error: No PLC built\n"
 msgstr "Error: No PLC built\n"
 
-#: ../ProjectController.py:1728
+#: ../ProjectController.py:1708
 #, python-format
 msgid "Exception while connecting %s!\n"
 msgstr "Exception while connecting %s!\n"
 
-#: ../dialogs/FBDBlockDialog.py:120
+#: ../dialogs/FBDBlockDialog.py:123
 msgid "Execution Control:"
 msgstr "Execution Control:"
 
-#: ../dialogs/FBDVariableDialog.py:80 ../dialogs/FBDBlockDialog.py:108
+#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111
 msgid "Execution Order:"
 msgstr "Execution Order:"
 
-#: ../features.py:35
+#: ../features.py:36
 msgid "Experimental web based HMI"
 msgstr "Experimental web based HMI"
 
@@ -1618,77 +1612,77 @@
 msgid "Exponentiation"
 msgstr "Exponentiation"
 
-#: ../canfestival/canfestival.py:176
+#: ../canfestival/canfestival.py:186
 msgid "Export CanOpen slave to EDS file"
 msgstr "Export CanOpen slave to EDS file"
 
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:243
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246
 msgid "Export graph values to clipboard"
 msgstr "Export graph values to clipboard"
 
-#: ../canfestival/canfestival.py:175
+#: ../canfestival/canfestival.py:185
 msgid "Export slave"
 msgstr "Export slave"
 
-#: ../dialogs/FBDVariableDialog.py:90
+#: ../dialogs/FBDVariableDialog.py:94
 msgid "Expression:"
 msgstr "Expression:"
 
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
 msgid "External"
 msgstr "External"
 
-#: ../ProjectController.py:802
+#: ../ProjectController.py:826
 msgid "Extracting Located Variables...\n"
 msgstr "Extracting Located Variables...\n"
 
-#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32
-#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
 msgid "FBD"
 msgstr "FBD"
 
-#: ../ProjectController.py:1791
+#: ../ProjectController.py:1773
 msgid "Failed : Must build before transfer.\n"
 msgstr "Failed : Must build before transfer.\n"
 
-#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:521
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556
 msgid "Falling Edge"
 msgstr "Falling Edge"
 
-#: ../ProjectController.py:1070
+#: ../ProjectController.py:1098
 msgid "Fatal : cannot get builder.\n"
 msgstr "Fatal : cannot get builder.\n"
 
-#: ../Beremiz.py:156
+#: ../Beremiz.py:160
 #, python-format
 msgid "Fetching %s"
 msgstr "Fetching %s"
 
-#: ../dialogs/DurationEditorDialog.py:164
+#: ../dialogs/DurationEditorDialog.py:167
 #, python-format
 msgid "Field %s hasn't a valid value!"
 msgstr "Field %s hasn't a valid value!"
 
-#: ../dialogs/DurationEditorDialog.py:166
+#: ../dialogs/DurationEditorDialog.py:169
 #, python-format
 msgid "Fields %s haven't a valid value!"
 msgstr "Fields %s haven't a valid value!"
 
-#: ../controls/FolderTree.py:216
+#: ../controls/FolderTree.py:221
 #, python-format
 msgid "File '%s' already exists!"
 msgstr "File '%s' already exists!"
 
-#: ../dialogs/SearchInProjectDialog.py:98 ../dialogs/FindInPouDialog.py:37
-#: ../dialogs/FindInPouDialog.py:104 ../IDEFrame.py:375
+#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40
+#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377
 msgid "Find"
 msgstr "Find"
 
-#: ../IDEFrame.py:377
+#: ../IDEFrame.py:379
 msgid "Find Next"
 msgstr "Find Next"
 
-#: ../IDEFrame.py:379
+#: ../IDEFrame.py:381
 msgid "Find Previous"
 msgstr "Find Previous"
 
@@ -1696,93 +1690,89 @@
 msgid "Find position"
 msgstr "Find position"
 
-#: ../dialogs/FindInPouDialog.py:55
+#: ../dialogs/FindInPouDialog.py:58
 msgid "Find:"
 msgstr "Find:"
 
-#: ../connectors/PYRO/__init__.py:163
-msgid "Force runtime reload\n"
-msgstr "Force runtime reload\n"
-
-#: ../editors/Viewer.py:1600
+#: ../editors/Viewer.py:1633
 msgid "Force value"
 msgstr "Force value"
 
-#: ../dialogs/ForceVariableDialog.py:162
+#: ../dialogs/ForceVariableDialog.py:176
 msgid "Forcing Variable Value"
 msgstr "Forcing Variable Value"
 
-#: ../dialogs/SFCTransitionDialog.py:182 ../dialogs/PouTransitionDialog.py:97
-#: ../dialogs/ProjectDialog.py:73 ../dialogs/PouActionDialog.py:95
-#: ../dialogs/PouDialog.py:117
+#: ../dialogs/SFCTransitionDialog.py:184 ../dialogs/PouTransitionDialog.py:104
+#: ../dialogs/ProjectDialog.py:79 ../dialogs/PouActionDialog.py:102
+#: ../dialogs/PouDialog.py:125
 #, python-format
 msgid "Form isn't complete. %s must be filled!"
 msgstr "Form isn't complete. %s must be filled!"
 
-#: ../dialogs/SFCStepDialog.py:147 ../dialogs/FBDBlockDialog.py:236
-#: ../dialogs/ConnectionDialog.py:163
+#: ../dialogs/SFCStepDialog.py:150 ../dialogs/FBDBlockDialog.py:239
+#: ../dialogs/ConnectionDialog.py:166
 msgid "Form isn't complete. Name must be filled!"
 msgstr "Form isn't complete. Name must be filled!"
 
-#: ../dialogs/FBDBlockDialog.py:232
+#: ../dialogs/FBDBlockDialog.py:235
 msgid "Form isn't complete. Valid block type must be selected!"
 msgstr "Form isn't complete. Valid block type must be selected!"
 
-#: ../dialogs/FindInPouDialog.py:72
+#: ../dialogs/FindInPouDialog.py:75
 msgid "Forward"
 msgstr "Forward"
 
-#: ../dialogs/SearchInProjectDialog.py:37 ../IDEFrame.py:1749
+#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780
 msgid "Function"
 msgstr "Function"
 
-#: ../IDEFrame.py:349
+#: ../IDEFrame.py:354
 msgid "Function &Block"
 msgstr "Function &Block"
 
-#: ../dialogs/SearchInProjectDialog.py:38 ../IDEFrame.py:1748
-#: ../IDEFrame.py:1941
+#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779
+#: ../IDEFrame.py:1972
 msgid "Function Block"
 msgstr "Function Block"
 
-#: ../controls/VariablePanel.py:854
+#: ../controls/VariablePanel.py:868
 msgid "Function Block Types"
 msgstr "Function Block Types"
 
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
 msgid "Function Blocks"
 msgstr "Function Blocks"
 
-#: ../editors/Viewer.py:249
+#: ../editors/Viewer.py:290
 msgid "Function Blocks can't be used in Functions!"
 msgstr "Function Blocks can't be used in Functions!"
 
-#: ../PLCControler.py:2343
+#: ../PLCControler.py:1907
 #, python-format
 msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!"
 msgstr "FunctionBlock \"%s\" can't be pasted in a Function!!!"
 
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
 msgid "Functions"
 msgstr "Functions"
 
-#: ../PLCOpenEditor.py:117
+#: ../PLCOpenEditor.py:88
 msgid "Generate Program"
 msgstr "Generate Program"
 
-#: ../ProjectController.py:703
+#: ../ProjectController.py:722
 msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n"
 msgstr "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n"
 
-#: ../controls/VariablePanel.py:73
+#: ../controls/VariablePanel.py:91
 msgid "Global"
 msgstr "Global"
 
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:242
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245
 msgid "Go to current value"
 msgstr "Go to current value"
 
-#: ../controls/ProjectPropertiesPanel.py:174
+#: ../controls/ProjectPropertiesPanel.py:189
 msgid "Graphics"
 msgstr "Graphics"
 
@@ -1794,110 +1784,114 @@
 msgid "Greater than or equal to"
 msgstr "Greater than or equal to"
 
-#: ../controls/ProjectPropertiesPanel.py:135
+#: ../controls/ProjectPropertiesPanel.py:149
 msgid "Grid Resolution:"
 msgstr "Grid Resolution:"
 
-#: ../runtime/NevowServer.py:182
+#: ../runtime/NevowServer.py:192
 msgid "HTTP interface port :"
 msgstr "HTTP interface port :"
 
-#: ../controls/ProjectPropertiesPanel.py:121
+#: ../controls/ProjectPropertiesPanel.py:135
 msgid "Height:"
 msgstr "Height:"
 
-#: ../editors/FileManagementPanel.py:85
+#: ../editors/FileManagementPanel.py:89
 msgid "Home Directory:"
 msgstr "Home Directory:"
 
-#: ../controls/ProjectPropertiesPanel.py:151
+#: ../controls/ProjectPropertiesPanel.py:165
 msgid "Horizontal:"
 msgstr "Horizontal:"
 
-#: ../dialogs/DurationEditorDialog.py:45
+#: ../dialogs/DurationEditorDialog.py:47
 msgid "Hours:"
 msgstr "Hours:"
 
-#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32
-#: ../dialogs/PouDialog.py:37
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44
 msgid "IL"
 msgstr "IL"
 
-#: ../dialogs/DiscoveryDialog.py:94
+#: ../dialogs/DiscoveryDialog.py:91
 msgid "IP"
 msgstr "IP"
 
-#: ../Beremiz_service.py:310 ../Beremiz_service.py:311
+#: ../Beremiz_service.py:318 ../Beremiz_service.py:320
 msgid "IP is not valid!"
 msgstr "IP is not valid!"
 
-#: ../svgui/svgui.py:44 ../svgui/svgui.py:45
+#: ../svgui/svgui.py:50 ../svgui/svgui.py:51
 msgid "Import SVG"
 msgstr "Import SVG"
 
-#: ../dialogs/FBDVariableDialog.py:39 ../editors/Viewer.py:1629
-#: ../controls/VariablePanel.py:71
+#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662
+#: ../controls/VariablePanel.py:89
 msgid "InOut"
 msgstr "InOut"
 
-#: ../editors/Viewer.py:431
+#: ../PLCGenerator.py:1040
+#, python-brace-format
+msgid "InOut variable {a1} in block {a2} in POU {a3} must be connected."
+msgstr "InOut variable {a1} in block {a2} in POU {a3} must be connected."
+
+#: ../editors/Viewer.py:473
 msgid "Inactive"
 msgstr "Inactive"
 
-#: ../controls/VariablePanel.py:276
+#: ../controls/VariablePanel.py:300
 #, python-brace-format
 msgid "Incompatible data types between \"{a1}\" and \"{a2}\""
 msgstr "Incompatible data types between \"{a1}\" and \"{a2}\""
 
-#: ../controls/VariablePanel.py:282
+#: ../controls/VariablePanel.py:306
 #, python-format
 msgid "Incompatible size of data between \"%s\" and \"BOOL\""
 msgstr "Incompatible size of data between \"%s\" and \"BOOL\""
 
-#: ../controls/VariablePanel.py:286
+#: ../controls/VariablePanel.py:310
 #, python-brace-format
 msgid "Incompatible size of data between \"{a1}\" and \"{a2}\""
 msgstr "Incompatible size of data between \"{a1}\" and \"{a2}\""
 
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
 msgid "Indicator"
 msgstr "Indicator"
 
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:734
 msgid "Initial"
 msgstr "Initial"
 
-#: ../editors/Viewer.py:611
+#: ../editors/Viewer.py:650
 msgid "Initial Step"
 msgstr "Initial Step"
 
-#: ../editors/DataTypeEditor.py:50 ../controls/VariablePanel.py:53
-#: ../controls/VariablePanel.py:54
+#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63
 msgid "Initial Value"
 msgstr "Initial Value"
 
-#: ../editors/DataTypeEditor.py:185 ../editors/DataTypeEditor.py:216
-#: ../editors/DataTypeEditor.py:272 ../editors/DataTypeEditor.py:310
+#: ../editors/DataTypeEditor.py:193 ../editors/DataTypeEditor.py:224
+#: ../editors/DataTypeEditor.py:281 ../editors/DataTypeEditor.py:320
 msgid "Initial Value:"
 msgstr "Initial Value:"
 
-#: ../svgui/svgui.py:48
+#: ../svgui/svgui.py:56
 msgid "Inkscape"
 msgstr "Inkscape"
 
-#: ../dialogs/SFCTransitionDialog.py:76 ../dialogs/ActionBlockDialog.py:43
+#: ../dialogs/SFCTransitionDialog.py:77 ../dialogs/ActionBlockDialog.py:47
 msgid "Inline"
 msgstr "Inline"
 
-#: ../dialogs/SFCStepDialog.py:71 ../dialogs/FBDVariableDialog.py:38
-#: ../dialogs/BrowseLocationsDialog.py:41 ../editors/Viewer.py:290
-#: ../editors/Viewer.py:1627 ../editors/TextViewer.py:307
-#: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71
-#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351
+#: ../dialogs/SFCStepDialog.py:73 ../dialogs/FBDVariableDialog.py:40
+#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:333
+#: ../editors/Viewer.py:1660 ../editors/TextViewer.py:307
+#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89
+#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380
 msgid "Input"
 msgstr "Input"
 
-#: ../dialogs/FBDBlockDialog.py:96
+#: ../dialogs/FBDBlockDialog.py:99
 msgid "Inputs:"
 msgstr "Inputs:"
 
@@ -1905,64 +1899,72 @@
 msgid "Insertion (into)"
 msgstr "Insertion (into)"
 
-#: ../plcopen/plcopen.py:1696
+#: ../plcopen/plcopen.py:1948
 #, python-format
 msgid "Instance with id %d doesn't exist!"
 msgstr "Instance with id %d doesn't exist!"
 
-#: ../editors/ResourceEditor.py:264
+#: ../editors/ResourceEditor.py:279
 msgid "Instances:"
 msgstr "Instances:"
 
-#: ../controls/VariablePanel.py:70
+#: ../controls/VariablePanel.py:88
 msgid "Interface"
 msgstr "Interface"
 
-#: ../editors/ResourceEditor.py:72
+#: ../editors/ResourceEditor.py:81
 msgid "Interrupt"
 msgstr "Interrupt"
 
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
 msgid "Interval"
 msgstr "Interval"
 
-#: ../PLCControler.py:2331
+#: ../controls/ProjectPropertiesPanel.py:304
+msgid ""
+"Invalid URL!\n"
+"Please enter correct URL address."
+msgstr ""
+"Invalid URL!\n"
+"Please enter correct URL address."
+
+#: ../PLCControler.py:1895
 msgid "Invalid plcopen element(s)!!!"
 msgstr "Invalid plcopen element(s)!!!"
 
-#: ../canfestival/config_utils.py:381
+#: ../canfestival/config_utils.py:407
 #, python-brace-format
-msgid "Invalid type \"{a1}\"-> {a2} != {a3}  for location\"{a4}\""
-msgstr "Invalid type \"{a1}\"-> {a2} != {a3}  for location\"{a4}\""
-
-#: ../canfestival/config_utils.py:645
+msgid "Invalid type \"{a1}\"-> {a2} != {a3}  for location \"{a4}\""
+msgstr "Invalid type \"{a1}\"-> {a2} != {a3}  for location \"{a4}\""
+
+#: ../canfestival/config_utils.py:689
 #, python-brace-format
 msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
 msgstr "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
 
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:132
-#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:92
-#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:166
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:139
+#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:93
+#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:162
 #, python-format
 msgid "Invalid value \"%s\" for debug variable"
 msgstr "Invalid value \"%s\" for debug variable"
 
-#: ../controls/VariablePanel.py:255 ../controls/VariablePanel.py:258
+#: ../controls/VariablePanel.py:279 ../controls/VariablePanel.py:282
 #, python-format
 msgid "Invalid value \"%s\" for variable grid element"
 msgstr "Invalid value \"%s\" for variable grid element"
 
-#: ../editors/Viewer.py:234 ../editors/Viewer.py:237
+#: ../editors/Viewer.py:276 ../editors/Viewer.py:279
 #, python-format
 msgid "Invalid value \"%s\" for viewer block"
 msgstr "Invalid value \"%s\" for viewer block"
 
-#: ../dialogs/ForceVariableDialog.py:195
+#: ../dialogs/ForceVariableDialog.py:211
 #, python-brace-format
 msgid "Invalid value \"{a1}\" for \"{a2}\" variable!"
 msgstr "Invalid value \"{a1}\" for \"{a2}\" variable!"
 
-#: ../dialogs/DurationEditorDialog.py:121
+#: ../dialogs/DurationEditorDialog.py:124
 msgid ""
 "Invalid value!\n"
 "You must fill a numeric value."
@@ -1970,51 +1972,55 @@
 "Invalid value!\n"
 "You must fill a numeric value."
 
-#: ../editors/Viewer.py:616 ../editors/Viewer.py:2392
+#: ../connectors/WAMP/dialog.py:38
+msgid "Is connection secure?"
+msgstr "Is connection secure?"
+
+#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425
 msgid "Jump"
 msgstr "Jump"
 
-#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32
-#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
 msgid "LD"
 msgstr "LD"
 
-#: ../editors/LDViewer.py:215 ../editors/LDViewer.py:231
+#: ../editors/LDViewer.py:221 ../editors/LDViewer.py:240
 #, python-format
 msgid "Ladder element with id %d is on more than one rung."
 msgstr "Ladder element with id %d is on more than one rung."
 
-#: ../dialogs/PouTransitionDialog.py:86 ../dialogs/PouActionDialog.py:84
-#: ../dialogs/PouDialog.py:105
+#: ../dialogs/PouTransitionDialog.py:93 ../dialogs/PouActionDialog.py:91
+#: ../dialogs/PouDialog.py:113
 msgid "Language"
 msgstr "Language"
 
-#: ../controls/ProjectPropertiesPanel.py:187
+#: ../controls/ProjectPropertiesPanel.py:206
 msgid "Language (optional):"
 msgstr "Language (optional):"
 
-#: ../dialogs/PouTransitionDialog.py:60 ../dialogs/PouActionDialog.py:56
-#: ../dialogs/PouDialog.py:73
+#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63
+#: ../dialogs/PouDialog.py:81
 msgid "Language:"
 msgstr "Language:"
 
-#: ../ProjectController.py:1797
+#: ../ProjectController.py:1779
 msgid "Latest build already matches current target. Transfering anyway...\n"
 msgstr "Latest build already matches current target. Transfering anyway...\n"
 
-#: ../Beremiz_service.py:273
+#: ../Beremiz_service.py:281
 msgid "Launch WX GUI inspector"
 msgstr "Launch WX GUI inspector"
 
-#: ../Beremiz_service.py:272
+#: ../Beremiz_service.py:280
 msgid "Launch a live Python shell"
 msgstr "Launch a live Python shell"
 
-#: ../editors/Viewer.py:544
+#: ../editors/Viewer.py:580
 msgid "Left"
 msgstr "Left"
 
-#: ../dialogs/LDPowerRailDialog.py:63
+#: ../dialogs/LDPowerRailDialog.py:64
 msgid "Left PowerRail"
 msgstr "Left PowerRail"
 
@@ -2030,11 +2036,11 @@
 msgid "Less than or equal to"
 msgstr "Less than or equal to"
 
-#: ../IDEFrame.py:631
+#: ../IDEFrame.py:652
 msgid "Library"
 msgstr "Library"
 
-#: ../dialogs/AboutDialog.py:151
+#: ../dialogs/AboutDialog.py:145
 msgid "License"
 msgstr "License"
 
@@ -2042,27 +2048,27 @@
 msgid "Limitation"
 msgstr "Limitation"
 
-#: ../targets/toolchain_gcc.py:202
+#: ../targets/toolchain_gcc.py:209
 msgid "Linking :\n"
 msgstr "Linking :\n"
 
-#: ../dialogs/DiscoveryDialog.py:112 ../controls/VariablePanel.py:72
+#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90
 msgid "Local"
 msgstr "Local"
 
-#: ../canfestival/canfestival.py:348
+#: ../canfestival/canfestival.py:359
 msgid "Local entries"
 msgstr "Local entries"
 
-#: ../ProjectController.py:1703
+#: ../ProjectController.py:1685
 msgid "Local service discovery failed!\n"
 msgstr "Local service discovery failed!\n"
 
-#: ../controls/VariablePanel.py:53
+#: ../controls/VariablePanel.py:62
 msgid "Location"
 msgstr "Location"
 
-#: ../dialogs/BrowseLocationsDialog.py:72
+#: ../dialogs/BrowseLocationsDialog.py:79
 msgid "Locations available:"
 msgstr "Locations available:"
 
@@ -2070,12 +2076,12 @@
 msgid "Logarithm to base 10"
 msgstr "Logarithm to base 10"
 
-#: ../connectors/PYRO/__init__.py:94
+#: ../connectors/PYRO/__init__.py:102
 #, python-format
 msgid "MDNS resolution failure for '%s'\n"
 msgstr "MDNS resolution failure for '%s'\n"
 
-#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:85
+#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92
 msgid "Map Variable"
 msgstr "Map Variable"
 
@@ -2083,11 +2089,15 @@
 msgid "Map located variables over CANopen"
 msgstr "Map located variables over CANopen"
 
-#: ../canfestival/NetworkEditor.py:106
+#: ../features.py:32
+msgid "Map located variables over Modbus"
+msgstr "Map located variables over Modbus"
+
+#: ../canfestival/NetworkEditor.py:113
 msgid "Master"
 msgstr "Master"
 
-#: ../ConfigTreeNode.py:539
+#: ../ConfigTreeNode.py:544
 #, python-brace-format
 msgid "Max count ({a1}) reached for this confnode of type {a2} "
 msgstr "Max count ({a1}) reached for this confnode of type {a2} "
@@ -2096,29 +2106,29 @@
 msgid "Maximum"
 msgstr "Maximum"
 
-#: ../editors/DataTypeEditor.py:239
+#: ../editors/DataTypeEditor.py:246
 msgid "Maximum:"
 msgstr "Maximum:"
 
-#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:290
-#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:98
-#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351
+#: ../dialogs/BrowseLocationsDialog.py:45 ../editors/Viewer.py:333
+#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:103
+#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380
 msgid "Memory"
 msgstr "Memory"
 
-#: ../IDEFrame.py:599
+#: ../IDEFrame.py:617
 msgid "Menu ToolBar"
 msgstr "Menu ToolBar"
 
-#: ../dialogs/DurationEditorDialog.py:49
+#: ../dialogs/DurationEditorDialog.py:51
 msgid "Microseconds:"
 msgstr "Microseconds:"
 
-#: ../editors/Viewer.py:549
+#: ../editors/Viewer.py:585
 msgid "Middle"
 msgstr "Middle"
 
-#: ../dialogs/DurationEditorDialog.py:48
+#: ../dialogs/DurationEditorDialog.py:50
 msgid "Milliseconds:"
 msgstr "Milliseconds:"
 
@@ -2126,76 +2136,80 @@
 msgid "Minimum"
 msgstr "Minimum"
 
-#: ../editors/DataTypeEditor.py:226
+#: ../editors/DataTypeEditor.py:233
 msgid "Minimum:"
 msgstr "Minimum:"
 
-#: ../dialogs/DurationEditorDialog.py:46
+#: ../dialogs/DurationEditorDialog.py:48
 msgid "Minutes:"
 msgstr "Minutes:"
 
-#: ../controls/ProjectPropertiesPanel.py:211
+#: ../controls/ProjectPropertiesPanel.py:231
 msgid "Miscellaneous"
 msgstr "Miscellaneous"
 
-#: ../dialogs/LDElementDialog.py:63
+#: ../features.py:32
+msgid "Modbus support"
+msgstr "Modbus support"
+
+#: ../dialogs/LDElementDialog.py:65
 msgid "Modifier:"
 msgstr "Modifier:"
 
-#: ../PLCGenerator.py:786 ../PLCGenerator.py:1230
+#: ../PLCGenerator.py:795 ../PLCGenerator.py:1269
 #, python-brace-format
 msgid "More than one connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU"
 msgstr "More than one connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU"
 
-#: ../dialogs/ActionBlockDialog.py:140
+#: ../dialogs/ActionBlockDialog.py:146
 msgid "Move action down"
 msgstr "Move action down"
 
-#: ../dialogs/ActionBlockDialog.py:139
+#: ../dialogs/ActionBlockDialog.py:145
 msgid "Move action up"
 msgstr "Move action up"
 
-#: ../controls/CustomEditableListBox.py:43
+#: ../controls/CustomEditableListBox.py:46
 msgid "Move down"
 msgstr "Move down"
 
-#: ../editors/DataTypeEditor.py:355
+#: ../editors/DataTypeEditor.py:367
 msgid "Move element down"
 msgstr "Move element down"
 
-#: ../editors/DataTypeEditor.py:354
+#: ../editors/DataTypeEditor.py:366
 msgid "Move element up"
 msgstr "Move element up"
 
-#: ../editors/ResourceEditor.py:271
+#: ../editors/ResourceEditor.py:286
 msgid "Move instance down"
 msgstr "Move instance down"
 
-#: ../editors/ResourceEditor.py:270
+#: ../editors/ResourceEditor.py:285
 msgid "Move instance up"
 msgstr "Move instance up"
 
-#: ../editors/ResourceEditor.py:242
+#: ../editors/ResourceEditor.py:255
 msgid "Move task down"
 msgstr "Move task down"
 
-#: ../editors/ResourceEditor.py:241
+#: ../editors/ResourceEditor.py:254
 msgid "Move task up"
 msgstr "Move task up"
 
-#: ../IDEFrame.py:99 ../IDEFrame.py:114 ../IDEFrame.py:144 ../IDEFrame.py:185
+#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192
 msgid "Move the view"
 msgstr "Move the view"
 
-#: ../controls/CustomEditableListBox.py:42
+#: ../controls/CustomEditableListBox.py:45
 msgid "Move up"
 msgstr "Move up"
 
-#: ../editors/CodeFileEditor.py:661 ../controls/VariablePanel.py:453
+#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484
 msgid "Move variable down"
 msgstr "Move variable down"
 
-#: ../editors/CodeFileEditor.py:660 ../controls/VariablePanel.py:452
+#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483
 msgid "Move variable up"
 msgstr "Move variable up"
 
@@ -2207,26 +2221,26 @@
 msgid "Multiplication"
 msgstr "Multiplication"
 
-#: ../editors/FileManagementPanel.py:83
+#: ../editors/FileManagementPanel.py:87
 msgid "My Computer:"
 msgstr "My Computer:"
 
-#: ../dialogs/DiscoveryDialog.py:92
+#: ../dialogs/DiscoveryDialog.py:89
 msgid "NAME"
 msgstr "NAME"
 
-#: ../editors/ResourceEditor.py:68 ../editors/ResourceEditor.py:83
-#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97
+#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732
+#: ../controls/VariablePanel.py:59
 msgid "Name"
 msgstr "Name"
 
-#: ../Beremiz_service.py:334
+#: ../Beremiz_service.py:342
 msgid "Name must not be null!"
 msgstr "Name must not be null!"
 
-#: ../dialogs/SFCStepDialog.py:57 ../dialogs/FBDBlockDialog.py:86
-#: ../dialogs/ConnectionDialog.py:76
+#: ../dialogs/SFCStepDialog.py:59 ../dialogs/FBDBlockDialog.py:89
+#: ../dialogs/ConnectionDialog.py:78
 msgid "Name:"
 msgstr "Name:"
 
@@ -2234,46 +2248,46 @@
 msgid "Natural logarithm"
 msgstr "Natural logarithm"
 
-#: ../dialogs/LDElementDialog.py:75 ../editors/Viewer.py:519
+#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554
 msgid "Negated"
 msgstr "Negated"
 
-#: ../Beremiz_service.py:580
+#: ../Beremiz_service.py:610
 msgid "Nevow Web service failed. "
 msgstr "Nevow Web service failed. "
 
-#: ../Beremiz_service.py:556
+#: ../Beremiz_service.py:580
 msgid "Nevow/Athena import failed :"
 msgstr "Nevow/Athena import failed :"
 
-#: ../BeremizIDE.py:216 ../BeremizIDE.py:251 ../PLCOpenEditor.py:104
-#: ../PLCOpenEditor.py:146
+#: ../BeremizIDE.py:241 ../BeremizIDE.py:276 ../PLCOpenEditor.py:75
+#: ../PLCOpenEditor.py:117
 msgid "New"
 msgstr "New"
 
-#: ../controls/CustomEditableListBox.py:40
+#: ../controls/CustomEditableListBox.py:43
 msgid "New item"
 msgstr "New item"
 
-#: ../editors/Viewer.py:518
+#: ../editors/Viewer.py:553
 msgid "No Modifier"
 msgstr "No Modifier"
 
-#: ../ProjectController.py:1826
+#: ../ProjectController.py:1808
 msgid "No PLC to transfer (did build succeed ?)\n"
 msgstr "No PLC to transfer (did build succeed ?)\n"
 
-#: ../PLCGenerator.py:1631
+#: ../PLCGenerator.py:1678
 #, python-format
 msgid "No body defined in \"%s\" POU"
 msgstr "No body defined in \"%s\" POU"
 
-#: ../PLCGenerator.py:806 ../PLCGenerator.py:1241
+#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281
 #, python-brace-format
 msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU"
 msgstr "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU"
 
-#: ../PLCOpenEditor.py:357
+#: ../PLCOpenEditor.py:331
 msgid ""
 "No documentation available.\n"
 "Coming soon."
@@ -2281,58 +2295,58 @@
 "No documentation available.\n"
 "Coming soon."
 
-#: ../PLCGenerator.py:829
+#: ../PLCGenerator.py:841
 #, python-format
 msgid "No informations found for \"%s\" block"
 msgstr "No informations found for \"%s\" block"
 
-#: ../PLCGenerator.py:1194
+#: ../PLCGenerator.py:1232
 #, python-brace-format
 msgid "No output {a1} variable found in block {a2} in POU {a3}. Connection must be broken"
 msgstr "No output {a1} variable found in block {a2} in POU {a3}. Connection must be broken"
 
-#: ../controls/SearchResultPanel.py:169
+#: ../controls/SearchResultPanel.py:175
 msgid "No search results available."
 msgstr "No search results available."
 
-#: ../svgui/svgui.py:134
+#: ../svgui/svgui.py:142
 #, python-format
 msgid "No such SVG file: %s\n"
 msgstr "No such SVG file: %s\n"
 
-#: ../canfestival/config_utils.py:639
+#: ../canfestival/config_utils.py:682
 #, python-brace-format
 msgid "No such index/subindex ({a1},{a2}) (variable {a3})"
 msgstr "No such index/subindex ({a1},{a2}) (variable {a3})"
 
-#: ../canfestival/config_utils.py:362
+#: ../canfestival/config_utils.py:387
 #, python-brace-format
 msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})"
 msgstr "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})"
 
-#: ../dialogs/BrowseValuesLibraryDialog.py:83
+#: ../dialogs/BrowseValuesLibraryDialog.py:87
 msgid "No valid value selected!"
 msgstr "No valid value selected!"
 
-#: ../PLCGenerator.py:1629
+#: ../PLCGenerator.py:1676
 #, python-format
 msgid "No variable defined in \"%s\" POU"
 msgstr "No variable defined in \"%s\" POU"
 
-#: ../canfestival/config_utils.py:355
+#: ../canfestival/config_utils.py:379
 #, python-brace-format
 msgid "Non existing node ID : {a1} (variable {a2})"
 msgstr "Non existing node ID : {a1} (variable {a2})"
 
-#: ../controls/VariablePanel.py:64
+#: ../controls/VariablePanel.py:79
 msgid "Non-Retain"
 msgstr "Non-Retain"
 
-#: ../dialogs/LDElementDialog.py:75
+#: ../dialogs/LDElementDialog.py:78
 msgid "Normal"
 msgstr "Normal"
 
-#: ../canfestival/config_utils.py:389
+#: ../canfestival/config_utils.py:426
 #, python-brace-format
 msgid "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))"
 msgstr "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))"
@@ -2341,7 +2355,7 @@
 msgid "Not equal to"
 msgstr "Not equal to"
 
-#: ../dialogs/SFCDivergenceDialog.py:89
+#: ../dialogs/SFCDivergenceDialog.py:91
 msgid "Number of sequences:"
 msgstr "Number of sequences:"
 
@@ -2349,88 +2363,88 @@
 msgid "Numerical"
 msgstr "Numerical"
 
-#: ../editors/CodeFileEditor.py:739
+#: ../editors/CodeFileEditor.py:736
 msgid "OnChange"
 msgstr "OnChange"
 
-#: ../dialogs/SearchInProjectDialog.py:84
+#: ../dialogs/SearchInProjectDialog.py:88
 msgid "Only Elements"
 msgstr "Only Elements"
 
-#: ../BeremizIDE.py:218 ../BeremizIDE.py:252 ../PLCOpenEditor.py:106
-#: ../PLCOpenEditor.py:147
+#: ../BeremizIDE.py:243 ../BeremizIDE.py:277 ../PLCOpenEditor.py:77
+#: ../PLCOpenEditor.py:118
 msgid "Open"
 msgstr "Open"
 
-#: ../svgui/svgui.py:143
+#: ../svgui/svgui.py:151
 msgid "Open Inkscape"
 msgstr "Open Inkscape"
 
-#: ../version.py:77
+#: ../version.py:86
 msgid "Open Source framework for automation, implemented IEC 61131 IDE with constantly growing set of extensions and flexible PLC runtime."
 msgstr "Open Source framework for automation, implemented IEC 61131 IDE with constantly growing set of extensions and flexible PLC runtime."
 
-#: ../ProjectController.py:1878
+#: ../ProjectController.py:1879
 msgid "Open a file explorer to manage project files"
 msgstr "Open a file explorer to manage project files"
 
-#: ../wxglade_hmi/wxglade_hmi.py:155
+#: ../wxglade_hmi/wxglade_hmi.py:161
 msgid "Open wxGlade"
 msgstr "Open wxGlade"
 
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../controls/VariablePanel.py:64
 msgid "Option"
 msgstr "Option"
 
-#: ../dialogs/FindInPouDialog.py:81 ../editors/CodeFileEditor.py:739
+#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737
 msgid "Options"
 msgstr "Options"
 
-#: ../controls/ProjectPropertiesPanel.py:98
+#: ../controls/ProjectPropertiesPanel.py:109
 msgid "Organization (optional):"
 msgstr "Organization (optional):"
 
-#: ../canfestival/SlaveEditor.py:74 ../canfestival/NetworkEditor.py:95
+#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102
 msgid "Other Profile"
 msgstr "Other Profile"
 
-#: ../dialogs/SFCStepDialog.py:72 ../dialogs/FBDVariableDialog.py:40
-#: ../dialogs/BrowseLocationsDialog.py:42 ../editors/Viewer.py:290
-#: ../editors/Viewer.py:1628 ../editors/TextViewer.py:307
-#: ../controls/LocationCellEditor.py:98 ../controls/VariablePanel.py:71
-#: ../controls/VariablePanel.py:291 ../controls/VariablePanel.py:351
+#: ../dialogs/SFCStepDialog.py:74 ../dialogs/FBDVariableDialog.py:42
+#: ../dialogs/BrowseLocationsDialog.py:44 ../editors/Viewer.py:333
+#: ../editors/Viewer.py:1661 ../editors/TextViewer.py:307
+#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89
+#: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380
 msgid "Output"
 msgstr "Output"
 
-#: ../canfestival/SlaveEditor.py:63 ../canfestival/NetworkEditor.py:84
+#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91
 msgid "PDO Receive"
 msgstr "PDO Receive"
 
-#: ../canfestival/SlaveEditor.py:62 ../canfestival/NetworkEditor.py:83
+#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90
 msgid "PDO Transmit"
 msgstr "PDO Transmit"
 
-#: ../targets/toolchain_gcc.py:167
+#: ../targets/toolchain_gcc.py:174
 msgid "PLC :\n"
 msgstr "PLC :\n"
 
-#: ../BeremizIDE.py:355
+#: ../BeremizIDE.py:383
 msgid "PLC Log"
 msgstr "PLC Log"
 
-#: ../ProjectController.py:1054
+#: ../ProjectController.py:1082
 msgid "PLC code generation failed !\n"
 msgstr "PLC code generation failed !\n"
 
-#: ../Beremiz_service.py:297
+#: ../Beremiz_service.py:305
 msgid "PLC is empty or already started."
 msgstr "PLC is empty or already started."
 
-#: ../Beremiz_service.py:304
+#: ../Beremiz_service.py:312
 msgid "PLC is not started."
 msgstr "PLC is not started."
 
-#: ../PLCOpenEditor.py:206 ../PLCOpenEditor.py:319
+#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293
 #, python-brace-format
 msgid ""
 "PLC syntax error at line {a1}:\n"
@@ -2439,15 +2453,15 @@
 "PLC syntax error at line {a1}:\n"
 "{a2}"
 
-#: ../PLCOpenEditor.py:302 ../PLCOpenEditor.py:383
+#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357
 msgid "PLCOpen files (*.xml)|*.xml|All files|*.*"
 msgstr "PLCOpen files (*.xml)|*.xml|All files|*.*"
 
-#: ../PLCOpenEditor.py:154 ../PLCOpenEditor.py:219
+#: ../PLCOpenEditor.py:125 ../PLCOpenEditor.py:193
 msgid "PLCOpenEditor"
 msgstr "PLCOpenEditor"
 
-#: ../PLCOpenEditor.py:365
+#: ../PLCOpenEditor.py:339
 msgid ""
 "PLCOpenEditor is part of Beremiz project.\n"
 "\n"
@@ -2457,205 +2471,205 @@
 "\n"
 "Beremiz is an "
 
-#: ../dialogs/DiscoveryDialog.py:95
+#: ../dialogs/DiscoveryDialog.py:92
 msgid "PORT"
 msgstr "PORT"
 
-#: ../dialogs/PouDialog.py:101
+#: ../dialogs/PouDialog.py:109
 msgid "POU Name"
 msgstr "POU Name"
 
-#: ../dialogs/PouDialog.py:58
+#: ../dialogs/PouDialog.py:66
 msgid "POU Name:"
 msgstr "POU Name:"
 
-#: ../dialogs/PouDialog.py:103
+#: ../dialogs/PouDialog.py:111
 msgid "POU Type"
 msgstr "POU Type"
 
-#: ../dialogs/PouDialog.py:65
+#: ../dialogs/PouDialog.py:73
 msgid "POU Type:"
 msgstr "POU Type:"
 
-#: ../connectors/PYRO/__init__.py:45
+#: ../connectors/PYRO/__init__.py:52
 #, python-format
 msgid "PYRO connecting to URI : %s\n"
 msgstr "PYRO connecting to URI : %s\n"
 
-#: ../connectors/PYRO/__init__.py:61
+#: ../connectors/PYRO/__init__.py:68
 #, python-format
 msgid "PYRO using certificates in '%s' \n"
 msgstr "PYRO using certificates in '%s' \n"
 
-#: ../BeremizIDE.py:231 ../PLCOpenEditor.py:120
+#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91
 msgid "Page Setup"
 msgstr "Page Setup"
 
-#: ../controls/ProjectPropertiesPanel.py:111
+#: ../controls/ProjectPropertiesPanel.py:124
 msgid "Page Size (optional):"
 msgstr "Page Size (optional):"
 
-#: ../IDEFrame.py:2613
+#: ../IDEFrame.py:2640
 #, python-format
 msgid "Page: %d"
 msgstr "Page: %d"
 
-#: ../controls/PouInstanceVariablesPanel.py:124
+#: ../controls/PouInstanceVariablesPanel.py:134
 msgid "Parent instance"
 msgstr "Parent instance"
 
-#: ../editors/Viewer.py:657 ../IDEFrame.py:372 ../IDEFrame.py:426
+#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428
 msgid "Paste"
 msgstr "Paste"
 
-#: ../IDEFrame.py:1868
+#: ../IDEFrame.py:1899
 msgid "Paste POU"
 msgstr "Paste POU"
 
-#: ../dialogs/SearchInProjectDialog.py:56
+#: ../dialogs/SearchInProjectDialog.py:60
 msgid "Pattern to search:"
 msgstr "Pattern to search:"
 
-#: ../dialogs/LDPowerRailDialog.py:74
+#: ../dialogs/LDPowerRailDialog.py:75
 msgid "Pin number:"
 msgstr "Pin number:"
 
-#: ../editors/Viewer.py:2757 ../editors/Viewer.py:3014
-#: ../editors/SFCViewer.py:770
+#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060
+#: ../editors/SFCViewer.py:785
 msgid "Please choose a target"
 msgstr "Please choose a target"
 
-#: ../editors/TextViewer.py:262
+#: ../editors/TextViewer.py:260
 msgid "Please enter a block name"
 msgstr "Please enter a block name"
 
-#: ../editors/Viewer.py:2627 ../editors/Viewer.py:3056
+#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103
 msgid "Please enter comment text"
 msgstr "Please enter comment text"
 
-#: ../editors/SFCViewer.py:433 ../editors/SFCViewer.py:455
-#: ../editors/SFCViewer.py:799
+#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469
+#: ../editors/SFCViewer.py:815
 msgid "Please enter step name"
 msgstr "Please enter step name"
 
-#: ../Beremiz_service.py:196
+#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209
 msgid "Please enter text"
 msgstr "Please enter text"
 
-#: ../dialogs/ForceVariableDialog.py:163
+#: ../dialogs/ForceVariableDialog.py:177
 #, python-format
 msgid "Please enter value for a \"%s\" variable:"
 msgstr "Please enter value for a \"%s\" variable:"
 
-#: ../Beremiz_service.py:319
+#: ../Beremiz_service.py:327
 msgid "Port number must be 0 <= port <= 65535!"
 msgstr "Port number must be 0 <= port <= 65535!"
 
-#: ../Beremiz_service.py:319
+#: ../Beremiz_service.py:327
 msgid "Port number must be an integer!"
 msgstr "Port number must be an integer!"
 
-#: ../editors/Viewer.py:595 ../editors/Viewer.py:2416
+#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449
 msgid "Power Rail"
 msgstr "Power Rail"
 
-#: ../dialogs/LDPowerRailDialog.py:51
+#: ../dialogs/LDPowerRailDialog.py:52
 msgid "Power Rail Properties"
 msgstr "Power Rail Properties"
 
-#: ../BeremizIDE.py:233 ../PLCOpenEditor.py:122
+#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93
 msgid "Preview"
 msgstr "Preview"
 
-#: ../dialogs/BlockPreviewDialog.py:57
+#: ../dialogs/BlockPreviewDialog.py:59
 msgid "Preview:"
 msgstr "Preview:"
 
-#: ../BeremizIDE.py:235 ../BeremizIDE.py:255 ../PLCOpenEditor.py:124
-#: ../PLCOpenEditor.py:150
+#: ../BeremizIDE.py:260 ../BeremizIDE.py:280 ../PLCOpenEditor.py:95
+#: ../PLCOpenEditor.py:121
 msgid "Print"
 msgstr "Print"
 
-#: ../IDEFrame.py:1079
+#: ../IDEFrame.py:1110
 msgid "Print preview"
 msgstr "Print preview"
 
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
 msgid "Priority"
 msgstr "Priority"
 
-#: ../dialogs/SFCTransitionDialog.py:90
+#: ../dialogs/SFCTransitionDialog.py:91
 msgid "Priority:"
 msgstr "Priority:"
 
-#: ../runtime/PLCObject.py:369
+#: ../runtime/PLCObject.py:518
 #, python-format
 msgid "Problem starting PLC : error %d"
 msgstr "Problem starting PLC : error %d"
 
-#: ../dialogs/ProjectDialog.py:58
+#: ../dialogs/ProjectDialog.py:63
 msgid "Product Name"
 msgstr "Product Name"
 
-#: ../controls/ProjectPropertiesPanel.py:81
+#: ../controls/ProjectPropertiesPanel.py:90
 msgid "Product Name (required):"
 msgstr "Product Name (required):"
 
-#: ../controls/ProjectPropertiesPanel.py:83
+#: ../controls/ProjectPropertiesPanel.py:92
 msgid "Product Release (optional):"
 msgstr "Product Release (optional):"
 
-#: ../dialogs/ProjectDialog.py:59
+#: ../dialogs/ProjectDialog.py:64
 msgid "Product Version"
 msgstr "Product Version"
 
-#: ../controls/ProjectPropertiesPanel.py:82
+#: ../controls/ProjectPropertiesPanel.py:91
 msgid "Product Version (required):"
 msgstr "Product Version (required):"
 
-#: ../dialogs/SearchInProjectDialog.py:39 ../IDEFrame.py:1747
-#: ../IDEFrame.py:1944
+#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778
+#: ../IDEFrame.py:1975
 msgid "Program"
 msgstr "Program"
 
-#: ../PLCOpenEditor.py:347
+#: ../PLCOpenEditor.py:321
 msgid "Program was successfully generated!"
 msgstr "Program was successfully generated!"
 
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
 msgid "Programs"
 msgstr "Programs"
 
-#: ../editors/Viewer.py:243
+#: ../editors/Viewer.py:285
 msgid "Programs can't be used by other POUs!"
 msgstr "Programs can't be used by other POUs!"
 
-#: ../controls/ProjectPropertiesPanel.py:85 ../IDEFrame.py:584
+#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601
 msgid "Project"
 msgstr "Project"
 
-#: ../controls/SearchResultPanel.py:173
+#: ../controls/SearchResultPanel.py:180
 #, python-format
 msgid "Project '%s':"
 msgstr "Project '%s':"
 
-#: ../ProjectController.py:1877
+#: ../ProjectController.py:1878
 msgid "Project Files"
 msgstr "Project Files"
 
-#: ../dialogs/ProjectDialog.py:57
+#: ../dialogs/ProjectDialog.py:62
 msgid "Project Name"
 msgstr "Project Name"
 
-#: ../controls/ProjectPropertiesPanel.py:79
+#: ../controls/ProjectPropertiesPanel.py:88
 msgid "Project Name (required):"
 msgstr "Project Name (required):"
 
-#: ../controls/ProjectPropertiesPanel.py:80
+#: ../controls/ProjectPropertiesPanel.py:89
 msgid "Project Version (optional):"
 msgstr "Project Version (optional):"
 
-#: ../PLCControler.py:3164
+#: ../PLCControler.py:2717
 msgid ""
 "Project file syntax error:\n"
 "\n"
@@ -2663,90 +2677,90 @@
 "Project file syntax error:\n"
 "\n"
 
-#: ../dialogs/ProjectDialog.py:33 ../editors/ProjectNodeEditor.py:37
+#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40
 msgid "Project properties"
 msgstr "Project properties"
 
-#: ../ConfigTreeNode.py:566
+#: ../ConfigTreeNode.py:571
 #, python-brace-format
 msgid "Project tree layout do not match confnode.xml {a1}!={a2} "
 msgstr "Project tree layout do not match confnode.xml {a1}!={a2} "
 
-#: ../dialogs/ConnectionDialog.py:98
+#: ../dialogs/ConnectionDialog.py:101
 msgid "Propagate Name"
 msgstr "Propagate Name"
 
-#: ../PLCControler.py:99
+#: ../plcopen/types_enums.py:77
 msgid "Properties"
 msgstr "Properties"
 
-#: ../Beremiz_service.py:442
+#: ../Beremiz_service.py:427
 msgid "Publishing service on local network"
 msgstr "Publishing service on local network"
 
-#: ../connectors/PYRO/__init__.py:118
+#: ../connectors/PYRO/__init__.py:126
 #, python-format
 msgid "Pyro exception: %s\n"
 msgstr "Pyro exception: %s\n"
 
-#: ../Beremiz_service.py:429
-msgid "Pyro object's uri :"
-msgstr "Pyro object's uri :"
-
-#: ../Beremiz_service.py:428
+#: ../Beremiz_service.py:420
 msgid "Pyro port :"
 msgstr "Pyro port :"
 
-#: ../py_ext/PythonEditor.py:81
+#: ../py_ext/PythonEditor.py:84
 msgid "Python code"
 msgstr "Python code"
 
-#: ../features.py:33
+#: ../features.py:34
 msgid "Python file"
 msgstr "Python file"
 
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
 msgid "Qualifier"
 msgstr "Qualifier"
 
-#: ../BeremizIDE.py:238 ../PLCOpenEditor.py:130 ../Beremiz_service.py:275
+#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283
 msgid "Quit"
 msgstr "Quit"
 
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:225
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227
 msgid "Range:"
 msgstr "Range:"
 
-#: ../ProjectController.py:1873
+#: ../ProjectController.py:1872
 msgid "Raw IEC code"
 msgstr "Raw IEC code"
 
-#: ../BeremizIDE.py:1047
+#: ../BeremizIDE.py:1083
 #, python-format
 msgid "Really delete node '%s'?"
 msgstr "Really delete node '%s'?"
 
-#: ../IDEFrame.py:362 ../IDEFrame.py:422
+#: ../connectors/WAMP/dialog.py:50
+msgid "Realm:"
+msgstr "Realm:"
+
+#: ../IDEFrame.py:367 ../IDEFrame.py:424
 msgid "Redo"
 msgstr "Redo"
 
-#: ../dialogs/SFCTransitionDialog.py:75
+#: ../dialogs/SFCTransitionDialog.py:76
 msgid "Reference"
 msgstr "Reference"
 
-#: ../dialogs/DiscoveryDialog.py:107 ../IDEFrame.py:432
+#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434
 msgid "Refresh"
 msgstr "Refresh"
 
-#: ../dialogs/SearchInProjectDialog.py:66
+#: ../dialogs/SearchInProjectDialog.py:70
 msgid "Regular expression"
 msgstr "Regular expression"
 
-#: ../dialogs/FindInPouDialog.py:96
+#: ../dialogs/FindInPouDialog.py:99
 msgid "Regular expressions"
 msgstr "Regular expressions"
 
-#: ../editors/Viewer.py:1603
+#: ../editors/Viewer.py:1636
 msgid "Release value"
 msgstr "Release value"
 
@@ -2754,56 +2768,56 @@
 msgid "Remainder (modulo)"
 msgstr "Remainder (modulo)"
 
-#: ../BeremizIDE.py:1048
+#: ../BeremizIDE.py:1084
 #, python-format
 msgid "Remove %s node"
 msgstr "Remove %s node"
 
-#: ../IDEFrame.py:2419
+#: ../IDEFrame.py:2445
 msgid "Remove Datatype"
 msgstr "Remove Datatype"
 
-#: ../IDEFrame.py:2424
+#: ../IDEFrame.py:2450
 msgid "Remove Pou"
 msgstr "Remove Pou"
 
-#: ../dialogs/ActionBlockDialog.py:138
+#: ../dialogs/ActionBlockDialog.py:144
 msgid "Remove action"
 msgstr "Remove action"
 
-#: ../editors/DataTypeEditor.py:353
+#: ../editors/DataTypeEditor.py:365
 msgid "Remove element"
 msgstr "Remove element"
 
-#: ../editors/FileManagementPanel.py:63
+#: ../editors/FileManagementPanel.py:66
 msgid "Remove file from left folder"
 msgstr "Remove file from left folder"
 
-#: ../editors/ResourceEditor.py:269
+#: ../editors/ResourceEditor.py:284
 msgid "Remove instance"
 msgstr "Remove instance"
 
-#: ../canfestival/NetworkEditor.py:104
+#: ../canfestival/NetworkEditor.py:111
 msgid "Remove slave"
 msgstr "Remove slave"
 
-#: ../editors/ResourceEditor.py:240
+#: ../editors/ResourceEditor.py:253
 msgid "Remove task"
 msgstr "Remove task"
 
-#: ../editors/CodeFileEditor.py:659 ../controls/VariablePanel.py:451
+#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482
 msgid "Remove variable"
 msgstr "Remove variable"
 
-#: ../IDEFrame.py:1948
+#: ../IDEFrame.py:1979
 msgid "Rename"
 msgstr "Rename"
 
-#: ../editors/FileManagementPanel.py:181
+#: ../editors/FileManagementPanel.py:187
 msgid "Replace File"
 msgstr "Replace File"
 
-#: ../editors/Viewer.py:561
+#: ../editors/Viewer.py:598
 msgid "Replace Wire by connections"
 msgstr "Replace Wire by connections"
 
@@ -2811,43 +2825,43 @@
 msgid "Replacement (within)"
 msgstr "Replacement (within)"
 
-#: ../dialogs/LDElementDialog.py:76
+#: ../dialogs/LDElementDialog.py:79
 msgid "Reset"
 msgstr "Reset"
 
-#: ../editors/Viewer.py:642
+#: ../editors/Viewer.py:681
 msgid "Reset Execution Order"
 msgstr "Reset Execution Order"
 
-#: ../IDEFrame.py:451
+#: ../IDEFrame.py:453
 msgid "Reset Perspective"
 msgstr "Reset Perspective"
 
-#: ../controls/SearchResultPanel.py:105
+#: ../controls/SearchResultPanel.py:103
 msgid "Reset search result"
 msgstr "Reset search result"
 
-#: ../BeremizIDE.py:979 ../PLCControler.py:99
+#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77
 msgid "Resources"
 msgstr "Resources"
 
-#: ../controls/VariablePanel.py:62
+#: ../controls/VariablePanel.py:77
 msgid "Retain"
 msgstr "Retain"
 
-#: ../controls/VariablePanel.py:424
+#: ../controls/VariablePanel.py:455
 msgid "Return Type:"
 msgstr "Return Type:"
 
-#: ../editors/Viewer.py:546
+#: ../editors/Viewer.py:582
 msgid "Right"
 msgstr "Right"
 
-#: ../dialogs/LDPowerRailDialog.py:64
+#: ../dialogs/LDPowerRailDialog.py:65
 msgid "Right PowerRail"
 msgstr "Right PowerRail"
 
-#: ../dialogs/LDElementDialog.py:77 ../editors/Viewer.py:520
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555
 msgid "Rising Edge"
 msgstr "Rising Edge"
 
@@ -2863,113 +2877,113 @@
 msgid "Rounding up/down"
 msgstr "Rounding up/down"
 
-#: ../ProjectController.py:1841
+#: ../ProjectController.py:1828
 msgid "Run"
 msgstr "Run"
 
-#: ../ProjectController.py:1099
+#: ../ProjectController.py:1127
 msgid "Runtime IO extensions C code generation failed !\n"
 msgstr "Runtime IO extensions C code generation failed !\n"
 
-#: ../ProjectController.py:1108
+#: ../ProjectController.py:1136
 msgid "Runtime library extensions C code generation failed !\n"
 msgstr "Runtime library extensions C code generation failed !\n"
 
-#: ../canfestival/SlaveEditor.py:61 ../canfestival/NetworkEditor.py:82
+#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89
 msgid "SDO Client"
 msgstr "SDO Client"
 
-#: ../canfestival/SlaveEditor.py:60 ../canfestival/NetworkEditor.py:81
+#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88
 msgid "SDO Server"
 msgstr "SDO Server"
 
-#: ../dialogs/PouDialog.py:37 ../controls/ProjectPropertiesPanel.py:144
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
 msgid "SFC"
 msgstr "SFC"
 
-#: ../PLCGenerator.py:1392
+#: ../PLCGenerator.py:1433
 #, python-brace-format
 msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\""
 msgstr "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\""
 
-#: ../PLCGenerator.py:773
+#: ../PLCGenerator.py:780
 #, python-format
 msgid "SFC transition in POU \"%s\" must be connected."
 msgstr "SFC transition in POU \"%s\" must be connected."
 
-#: ../dialogs/PouTransitionDialog.py:36 ../dialogs/PouActionDialog.py:32
-#: ../dialogs/PouDialog.py:37
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44
 msgid "ST"
 msgstr "ST"
 
-#: ../PLCOpenEditor.py:334
+#: ../PLCOpenEditor.py:308
 msgid "ST files (*.st)|*.st|All files|*.*"
 msgstr "ST files (*.st)|*.st|All files|*.*"
 
-#: ../svgui/svgui.py:128
+#: ../svgui/svgui.py:136
 msgid "SVG files (*.svg)|*.svg|All files|*.*"
 msgstr "SVG files (*.svg)|*.svg|All files|*.*"
 
-#: ../features.py:35
+#: ../features.py:36
 msgid "SVGUI"
 msgstr "SVGUI"
 
-#: ../BeremizIDE.py:222 ../BeremizIDE.py:253 ../PLCOpenEditor.py:113
-#: ../PLCOpenEditor.py:148
+#: ../BeremizIDE.py:247 ../BeremizIDE.py:278 ../PLCOpenEditor.py:84
+#: ../PLCOpenEditor.py:119
 msgid "Save"
 msgstr "Save"
 
-#: ../BeremizIDE.py:254 ../PLCOpenEditor.py:115 ../PLCOpenEditor.py:149
+#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120
 msgid "Save As..."
 msgstr "Save As..."
 
-#: ../BeremizIDE.py:224
+#: ../BeremizIDE.py:249
 msgid "Save as"
 msgstr "Save as"
 
-#: ../ProjectController.py:511
+#: ../ProjectController.py:530
 msgid "Save path is the same as path of a project! \n"
 msgstr "Save path is the same as path of a project! \n"
 
-#: ../dialogs/SearchInProjectDialog.py:69
+#: ../dialogs/SearchInProjectDialog.py:73
 msgid "Scope"
 msgstr "Scope"
 
-#: ../IDEFrame.py:623
+#: ../IDEFrame.py:644
 msgid "Search"
 msgstr "Search"
 
-#: ../dialogs/SearchInProjectDialog.py:45 ../IDEFrame.py:382 ../IDEFrame.py:428
+#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384 ../IDEFrame.py:430
 msgid "Search in Project"
 msgstr "Search in Project"
 
-#: ../dialogs/DurationEditorDialog.py:47
+#: ../dialogs/DurationEditorDialog.py:49
 msgid "Seconds:"
 msgstr "Seconds:"
 
-#: ../IDEFrame.py:388
+#: ../IDEFrame.py:390
 msgid "Select All"
 msgstr "Select All"
 
-#: ../editors/Viewer.py:289 ../editors/TextViewer.py:306
-#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290
-#: ../controls/VariablePanel.py:350
+#: ../editors/Viewer.py:331 ../editors/TextViewer.py:305
+#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:315
+#: ../controls/VariablePanel.py:378
 msgid "Select a variable class:"
 msgstr "Select a variable class:"
 
-#: ../ProjectController.py:1257
+#: ../ProjectController.py:1293
 msgid "Select an editor:"
 msgstr "Select an editor:"
 
-#: ../controls/PouInstanceVariablesPanel.py:281
+#: ../controls/PouInstanceVariablesPanel.py:292
 msgid "Select an instance"
 msgstr "Select an instance"
 
-#: ../IDEFrame.py:607
+#: ../IDEFrame.py:628
 msgid "Select an object"
 msgstr "Select an object"
 
-#: ../ProjectController.py:518
+#: ../ProjectController.py:537
 msgid "Selected directory already contains another project. Overwrite? \n"
 msgstr "Selected directory already contains another project. Overwrite? \n"
 
@@ -2977,23 +2991,23 @@
 msgid "Selection"
 msgstr "Selection"
 
-#: ../dialogs/SFCDivergenceDialog.py:65
+#: ../dialogs/SFCDivergenceDialog.py:66
 msgid "Selection Convergence"
 msgstr "Selection Convergence"
 
-#: ../dialogs/SFCDivergenceDialog.py:64
+#: ../dialogs/SFCDivergenceDialog.py:65
 msgid "Selection Divergence"
 msgstr "Selection Divergence"
 
-#: ../dialogs/DiscoveryDialog.py:82
+#: ../dialogs/DiscoveryDialog.py:135
 msgid "Service Discovery"
 msgstr "Service Discovery"
 
-#: ../dialogs/DiscoveryDialog.py:85
+#: ../dialogs/DiscoveryDialog.py:104
 msgid "Services available:"
 msgstr "Services available:"
 
-#: ../dialogs/LDElementDialog.py:76
+#: ../dialogs/LDElementDialog.py:79
 msgid "Set"
 msgstr "Set"
 
@@ -3005,27 +3019,27 @@
 msgid "Shift right"
 msgstr "Shift right"
 
-#: ../ProjectController.py:1867
+#: ../ProjectController.py:1863
 msgid "Show IEC code generated by PLCGenerator"
 msgstr "Show IEC code generated by PLCGenerator"
 
-#: ../canfestival/canfestival.py:389
+#: ../canfestival/canfestival.py:407
 msgid "Show Master"
 msgstr "Show Master"
 
-#: ../canfestival/canfestival.py:390
+#: ../canfestival/canfestival.py:408
 msgid "Show Master generated by config_utils"
 msgstr "Show Master generated by config_utils"
 
-#: ../ProjectController.py:1865
+#: ../ProjectController.py:1862
 msgid "Show code"
 msgstr "Show code"
 
-#: ../dialogs/SFCDivergenceDialog.py:67
+#: ../dialogs/SFCDivergenceDialog.py:68
 msgid "Simultaneous Convergence"
 msgstr "Simultaneous Convergence"
 
-#: ../dialogs/SFCDivergenceDialog.py:66
+#: ../dialogs/SFCDivergenceDialog.py:67
 msgid "Simultaneous Divergence"
 msgstr "Simultaneous Divergence"
 
@@ -3033,15 +3047,15 @@
 msgid "Sine"
 msgstr "Sine"
 
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
 msgid "Single"
 msgstr "Single"
 
-#: ../targets/toolchain_makefile.py:126
+#: ../targets/toolchain_makefile.py:130
 msgid "Source didn't change, no build.\n"
 msgstr "Source didn't change, no build.\n"
 
-#: ../PLCGenerator.py:397
+#: ../PLCGenerator.py:404
 #, python-brace-format
 msgid "Source signal has to be defined for single task '{a1}' in resource '{a2}.{a3}'."
 msgstr "Source signal has to be defined for single task '{a1}' in resource '{a2}.{a3}'."
@@ -3050,60 +3064,56 @@
 msgid "Square root (base 2)"
 msgstr "Square root (base 2)"
 
-#: ../plcopen/definitions.py:48
+#: ../plcopen/definitions.py:50
 msgid "Standard function blocks"
 msgstr "Standard function blocks"
 
-#: ../ProjectController.py:1843 ../Beremiz_service.py:263
+#: ../ProjectController.py:1829 ../Beremiz_service.py:271
 msgid "Start PLC"
 msgstr "Start PLC"
 
-#: ../ProjectController.py:1046
+#: ../ProjectController.py:1074
 #, python-format
 msgid "Start build in %s\n"
 msgstr "Start build in %s\n"
 
-#: ../ProjectController.py:1360
+#: ../ProjectController.py:1397
 msgid "Started"
 msgstr "Started"
 
-#: ../ProjectController.py:1648
+#: ../ProjectController.py:1633
 msgid "Starting PLC\n"
 msgstr "Starting PLC\n"
 
-#: ../BeremizIDE.py:365
+#: ../BeremizIDE.py:393
 msgid "Status ToolBar"
 msgstr "Status ToolBar"
 
-#: ../editors/Viewer.py:612 ../editors/Viewer.py:2391
+#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424
 msgid "Step"
 msgstr "Step"
 
-#: ../ProjectController.py:1846
+#: ../ProjectController.py:1835
 msgid "Stop"
 msgstr "Stop"
 
-#: ../Beremiz_service.py:264
+#: ../Beremiz_service.py:272
 msgid "Stop PLC"
 msgstr "Stop PLC"
 
-#: ../ProjectController.py:1848
+#: ../ProjectController.py:1836
 msgid "Stop Running PLC"
 msgstr "Stop Running PLC"
 
-#: ../ProjectController.py:1361
+#: ../ProjectController.py:1398
 msgid "Stopped"
 msgstr "Stopped"
 
-#: ../ProjectController.py:1620
-msgid "Stopping debugger...\n"
-msgstr "Stopping debugger...\n"
-
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
 msgid "Structure"
 msgstr "Structure"
 
-#: ../editors/DataTypeEditor.py:54
+#: ../editors/DataTypeEditor.py:60
 msgid "Subrange"
 msgstr "Subrange"
 
@@ -3111,19 +3121,19 @@
 msgid "Subtraction"
 msgstr "Subtraction"
 
-#: ../ProjectController.py:1085
+#: ../ProjectController.py:1113
 msgid "Successfully built.\n"
 msgstr "Successfully built.\n"
 
-#: ../IDEFrame.py:447
+#: ../IDEFrame.py:449
 msgid "Switch perspective"
 msgstr "Switch perspective"
 
-#: ../dialogs/SearchInProjectDialog.py:165 ../dialogs/FindInPouDialog.py:115
+#: ../dialogs/SearchInProjectDialog.py:169 ../dialogs/FindInPouDialog.py:118
 msgid "Syntax error in regular expression of pattern to search!"
 msgstr "Syntax error in regular expression of pattern to search!"
 
-#: ../dialogs/DiscoveryDialog.py:93
+#: ../dialogs/DiscoveryDialog.py:90
 msgid "TYPE"
 msgstr "TYPE"
 
@@ -3131,19 +3141,19 @@
 msgid "Tangent"
 msgstr "Tangent"
 
-#: ../editors/ResourceEditor.py:83
+#: ../editors/ResourceEditor.py:97
 msgid "Task"
 msgstr "Task"
 
-#: ../editors/ResourceEditor.py:235
+#: ../editors/ResourceEditor.py:248
 msgid "Tasks:"
 msgstr "Tasks:"
 
-#: ../controls/VariablePanel.py:73
+#: ../controls/VariablePanel.py:91
 msgid "Temp"
 msgstr "Temp"
 
-#: ../version.py:30
+#: ../version.py:35
 msgid ""
 "The best place to ask questions about Beremiz/PLCOpenEditor\n"
 "is project's mailing list: beremiz-devel@lists.sourceforge.net\n"
@@ -3163,7 +3173,7 @@
 "You can subscribe to the list here:\n"
 "https://lists.sourceforge.net/lists/listinfo/beremiz-devel"
 
-#: ../editors/FileManagementPanel.py:180
+#: ../editors/FileManagementPanel.py:186
 #, python-format
 msgid ""
 "The file '%s' already exist.\n"
@@ -3172,20 +3182,20 @@
 "The file '%s' already exist.\n"
 "Do you want to replace it?"
 
-#: ../editors/LDViewer.py:882
+#: ../editors/LDViewer.py:893
 msgid "The group of block must be coherent!"
 msgstr "The group of block must be coherent!"
 
-#: ../BeremizIDE.py:542 ../IDEFrame.py:1015
+#: ../BeremizIDE.py:573 ../IDEFrame.py:1046
 msgid "There are changes, do you want to save?"
 msgstr "There are changes, do you want to save?"
 
-#: ../IDEFrame.py:1658 ../IDEFrame.py:1677
+#: ../IDEFrame.py:1691 ../IDEFrame.py:1710
 #, python-format
 msgid "There is a POU named \"%s\". This could cause a conflict. Do you wish to continue?"
 msgstr "There is a POU named \"%s\". This could cause a conflict. Do you wish to continue?"
 
-#: ../IDEFrame.py:1102
+#: ../IDEFrame.py:1133
 msgid ""
 "There was a problem printing.\n"
 "Perhaps your current printer is not set correctly?"
@@ -3193,11 +3203,11 @@
 "There was a problem printing.\n"
 "Perhaps your current printer is not set correctly?"
 
-#: ../editors/LDViewer.py:891
+#: ../editors/LDViewer.py:902
 msgid "This option isn't available yet!"
 msgstr "This option isn't available yet!"
 
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:565
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567
 #, python-format
 msgid "Tick: %d"
 msgstr "Tick: %d"
@@ -3235,89 +3245,89 @@
 msgid "Time-of-day subtraction"
 msgstr "Time-of-day subtraction"
 
-#: ../dialogs/ForceVariableDialog.py:172
+#: ../dialogs/ForceVariableDialog.py:188
 msgid "Toggle value"
 msgstr "Toggle value"
 
-#: ../editors/Viewer.py:548
+#: ../editors/Viewer.py:584
 msgid "Top"
 msgstr "Top"
 
-#: ../ProjectController.py:1855
+#: ../ProjectController.py:1848
 msgid "Transfer"
 msgstr "Transfer"
 
-#: ../ProjectController.py:1857
+#: ../ProjectController.py:1849
 msgid "Transfer PLC"
 msgstr "Transfer PLC"
 
-#: ../ProjectController.py:1820
+#: ../ProjectController.py:1802
 msgid "Transfer completed successfully.\n"
 msgstr "Transfer completed successfully.\n"
 
-#: ../ProjectController.py:1823
+#: ../ProjectController.py:1805
 msgid "Transfer failed\n"
 msgstr "Transfer failed\n"
 
-#: ../editors/Viewer.py:613 ../editors/Viewer.py:2393 ../editors/Viewer.py:2420
+#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426 ../editors/Viewer.py:2453
 msgid "Transition"
 msgstr "Transition"
 
-#: ../PLCGenerator.py:1518
+#: ../PLCGenerator.py:1564
 #, python-format
 msgid "Transition \"%s\" body must contain an output variable or coil referring to its name"
 msgstr "Transition \"%s\" body must contain an output variable or coil referring to its name"
 
-#: ../dialogs/PouTransitionDialog.py:84
+#: ../dialogs/PouTransitionDialog.py:91
 msgid "Transition Name"
 msgstr "Transition Name"
 
-#: ../dialogs/PouTransitionDialog.py:53
+#: ../dialogs/PouTransitionDialog.py:60
 msgid "Transition Name:"
 msgstr "Transition Name:"
 
-#: ../PLCGenerator.py:1609
+#: ../PLCGenerator.py:1657
 #, python-brace-format
 msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU"
 msgstr "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU"
 
-#: ../PLCGenerator.py:1598
+#: ../PLCGenerator.py:1646
 #, python-brace-format
 msgid "Transition with content \"{a1}\" not connected to a previous step in \"{a2}\" POU"
 msgstr "Transition with content \"{a1}\" not connected to a previous step in \"{a2}\" POU"
 
-#: ../plcopen/plcopen.py:1323
+#: ../plcopen/plcopen.py:1526
 #, python-format
 msgid "Transition with name %s doesn't exist!"
 msgstr "Transition with name %s doesn't exist!"
 
-#: ../PLCControler.py:98
+#: ../plcopen/types_enums.py:76
 msgid "Transitions"
 msgstr "Transitions"
 
-#: ../dialogs/AboutDialog.py:131
+#: ../dialogs/AboutDialog.py:127
 msgid "Translated by"
 msgstr "Translated by"
 
-#: ../editors/ResourceEditor.py:68
+#: ../editors/ResourceEditor.py:76
 msgid "Triggering"
 msgstr "Triggering"
 
-#: ../Beremiz_service.py:478
+#: ../Beremiz_service.py:490
 msgid "Twisted unavailable."
 msgstr "Twisted unavailable."
 
-#: ../dialogs/ActionBlockDialog.py:39 ../editors/ResourceEditor.py:83
-#: ../editors/DataTypeEditor.py:50 ../editors/CodeFileEditor.py:739
-#: ../controls/VariablePanel.py:53 ../controls/VariablePanel.py:54
+#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97
+#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733
+#: ../controls/VariablePanel.py:61
 msgid "Type"
 msgstr "Type"
 
-#: ../dialogs/BrowseLocationsDialog.py:49
+#: ../dialogs/BrowseLocationsDialog.py:54
 msgid "Type and derivated"
 msgstr "Type and derivated"
 
-#: ../canfestival/config_utils.py:336 ../canfestival/config_utils.py:624
+#: ../canfestival/config_utils.py:359 ../canfestival/config_utils.py:666
 #, python-format
 msgid "Type conflict for location \"%s\""
 msgstr "Type conflict for location \"%s\""
@@ -3326,179 +3336,233 @@
 msgid "Type conversion"
 msgstr "Type conversion"
 
-#: ../editors/DataTypeEditor.py:162
+#: ../editors/DataTypeEditor.py:170
 msgid "Type infos:"
 msgstr "Type infos:"
 
-#: ../dialogs/BrowseLocationsDialog.py:50
+#: ../dialogs/BrowseLocationsDialog.py:55
 msgid "Type strict"
 msgstr "Type strict"
 
-#: ../dialogs/SFCDivergenceDialog.py:59 ../dialogs/SFCTransitionDialog.py:58
-#: ../dialogs/LDPowerRailDialog.py:57 ../dialogs/BrowseLocationsDialog.py:100
-#: ../dialogs/FBDBlockDialog.py:66 ../dialogs/ConnectionDialog.py:59
+#: ../dialogs/SFCDivergenceDialog.py:60 ../dialogs/SFCTransitionDialog.py:59
+#: ../dialogs/LDPowerRailDialog.py:58 ../dialogs/BrowseLocationsDialog.py:111
+#: ../dialogs/FBDBlockDialog.py:69 ../dialogs/ConnectionDialog.py:61
 msgid "Type:"
 msgstr "Type:"
 
-#: ../canfestival/config_utils.py:462 ../canfestival/config_utils.py:476
+#: ../connectors/PYRO/dialog.py:39 ../connectors/WAMP/dialog.py:42
+msgid "URI host:"
+msgstr "URI host:"
+
+#: ../connectors/PYRO/dialog.py:43 ../connectors/WAMP/dialog.py:46
+msgid "URI port:"
+msgstr "URI port:"
+
+#: ../controls/UriLocationEditor.py:35
+msgid "URI type:"
+msgstr "URI type:"
+
+#: ../canfestival/config_utils.py:500 ../canfestival/config_utils.py:515
 #, python-format
 msgid "Unable to define PDO mapping for node %02x"
 msgstr "Unable to define PDO mapping for node %02x"
 
-#: ../targets/Xenomai/__init__.py:39
+#: ../targets/Xenomai/__init__.py:43
 #, python-format
 msgid "Unable to get Xenomai's %s \n"
 msgstr "Unable to get Xenomai's %s \n"
 
-#: ../PLCGenerator.py:961 ../PLCGenerator.py:1214
+#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252
 #, python-brace-format
 msgid "Undefined block type \"{a1}\" in \"{a2}\" POU"
 msgstr "Undefined block type \"{a1}\" in \"{a2}\" POU"
 
-#: ../PLCGenerator.py:254
+#: ../PLCGenerator.py:261
 #, python-format
 msgid "Undefined pou type \"%s\""
 msgstr "Undefined pou type \"%s\""
 
-#: ../IDEFrame.py:360 ../IDEFrame.py:421
+#: ../IDEFrame.py:365 ../IDEFrame.py:423
 msgid "Undo"
 msgstr "Undo"
 
-#: ../ProjectController.py:423
+#: ../ProjectController.py:442
 msgid "Unknown"
 msgstr "Unknown"
 
-#: ../editors/Viewer.py:394
+#: ../editors/Viewer.py:437
 #, python-format
 msgid "Unknown variable \"%s\" for this POU!"
 msgstr "Unknown variable \"%s\" for this POU!"
 
-#: ../ProjectController.py:420 ../ProjectController.py:421
+#: ../ProjectController.py:439 ../ProjectController.py:440
 msgid "Unnamed"
 msgstr "Unnamed"
 
-#: ../PLCControler.py:638
+#: ../PLCControler.py:263
 #, python-format
 msgid "Unnamed%d"
 msgstr "Unnamed%d"
 
-#: ../controls/VariablePanel.py:284
+#: ../controls/VariablePanel.py:308
 #, python-format
 msgid "Unrecognized data size \"%s\""
 msgstr "Unrecognized data size \"%s\""
 
-#: ../editors/DataTypeEditor.py:630 ../controls/VariablePanel.py:827
+#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841
 msgid "User Data Types"
 msgstr "User Data Types"
 
-#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:86
+#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93
 msgid "User Type"
 msgstr "User Type"
 
-#: ../PLCControler.py:97
+#: ../plcopen/types_enums.py:75
 msgid "User-defined POUs"
 msgstr "User-defined POUs"
 
-#: ../dialogs/ActionBlockDialog.py:39
+#: ../dialogs/ActionBlockDialog.py:42
 msgid "Value"
 msgstr "Value"
 
-#: ../editors/DataTypeEditor.py:259
+#: ../editors/DataTypeEditor.py:267
 msgid "Values:"
 msgstr "Values:"
 
-#: ../dialogs/ActionBlockDialog.py:43 ../editors/Viewer.py:585
-#: ../editors/Viewer.py:2423
+#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622
+#: ../editors/Viewer.py:2456
 msgid "Variable"
 msgstr "Variable"
 
-#: ../editors/Viewer.py:309 ../editors/Viewer.py:339 ../editors/Viewer.py:361
-#: ../editors/TextViewer.py:292 ../editors/TextViewer.py:343
-#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:329
+#: ../editors/Viewer.py:352 ../editors/Viewer.py:382 ../editors/Viewer.py:404
+#: ../editors/TextViewer.py:290 ../editors/TextViewer.py:344
+#: ../editors/TextViewer.py:367 ../controls/VariablePanel.py:355
 msgid "Variable Drop"
 msgstr "Variable Drop"
 
-#: ../dialogs/FBDVariableDialog.py:64
+#: ../dialogs/FBDVariableDialog.py:68
 msgid "Variable Properties"
 msgstr "Variable Properties"
 
-#: ../editors/Viewer.py:289 ../editors/TextViewer.py:306
-#: ../controls/LocationCellEditor.py:97 ../controls/VariablePanel.py:290
-#: ../controls/VariablePanel.py:350
+#: ../editors/Viewer.py:332 ../editors/TextViewer.py:306
+#: ../controls/LocationCellEditor.py:102 ../controls/VariablePanel.py:316
+#: ../controls/VariablePanel.py:379
 msgid "Variable class"
 msgstr "Variable class"
 
-#: ../editors/Viewer.py:396 ../editors/TextViewer.py:387
+#: ../editors/Viewer.py:439 ../editors/TextViewer.py:388
 msgid "Variable don't belong to this POU!"
 msgstr "Variable don't belong to this POU!"
 
-#: ../dialogs/LDElementDialog.py:89
+#: ../dialogs/LDElementDialog.py:92
 msgid "Variable:"
 msgstr "Variable:"
 
-#: ../controls/VariablePanel.py:72
+#: ../controls/VariablePanel.py:90
 msgid "Variables"
 msgstr "Variables"
 
-#: ../controls/ProjectPropertiesPanel.py:152
+#: ../controls/ProjectPropertiesPanel.py:166
 msgid "Vertical:"
 msgstr "Vertical:"
 
-#: ../Beremiz_service.py:588
+#: ../runtime/WampClient.py:113
+#, python-format
+msgid "WAMP Client connection failed (%s) .. retrying .."
+msgstr "WAMP Client connection failed (%s) .. retrying .."
+
+#: ../runtime/WampClient.py:117
+#, python-format
+msgid "WAMP Client connection lost (%s) .. retrying .."
+msgstr "WAMP Client connection lost (%s) .. retrying .."
+
+#: ../connectors/WAMP/dialog.py:54
+msgid "WAMP ID:"
+msgstr "WAMP ID:"
+
+#: ../runtime/WampClient.py:172
+msgid "WAMP client connecting to :"
+msgstr "WAMP client connecting to :"
+
+#: ../runtime/WampClient.py:148
+msgid "WAMP client connection not established!"
+msgstr "WAMP client connection not established!"
+
+#: ../Beremiz_service.py:625
 msgid "WAMP client startup failed. "
 msgstr "WAMP client startup failed. "
 
-#: ../connectors/WAMP/__init__.py:91
+#: ../Beremiz_service.py:621
+msgid "WAMP config is incomplete."
+msgstr "WAMP config is incomplete."
+
+#: ../Beremiz_service.py:623
+msgid "WAMP config is missing."
+msgstr "WAMP config is missing."
+
+#: ../connectors/WAMP/__init__.py:99
 #, python-format
 msgid "WAMP connecting to URL : %s\n"
 msgstr "WAMP connecting to URL : %s\n"
 
-#: ../connectors/WAMP/__init__.py:131
+#: ../connectors/WAMP/__init__.py:140
 msgid "WAMP connection timeout"
 msgstr "WAMP connection timeout"
 
-#: ../connectors/WAMP/__init__.py:150
+#: ../connectors/WAMP/__init__.py:158
 #, python-format
 msgid "WAMP connection to '%s' failed.\n"
 msgstr "WAMP connection to '%s' failed.\n"
 
-#: ../Beremiz_service.py:564
+#: ../Beremiz_service.py:595
 msgid "WAMP import failed :"
 msgstr "WAMP import failed :"
 
-#: ../wxglade_hmi/wxglade_hmi.py:37
+#: ../runtime/WampClient.py:126
+msgid "WAMP load error: "
+msgstr "WAMP load error: "
+
+#: ../runtime/WampClient.py:108
+msgid "WAMP session left"
+msgstr "WAMP session left"
+
+#: ../wxglade_hmi/wxglade_hmi.py:44
 msgid "WXGLADE GUI"
 msgstr "WXGLADE GUI"
 
-#: ../dialogs/PouDialog.py:129 ../editors/LDViewer.py:891
+#: ../runtime/WampClient.py:137
+msgid "Wamp secret load error:"
+msgstr "Wamp secret load error:"
+
+#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902
 msgid "Warning"
 msgstr "Warning"
 
-#: ../ProjectController.py:707
+#: ../ProjectController.py:726
 msgid "Warnings in ST/IL/SFC code generator :\n"
 msgstr "Warnings in ST/IL/SFC code generator :\n"
 
-#: ../dialogs/SearchInProjectDialog.py:78
+#: ../dialogs/SearchInProjectDialog.py:82
 msgid "Whole Project"
 msgstr "Whole Project"
 
-#: ../controls/ProjectPropertiesPanel.py:120
+#: ../controls/ProjectPropertiesPanel.py:134
 msgid "Width:"
 msgstr "Width:"
 
-#: ../dialogs/FindInPouDialog.py:91
+#: ../dialogs/FindInPouDialog.py:94
 msgid "Wrap search"
 msgstr "Wrap search"
 
-#: ../dialogs/AboutDialog.py:130
+#: ../dialogs/AboutDialog.py:126
 msgid "Written by"
 msgstr "Written by"
 
-#: ../features.py:34
+#: ../features.py:35
 msgid "WxGlade GUI"
 msgstr "WxGlade GUI"
 
-#: ../svgui/svgui.py:142
+#: ../svgui/svgui.py:150
 msgid ""
 "You don't have write permissions.\n"
 "Open Inkscape anyway ?"
@@ -3506,7 +3570,7 @@
 "You don't have write permissions.\n"
 "Open Inkscape anyway ?"
 
-#: ../wxglade_hmi/wxglade_hmi.py:154
+#: ../wxglade_hmi/wxglade_hmi.py:160
 msgid ""
 "You don't have write permissions.\n"
 "Open wxGlade anyway ?"
@@ -3514,7 +3578,7 @@
 "You don't have write permissions.\n"
 "Open wxGlade anyway ?"
 
-#: ../ProjectController.py:371
+#: ../ProjectController.py:390
 msgid ""
 "You must have permission to work on the project\n"
 "Work on a project copy ?"
@@ -3522,77 +3586,69 @@
 "You must have permission to work on the project\n"
 "Work on a project copy ?"
 
-#: ../editors/LDViewer.py:886
+#: ../editors/LDViewer.py:897
 msgid "You must select the block or group of blocks around which a branch should be added!"
 msgstr "You must select the block or group of blocks around which a branch should be added!"
 
-#: ../editors/LDViewer.py:666
+#: ../editors/LDViewer.py:677
 msgid "You must select the wire where a contact should be added!"
 msgstr "You must select the wire where a contact should be added!"
 
-#: ../dialogs/SFCStepNameDialog.py:48 ../dialogs/PouNameDialog.py:46
+#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50
 msgid "You must type a name!"
 msgstr "You must type a name!"
 
-#: ../dialogs/ForceVariableDialog.py:193
+#: ../dialogs/ForceVariableDialog.py:209
 msgid "You must type a value!"
 msgstr "You must type a value!"
 
-#: ../IDEFrame.py:438
+#: ../IDEFrame.py:440
 msgid "Zoom"
 msgstr "Zoom"
 
-#: ../dialogs/DurationEditorDialog.py:155
+#: ../dialogs/DurationEditorDialog.py:158
 msgid "days"
 msgstr "days"
 
-#: ../PLCOpenEditor.py:343
+#: ../PLCOpenEditor.py:317
 #, python-format
 msgid "error: %s\n"
 msgstr "error: %s\n"
 
-#: ../util/ProcessLogger.py:169
+#: ../util/ProcessLogger.py:178
 #, python-brace-format
 msgid "exited with status {a1} (pid {a2})\n"
 msgstr "exited with status {a1} (pid {a2})\n"
 
-#: ../PLCOpenEditor.py:406 ../PLCOpenEditor.py:408
-msgid "file : "
-msgstr "file : "
-
-#: ../dialogs/PouDialog.py:32
+#: ../dialogs/PouDialog.py:36
 msgid "function"
 msgstr "function"
 
-#: ../PLCOpenEditor.py:409
-msgid "function : "
-msgstr "function : "
-
-#: ../dialogs/PouDialog.py:32
+#: ../dialogs/PouDialog.py:36
 msgid "functionBlock"
 msgstr "functionBlock"
 
-#: ../dialogs/DurationEditorDialog.py:155
+#: ../dialogs/DurationEditorDialog.py:158
 msgid "hours"
 msgstr "hours"
 
-#: ../PLCOpenEditor.py:409
-msgid "line : "
-msgstr "line : "
-
-#: ../dialogs/DurationEditorDialog.py:157
+#: ../ProjectController.py:753
+msgid "matiec installation is not found\n"
+msgstr "matiec installation is not found\n"
+
+#: ../dialogs/DurationEditorDialog.py:160
 msgid "milliseconds"
 msgstr "milliseconds"
 
-#: ../dialogs/DurationEditorDialog.py:156
+#: ../dialogs/DurationEditorDialog.py:159
 msgid "minutes"
 msgstr "minutes"
 
-#: ../dialogs/PouDialog.py:32
+#: ../dialogs/PouDialog.py:36
 msgid "program"
 msgstr "program"
 
-#: ../dialogs/DurationEditorDialog.py:156
+#: ../dialogs/DurationEditorDialog.py:159
 msgid "seconds"
 msgstr "seconds"
 
@@ -3608,27 +3664,27 @@
 msgid "string right of"
 msgstr "string right of"
 
-#: ../Beremiz.py:164
+#: ../Beremiz.py:167
 msgid "update info unavailable."
 msgstr "update info unavailable."
 
-#: ../PLCOpenEditor.py:341
+#: ../PLCOpenEditor.py:315
 #, python-format
 msgid "warning: %s\n"
 msgstr "warning: %s\n"
 
-#: ../PLCControler.py:972
+#: ../PLCControler.py:576
 #, python-brace-format
 msgid "{a1} \"{a2}\" can't be pasted as a {a3}."
 msgstr "{a1} \"{a2}\" can't be pasted as a {a3}."
 
-#: ../ConfigTreeNode.py:56
+#: ../ConfigTreeNode.py:58
 #, python-brace-format
 msgid ""
-"{a1} XML file doesn't follow XSD schema at line %{a2}:\n"
+"{a1} XML file doesn't follow XSD schema at line {a2}:\n"
 "{a3}"
 msgstr ""
-"{a1} XML file doesn't follow XSD schema at line %{a2}:\n"
+"{a1} XML file doesn't follow XSD schema at line {a2}:\n"
 "{a3}"
 
 #: Extra XSD strings
@@ -3692,6 +3748,72 @@
 msgid "Win32"
 msgstr "Win32"
 
+msgid "ModbusRequest"
+msgstr "ModbusRequest"
+
+msgid "SlaveID"
+msgstr "SlaveID"
+
+msgid "Nr_of_Channels"
+msgstr "Nr_of_Channels"
+
+msgid "Start_Address"
+msgstr "Start_Address"
+
+msgid "Timeout_in_ms"
+msgstr "Timeout_in_ms"
+
+msgid "MemoryArea"
+msgstr "MemoryArea"
+
+msgid "MemoryAreaType"
+msgstr "MemoryAreaType"
+
+msgid "ModbusTCPclient"
+msgstr "ModbusTCPclient"
+
+msgid "Remote_IP_Address"
+msgstr "Remote_IP_Address"
+
+msgid "Remote_Port_Number"
+msgstr "Remote_Port_Number"
+
+msgid "Invocation_Rate_in_ms"
+msgstr "Invocation_Rate_in_ms"
+
+msgid "ModbusServerNode"
+msgstr "ModbusServerNode"
+
+msgid "Local_IP_Address"
+msgstr "Local_IP_Address"
+
+msgid "Local_Port_Number"
+msgstr "Local_Port_Number"
+
+msgid "ModbusRTUclient"
+msgstr "ModbusRTUclient"
+
+msgid "Serial_Port"
+msgstr "Serial_Port"
+
+msgid "Baud_Rate"
+msgstr "Baud_Rate"
+
+msgid "Parity"
+msgstr "Parity"
+
+msgid "Stop_Bits"
+msgstr "Stop_Bits"
+
+msgid "ModbusRTUslave"
+msgstr "ModbusRTUslave"
+
+msgid "ModbusRoot"
+msgstr "ModbusRoot"
+
+msgid "MaxRemoteTCPclients"
+msgstr "MaxRemoteTCPclients"
+
 msgid "BaseParams"
 msgstr "BaseParams"
 
@@ -3855,8 +3977,8 @@
 msgid "The RS bistable is a latch where the Reset dominates."
 msgstr "The RS bistable is a latch where the Reset dominates."
 
-msgid "The semaphore provides a mechanism to allow software elements mutually exclusive access to certain ressources."
-msgstr "The semaphore provides a mechanism to allow software elements mutually exclusive access to certain ressources."
+msgid "The semaphore provides a mechanism to allow software elements mutually exclusive access to certain resources."
+msgstr "The semaphore provides a mechanism to allow software elements mutually exclusive access to certain resources."
 
 msgid "The output produces a single pulse when a rising edge is detected."
 msgstr "The output produces a single pulse when a rising edge is detected."
--- a/i18n/messages.pot	Sat Jun 23 09:08:13 2018 +0200
+++ b/i18n/messages.pot	Sat Jun 23 09:17:20 2018 +0200
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: Beremiz\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-09-13 15:37+0300\n"
+"POT-Creation-Date: 2018-06-15 16:39+0300\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,7 +17,7 @@
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: ../util/ExceptionHandler.py:56
+#: ../util/ExceptionHandler.py:58
 #, python-format
 msgid ""
 "\n"
@@ -32,244 +32,244 @@
 "Traceback:\n"
 msgstr ""
 
+#: ../controls/VariablePanel.py:90
+msgid "   External"
+msgstr ""
+
 #: ../controls/VariablePanel.py:89
-msgid "   External"
-msgstr ""
-
-#: ../controls/VariablePanel.py:88
 msgid "   InOut"
 msgstr ""
 
-#: ../controls/VariablePanel.py:88
+#: ../controls/VariablePanel.py:89
 msgid "   Input"
 msgstr ""
 
+#: ../controls/VariablePanel.py:90
+msgid "   Local"
+msgstr ""
+
 #: ../controls/VariablePanel.py:89
-msgid "   Local"
-msgstr ""
-
-#: ../controls/VariablePanel.py:88
 msgid "   Output"
 msgstr ""
 
-#: ../controls/VariablePanel.py:90
+#: ../controls/VariablePanel.py:91
 msgid "   Temp"
 msgstr ""
 
-#: ../dialogs/PouTransitionDialog.py:99 ../dialogs/ProjectDialog.py:72
-#: ../dialogs/PouActionDialog.py:97 ../dialogs/PouDialog.py:120
+#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/ProjectDialog.py:74
+#: ../dialogs/PouActionDialog.py:99 ../dialogs/PouDialog.py:122
 #, python-format
 msgid " and %s"
 msgstr ""
 
-#: ../ProjectController.py:1177
+#: ../ProjectController.py:1182
 msgid " generation failed !\n"
 msgstr ""
 
-#: ../plcopen/plcopen.py:936
+#: ../plcopen/plcopen.py:1029
 #, python-format
 msgid "\"%s\" Data Type doesn't exist !!!"
 msgstr ""
 
-#: ../plcopen/plcopen.py:954
+#: ../plcopen/plcopen.py:1047
 #, python-format
 msgid "\"%s\" POU already exists !!!"
 msgstr ""
 
-#: ../plcopen/plcopen.py:975
+#: ../plcopen/plcopen.py:1068
 #, python-format
 msgid "\"%s\" POU doesn't exist !!!"
 msgstr ""
 
-#: ../editors/Viewer.py:285
+#: ../editors/Viewer.py:288
 #, python-format
 msgid "\"%s\" can't use itself!"
 msgstr ""
 
-#: ../IDEFrame.py:1692 ../IDEFrame.py:1711
+#: ../IDEFrame.py:1688 ../IDEFrame.py:1707
 #, python-format
 msgid "\"%s\" config already exists!"
 msgstr ""
 
-#: ../plcopen/plcopen.py:509
+#: ../plcopen/plcopen.py:531
 #, python-format
 msgid "\"%s\" configuration already exists !!!"
 msgstr ""
 
-#: ../plcopen/plcopen.py:518
+#: ../plcopen/plcopen.py:540
 #, python-format
 msgid "\"%s\" configuration doesn't exist !!!"
 msgstr ""
 
-#: ../IDEFrame.py:1642
+#: ../IDEFrame.py:1638
 #, python-format
 msgid "\"%s\" data type already exists!"
 msgstr ""
 
-#: ../dialogs/PouTransitionDialog.py:110 ../dialogs/BlockPreviewDialog.py:220
-#: ../dialogs/PouActionDialog.py:108 ../editors/Viewer.py:301
-#: ../editors/Viewer.py:371 ../editors/Viewer.py:395 ../editors/Viewer.py:415
-#: ../editors/TextViewer.py:275 ../editors/TextViewer.py:304
+#: ../dialogs/PouTransitionDialog.py:112 ../dialogs/BlockPreviewDialog.py:220
+#: ../dialogs/PouActionDialog.py:110 ../editors/Viewer.py:304
+#: ../editors/Viewer.py:374 ../editors/Viewer.py:398 ../editors/Viewer.py:418
+#: ../editors/TextViewer.py:270 ../editors/TextViewer.py:299
 #: ../controls/VariablePanel.py:425
 #, python-format
 msgid "\"%s\" element for this pou already exists!"
 msgstr ""
 
-#: ../BeremizIDE.py:933
+#: ../BeremizIDE.py:928
 #, python-format
 msgid "\"%s\" folder is not a valid Beremiz project\n"
 msgstr ""
 
-#: ../dialogs/SFCStepNameDialog.py:53 ../dialogs/PouTransitionDialog.py:106
-#: ../dialogs/BlockPreviewDialog.py:209 ../dialogs/PouNameDialog.py:51
+#: ../dialogs/SFCStepNameDialog.py:56 ../dialogs/PouTransitionDialog.py:108
+#: ../dialogs/BlockPreviewDialog.py:209 ../dialogs/PouNameDialog.py:54
+#: ../dialogs/PouActionDialog.py:106 ../dialogs/PouDialog.py:129
+#: ../editors/ResourceEditor.py:483 ../editors/ResourceEditor.py:518
+#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:603
+#: ../editors/CodeFileEditor.py:774 ../controls/VariablePanel.py:787
+#: ../IDEFrame.py:1629
+#, python-format
+msgid "\"%s\" is a keyword. It can't be used!"
+msgstr ""
+
+#: ../plcopen/plcopen.py:2836
+#, python-format
+msgid "\"%s\" is an invalid value!"
+msgstr ""
+
+#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:365
+#, python-format
+msgid "\"%s\" is not a valid folder!"
+msgstr ""
+
+#: ../dialogs/SFCStepNameDialog.py:54 ../dialogs/PouTransitionDialog.py:106
+#: ../dialogs/BlockPreviewDialog.py:205 ../dialogs/PouNameDialog.py:52
 #: ../dialogs/PouActionDialog.py:104 ../dialogs/PouDialog.py:127
-#: ../editors/ResourceEditor.py:464 ../editors/ResourceEditor.py:499
-#: ../editors/DataTypeEditor.py:570 ../editors/DataTypeEditor.py:602
-#: ../editors/CodeFileEditor.py:789 ../controls/VariablePanel.py:808
-#: ../IDEFrame.py:1633
-#, python-format
-msgid "\"%s\" is a keyword. It can't be used!"
-msgstr ""
-
-#: ../plcopen/plcopen.py:2531
-#, python-format
-msgid "\"%s\" is an invalid value!"
-msgstr ""
-
-#: ../PLCOpenEditor.py:370 ../PLCOpenEditor.py:412
-#, python-format
-msgid "\"%s\" is not a valid folder!"
-msgstr ""
-
-#: ../dialogs/SFCStepNameDialog.py:51 ../dialogs/PouTransitionDialog.py:104
-#: ../dialogs/BlockPreviewDialog.py:205 ../dialogs/PouNameDialog.py:49
-#: ../dialogs/PouActionDialog.py:102 ../dialogs/PouDialog.py:125
-#: ../editors/ResourceEditor.py:462 ../editors/ResourceEditor.py:497
-#: ../editors/DataTypeEditor.py:600 ../editors/CodeFileEditor.py:787
-#: ../controls/VariablePanel.py:806 ../IDEFrame.py:1631
+#: ../editors/ResourceEditor.py:481 ../editors/ResourceEditor.py:516
+#: ../editors/DataTypeEditor.py:601 ../editors/CodeFileEditor.py:772
+#: ../controls/VariablePanel.py:785 ../IDEFrame.py:1627
 #, python-format
 msgid "\"%s\" is not a valid identifier!"
 msgstr ""
 
-#: ../IDEFrame.py:2445
+#: ../IDEFrame.py:2436
 #, python-format
 msgid "\"%s\" is used by one or more POUs. Do you wish to continue?"
 msgstr ""
 
-#: ../dialogs/BlockPreviewDialog.py:213 ../dialogs/PouDialog.py:129
-#: ../editors/Viewer.py:299 ../editors/Viewer.py:356 ../editors/Viewer.py:386
-#: ../editors/Viewer.py:408 ../editors/TextViewer.py:273
-#: ../editors/TextViewer.py:302 ../editors/TextViewer.py:356
-#: ../editors/TextViewer.py:379 ../controls/VariablePanel.py:364
-#: ../IDEFrame.py:1651
+#: ../dialogs/BlockPreviewDialog.py:213 ../dialogs/PouDialog.py:131
+#: ../editors/Viewer.py:302 ../editors/Viewer.py:359 ../editors/Viewer.py:389
+#: ../editors/Viewer.py:411 ../editors/TextViewer.py:268
+#: ../editors/TextViewer.py:297 ../editors/TextViewer.py:351
+#: ../editors/TextViewer.py:374 ../controls/VariablePanel.py:364
+#: ../IDEFrame.py:1647
 #, python-format
 msgid "\"%s\" pou already exists!"
 msgstr ""
 
-#: ../dialogs/SFCStepNameDialog.py:59
+#: ../dialogs/SFCStepNameDialog.py:62
 #, python-format
 msgid "\"%s\" step already exists!"
 msgstr ""
 
-#: ../editors/DataTypeEditor.py:565
+#: ../editors/DataTypeEditor.py:566
 #, python-format
 msgid "\"%s\" value already defined!"
 msgstr ""
 
-#: ../dialogs/ArrayTypeDialog.py:103 ../editors/DataTypeEditor.py:758
+#: ../dialogs/ArrayTypeDialog.py:105 ../editors/DataTypeEditor.py:759
 #, python-format
 msgid "\"%s\" value isn't a valid array dimension!"
 msgstr ""
 
-#: ../dialogs/ArrayTypeDialog.py:107 ../editors/DataTypeEditor.py:765
+#: ../dialogs/ArrayTypeDialog.py:109 ../editors/DataTypeEditor.py:766
 #, python-format
 msgid ""
 "\"%s\" value isn't a valid array dimension!\n"
 "Right value must be greater than left value."
 msgstr ""
 
-#: ../PLCGenerator.py:1114
+#: ../PLCGenerator.py:1133
 #, python-brace-format
 msgid "\"{a1}\" function cancelled in \"{a2}\" POU: No input connected"
 msgstr ""
 
-#: ../editors/Viewer.py:289
+#: ../editors/Viewer.py:292
 #, python-brace-format
 msgid "\"{a1}\" is already used by \"{a2}\"!"
 msgstr ""
 
-#: ../plcopen/plcopen.py:535
+#: ../plcopen/plcopen.py:557
 #, python-brace-format
 msgid "\"{a1}\" resource already exists in \"{a2}\" configuration !!!"
 msgstr ""
 
-#: ../plcopen/plcopen.py:555
+#: ../plcopen/plcopen.py:577
 #, python-brace-format
 msgid "\"{a1}\" resource doesn't exist in \"{a2}\" configuration !!!"
 msgstr ""
 
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:577
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:580
 #, python-format
 msgid "%03gms"
 msgstr ""
 
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:568
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571
 #, python-format
 msgid "%dd"
 msgstr ""
 
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:61
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:572
+#, python-format
+msgid "%dh"
+msgstr ""
+
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:60
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:573
+#, python-format
+msgid "%dm"
+msgstr ""
+
 #: ../controls/DebugVariablePanel/DebugVariablePanel.py:58
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:569
-#, python-format
-msgid "%dh"
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:57
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:570
-#, python-format
-msgid "%dm"
-msgstr ""
-
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:55
 #, python-format
 msgid "%dms"
 msgstr ""
 
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:56
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:571
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:59
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:574
 #, python-format
 msgid "%ds"
 msgstr ""
 
-#: ../PLCControler.py:1591
+#: ../PLCControler.py:1114
 #, python-format
 msgid "%s Data Types"
 msgstr ""
 
-#: ../PLCControler.py:1574
+#: ../PLCControler.py:1097
 #, python-format
 msgid "%s POUs"
 msgstr ""
 
-#: ../canfestival/SlaveEditor.py:72 ../canfestival/NetworkEditor.py:97
+#: ../canfestival/SlaveEditor.py:73 ../canfestival/NetworkEditor.py:97
 #, python-format
 msgid "%s Profile"
 msgstr ""
 
-#: ../plcopen/plcopen.py:1727 ../plcopen/plcopen.py:1734
-#: ../plcopen/plcopen.py:1747 ../plcopen/plcopen.py:1755
-#: ../plcopen/plcopen.py:1765 ../plcopen/plcopen.py:1776
+#: ../plcopen/plcopen.py:1901 ../plcopen/plcopen.py:1908
+#: ../plcopen/plcopen.py:1921 ../plcopen/plcopen.py:1929
+#: ../plcopen/plcopen.py:1939 ../plcopen/plcopen.py:1950
 #, python-format
 msgid "%s body don't have instances!"
 msgstr ""
 
-#: ../plcopen/plcopen.py:1783 ../plcopen/plcopen.py:1790
-#: ../plcopen/plcopen.py:1797
+#: ../plcopen/plcopen.py:1957 ../plcopen/plcopen.py:1964
+#: ../plcopen/plcopen.py:1971
 #, python-format
 msgid "%s body don't have text!"
 msgstr ""
 
-#: ../IDEFrame.py:400
+#: ../IDEFrame.py:388
 msgid "&Add Element"
 msgstr ""
 
@@ -278,35 +278,35 @@
 msgid "&Close"
 msgstr ""
 
-#: ../IDEFrame.py:370
+#: ../IDEFrame.py:361
 msgid "&Configuration"
 msgstr ""
 
-#: ../IDEFrame.py:359
+#: ../IDEFrame.py:350
 msgid "&Data Type"
 msgstr ""
 
-#: ../IDEFrame.py:404
+#: ../IDEFrame.py:392
 msgid "&Delete"
 msgstr ""
 
-#: ../IDEFrame.py:351
+#: ../IDEFrame.py:342
 msgid "&Display"
 msgstr ""
 
-#: ../IDEFrame.py:350
+#: ../IDEFrame.py:341
 msgid "&Edit"
 msgstr ""
 
-#: ../IDEFrame.py:349
+#: ../IDEFrame.py:340
 msgid "&File"
 msgstr ""
 
-#: ../IDEFrame.py:361
+#: ../IDEFrame.py:352
 msgid "&Function"
 msgstr ""
 
-#: ../IDEFrame.py:352
+#: ../IDEFrame.py:343
 msgid "&Help"
 msgstr ""
 
@@ -314,19 +314,19 @@
 msgid "&License"
 msgstr ""
 
-#: ../IDEFrame.py:365
+#: ../IDEFrame.py:356
 msgid "&Program"
 msgstr ""
 
-#: ../PLCOpenEditor.py:145
+#: ../PLCOpenEditor.py:98
 msgid "&Properties"
 msgstr ""
 
-#: ../BeremizIDE.py:249
+#: ../BeremizIDE.py:244
 msgid "&Recent Projects"
 msgstr ""
 
-#: ../IDEFrame.py:367
+#: ../IDEFrame.py:358
 msgid "&Resource"
 msgstr ""
 
@@ -340,52 +340,56 @@
 msgid "'{a1}' - {a2} matches in project"
 msgstr ""
 
-#: ../connectors/PYRO/__init__.py:93
+#: ../connectors/PYRO/__init__.py:98
 #, python-brace-format
 msgid "'{a1}' is located at {a2}\n"
 msgstr ""
 
-#: ../controls/SearchResultPanel.py:299
+#: ../controls/SearchResultPanel.py:298
 #, python-format
 msgid "(%d matches)"
 msgstr ""
 
-#: ../dialogs/PouTransitionDialog.py:101 ../dialogs/PouActionDialog.py:99
-#: ../dialogs/PouDialog.py:122
+#: ../dialogs/PouTransitionDialog.py:103 ../dialogs/PouActionDialog.py:101
+#: ../dialogs/PouDialog.py:124
 #, python-format
 msgid ", %s"
 msgstr ""
 
-#: ../controls/LogViewer.py:286
+#: ../controls/UriLocationEditor.py:49
+msgid "- Select URI type -"
+msgstr ""
+
+#: ../controls/LogViewer.py:287
 msgid "1d"
 msgstr ""
 
-#: ../controls/LogViewer.py:287
+#: ../controls/LogViewer.py:288
 msgid "1h"
 msgstr ""
 
-#: ../controls/LogViewer.py:288
+#: ../controls/LogViewer.py:289
 msgid "1m"
 msgstr ""
 
-#: ../controls/LogViewer.py:289
+#: ../controls/LogViewer.py:290
 msgid "1s"
 msgstr ""
 
-#: ../dialogs/PouDialog.py:131 ../IDEFrame.py:1654 ../IDEFrame.py:1700
-#: ../IDEFrame.py:1719
+#: ../dialogs/PouDialog.py:133 ../IDEFrame.py:1650 ../IDEFrame.py:1696
+#: ../IDEFrame.py:1715
 #, python-format
 msgid "A POU has an element named \"%s\". This could cause a conflict. Do you wish to continue?"
 msgstr ""
 
-#: ../dialogs/SFCStepNameDialog.py:55 ../dialogs/PouTransitionDialog.py:108
-#: ../dialogs/PouNameDialog.py:53 ../dialogs/PouActionDialog.py:106
-#: ../controls/VariablePanel.py:810 ../IDEFrame.py:1668 ../IDEFrame.py:1681
+#: ../dialogs/SFCStepNameDialog.py:58 ../dialogs/PouTransitionDialog.py:110
+#: ../dialogs/PouNameDialog.py:56 ../dialogs/PouActionDialog.py:108
+#: ../controls/VariablePanel.py:789 ../IDEFrame.py:1664 ../IDEFrame.py:1677
 #, python-format
 msgid "A POU named \"%s\" already exists!"
 msgstr ""
 
-#: ../ConfigTreeNode.py:427
+#: ../ConfigTreeNode.py:424
 #, python-brace-format
 msgid "A child named \"{a1}\" already exists -> \"{a2}\"\n"
 msgstr ""
@@ -394,22 +398,22 @@
 msgid "A location must be selected!"
 msgstr ""
 
-#: ../editors/ResourceEditor.py:466
+#: ../editors/ResourceEditor.py:485
 msgid "A task with the same name already exists!"
 msgstr ""
 
-#: ../dialogs/SFCStepNameDialog.py:57 ../controls/VariablePanel.py:812
-#: ../IDEFrame.py:1670 ../IDEFrame.py:1683
+#: ../dialogs/SFCStepNameDialog.py:60 ../controls/VariablePanel.py:791
+#: ../IDEFrame.py:1666 ../IDEFrame.py:1679
 #, python-format
 msgid "A variable with \"%s\" as name already exists in this pou!"
 msgstr ""
 
-#: ../editors/CodeFileEditor.py:793
+#: ../editors/CodeFileEditor.py:778
 #, python-format
 msgid "A variable with \"%s\" as name already exists!"
 msgstr ""
 
-#: ../BeremizIDE.py:316 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:189
+#: ../BeremizIDE.py:311 ../dialogs/AboutDialog.py:46 ../PLCOpenEditor.py:142
 msgid "About"
 msgstr ""
 
@@ -417,113 +421,113 @@
 msgid "Absolute number"
 msgstr ""
 
-#: ../dialogs/SFCStepDialog.py:73 ../dialogs/ActionBlockDialog.py:45
+#: ../dialogs/SFCStepDialog.py:75 ../dialogs/ActionBlockDialog.py:47
 msgid "Action"
 msgstr ""
 
-#: ../editors/Viewer.py:656 ../editors/Viewer.py:2437
+#: ../editors/Viewer.py:653 ../editors/Viewer.py:2427
 msgid "Action Block"
 msgstr ""
 
-#: ../dialogs/PouActionDialog.py:87
+#: ../dialogs/PouActionDialog.py:89
 msgid "Action Name"
 msgstr ""
 
-#: ../dialogs/PouActionDialog.py:54
+#: ../dialogs/PouActionDialog.py:56
 msgid "Action Name:"
 msgstr ""
 
-#: ../plcopen/plcopen.py:1423
+#: ../plcopen/plcopen.py:1567
 #, python-format
 msgid "Action with name %s doesn't exist!"
 msgstr ""
 
-#: ../PLCControler.py:105
+#: ../plcopen/types_enums.py:76
 msgid "Actions"
 msgstr ""
 
-#: ../dialogs/ActionBlockDialog.py:137
+#: ../dialogs/ActionBlockDialog.py:139
 msgid "Actions:"
 msgstr ""
 
-#: ../editors/Viewer.py:470
+#: ../editors/Viewer.py:473
 msgid "Active"
 msgstr ""
 
-#: ../canfestival/SlaveEditor.py:83 ../canfestival/NetworkEditor.py:108
-#: ../BeremizIDE.py:1001 ../editors/Viewer.py:689
+#: ../canfestival/SlaveEditor.py:84 ../canfestival/NetworkEditor.py:108
+#: ../BeremizIDE.py:1001 ../editors/Viewer.py:686
 msgid "Add"
 msgstr ""
 
-#: ../IDEFrame.py:1930 ../IDEFrame.py:1965
+#: ../IDEFrame.py:1924 ../IDEFrame.py:1959
 msgid "Add Action"
 msgstr ""
 
-#: ../features.py:32
+#: ../features.py:33
 msgid "Add C code accessing located variables synchronously"
 msgstr ""
 
-#: ../IDEFrame.py:1913
+#: ../IDEFrame.py:1907
 msgid "Add Configuration"
 msgstr ""
 
-#: ../IDEFrame.py:1893
+#: ../IDEFrame.py:1887
 msgid "Add DataType"
 msgstr ""
 
-#: ../editors/Viewer.py:612
+#: ../editors/Viewer.py:609
 msgid "Add Divergence Branch"
 msgstr ""
 
-#: ../dialogs/DiscoveryDialog.py:127
+#: ../dialogs/DiscoveryDialog.py:121
 msgid "Add IP"
 msgstr ""
 
-#: ../IDEFrame.py:1901
+#: ../IDEFrame.py:1895
 msgid "Add POU"
 msgstr ""
 
-#: ../features.py:33
+#: ../features.py:34
 msgid "Add Python code executed asynchronously"
 msgstr ""
 
-#: ../IDEFrame.py:1941 ../IDEFrame.py:1991
+#: ../IDEFrame.py:1935 ../IDEFrame.py:1985
 msgid "Add Resource"
 msgstr ""
 
-#: ../IDEFrame.py:1919 ../IDEFrame.py:1962
+#: ../IDEFrame.py:1913 ../IDEFrame.py:1956
 msgid "Add Transition"
 msgstr ""
 
-#: ../editors/Viewer.py:599
+#: ../editors/Viewer.py:596
 msgid "Add Wire Segment"
 msgstr ""
 
-#: ../editors/SFCViewer.py:433
+#: ../editors/SFCViewer.py:447
 msgid "Add a new initial step"
 msgstr ""
 
-#: ../editors/Viewer.py:2801 ../editors/SFCViewer.py:770
+#: ../editors/Viewer.py:2791 ../editors/SFCViewer.py:784
 msgid "Add a new jump"
 msgstr ""
 
-#: ../editors/SFCViewer.py:455
+#: ../editors/SFCViewer.py:469
 msgid "Add a new step"
 msgstr ""
 
-#: ../features.py:34
+#: ../features.py:35
 msgid "Add a simple WxGlade based GUI."
 msgstr ""
 
-#: ../dialogs/ActionBlockDialog.py:141
+#: ../dialogs/ActionBlockDialog.py:143
 msgid "Add action"
 msgstr ""
 
-#: ../editors/DataTypeEditor.py:365
+#: ../editors/DataTypeEditor.py:364
 msgid "Add element"
 msgstr ""
 
-#: ../editors/ResourceEditor.py:281
+#: ../editors/ResourceEditor.py:283
 msgid "Add instance"
 msgstr ""
 
@@ -531,11 +535,11 @@
 msgid "Add slave"
 msgstr ""
 
-#: ../editors/ResourceEditor.py:250
+#: ../editors/ResourceEditor.py:252
 msgid "Add task"
 msgstr ""
 
-#: ../editors/CodeFileEditor.py:659 ../controls/VariablePanel.py:481
+#: ../editors/CodeFileEditor.py:654 ../controls/VariablePanel.py:481
 msgid "Add variable"
 msgstr ""
 
@@ -543,44 +547,44 @@
 msgid "Addition"
 msgstr ""
 
-#: ../plcopen/definitions.py:50
+#: ../plcopen/definitions.py:51
 msgid "Additional function blocks"
 msgstr ""
 
-#: ../editors/Viewer.py:672
+#: ../editors/Viewer.py:669
 msgid "Adjust Block Size"
 msgstr ""
 
-#: ../editors/Viewer.py:1728
+#: ../editors/Viewer.py:1720
 msgid "Alignment"
 msgstr ""
 
 #: ../dialogs/BrowseLocationsDialog.py:42
 #: ../dialogs/BrowseLocationsDialog.py:53
 #: ../dialogs/BrowseLocationsDialog.py:152
-#: ../dialogs/BrowseLocationsDialog.py:155 ../controls/LogViewer.py:306
-#: ../controls/VariablePanel.py:87
+#: ../dialogs/BrowseLocationsDialog.py:155 ../controls/LogViewer.py:307
+#: ../controls/VariablePanel.py:88
 msgid "All"
 msgstr ""
 
-#: ../editors/FileManagementPanel.py:35
+#: ../editors/FileManagementPanel.py:37
 msgid "All files (*.*)|*.*|CSV files (*.csv)|*.csv"
 msgstr ""
 
-#: ../ProjectController.py:1716
+#: ../ProjectController.py:1670
 msgid "Already connected. Please disconnect\n"
 msgstr ""
 
-#: ../editors/DataTypeEditor.py:606
+#: ../editors/DataTypeEditor.py:607
 #, python-format
 msgid "An element named \"%s\" already exists in this structure!"
 msgstr ""
 
-#: ../editors/ResourceEditor.py:501
+#: ../editors/ResourceEditor.py:520
 msgid "An instance with the same name already exists!"
 msgstr ""
 
-#: ../dialogs/ConnectionDialog.py:101
+#: ../dialogs/ConnectionDialog.py:103
 msgid "Apply name modification to all continuations with the same name"
 msgstr ""
 
@@ -600,8 +604,8 @@
 msgid "Arithmetic"
 msgstr ""
 
-#: ../editors/DataTypeEditor.py:58 ../editors/DataTypeEditor.py:648
-#: ../controls/VariablePanel.py:893
+#: ../editors/DataTypeEditor.py:60 ../editors/DataTypeEditor.py:649
+#: ../controls/VariablePanel.py:872
 msgid "Array"
 msgstr ""
 
@@ -609,45 +613,37 @@
 msgid "Assignment"
 msgstr ""
 
-#: ../dialogs/FBDVariableDialog.py:225
+#: ../dialogs/FBDVariableDialog.py:226
 msgid "At least a variable or an expression must be selected!"
 msgstr ""
 
-#: ../controls/ProjectPropertiesPanel.py:103
+#: ../controls/ProjectPropertiesPanel.py:111
 msgid "Author"
 msgstr ""
 
-#: ../controls/ProjectPropertiesPanel.py:100
+#: ../controls/ProjectPropertiesPanel.py:108
 msgid "Author Name (optional):"
 msgstr ""
 
-#: ../dialogs/FindInPouDialog.py:78
+#: ../dialogs/FindInPouDialog.py:80
 msgid "Backward"
 msgstr ""
 
-#: ../util/Zeroconf.py:619
-msgid "Bad domain name (circular) at "
-msgstr ""
-
-#: ../util/Zeroconf.py:622
-msgid "Bad domain name at "
-msgstr ""
-
-#: ../canfestival/config_utils.py:359 ../canfestival/config_utils.py:666
+#: ../canfestival/config_utils.py:365 ../canfestival/config_utils.py:672
 #, python-format
 msgid "Bad location size : %s"
 msgstr ""
 
-#: ../dialogs/ArrayTypeDialog.py:55 ../editors/DataTypeEditor.py:183
-#: ../editors/DataTypeEditor.py:213 ../editors/DataTypeEditor.py:308
+#: ../dialogs/ArrayTypeDialog.py:57 ../editors/DataTypeEditor.py:183
+#: ../editors/DataTypeEditor.py:213 ../editors/DataTypeEditor.py:307
 msgid "Base Type:"
 msgstr ""
 
-#: ../editors/DataTypeEditor.py:638 ../controls/VariablePanel.py:851
+#: ../editors/DataTypeEditor.py:639 ../controls/VariablePanel.py:830
 msgid "Base Types"
 msgstr ""
 
-#: ../BeremizIDE.py:487
+#: ../BeremizIDE.py:483
 msgid "Beremiz"
 msgstr ""
 
@@ -679,27 +675,27 @@
 msgid "Bitwise inverting"
 msgstr ""
 
-#: ../editors/Viewer.py:624 ../editors/Viewer.py:2450
+#: ../editors/Viewer.py:621 ../editors/Viewer.py:2440
 msgid "Block"
 msgstr ""
 
-#: ../dialogs/FBDBlockDialog.py:61
+#: ../dialogs/FBDBlockDialog.py:63
 msgid "Block Properties"
 msgstr ""
 
-#: ../editors/TextViewer.py:265
+#: ../editors/TextViewer.py:260
 msgid "Block name"
 msgstr ""
 
-#: ../editors/Viewer.py:590
+#: ../editors/Viewer.py:586
 msgid "Bottom"
 msgstr ""
 
-#: ../ProjectController.py:1395
+#: ../ProjectController.py:1400
 msgid "Broken"
 msgstr ""
 
-#: ../dialogs/BrowseValuesLibraryDialog.py:38
+#: ../dialogs/BrowseValuesLibraryDialog.py:40
 #, python-format
 msgid "Browse %s values library"
 msgstr ""
@@ -708,44 +704,44 @@
 msgid "Browse Locations"
 msgstr ""
 
-#: ../ProjectController.py:1858
+#: ../ProjectController.py:1815
 msgid "Build"
 msgstr ""
 
-#: ../ProjectController.py:1330
+#: ../ProjectController.py:1335
 msgid "Build directory already clean\n"
 msgstr ""
 
-#: ../ProjectController.py:1859
+#: ../ProjectController.py:1816
 msgid "Build project into build folder"
 msgstr ""
 
-#: ../ProjectController.py:1106
+#: ../ProjectController.py:1108
 msgid "C Build crashed !\n"
 msgstr ""
 
-#: ../ProjectController.py:1103
+#: ../ProjectController.py:1105
 msgid "C Build failed.\n"
 msgstr ""
 
-#: ../c_ext/CFileEditor.py:64
+#: ../c_ext/CFileEditor.py:66
 msgid "C code"
 msgstr ""
 
-#: ../ProjectController.py:1181
+#: ../ProjectController.py:1186
 msgid "C code generated successfully.\n"
 msgstr ""
 
-#: ../targets/toolchain_makefile.py:124
+#: ../targets/toolchain_makefile.py:126
 msgid "C compilation failed.\n"
 msgstr ""
 
-#: ../targets/toolchain_gcc.py:195
+#: ../targets/toolchain_gcc.py:199
 #, python-format
 msgid "C compilation of %s failed.\n"
 msgstr ""
 
-#: ../features.py:32
+#: ../features.py:33
 msgid "C extension"
 msgstr ""
 
@@ -757,7 +753,7 @@
 msgid "CANOpen network"
 msgstr ""
 
-#: ../canfestival/SlaveEditor.py:47
+#: ../canfestival/SlaveEditor.py:48
 msgid "CANOpen slave"
 msgstr ""
 
@@ -765,8 +761,8 @@
 msgid "CANopen support"
 msgstr ""
 
-#: ../plcopen/plcopen.py:1665 ../plcopen/plcopen.py:1679
-#: ../plcopen/plcopen.py:1704 ../plcopen/plcopen.py:1720
+#: ../plcopen/plcopen.py:1839 ../plcopen/plcopen.py:1853
+#: ../plcopen/plcopen.py:1878 ../plcopen/plcopen.py:1894
 msgid "Can only generate execution order on FBD networks!"
 msgstr ""
 
@@ -774,7 +770,7 @@
 msgid "Can only give a location to local or global variables"
 msgstr ""
 
-#: ../PLCOpenEditor.py:365
+#: ../PLCOpenEditor.py:318
 #, python-format
 msgid "Can't generate program to file %s!"
 msgstr ""
@@ -783,7 +779,7 @@
 msgid "Can't give a location to a function block instance"
 msgstr ""
 
-#: ../PLCOpenEditor.py:410
+#: ../PLCOpenEditor.py:363
 #, python-format
 msgid "Can't save project to file %s!"
 msgstr ""
@@ -797,29 +793,33 @@
 msgid "Cannot create child {a1} of type {a2} "
 msgstr ""
 
-#: ../ConfigTreeNode.py:457
+#: ../ConfigTreeNode.py:454
 #, python-format
 msgid "Cannot find lower free IEC channel than %d\n"
 msgstr ""
 
-#: ../connectors/PYRO/__init__.py:134
+#: ../connectors/PYRO/__init__.py:139
 msgid "Cannot get PLC status - connection failed.\n"
 msgstr ""
 
-#: ../ProjectController.py:965
+#: ../ProjectController.py:967
 msgid "Cannot open/parse VARIABLES.csv!\n"
 msgstr ""
 
-#: ../canfestival/config_utils.py:394
+#: ../canfestival/config_utils.py:400
 #, python-brace-format
 msgid "Cannot set bit offset for non bool '{a1}' variable (ID:{a2},Idx:{a3},sIdx:{a4}))"
 msgstr ""
 
-#: ../dialogs/SearchInProjectDialog.py:62 ../dialogs/FindInPouDialog.py:87
+#: ../ProjectController.py:1761
+msgid "Cannot transfer while PLC is running. Stop it now?"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:63 ../dialogs/FindInPouDialog.py:89
 msgid "Case sensitive"
 msgstr ""
 
-#: ../editors/Viewer.py:585
+#: ../editors/Viewer.py:581
 msgid "Center"
 msgstr ""
 
@@ -831,7 +831,7 @@
 msgid "Change Name"
 msgstr ""
 
-#: ../IDEFrame.py:1983
+#: ../IDEFrame.py:1977
 msgid "Change POU Type To"
 msgstr ""
 
@@ -847,24 +847,24 @@
 msgid "Character string"
 msgstr ""
 
-#: ../svgui/svgui.py:135
+#: ../svgui/svgui.py:136
 msgid "Choose a SVG file"
 msgstr ""
 
-#: ../ProjectController.py:559
+#: ../ProjectController.py:561
 msgid "Choose a directory to save project"
 msgstr ""
 
-#: ../canfestival/canfestival.py:179 ../PLCOpenEditor.py:323
-#: ../PLCOpenEditor.py:355 ../PLCOpenEditor.py:404
+#: ../canfestival/canfestival.py:171 ../PLCOpenEditor.py:276
+#: ../PLCOpenEditor.py:308 ../PLCOpenEditor.py:357
 msgid "Choose a file"
 msgstr ""
 
-#: ../BeremizIDE.py:905
+#: ../BeremizIDE.py:900
 msgid "Choose a project"
 msgstr ""
 
-#: ../dialogs/BrowseValuesLibraryDialog.py:41
+#: ../dialogs/BrowseValuesLibraryDialog.py:43
 #, python-format
 msgid "Choose a value for %s:"
 msgstr ""
@@ -873,19 +873,19 @@
 msgid "Choose a working directory "
 msgstr ""
 
-#: ../BeremizIDE.py:869
+#: ../BeremizIDE.py:864
 msgid "Choose an empty directory for new project"
 msgstr ""
 
-#: ../ProjectController.py:466
+#: ../ProjectController.py:468
 msgid "Chosen folder doesn't contain a program. It's not a valid project!"
 msgstr ""
 
-#: ../ProjectController.py:433
+#: ../ProjectController.py:435
 msgid "Chosen folder isn't empty. You can't use it for a new project!"
 msgstr ""
 
-#: ../controls/VariablePanel.py:59
+#: ../controls/VariablePanel.py:60
 msgid "Class"
 msgstr ""
 
@@ -893,73 +893,73 @@
 msgid "Class Filter:"
 msgstr ""
 
-#: ../dialogs/FBDVariableDialog.py:73
+#: ../dialogs/FBDVariableDialog.py:74
 msgid "Class:"
 msgstr ""
 
-#: ../ProjectController.py:1864
+#: ../ProjectController.py:1821
 msgid "Clean"
 msgstr ""
 
-#: ../controls/LogViewer.py:326
+#: ../controls/LogViewer.py:327
 msgid "Clean log messages"
 msgstr ""
 
-#: ../ProjectController.py:1865
+#: ../ProjectController.py:1822
 msgid "Clean project build folder"
 msgstr ""
 
-#: ../ProjectController.py:1327
+#: ../ProjectController.py:1332
 msgid "Cleaning the build directory\n"
 msgstr ""
 
-#: ../IDEFrame.py:449
+#: ../IDEFrame.py:437
 msgid "Clear Errors"
 msgstr ""
 
-#: ../editors/Viewer.py:683
+#: ../editors/Viewer.py:680
 msgid "Clear Execution Order"
 msgstr ""
 
-#: ../dialogs/SearchInProjectDialog.py:106 ../dialogs/FindInPouDialog.py:110
+#: ../dialogs/SearchInProjectDialog.py:107 ../dialogs/FindInPouDialog.py:112
 msgid "Close"
 msgstr ""
 
-#: ../BeremizIDE.py:631 ../PLCOpenEditor.py:230
+#: ../BeremizIDE.py:627 ../PLCOpenEditor.py:183
 msgid "Close Application"
 msgstr ""
 
-#: ../BeremizIDE.py:258 ../BeremizIDE.py:570 ../PLCOpenEditor.py:128
-#: ../IDEFrame.py:1046
+#: ../BeremizIDE.py:253 ../BeremizIDE.py:566 ../PLCOpenEditor.py:81
+#: ../IDEFrame.py:1040
 msgid "Close Project"
 msgstr ""
 
-#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:126
+#: ../BeremizIDE.py:251 ../PLCOpenEditor.py:79
 msgid "Close Tab"
 msgstr ""
 
-#: ../editors/Viewer.py:641 ../editors/Viewer.py:2458
+#: ../editors/Viewer.py:638 ../editors/Viewer.py:2448
 msgid "Coil"
 msgstr ""
 
-#: ../editors/Viewer.py:662 ../editors/LDViewer.py:515
+#: ../editors/Viewer.py:659 ../editors/LDViewer.py:517
 msgid "Comment"
 msgstr ""
 
-#: ../BeremizIDE.py:308 ../BeremizIDE.py:312 ../PLCOpenEditor.py:181
-#: ../PLCOpenEditor.py:185
+#: ../BeremizIDE.py:303 ../BeremizIDE.py:307 ../PLCOpenEditor.py:134
+#: ../PLCOpenEditor.py:138
 msgid "Community support"
 msgstr ""
 
-#: ../dialogs/ProjectDialog.py:63
+#: ../dialogs/ProjectDialog.py:65
 msgid "Company Name"
 msgstr ""
 
-#: ../controls/ProjectPropertiesPanel.py:98
+#: ../controls/ProjectPropertiesPanel.py:106
 msgid "Company Name (required):"
 msgstr ""
 
-#: ../controls/ProjectPropertiesPanel.py:99
+#: ../controls/ProjectPropertiesPanel.py:107
 msgid "Company URL (optional):"
 msgstr ""
 
@@ -967,7 +967,7 @@
 msgid "Comparison"
 msgstr ""
 
-#: ../ProjectController.py:754
+#: ../ProjectController.py:756
 msgid "Compiling IEC Program into C code...\n"
 msgstr ""
 
@@ -975,93 +975,93 @@
 msgid "Concatenation"
 msgstr ""
 
-#: ../editors/ConfTreeNodeEditor.py:240
+#: ../editors/ConfTreeNodeEditor.py:241
 msgid "Config"
 msgstr ""
 
-#: ../editors/ProjectNodeEditor.py:37
+#: ../editors/ProjectNodeEditor.py:39
 msgid "Config variables"
 msgstr ""
 
-#: ../dialogs/SearchInProjectDialog.py:42
+#: ../dialogs/SearchInProjectDialog.py:43
 msgid "Configuration"
 msgstr ""
 
-#: ../PLCControler.py:106
+#: ../plcopen/types_enums.py:77
 msgid "Configurations"
 msgstr ""
 
-#: ../editors/Viewer.py:348 ../editors/Viewer.py:378 ../editors/Viewer.py:400
-#: ../editors/TextViewer.py:294 ../editors/TextViewer.py:348
-#: ../editors/TextViewer.py:371 ../controls/VariablePanel.py:354
+#: ../editors/Viewer.py:351 ../editors/Viewer.py:381 ../editors/Viewer.py:403
+#: ../editors/TextViewer.py:289 ../editors/TextViewer.py:343
+#: ../editors/TextViewer.py:366 ../controls/VariablePanel.py:354
 msgid "Confirm or change variable name"
 msgstr ""
 
-#: ../ProjectController.py:1885
+#: ../ProjectController.py:1842
 msgid "Connect"
 msgstr ""
 
-#: ../ProjectController.py:1886
+#: ../ProjectController.py:1843
 msgid "Connect to the target PLC"
 msgstr ""
 
-#: ../ProjectController.py:1386
+#: ../ProjectController.py:1391
 #, python-format
 msgid "Connected to URI: %s"
 msgstr ""
 
-#: ../dialogs/SFCTransitionDialog.py:77 ../editors/Viewer.py:626
-#: ../editors/Viewer.py:2451
+#: ../dialogs/SFCTransitionDialog.py:78 ../editors/Viewer.py:623
+#: ../editors/Viewer.py:2441
 msgid "Connection"
 msgstr ""
 
-#: ../dialogs/ConnectionDialog.py:53
+#: ../dialogs/ConnectionDialog.py:55
 msgid "Connection Properties"
 msgstr ""
 
-#: ../ProjectController.py:1737
+#: ../ProjectController.py:1691
 msgid "Connection canceled!\n"
 msgstr ""
 
-#: ../ProjectController.py:1760
+#: ../ProjectController.py:1714
 #, python-format
 msgid "Connection failed to %s!\n"
 msgstr ""
 
-#: ../connectors/PYRO/__init__.py:118 ../connectors/WAMP/__init__.py:119
+#: ../connectors/PYRO/__init__.py:123 ../connectors/WAMP/__init__.py:120
 msgid "Connection lost!\n"
 msgstr ""
 
-#: ../connectors/PYRO/__init__.py:105
+#: ../connectors/PYRO/__init__.py:110
 #, python-format
 msgid "Connection to '%s' failed.\n"
 msgstr ""
 
-#: ../dialogs/ConnectionDialog.py:65 ../editors/Viewer.py:1684
+#: ../dialogs/ConnectionDialog.py:67 ../editors/Viewer.py:1676
 msgid "Connector"
 msgstr ""
 
-#: ../dialogs/SFCStepDialog.py:66
+#: ../dialogs/SFCStepDialog.py:68
 msgid "Connectors:"
 msgstr ""
 
-#: ../BeremizIDE.py:383
+#: ../BeremizIDE.py:378
 msgid "Console"
 msgstr ""
 
-#: ../controls/VariablePanel.py:74
+#: ../controls/VariablePanel.py:75
 msgid "Constant"
 msgstr ""
 
-#: ../editors/Viewer.py:637 ../editors/Viewer.py:2454
+#: ../editors/Viewer.py:634 ../editors/Viewer.py:2444
 msgid "Contact"
 msgstr ""
 
-#: ../controls/ProjectPropertiesPanel.py:203
+#: ../controls/ProjectPropertiesPanel.py:217
 msgid "Content Description (optional):"
 msgstr ""
 
-#: ../dialogs/ConnectionDialog.py:66 ../editors/Viewer.py:1685
+#: ../dialogs/ConnectionDialog.py:68 ../editors/Viewer.py:1677
 msgid "Continuation"
 msgstr ""
 
@@ -1081,20 +1081,20 @@
 msgid "Conversion to time-of-day"
 msgstr ""
 
-#: ../editors/Viewer.py:698 ../controls/LogViewer.py:712 ../IDEFrame.py:384
-#: ../IDEFrame.py:439
+#: ../editors/Viewer.py:695 ../controls/LogViewer.py:713 ../IDEFrame.py:372
+#: ../IDEFrame.py:427
 msgid "Copy"
 msgstr ""
 
-#: ../IDEFrame.py:1970
+#: ../IDEFrame.py:1964
 msgid "Copy POU"
 msgstr ""
 
-#: ../editors/FileManagementPanel.py:66
+#: ../editors/FileManagementPanel.py:68
 msgid "Copy file from left folder to right"
 msgstr ""
 
-#: ../editors/FileManagementPanel.py:65
+#: ../editors/FileManagementPanel.py:67
 msgid "Copy file from right folder to left"
 msgstr ""
 
@@ -1102,121 +1102,117 @@
 msgid "Cosine"
 msgstr ""
 
-#: ../ConfigTreeNode.py:661
+#: ../ConfigTreeNode.py:660
 #, python-brace-format
 msgid ""
 "Could not add child \"{a1}\", type {a2} :\n"
 "{a3}\n"
 msgstr ""
 
-#: ../py_ext/PythonFileCTNMixin.py:80
+#: ../py_ext/PythonFileCTNMixin.py:81
 #, python-format
 msgid "Couldn't import old %s file."
 msgstr ""
 
-#: ../ConfigTreeNode.py:631
+#: ../ConfigTreeNode.py:630
 #, python-brace-format
 msgid ""
 "Couldn't load confnode base parameters {a1} :\n"
 " {a2}"
 msgstr ""
 
-#: ../ConfigTreeNode.py:648 ../CodeFileTreeNode.py:127
+#: ../ConfigTreeNode.py:647 ../CodeFileTreeNode.py:127
 #, python-brace-format
 msgid ""
 "Couldn't load confnode parameters {a1} :\n"
 " {a2}"
 msgstr ""
 
-#: ../PLCControler.py:1004
+#: ../PLCControler.py:552
 msgid "Couldn't paste non-POU object."
 msgstr ""
 
-#: ../ProjectController.py:1682
+#: ../ProjectController.py:1636
 msgid "Couldn't start PLC !\n"
 msgstr ""
 
-#: ../ProjectController.py:1690
+#: ../ProjectController.py:1644
 msgid "Couldn't stop PLC !\n"
 msgstr ""
 
-#: ../ProjectController.py:1654
-msgid "Couldn't stop debugger.\n"
-msgstr ""
-
-#: ../svgui/svgui.py:56
+#: ../svgui/svgui.py:57
 msgid "Create HMI"
 msgstr ""
 
-#: ../dialogs/PouDialog.py:52
+#: ../dialogs/PouDialog.py:54
 msgid "Create a new POU"
 msgstr ""
 
-#: ../dialogs/PouActionDialog.py:43
+#: ../dialogs/PouActionDialog.py:45
 msgid "Create a new action"
 msgstr ""
 
-#: ../IDEFrame.py:165
+#: ../IDEFrame.py:166
 msgid "Create a new action block"
 msgstr ""
 
-#: ../IDEFrame.py:114 ../IDEFrame.py:144 ../IDEFrame.py:177
+#: ../IDEFrame.py:115 ../IDEFrame.py:145 ../IDEFrame.py:178
 msgid "Create a new block"
 msgstr ""
 
-#: ../IDEFrame.py:138
+#: ../IDEFrame.py:139
 msgid "Create a new branch"
 msgstr ""
 
-#: ../IDEFrame.py:132
+#: ../IDEFrame.py:133
 msgid "Create a new coil"
 msgstr ""
 
-#: ../IDEFrame.py:108 ../IDEFrame.py:123 ../IDEFrame.py:153
+#: ../IDEFrame.py:109 ../IDEFrame.py:124 ../IDEFrame.py:154
 msgid "Create a new comment"
 msgstr ""
 
-#: ../IDEFrame.py:117 ../IDEFrame.py:147 ../IDEFrame.py:180
+#: ../IDEFrame.py:118 ../IDEFrame.py:148 ../IDEFrame.py:181
 msgid "Create a new connection"
 msgstr ""
 
-#: ../IDEFrame.py:135 ../IDEFrame.py:186
+#: ../IDEFrame.py:136 ../IDEFrame.py:187
 msgid "Create a new contact"
 msgstr ""
 
-#: ../IDEFrame.py:168
+#: ../IDEFrame.py:169
 msgid "Create a new divergence"
 msgstr ""
 
-#: ../dialogs/SFCDivergenceDialog.py:53
+#: ../dialogs/SFCDivergenceDialog.py:54
 msgid "Create a new divergence or convergence"
 msgstr ""
 
-#: ../IDEFrame.py:156
+#: ../IDEFrame.py:157
 msgid "Create a new initial step"
 msgstr ""
 
-#: ../IDEFrame.py:171
+#: ../IDEFrame.py:172
 msgid "Create a new jump"
 msgstr ""
 
-#: ../IDEFrame.py:126 ../IDEFrame.py:183
+#: ../IDEFrame.py:127 ../IDEFrame.py:184
 msgid "Create a new power rail"
 msgstr ""
 
-#: ../IDEFrame.py:129
+#: ../IDEFrame.py:130
 msgid "Create a new rung"
 msgstr ""
 
-#: ../IDEFrame.py:159
+#: ../IDEFrame.py:160
 msgid "Create a new step"
 msgstr ""
 
-#: ../dialogs/PouTransitionDialog.py:47 ../IDEFrame.py:162
+#: ../dialogs/PouTransitionDialog.py:49 ../IDEFrame.py:163
 msgid "Create a new transition"
 msgstr ""
 
-#: ../IDEFrame.py:111 ../IDEFrame.py:141 ../IDEFrame.py:174
+#: ../IDEFrame.py:112 ../IDEFrame.py:142 ../IDEFrame.py:175
 msgid "Create a new variable"
 msgstr ""
 
@@ -1224,15 +1220,15 @@
 msgid "Credits"
 msgstr ""
 
-#: ../Beremiz_service.py:442
+#: ../Beremiz_service.py:424
 msgid "Current working directory :"
 msgstr ""
 
-#: ../editors/Viewer.py:697 ../IDEFrame.py:382 ../IDEFrame.py:438
+#: ../editors/Viewer.py:694 ../IDEFrame.py:370 ../IDEFrame.py:426
 msgid "Cut"
 msgstr ""
 
-#: ../editors/ResourceEditor.py:79
+#: ../editors/ResourceEditor.py:81
 msgid "Cyclic"
 msgstr ""
 
@@ -1244,19 +1240,19 @@
 msgid "DEPRECATED"
 msgstr ""
 
-#: ../canfestival/SlaveEditor.py:79 ../canfestival/NetworkEditor.py:104
+#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:104
 msgid "DS-301 Profile"
 msgstr ""
 
-#: ../canfestival/SlaveEditor.py:80 ../canfestival/NetworkEditor.py:105
+#: ../canfestival/SlaveEditor.py:81 ../canfestival/NetworkEditor.py:105
 msgid "DS-302 Profile"
 msgstr ""
 
-#: ../dialogs/SearchInProjectDialog.py:38
+#: ../dialogs/SearchInProjectDialog.py:39
 msgid "Data Type"
 msgstr ""
 
-#: ../PLCControler.py:105
+#: ../plcopen/types_enums.py:76
 msgid "Data Types"
 msgstr ""
 
@@ -1277,66 +1273,58 @@
 msgid "Date subtraction"
 msgstr ""
 
-#: ../dialogs/DurationEditorDialog.py:44
+#: ../dialogs/DurationEditorDialog.py:46
 msgid "Days:"
 msgstr ""
 
-#: ../ProjectController.py:1782
+#: ../ProjectController.py:1729
 msgid "Debug does not match PLC - stop/transfert/start to re-enable\n"
 msgstr ""
 
-#: ../controls/PouInstanceVariablesPanel.py:150
+#: ../controls/PouInstanceVariablesPanel.py:144
 msgid "Debug instance"
 msgstr ""
 
-#: ../editors/Viewer.py:487
+#: ../editors/Viewer.py:490
 #, python-format
 msgid "Debug: %s"
 msgstr ""
 
-#: ../ProjectController.py:1444
+#: ../ProjectController.py:1471
 #, python-format
 msgid "Debug: Unknown variable '%s'\n"
 msgstr ""
 
-#: ../ProjectController.py:1442
+#: ../ProjectController.py:1469
 #, python-format
 msgid "Debug: Unsupported type to debug '%s'\n"
 msgstr ""
 
-#: ../IDEFrame.py:675
+#: ../IDEFrame.py:660
 msgid "Debugger"
 msgstr ""
 
-#: ../ProjectController.py:1623
-msgid "Debugger disabled\n"
-msgstr ""
-
-#: ../ProjectController.py:1779
+#: ../ProjectController.py:1726
 msgid "Debugger ready\n"
 msgstr ""
 
-#: ../ProjectController.py:1656
-msgid "Debugger stopped.\n"
-msgstr ""
-
-#: ../BeremizIDE.py:1004 ../editors/Viewer.py:673 ../IDEFrame.py:1999
+#: ../BeremizIDE.py:1004 ../editors/Viewer.py:670 ../IDEFrame.py:1993
 msgid "Delete"
 msgstr ""
 
-#: ../editors/Viewer.py:613
+#: ../editors/Viewer.py:610
 msgid "Delete Divergence Branch"
 msgstr ""
 
-#: ../editors/FileManagementPanel.py:155
+#: ../editors/FileManagementPanel.py:157
 msgid "Delete File"
 msgstr ""
 
-#: ../editors/Viewer.py:600
+#: ../editors/Viewer.py:597
 msgid "Delete Wire Segment"
 msgstr ""
 
-#: ../controls/CustomEditableListBox.py:42
+#: ../controls/CustomEditableListBox.py:44
 msgid "Delete item"
 msgstr ""
 
@@ -1348,7 +1336,7 @@
 msgid "Derivation Type:"
 msgstr ""
 
-#: ../editors/CodeFileEditor.py:750
+#: ../editors/CodeFileEditor.py:735
 msgid "Description"
 msgstr ""
 
@@ -1356,11 +1344,11 @@
 msgid "Description:"
 msgstr ""
 
-#: ../dialogs/ArrayTypeDialog.py:61 ../editors/DataTypeEditor.py:333
+#: ../dialogs/ArrayTypeDialog.py:63 ../editors/DataTypeEditor.py:332
 msgid "Dimensions:"
 msgstr ""
 
-#: ../dialogs/FindInPouDialog.py:67
+#: ../dialogs/FindInPouDialog.py:69
 msgid "Direction"
 msgstr ""
 
@@ -1368,23 +1356,23 @@
 msgid "Direction:"
 msgstr ""
 
-#: ../editors/DataTypeEditor.py:58
+#: ../editors/DataTypeEditor.py:60
 msgid "Directly"
 msgstr ""
 
-#: ../ProjectController.py:1898
+#: ../ProjectController.py:1855
 msgid "Disconnect"
 msgstr ""
 
-#: ../ProjectController.py:1899
+#: ../ProjectController.py:1856
 msgid "Disconnect from PLC"
 msgstr ""
 
-#: ../ProjectController.py:1396
+#: ../ProjectController.py:1401
 msgid "Disconnected"
 msgstr ""
 
-#: ../editors/Viewer.py:657 ../editors/Viewer.py:2446
+#: ../editors/Viewer.py:654 ../editors/Viewer.py:2436
 msgid "Divergence"
 msgstr ""
 
@@ -1392,111 +1380,107 @@
 msgid "Division"
 msgstr ""
 
-#: ../editors/FileManagementPanel.py:154
+#: ../editors/FileManagementPanel.py:156
 #, python-format
 msgid "Do you really want to delete the file '%s'?"
 msgstr ""
 
-#: ../controls/VariablePanel.py:64
+#: ../controls/VariablePanel.py:65
 msgid "Documentation"
 msgstr ""
 
-#: ../PLCOpenEditor.py:359
+#: ../PLCOpenEditor.py:312
 msgid "Done"
 msgstr ""
 
-#: ../dialogs/ActionBlockDialog.py:40
+#: ../dialogs/ActionBlockDialog.py:42
 msgid "Duration"
 msgstr ""
 
-#: ../canfestival/canfestival.py:182
+#: ../canfestival/canfestival.py:174
 msgid "EDS files (*.eds)|*.eds|All files|*.*"
 msgstr ""
 
-#: ../editors/Viewer.py:671
+#: ../editors/Viewer.py:668
 msgid "Edit Block"
 msgstr ""
 
+#: ../dialogs/LDElementDialog.py:58
+msgid "Edit Coil Values"
+msgstr ""
+
 #: ../dialogs/LDElementDialog.py:56
-msgid "Edit Coil Values"
-msgstr ""
-
-#: ../dialogs/LDElementDialog.py:54
 msgid "Edit Contact Values"
 msgstr ""
 
-#: ../dialogs/DurationEditorDialog.py:60
+#: ../dialogs/DurationEditorDialog.py:62
 msgid "Edit Duration"
 msgstr ""
 
-#: ../dialogs/SFCStepDialog.py:51
+#: ../dialogs/SFCStepDialog.py:53
 msgid "Edit Step"
 msgstr ""
 
-#: ../wxglade_hmi/wxglade_hmi.py:42
+#: ../wxglade_hmi/wxglade_hmi.py:45
 msgid "Edit a WxWidgets GUI with WXGlade"
 msgstr ""
 
-#: ../dialogs/ActionBlockDialog.py:125
+#: ../dialogs/ActionBlockDialog.py:127
 msgid "Edit action block properties"
 msgstr ""
 
-#: ../dialogs/ArrayTypeDialog.py:45
+#: ../dialogs/ArrayTypeDialog.py:47
 msgid "Edit array type properties"
 msgstr ""
 
-#: ../editors/Viewer.py:2670 ../editors/Viewer.py:3112
+#: ../editors/Viewer.py:2660 ../editors/Viewer.py:3102
 msgid "Edit comment"
 msgstr ""
 
-#: ../editors/FileManagementPanel.py:67
+#: ../editors/FileManagementPanel.py:69
 msgid "Edit file"
 msgstr ""
 
-#: ../controls/CustomEditableListBox.py:40
+#: ../controls/CustomEditableListBox.py:42
 msgid "Edit item"
 msgstr ""
 
-#: ../editors/Viewer.py:3069
+#: ../editors/Viewer.py:3059
 msgid "Edit jump target"
 msgstr ""
 
-#: ../ProjectController.py:1916
+#: ../ProjectController.py:1873
 msgid "Edit raw IEC code added to code generated by PLCGenerator"
 msgstr ""
 
-#: ../editors/SFCViewer.py:801
+#: ../editors/SFCViewer.py:815
 msgid "Edit step name"
 msgstr ""
 
-#: ../dialogs/SFCTransitionDialog.py:52
+#: ../dialogs/SFCTransitionDialog.py:53
 msgid "Edit transition"
 msgstr ""
 
-#: ../IDEFrame.py:647
+#: ../IDEFrame.py:632
 msgid "Editor ToolBar"
 msgstr ""
 
-#: ../ProjectController.py:1289
+#: ../ProjectController.py:1294
 msgid "Editor selection"
 msgstr ""
 
-#: ../editors/DataTypeEditor.py:361
+#: ../editors/DataTypeEditor.py:360
 msgid "Elements :"
 msgstr ""
 
-#: ../ProjectController.py:1394
+#: ../ProjectController.py:1399
 msgid "Empty"
 msgstr ""
 
-#: ../dialogs/ArrayTypeDialog.py:98
+#: ../dialogs/ArrayTypeDialog.py:100
 msgid "Empty dimension isn't allowed."
 msgstr ""
 
-#: ../IDEFrame.py:379
-msgid "Enable Undo/Redo"
-msgstr ""
-
 #: ../Beremiz_service.py:341
 msgid "Enter a name "
 msgstr ""
@@ -1509,7 +1493,7 @@
 msgid "Enter the IP of the interface to bind"
 msgstr ""
 
-#: ../editors/DataTypeEditor.py:58
+#: ../editors/DataTypeEditor.py:60
 msgid "Enumerated"
 msgstr ""
 
@@ -1517,43 +1501,44 @@
 msgid "Equal to"
 msgstr ""
 
-#: ../dialogs/ForceVariableDialog.py:211
-#: ../dialogs/SearchInProjectDialog.py:171 ../dialogs/SFCStepNameDialog.py:61
-#: ../dialogs/DurationEditorDialog.py:122
-#: ../dialogs/DurationEditorDialog.py:168 ../dialogs/PouTransitionDialog.py:112
-#: ../dialogs/BlockPreviewDialog.py:237 ../dialogs/ProjectDialog.py:78
-#: ../dialogs/ArrayTypeDialog.py:112 ../dialogs/PouNameDialog.py:55
+#: ../dialogs/ForceVariableDialog.py:213
+#: ../dialogs/SearchInProjectDialog.py:172 ../dialogs/SFCStepNameDialog.py:64
+#: ../dialogs/DurationEditorDialog.py:124
+#: ../dialogs/DurationEditorDialog.py:170 ../dialogs/PouTransitionDialog.py:114
+#: ../dialogs/BlockPreviewDialog.py:237 ../dialogs/ProjectDialog.py:80
+#: ../dialogs/ArrayTypeDialog.py:114 ../dialogs/PouNameDialog.py:58
 #: ../dialogs/BrowseLocationsDialog.py:229
-#: ../dialogs/BrowseValuesLibraryDialog.py:83 ../dialogs/PouActionDialog.py:110
-#: ../dialogs/PouDialog.py:141 ../PLCOpenEditor.py:366 ../PLCOpenEditor.py:371
-#: ../editors/ResourceEditor.py:451 ../editors/Viewer.py:464
-#: ../editors/LDViewer.py:675 ../editors/LDViewer.py:891
-#: ../editors/LDViewer.py:895 ../editors/DataTypeEditor.py:565
-#: ../editors/DataTypeEditor.py:570 ../editors/DataTypeEditor.py:589
-#: ../editors/DataTypeEditor.py:758 ../editors/DataTypeEditor.py:765
-#: ../editors/TextViewer.py:395 ../editors/CodeFileEditor.py:775
-#: ../ProjectController.py:389 ../ProjectController.py:529
-#: ../ProjectController.py:536 ../controls/FolderTree.py:220
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:170
-#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:137
-#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:232
-#: ../controls/VariablePanel.py:431 ../controls/VariablePanel.py:794
-#: ../util/ExceptionHandler.py:68 ../IDEFrame.py:1042 ../IDEFrame.py:1654
-#: ../IDEFrame.py:1695 ../IDEFrame.py:1700 ../IDEFrame.py:1714
-#: ../IDEFrame.py:1719 ../Beremiz_service.py:221
+#: ../dialogs/BrowseValuesLibraryDialog.py:87 ../dialogs/PouActionDialog.py:112
+#: ../dialogs/PouDialog.py:143 ../PLCOpenEditor.py:319 ../PLCOpenEditor.py:324
+#: ../editors/ResourceEditor.py:470 ../editors/Viewer.py:467
+#: ../editors/LDViewer.py:677 ../editors/LDViewer.py:893
+#: ../editors/LDViewer.py:897 ../editors/DataTypeEditor.py:566
+#: ../editors/DataTypeEditor.py:571 ../editors/DataTypeEditor.py:590
+#: ../editors/DataTypeEditor.py:759 ../editors/DataTypeEditor.py:766
+#: ../editors/TextViewer.py:390 ../editors/CodeFileEditor.py:760
+#: ../ProjectController.py:391 ../ProjectController.py:531
+#: ../ProjectController.py:538 ../controls/FolderTree.py:222
+#: ../controls/ProjectPropertiesPanel.py:306
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:173
+#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:138
+#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:227
+#: ../controls/VariablePanel.py:431 ../controls/VariablePanel.py:773
+#: ../util/ExceptionHandler.py:70 ../IDEFrame.py:1036 ../IDEFrame.py:1650
+#: ../IDEFrame.py:1691 ../IDEFrame.py:1696 ../IDEFrame.py:1710
+#: ../IDEFrame.py:1715 ../Beremiz_service.py:221
 msgid "Error"
 msgstr ""
 
-#: ../ProjectController.py:809
+#: ../ProjectController.py:811
 msgid "Error : At least one configuration and one resource must be declared in PLC !\n"
 msgstr ""
 
-#: ../ProjectController.py:801
+#: ../ProjectController.py:803
 #, python-format
 msgid "Error : IEC to C compiler returned %d\n"
 msgstr ""
 
-#: ../ProjectController.py:729
+#: ../ProjectController.py:731
 #, python-format
 msgid ""
 "Error in ST/IL/SFC code generator :\n"
@@ -1565,32 +1550,37 @@
 msgid "Error while saving \"%s\"\n"
 msgstr ""
 
-#: ../canfestival/canfestival.py:187
+#: ../canfestival/canfestival.py:179
 msgid "Error: Export slave failed\n"
 msgstr ""
 
-#: ../canfestival/canfestival.py:397
+#: ../modbus/modbus.py:601
+#, python-brace-format
+msgid "Error: Modbus/IP Servers %{a1}.x and %{a2}.x use the same port number {a3}.\n"
+msgstr ""
+
+#: ../canfestival/canfestival.py:388
 msgid "Error: No Master generated\n"
 msgstr ""
 
-#: ../canfestival/canfestival.py:392
+#: ../canfestival/canfestival.py:383
 msgid "Error: No PLC built\n"
 msgstr ""
 
-#: ../ProjectController.py:1754
+#: ../ProjectController.py:1708
 #, python-format
 msgid "Exception while connecting %s!\n"
 msgstr ""
 
-#: ../dialogs/FBDBlockDialog.py:121
+#: ../dialogs/FBDBlockDialog.py:123
 msgid "Execution Control:"
 msgstr ""
 
-#: ../dialogs/FBDVariableDialog.py:83 ../dialogs/FBDBlockDialog.py:109
+#: ../dialogs/FBDVariableDialog.py:84 ../dialogs/FBDBlockDialog.py:111
 msgid "Execution Order:"
 msgstr ""
 
-#: ../features.py:35
+#: ../features.py:36
 msgid "Experimental web based HMI"
 msgstr ""
 
@@ -1602,77 +1592,77 @@
 msgid "Exponentiation"
 msgstr ""
 
-#: ../canfestival/canfestival.py:194
+#: ../canfestival/canfestival.py:186
 msgid "Export CanOpen slave to EDS file"
 msgstr ""
 
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:243
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:246
 msgid "Export graph values to clipboard"
 msgstr ""
 
-#: ../canfestival/canfestival.py:193
+#: ../canfestival/canfestival.py:185
 msgid "Export slave"
 msgstr ""
 
-#: ../dialogs/FBDVariableDialog.py:93
+#: ../dialogs/FBDVariableDialog.py:94
 msgid "Expression:"
 msgstr ""
 
-#: ../controls/VariablePanel.py:89
+#: ../controls/VariablePanel.py:90
 msgid "External"
 msgstr ""
 
-#: ../ProjectController.py:824
+#: ../ProjectController.py:826
 msgid "Extracting Located Variables...\n"
 msgstr ""
 
-#: ../dialogs/PouTransitionDialog.py:38 ../dialogs/PouActionDialog.py:34
-#: ../dialogs/PouDialog.py:42 ../controls/ProjectPropertiesPanel.py:148
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
 msgid "FBD"
 msgstr ""
 
-#: ../ProjectController.py:1816
+#: ../ProjectController.py:1773
 msgid "Failed : Must build before transfer.\n"
 msgstr ""
 
-#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:560
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:556
 msgid "Falling Edge"
 msgstr ""
 
-#: ../ProjectController.py:1096
+#: ../ProjectController.py:1098
 msgid "Fatal : cannot get builder.\n"
 msgstr ""
 
-#: ../Beremiz.py:156
+#: ../Beremiz.py:160
 #, python-format
 msgid "Fetching %s"
 msgstr ""
 
-#: ../dialogs/DurationEditorDialog.py:165
+#: ../dialogs/DurationEditorDialog.py:167
 #, python-format
 msgid "Field %s hasn't a valid value!"
 msgstr ""
 
-#: ../dialogs/DurationEditorDialog.py:167
+#: ../dialogs/DurationEditorDialog.py:169
 #, python-format
 msgid "Fields %s haven't a valid value!"
 msgstr ""
 
-#: ../controls/FolderTree.py:219
+#: ../controls/FolderTree.py:221
 #, python-format
 msgid "File '%s' already exists!"
 msgstr ""
 
-#: ../dialogs/SearchInProjectDialog.py:101 ../dialogs/FindInPouDialog.py:38
-#: ../dialogs/FindInPouDialog.py:105 ../IDEFrame.py:389
+#: ../dialogs/SearchInProjectDialog.py:102 ../dialogs/FindInPouDialog.py:40
+#: ../dialogs/FindInPouDialog.py:107 ../IDEFrame.py:377
 msgid "Find"
 msgstr ""
 
-#: ../IDEFrame.py:391
+#: ../IDEFrame.py:379
 msgid "Find Next"
 msgstr ""
 
-#: ../IDEFrame.py:393
+#: ../IDEFrame.py:381
 msgid "Find Previous"
 msgstr ""
 
@@ -1680,93 +1670,89 @@
 msgid "Find position"
 msgstr ""
 
-#: ../dialogs/FindInPouDialog.py:56
+#: ../dialogs/FindInPouDialog.py:58
 msgid "Find:"
 msgstr ""
 
-#: ../connectors/PYRO/__init__.py:166
-msgid "Force runtime reload\n"
-msgstr ""
-
-#: ../editors/Viewer.py:1641
+#: ../editors/Viewer.py:1633
 msgid "Force value"
 msgstr ""
 
-#: ../dialogs/ForceVariableDialog.py:174
+#: ../dialogs/ForceVariableDialog.py:176
 msgid "Forcing Variable Value"
 msgstr ""
 
-#: ../dialogs/SFCTransitionDialog.py:183 ../dialogs/PouTransitionDialog.py:102
-#: ../dialogs/ProjectDialog.py:77 ../dialogs/PouActionDialog.py:100
-#: ../dialogs/PouDialog.py:123
+#: ../dialogs/SFCTransitionDialog.py:184 ../dialogs/PouTransitionDialog.py:104
+#: ../dialogs/ProjectDialog.py:79 ../dialogs/PouActionDialog.py:102
+#: ../dialogs/PouDialog.py:125
 #, python-format
 msgid "Form isn't complete. %s must be filled!"
 msgstr ""
 
-#: ../dialogs/SFCStepDialog.py:148 ../dialogs/FBDBlockDialog.py:237
-#: ../dialogs/ConnectionDialog.py:164
+#: ../dialogs/SFCStepDialog.py:150 ../dialogs/FBDBlockDialog.py:239
+#: ../dialogs/ConnectionDialog.py:166
 msgid "Form isn't complete. Name must be filled!"
 msgstr ""
 
-#: ../dialogs/FBDBlockDialog.py:233
+#: ../dialogs/FBDBlockDialog.py:235
 msgid "Form isn't complete. Valid block type must be selected!"
 msgstr ""
 
-#: ../dialogs/FindInPouDialog.py:73
+#: ../dialogs/FindInPouDialog.py:75
 msgid "Forward"
 msgstr ""
 
-#: ../dialogs/SearchInProjectDialog.py:39 ../IDEFrame.py:1786
+#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1780
 msgid "Function"
 msgstr ""
 
-#: ../IDEFrame.py:363
+#: ../IDEFrame.py:354
 msgid "Function &Block"
 msgstr ""
 
-#: ../dialogs/SearchInProjectDialog.py:40 ../IDEFrame.py:1785
-#: ../IDEFrame.py:1978
+#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1779
+#: ../IDEFrame.py:1972
 msgid "Function Block"
 msgstr ""
 
-#: ../controls/VariablePanel.py:889
+#: ../controls/VariablePanel.py:868
 msgid "Function Block Types"
 msgstr ""
 
-#: ../PLCControler.py:104
+#: ../plcopen/types_enums.py:75
 msgid "Function Blocks"
 msgstr ""
 
-#: ../editors/Viewer.py:287
+#: ../editors/Viewer.py:290
 msgid "Function Blocks can't be used in Functions!"
 msgstr ""
 
-#: ../PLCControler.py:2409
+#: ../PLCControler.py:1907
 #, python-format
 msgid "FunctionBlock \"%s\" can't be pasted in a Function!!!"
 msgstr ""
 
-#: ../PLCControler.py:104
+#: ../plcopen/types_enums.py:75
 msgid "Functions"
 msgstr ""
 
-#: ../PLCOpenEditor.py:135
+#: ../PLCOpenEditor.py:88
 msgid "Generate Program"
 msgstr ""
 
-#: ../ProjectController.py:720
+#: ../ProjectController.py:722
 msgid "Generating SoftPLC IEC-61131 ST/IL/SFC code...\n"
 msgstr ""
 
-#: ../controls/VariablePanel.py:90
+#: ../controls/VariablePanel.py:91
 msgid "Global"
 msgstr ""
 
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:242
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:245
 msgid "Go to current value"
 msgstr ""
 
-#: ../controls/ProjectPropertiesPanel.py:179
+#: ../controls/ProjectPropertiesPanel.py:189
 msgid "Graphics"
 msgstr ""
 
@@ -1778,36 +1764,36 @@
 msgid "Greater than or equal to"
 msgstr ""
 
-#: ../controls/ProjectPropertiesPanel.py:139
+#: ../controls/ProjectPropertiesPanel.py:149
 msgid "Grid Resolution:"
 msgstr ""
 
-#: ../runtime/NevowServer.py:188
+#: ../runtime/NevowServer.py:192
 msgid "HTTP interface port :"
 msgstr ""
 
-#: ../controls/ProjectPropertiesPanel.py:125
+#: ../controls/ProjectPropertiesPanel.py:135
 msgid "Height:"
 msgstr ""
 
-#: ../editors/FileManagementPanel.py:87
+#: ../editors/FileManagementPanel.py:89
 msgid "Home Directory:"
 msgstr ""
 
-#: ../controls/ProjectPropertiesPanel.py:155
+#: ../controls/ProjectPropertiesPanel.py:165
 msgid "Horizontal:"
 msgstr ""
 
-#: ../dialogs/DurationEditorDialog.py:45
+#: ../dialogs/DurationEditorDialog.py:47
 msgid "Hours:"
 msgstr ""
 
-#: ../dialogs/PouTransitionDialog.py:38 ../dialogs/PouActionDialog.py:34
-#: ../dialogs/PouDialog.py:42
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44
 msgid "IL"
 msgstr ""
 
-#: ../dialogs/DiscoveryDialog.py:101
+#: ../dialogs/DiscoveryDialog.py:91
 msgid "IP"
 msgstr ""
 
@@ -1815,16 +1801,21 @@
 msgid "IP is not valid!"
 msgstr ""
 
-#: ../svgui/svgui.py:49 ../svgui/svgui.py:50
+#: ../svgui/svgui.py:50 ../svgui/svgui.py:51
 msgid "Import SVG"
 msgstr ""
 
-#: ../dialogs/FBDVariableDialog.py:40 ../editors/Viewer.py:1670
-#: ../controls/VariablePanel.py:88
+#: ../dialogs/FBDVariableDialog.py:41 ../editors/Viewer.py:1662
+#: ../controls/VariablePanel.py:89
 msgid "InOut"
 msgstr ""
 
-#: ../editors/Viewer.py:470
+#: ../PLCGenerator.py:1040
+#, python-brace-format
+msgid "InOut variable {a1} in block {a2} in POU {a3} must be connected."
+msgstr ""
+
+#: ../editors/Viewer.py:473
 msgid "Inactive"
 msgstr ""
 
@@ -1843,44 +1834,44 @@
 msgid "Incompatible size of data between \"{a1}\" and \"{a2}\""
 msgstr ""
 
-#: ../dialogs/ActionBlockDialog.py:40
+#: ../dialogs/ActionBlockDialog.py:42
 msgid "Indicator"
 msgstr ""
 
-#: ../editors/CodeFileEditor.py:749
+#: ../editors/CodeFileEditor.py:734
 msgid "Initial"
 msgstr ""
 
-#: ../editors/Viewer.py:653
+#: ../editors/Viewer.py:650
 msgid "Initial Step"
 msgstr ""
 
-#: ../editors/DataTypeEditor.py:53 ../controls/VariablePanel.py:62
+#: ../editors/DataTypeEditor.py:55 ../controls/VariablePanel.py:63
 msgid "Initial Value"
 msgstr ""
 
 #: ../editors/DataTypeEditor.py:193 ../editors/DataTypeEditor.py:224
-#: ../editors/DataTypeEditor.py:282 ../editors/DataTypeEditor.py:321
+#: ../editors/DataTypeEditor.py:281 ../editors/DataTypeEditor.py:320
 msgid "Initial Value:"
 msgstr ""
 
-#: ../svgui/svgui.py:55
+#: ../svgui/svgui.py:56
 msgid "Inkscape"
 msgstr ""
 
-#: ../dialogs/SFCTransitionDialog.py:76 ../dialogs/ActionBlockDialog.py:45
+#: ../dialogs/SFCTransitionDialog.py:77 ../dialogs/ActionBlockDialog.py:47
 msgid "Inline"
 msgstr ""
 
-#: ../dialogs/SFCStepDialog.py:71 ../dialogs/FBDVariableDialog.py:39
-#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:330
-#: ../editors/Viewer.py:1668 ../editors/TextViewer.py:312
-#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:88
+#: ../dialogs/SFCStepDialog.py:73 ../dialogs/FBDVariableDialog.py:40
+#: ../dialogs/BrowseLocationsDialog.py:43 ../editors/Viewer.py:333
+#: ../editors/Viewer.py:1660 ../editors/TextViewer.py:307
+#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89
 #: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380
 msgid "Input"
 msgstr ""
 
-#: ../dialogs/FBDBlockDialog.py:97
+#: ../dialogs/FBDBlockDialog.py:99
 msgid "Inputs:"
 msgstr ""
 
@@ -1888,44 +1879,50 @@
 msgid "Insertion (into)"
 msgstr ""
 
-#: ../plcopen/plcopen.py:1774
+#: ../plcopen/plcopen.py:1948
 #, python-format
 msgid "Instance with id %d doesn't exist!"
 msgstr ""
 
-#: ../editors/ResourceEditor.py:277
+#: ../editors/ResourceEditor.py:279
 msgid "Instances:"
 msgstr ""
 
-#: ../controls/VariablePanel.py:87
+#: ../controls/VariablePanel.py:88
 msgid "Interface"
 msgstr ""
 
-#: ../editors/ResourceEditor.py:79
+#: ../editors/ResourceEditor.py:81
 msgid "Interrupt"
 msgstr ""
 
-#: ../editors/ResourceEditor.py:74
+#: ../editors/ResourceEditor.py:76
 msgid "Interval"
 msgstr ""
 
-#: ../PLCControler.py:2397
+#: ../controls/ProjectPropertiesPanel.py:304
+msgid ""
+"Invalid URL!\n"
+"Please enter correct URL address."
+msgstr ""
+
+#: ../PLCControler.py:1895
 msgid "Invalid plcopen element(s)!!!"
 msgstr ""
 
-#: ../canfestival/config_utils.py:401
+#: ../canfestival/config_utils.py:407
 #, python-brace-format
 msgid "Invalid type \"{a1}\"-> {a2} != {a3}  for location \"{a4}\""
 msgstr ""
 
-#: ../canfestival/config_utils.py:683
+#: ../canfestival/config_utils.py:689
 #, python-brace-format
 msgid "Invalid type \"{a1}\"-> {a2} != {a3} for location \"{a4}\""
 msgstr ""
 
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:136
-#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:92
-#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:167
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:139
+#: ../controls/DebugVariablePanel/DebugVariableTextViewer.py:93
+#: ../controls/DebugVariablePanel/DebugVariableGraphicViewer.py:162
 #, python-format
 msgid "Invalid value \"%s\" for debug variable"
 msgstr ""
@@ -1935,51 +1932,55 @@
 msgid "Invalid value \"%s\" for variable grid element"
 msgstr ""
 
-#: ../editors/Viewer.py:272 ../editors/Viewer.py:275
+#: ../editors/Viewer.py:276 ../editors/Viewer.py:279
 #, python-format
 msgid "Invalid value \"%s\" for viewer block"
 msgstr ""
 
-#: ../dialogs/ForceVariableDialog.py:209
+#: ../dialogs/ForceVariableDialog.py:211
 #, python-brace-format
 msgid "Invalid value \"{a1}\" for \"{a2}\" variable!"
 msgstr ""
 
-#: ../dialogs/DurationEditorDialog.py:122
+#: ../dialogs/DurationEditorDialog.py:124
 msgid ""
 "Invalid value!\n"
 "You must fill a numeric value."
 msgstr ""
 
-#: ../editors/Viewer.py:658 ../editors/Viewer.py:2435
+#: ../connectors/WAMP/dialog.py:38
+msgid "Is connection secure?"
+msgstr ""
+
+#: ../editors/Viewer.py:655 ../editors/Viewer.py:2425
 msgid "Jump"
 msgstr ""
 
-#: ../dialogs/PouTransitionDialog.py:38 ../dialogs/PouActionDialog.py:34
-#: ../dialogs/PouDialog.py:42 ../controls/ProjectPropertiesPanel.py:148
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
 msgid "LD"
 msgstr ""
 
-#: ../editors/LDViewer.py:219 ../editors/LDViewer.py:238
+#: ../editors/LDViewer.py:221 ../editors/LDViewer.py:240
 #, python-format
 msgid "Ladder element with id %d is on more than one rung."
 msgstr ""
 
-#: ../dialogs/PouTransitionDialog.py:91 ../dialogs/PouActionDialog.py:89
-#: ../dialogs/PouDialog.py:111
+#: ../dialogs/PouTransitionDialog.py:93 ../dialogs/PouActionDialog.py:91
+#: ../dialogs/PouDialog.py:113
 msgid "Language"
 msgstr ""
 
-#: ../controls/ProjectPropertiesPanel.py:192
+#: ../controls/ProjectPropertiesPanel.py:206
 msgid "Language (optional):"
 msgstr ""
 
-#: ../dialogs/PouTransitionDialog.py:65 ../dialogs/PouActionDialog.py:61
-#: ../dialogs/PouDialog.py:79
+#: ../dialogs/PouTransitionDialog.py:67 ../dialogs/PouActionDialog.py:63
+#: ../dialogs/PouDialog.py:81
 msgid "Language:"
 msgstr ""
 
-#: ../ProjectController.py:1822
+#: ../ProjectController.py:1779
 msgid "Latest build already matches current target. Transfering anyway...\n"
 msgstr ""
 
@@ -1991,11 +1992,11 @@
 msgid "Launch a live Python shell"
 msgstr ""
 
-#: ../editors/Viewer.py:584
+#: ../editors/Viewer.py:580
 msgid "Left"
 msgstr ""
 
-#: ../dialogs/LDPowerRailDialog.py:62
+#: ../dialogs/LDPowerRailDialog.py:64
 msgid "Left PowerRail"
 msgstr ""
 
@@ -2011,7 +2012,7 @@
 msgid "Less than or equal to"
 msgstr ""
 
-#: ../IDEFrame.py:667
+#: ../IDEFrame.py:652
 msgid "Library"
 msgstr ""
 
@@ -2023,23 +2024,23 @@
 msgid "Limitation"
 msgstr ""
 
-#: ../targets/toolchain_gcc.py:205
+#: ../targets/toolchain_gcc.py:209
 msgid "Linking :\n"
 msgstr ""
 
-#: ../dialogs/DiscoveryDialog.py:121 ../controls/VariablePanel.py:89
+#: ../dialogs/DiscoveryDialog.py:115 ../controls/VariablePanel.py:90
 msgid "Local"
 msgstr ""
 
-#: ../canfestival/canfestival.py:368
+#: ../canfestival/canfestival.py:359
 msgid "Local entries"
 msgstr ""
 
-#: ../ProjectController.py:1731
+#: ../ProjectController.py:1685
 msgid "Local service discovery failed!\n"
 msgstr ""
 
-#: ../controls/VariablePanel.py:61
+#: ../controls/VariablePanel.py:62
 msgid "Location"
 msgstr ""
 
@@ -2051,12 +2052,12 @@
 msgid "Logarithm to base 10"
 msgstr ""
 
-#: ../connectors/PYRO/__init__.py:97
+#: ../connectors/PYRO/__init__.py:102
 #, python-format
 msgid "MDNS resolution failure for '%s'\n"
 msgstr ""
 
-#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:92
+#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:92
 msgid "Map Variable"
 msgstr ""
 
@@ -2064,6 +2065,10 @@
 msgid "Map located variables over CANopen"
 msgstr ""
 
+#: ../features.py:32
+msgid "Map located variables over Modbus"
+msgstr ""
+
 #: ../canfestival/NetworkEditor.py:113
 msgid "Master"
 msgstr ""
@@ -2077,29 +2082,29 @@
 msgid "Maximum"
 msgstr ""
 
-#: ../editors/DataTypeEditor.py:247
+#: ../editors/DataTypeEditor.py:246
 msgid "Maximum:"
 msgstr ""
 
-#: ../dialogs/BrowseLocationsDialog.py:45 ../editors/Viewer.py:330
-#: ../editors/TextViewer.py:312 ../controls/LocationCellEditor.py:101
+#: ../dialogs/BrowseLocationsDialog.py:45 ../editors/Viewer.py:333
+#: ../editors/TextViewer.py:307 ../controls/LocationCellEditor.py:103
 #: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380
 msgid "Memory"
 msgstr ""
 
-#: ../IDEFrame.py:632
+#: ../IDEFrame.py:617
 msgid "Menu ToolBar"
 msgstr ""
 
-#: ../dialogs/DurationEditorDialog.py:49
+#: ../dialogs/DurationEditorDialog.py:51
 msgid "Microseconds:"
 msgstr ""
 
-#: ../editors/Viewer.py:589
+#: ../editors/Viewer.py:585
 msgid "Middle"
 msgstr ""
 
-#: ../dialogs/DurationEditorDialog.py:48
+#: ../dialogs/DurationEditorDialog.py:50
 msgid "Milliseconds:"
 msgstr ""
 
@@ -2107,76 +2112,80 @@
 msgid "Minimum"
 msgstr ""
 
-#: ../editors/DataTypeEditor.py:234
+#: ../editors/DataTypeEditor.py:233
 msgid "Minimum:"
 msgstr ""
 
-#: ../dialogs/DurationEditorDialog.py:46
+#: ../dialogs/DurationEditorDialog.py:48
 msgid "Minutes:"
 msgstr ""
 
-#: ../controls/ProjectPropertiesPanel.py:217
+#: ../controls/ProjectPropertiesPanel.py:231
 msgid "Miscellaneous"
 msgstr ""
 
-#: ../dialogs/LDElementDialog.py:63
+#: ../features.py:32
+msgid "Modbus support"
+msgstr ""
+
+#: ../dialogs/LDElementDialog.py:65
 msgid "Modifier:"
 msgstr ""
 
-#: ../PLCGenerator.py:794 ../PLCGenerator.py:1245
+#: ../PLCGenerator.py:795 ../PLCGenerator.py:1269
 #, python-brace-format
 msgid "More than one connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU"
 msgstr ""
 
-#: ../dialogs/ActionBlockDialog.py:144
+#: ../dialogs/ActionBlockDialog.py:146
 msgid "Move action down"
 msgstr ""
 
-#: ../dialogs/ActionBlockDialog.py:143
+#: ../dialogs/ActionBlockDialog.py:145
 msgid "Move action up"
 msgstr ""
 
-#: ../controls/CustomEditableListBox.py:44
+#: ../controls/CustomEditableListBox.py:46
 msgid "Move down"
 msgstr ""
 
-#: ../editors/DataTypeEditor.py:368
+#: ../editors/DataTypeEditor.py:367
 msgid "Move element down"
 msgstr ""
 
-#: ../editors/DataTypeEditor.py:367
+#: ../editors/DataTypeEditor.py:366
 msgid "Move element up"
 msgstr ""
 
-#: ../editors/ResourceEditor.py:284
+#: ../editors/ResourceEditor.py:286
 msgid "Move instance down"
 msgstr ""
 
-#: ../editors/ResourceEditor.py:283
+#: ../editors/ResourceEditor.py:285
 msgid "Move instance up"
 msgstr ""
 
-#: ../editors/ResourceEditor.py:253
+#: ../editors/ResourceEditor.py:255
 msgid "Move task down"
 msgstr ""
 
-#: ../editors/ResourceEditor.py:252
+#: ../editors/ResourceEditor.py:254
 msgid "Move task up"
 msgstr ""
 
-#: ../IDEFrame.py:105 ../IDEFrame.py:120 ../IDEFrame.py:150 ../IDEFrame.py:191
+#: ../IDEFrame.py:106 ../IDEFrame.py:121 ../IDEFrame.py:151 ../IDEFrame.py:192
 msgid "Move the view"
 msgstr ""
 
-#: ../controls/CustomEditableListBox.py:43
+#: ../controls/CustomEditableListBox.py:45
 msgid "Move up"
 msgstr ""
 
-#: ../editors/CodeFileEditor.py:662 ../controls/VariablePanel.py:484
+#: ../editors/CodeFileEditor.py:657 ../controls/VariablePanel.py:484
 msgid "Move variable down"
 msgstr ""
 
-#: ../editors/CodeFileEditor.py:661 ../controls/VariablePanel.py:483
+#: ../editors/CodeFileEditor.py:656 ../controls/VariablePanel.py:483
 msgid "Move variable up"
 msgstr ""
 
@@ -2188,17 +2197,17 @@
 msgid "Multiplication"
 msgstr ""
 
-#: ../editors/FileManagementPanel.py:85
+#: ../editors/FileManagementPanel.py:87
 msgid "My Computer:"
 msgstr ""
 
-#: ../dialogs/DiscoveryDialog.py:99
+#: ../dialogs/DiscoveryDialog.py:89
 msgid "NAME"
 msgstr ""
 
-#: ../editors/ResourceEditor.py:74 ../editors/ResourceEditor.py:95
-#: ../editors/DataTypeEditor.py:53 ../editors/CodeFileEditor.py:747
-#: ../controls/VariablePanel.py:58
+#: ../editors/ResourceEditor.py:76 ../editors/ResourceEditor.py:97
+#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:732
+#: ../controls/VariablePanel.py:59
 msgid "Name"
 msgstr ""
 
@@ -2206,8 +2215,8 @@
 msgid "Name must not be null!"
 msgstr ""
 
-#: ../dialogs/SFCStepDialog.py:57 ../dialogs/FBDBlockDialog.py:87
-#: ../dialogs/ConnectionDialog.py:76
+#: ../dialogs/SFCStepDialog.py:59 ../dialogs/FBDBlockDialog.py:89
+#: ../dialogs/ConnectionDialog.py:78
 msgid "Name:"
 msgstr ""
 
@@ -2215,57 +2224,57 @@
 msgid "Natural logarithm"
 msgstr ""
 
-#: ../dialogs/LDElementDialog.py:76 ../editors/Viewer.py:558
+#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:554
 msgid "Negated"
 msgstr ""
 
-#: ../Beremiz_service.py:597
+#: ../Beremiz_service.py:610
 msgid "Nevow Web service failed. "
 msgstr ""
 
-#: ../Beremiz_service.py:573
+#: ../Beremiz_service.py:580
 msgid "Nevow/Athena import failed :"
 msgstr ""
 
-#: ../BeremizIDE.py:246 ../BeremizIDE.py:281 ../PLCOpenEditor.py:122
-#: ../PLCOpenEditor.py:164
+#: ../BeremizIDE.py:241 ../BeremizIDE.py:276 ../PLCOpenEditor.py:75
+#: ../PLCOpenEditor.py:117
 msgid "New"
 msgstr ""
 
-#: ../controls/CustomEditableListBox.py:41
+#: ../controls/CustomEditableListBox.py:43
 msgid "New item"
 msgstr ""
 
-#: ../editors/Viewer.py:557
+#: ../editors/Viewer.py:553
 msgid "No Modifier"
 msgstr ""
 
-#: ../ProjectController.py:1851
+#: ../ProjectController.py:1808
 msgid "No PLC to transfer (did build succeed ?)\n"
 msgstr ""
 
-#: ../PLCGenerator.py:1654
+#: ../PLCGenerator.py:1678
 #, python-format
 msgid "No body defined in \"%s\" POU"
 msgstr ""
 
-#: ../PLCGenerator.py:815 ../PLCGenerator.py:1257
+#: ../PLCGenerator.py:816 ../PLCGenerator.py:1281
 #, python-brace-format
 msgid "No connector found corresponding to \"{a1}\" continuation in \"{a2}\" POU"
 msgstr ""
 
-#: ../PLCOpenEditor.py:378
+#: ../PLCOpenEditor.py:331
 msgid ""
 "No documentation available.\n"
 "Coming soon."
 msgstr ""
 
-#: ../PLCGenerator.py:840
+#: ../PLCGenerator.py:841
 #, python-format
 msgid "No informations found for \"%s\" block"
 msgstr ""
 
-#: ../PLCGenerator.py:1208
+#: ../PLCGenerator.py:1232
 #, python-brace-format
 msgid "No output {a1} variable found in block {a2} in POU {a3}. Connection must be broken"
 msgstr ""
@@ -2274,44 +2283,44 @@
 msgid "No search results available."
 msgstr ""
 
-#: ../svgui/svgui.py:141
+#: ../svgui/svgui.py:142
 #, python-format
 msgid "No such SVG file: %s\n"
 msgstr ""
 
-#: ../canfestival/config_utils.py:676
+#: ../canfestival/config_utils.py:682
 #, python-brace-format
 msgid "No such index/subindex ({a1},{a2}) (variable {a3})"
 msgstr ""
 
-#: ../canfestival/config_utils.py:381
+#: ../canfestival/config_utils.py:387
 #, python-brace-format
 msgid "No such index/subindex ({a1},{a2}) in ID : {a3} (variable {a4})"
 msgstr ""
 
-#: ../dialogs/BrowseValuesLibraryDialog.py:83
+#: ../dialogs/BrowseValuesLibraryDialog.py:87
 msgid "No valid value selected!"
 msgstr ""
 
-#: ../PLCGenerator.py:1652
+#: ../PLCGenerator.py:1676
 #, python-format
 msgid "No variable defined in \"%s\" POU"
 msgstr ""
 
-#: ../canfestival/config_utils.py:373
+#: ../canfestival/config_utils.py:379
 #, python-brace-format
 msgid "Non existing node ID : {a1} (variable {a2})"
 msgstr ""
 
-#: ../controls/VariablePanel.py:78
+#: ../controls/VariablePanel.py:79
 msgid "Non-Retain"
 msgstr ""
 
-#: ../dialogs/LDElementDialog.py:76
+#: ../dialogs/LDElementDialog.py:78
 msgid "Normal"
 msgstr ""
 
-#: ../canfestival/config_utils.py:420
+#: ../canfestival/config_utils.py:426
 #, python-brace-format
 msgid "Not PDO mappable variable : '{a1}' (ID:{a2},Idx:{a3},sIdx:{a4}))"
 msgstr ""
@@ -2320,7 +2329,7 @@
 msgid "Not equal to"
 msgstr ""
 
-#: ../dialogs/SFCDivergenceDialog.py:90
+#: ../dialogs/SFCDivergenceDialog.py:91
 msgid "Number of sequences:"
 msgstr ""
 
@@ -2328,76 +2337,76 @@
 msgid "Numerical"
 msgstr ""
 
-#: ../editors/CodeFileEditor.py:751
+#: ../editors/CodeFileEditor.py:736
 msgid "OnChange"
 msgstr ""
 
-#: ../dialogs/SearchInProjectDialog.py:87
+#: ../dialogs/SearchInProjectDialog.py:88
 msgid "Only Elements"
 msgstr ""
 
-#: ../BeremizIDE.py:248 ../BeremizIDE.py:282 ../PLCOpenEditor.py:124
-#: ../PLCOpenEditor.py:165
+#: ../BeremizIDE.py:243 ../BeremizIDE.py:277 ../PLCOpenEditor.py:77
+#: ../PLCOpenEditor.py:118
 msgid "Open"
 msgstr ""
 
-#: ../svgui/svgui.py:150
+#: ../svgui/svgui.py:151
 msgid "Open Inkscape"
 msgstr ""
 
-#: ../version.py:85
+#: ../version.py:86
 msgid "Open Source framework for automation, implemented IEC 61131 IDE with constantly growing set of extensions and flexible PLC runtime."
 msgstr ""
 
-#: ../ProjectController.py:1922
+#: ../ProjectController.py:1879
 msgid "Open a file explorer to manage project files"
 msgstr ""
 
-#: ../wxglade_hmi/wxglade_hmi.py:159
+#: ../wxglade_hmi/wxglade_hmi.py:161
 msgid "Open wxGlade"
 msgstr ""
 
-#: ../controls/VariablePanel.py:63
+#: ../controls/VariablePanel.py:64
 msgid "Option"
 msgstr ""
 
-#: ../dialogs/FindInPouDialog.py:82 ../editors/CodeFileEditor.py:752
+#: ../dialogs/FindInPouDialog.py:84 ../editors/CodeFileEditor.py:737
 msgid "Options"
 msgstr ""
 
-#: ../controls/ProjectPropertiesPanel.py:101
+#: ../controls/ProjectPropertiesPanel.py:109
 msgid "Organization (optional):"
 msgstr ""
 
-#: ../canfestival/SlaveEditor.py:77 ../canfestival/NetworkEditor.py:102
+#: ../canfestival/SlaveEditor.py:78 ../canfestival/NetworkEditor.py:102
 msgid "Other Profile"
 msgstr ""
 
-#: ../dialogs/SFCStepDialog.py:72 ../dialogs/FBDVariableDialog.py:41
-#: ../dialogs/BrowseLocationsDialog.py:44 ../editors/Viewer.py:330
-#: ../editors/Viewer.py:1669 ../editors/TextViewer.py:312
-#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:88
+#: ../dialogs/SFCStepDialog.py:74 ../dialogs/FBDVariableDialog.py:42
+#: ../dialogs/BrowseLocationsDialog.py:44 ../editors/Viewer.py:333
+#: ../editors/Viewer.py:1661 ../editors/TextViewer.py:307
+#: ../controls/LocationCellEditor.py:103 ../controls/VariablePanel.py:89
 #: ../controls/VariablePanel.py:317 ../controls/VariablePanel.py:380
 msgid "Output"
 msgstr ""
 
-#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:91
+#: ../canfestival/SlaveEditor.py:67 ../canfestival/NetworkEditor.py:91
 msgid "PDO Receive"
 msgstr ""
 
-#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:90
+#: ../canfestival/SlaveEditor.py:66 ../canfestival/NetworkEditor.py:90
 msgid "PDO Transmit"
 msgstr ""
 
-#: ../targets/toolchain_gcc.py:170
+#: ../targets/toolchain_gcc.py:174
 msgid "PLC :\n"
 msgstr ""
 
-#: ../BeremizIDE.py:388
+#: ../BeremizIDE.py:383
 msgid "PLC Log"
 msgstr ""
 
-#: ../ProjectController.py:1080
+#: ../ProjectController.py:1082
 msgid "PLC code generation failed !\n"
 msgstr ""
 
@@ -2409,114 +2418,114 @@
 msgid "PLC is not started."
 msgstr ""
 
-#: ../PLCOpenEditor.py:227 ../PLCOpenEditor.py:340
+#: ../PLCOpenEditor.py:180 ../PLCOpenEditor.py:293
 #, python-brace-format
 msgid ""
 "PLC syntax error at line {a1}:\n"
 "{a2}"
 msgstr ""
 
-#: ../PLCOpenEditor.py:323 ../PLCOpenEditor.py:404
+#: ../PLCOpenEditor.py:276 ../PLCOpenEditor.py:357
 msgid "PLCOpen files (*.xml)|*.xml|All files|*.*"
 msgstr ""
 
-#: ../PLCOpenEditor.py:172 ../PLCOpenEditor.py:240
+#: ../PLCOpenEditor.py:125 ../PLCOpenEditor.py:193
 msgid "PLCOpenEditor"
 msgstr ""
 
-#: ../PLCOpenEditor.py:386
+#: ../PLCOpenEditor.py:339
 msgid ""
 "PLCOpenEditor is part of Beremiz project.\n"
 "\n"
 "Beremiz is an "
 msgstr ""
 
-#: ../dialogs/DiscoveryDialog.py:102
+#: ../dialogs/DiscoveryDialog.py:92
 msgid "PORT"
 msgstr ""
 
-#: ../dialogs/PouDialog.py:107
+#: ../dialogs/PouDialog.py:109
 msgid "POU Name"
 msgstr ""
 
-#: ../dialogs/PouDialog.py:64
+#: ../dialogs/PouDialog.py:66
 msgid "POU Name:"
 msgstr ""
 
-#: ../dialogs/PouDialog.py:109
+#: ../dialogs/PouDialog.py:111
 msgid "POU Type"
 msgstr ""
 
-#: ../dialogs/PouDialog.py:71
+#: ../dialogs/PouDialog.py:73
 msgid "POU Type:"
 msgstr ""
 
-#: ../connectors/PYRO/__init__.py:47
+#: ../connectors/PYRO/__init__.py:52
 #, python-format
 msgid "PYRO connecting to URI : %s\n"
 msgstr ""
 
-#: ../connectors/PYRO/__init__.py:63
+#: ../connectors/PYRO/__init__.py:68
 #, python-format
 msgid "PYRO using certificates in '%s' \n"
 msgstr ""
 
-#: ../BeremizIDE.py:261 ../PLCOpenEditor.py:138
+#: ../BeremizIDE.py:256 ../PLCOpenEditor.py:91
 msgid "Page Setup"
 msgstr ""
 
-#: ../controls/ProjectPropertiesPanel.py:114
+#: ../controls/ProjectPropertiesPanel.py:124
 msgid "Page Size (optional):"
 msgstr ""
 
-#: ../IDEFrame.py:2651
+#: ../IDEFrame.py:2640
 #, python-format
 msgid "Page: %d"
 msgstr ""
 
-#: ../controls/PouInstanceVariablesPanel.py:140
+#: ../controls/PouInstanceVariablesPanel.py:134
 msgid "Parent instance"
 msgstr ""
 
-#: ../editors/Viewer.py:699 ../IDEFrame.py:386 ../IDEFrame.py:440
+#: ../editors/Viewer.py:696 ../IDEFrame.py:374 ../IDEFrame.py:428
 msgid "Paste"
 msgstr ""
 
-#: ../IDEFrame.py:1905
+#: ../IDEFrame.py:1899
 msgid "Paste POU"
 msgstr ""
 
-#: ../dialogs/SearchInProjectDialog.py:59
+#: ../dialogs/SearchInProjectDialog.py:60
 msgid "Pattern to search:"
 msgstr ""
 
-#: ../dialogs/LDPowerRailDialog.py:73
+#: ../dialogs/LDPowerRailDialog.py:75
 msgid "Pin number:"
 msgstr ""
 
-#: ../editors/Viewer.py:2802 ../editors/Viewer.py:3070
-#: ../editors/SFCViewer.py:771
+#: ../editors/Viewer.py:2792 ../editors/Viewer.py:3060
+#: ../editors/SFCViewer.py:785
 msgid "Please choose a target"
 msgstr ""
 
-#: ../editors/TextViewer.py:265
+#: ../editors/TextViewer.py:260
 msgid "Please enter a block name"
 msgstr ""
 
-#: ../editors/Viewer.py:2671 ../editors/Viewer.py:3113
+#: ../editors/Viewer.py:2661 ../editors/Viewer.py:3103
 msgid "Please enter comment text"
 msgstr ""
 
-#: ../editors/SFCViewer.py:433 ../editors/SFCViewer.py:455
-#: ../editors/SFCViewer.py:801
+#: ../editors/SFCViewer.py:447 ../editors/SFCViewer.py:469
+#: ../editors/SFCViewer.py:815
 msgid "Please enter step name"
 msgstr ""
 
-#: ../dialogs/PouNameDialog.py:34 ../Beremiz_service.py:204
+#: ../dialogs/PouNameDialog.py:37 ../Beremiz_service.py:209
 msgid "Please enter text"
 msgstr ""
 
-#: ../dialogs/ForceVariableDialog.py:175
+#: ../dialogs/ForceVariableDialog.py:177
 #, python-format
 msgid "Please enter value for a \"%s\" variable:"
 msgstr ""
@@ -2529,196 +2538,196 @@
 msgid "Port number must be an integer!"
 msgstr ""
 
-#: ../editors/Viewer.py:636 ../editors/Viewer.py:2459
+#: ../editors/Viewer.py:633 ../editors/Viewer.py:2449
 msgid "Power Rail"
 msgstr ""
 
-#: ../dialogs/LDPowerRailDialog.py:50
+#: ../dialogs/LDPowerRailDialog.py:52
 msgid "Power Rail Properties"
 msgstr ""
 
-#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:140
+#: ../BeremizIDE.py:258 ../PLCOpenEditor.py:93
 msgid "Preview"
 msgstr ""
 
-#: ../dialogs/BlockPreviewDialog.py:57
+#: ../dialogs/BlockPreviewDialog.py:59
 msgid "Preview:"
 msgstr ""
 
-#: ../BeremizIDE.py:265 ../BeremizIDE.py:285 ../PLCOpenEditor.py:142
-#: ../PLCOpenEditor.py:168
+#: ../BeremizIDE.py:260 ../BeremizIDE.py:280 ../PLCOpenEditor.py:95
+#: ../PLCOpenEditor.py:121
 msgid "Print"
 msgstr ""
 
-#: ../IDEFrame.py:1116
+#: ../IDEFrame.py:1110
 msgid "Print preview"
 msgstr ""
 
-#: ../editors/ResourceEditor.py:74
+#: ../editors/ResourceEditor.py:76
 msgid "Priority"
 msgstr ""
 
-#: ../dialogs/SFCTransitionDialog.py:90
+#: ../dialogs/SFCTransitionDialog.py:91
 msgid "Priority:"
 msgstr ""
 
-#: ../runtime/PLCObject.py:375
+#: ../runtime/PLCObject.py:518
 #, python-format
 msgid "Problem starting PLC : error %d"
 msgstr ""
 
-#: ../dialogs/ProjectDialog.py:61
+#: ../dialogs/ProjectDialog.py:63
 msgid "Product Name"
 msgstr ""
 
-#: ../controls/ProjectPropertiesPanel.py:84
+#: ../controls/ProjectPropertiesPanel.py:90
 msgid "Product Name (required):"
 msgstr ""
 
-#: ../controls/ProjectPropertiesPanel.py:86
+#: ../controls/ProjectPropertiesPanel.py:92
 msgid "Product Release (optional):"
 msgstr ""
 
+#: ../dialogs/ProjectDialog.py:64
+msgid "Product Version"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:91
+msgid "Product Version (required):"
+msgstr ""
+
+#: ../dialogs/SearchInProjectDialog.py:42 ../IDEFrame.py:1778
+#: ../IDEFrame.py:1975
+msgid "Program"
+msgstr ""
+
+#: ../PLCOpenEditor.py:321
+msgid "Program was successfully generated!"
+msgstr ""
+
+#: ../plcopen/types_enums.py:76
+msgid "Programs"
+msgstr ""
+
+#: ../editors/Viewer.py:285
+msgid "Programs can't be used by other POUs!"
+msgstr ""
+
+#: ../controls/ProjectPropertiesPanel.py:94 ../IDEFrame.py:601
+msgid "Project"
+msgstr ""
+
+#: ../controls/SearchResultPanel.py:180
+#, python-format
+msgid "Project '%s':"
+msgstr ""
+
+#: ../ProjectController.py:1878
+msgid "Project Files"
+msgstr ""
+
 #: ../dialogs/ProjectDialog.py:62
-msgid "Product Version"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:85
-msgid "Product Version (required):"
-msgstr ""
-
-#: ../dialogs/SearchInProjectDialog.py:41 ../IDEFrame.py:1784
-#: ../IDEFrame.py:1981
-msgid "Program"
-msgstr ""
-
-#: ../PLCOpenEditor.py:368
-msgid "Program was successfully generated!"
-msgstr ""
-
-#: ../PLCControler.py:105
-msgid "Programs"
-msgstr ""
-
-#: ../editors/Viewer.py:281
-msgid "Programs can't be used by other POUs!"
-msgstr ""
-
-#: ../controls/ProjectPropertiesPanel.py:88 ../IDEFrame.py:616
-msgid "Project"
-msgstr ""
-
-#: ../controls/SearchResultPanel.py:180
-#, python-format
-msgid "Project '%s':"
-msgstr ""
-
-#: ../ProjectController.py:1921
-msgid "Project Files"
-msgstr ""
-
-#: ../dialogs/ProjectDialog.py:60
 msgid "Project Name"
 msgstr ""
 
-#: ../controls/ProjectPropertiesPanel.py:82
+#: ../controls/ProjectPropertiesPanel.py:88
 msgid "Project Name (required):"
 msgstr ""
 
-#: ../controls/ProjectPropertiesPanel.py:83
+#: ../controls/ProjectPropertiesPanel.py:89
 msgid "Project Version (optional):"
 msgstr ""
 
-#: ../PLCControler.py:3230
+#: ../PLCControler.py:2717
 msgid ""
 "Project file syntax error:\n"
 "\n"
 msgstr ""
 
-#: ../dialogs/ProjectDialog.py:34 ../editors/ProjectNodeEditor.py:38
+#: ../dialogs/ProjectDialog.py:36 ../editors/ProjectNodeEditor.py:40
 msgid "Project properties"
 msgstr ""
 
-#: ../ConfigTreeNode.py:572
+#: ../ConfigTreeNode.py:571
 #, python-brace-format
 msgid "Project tree layout do not match confnode.xml {a1}!={a2} "
 msgstr ""
 
-#: ../dialogs/ConnectionDialog.py:99
+#: ../dialogs/ConnectionDialog.py:101
 msgid "Propagate Name"
 msgstr ""
 
-#: ../PLCControler.py:106
+#: ../plcopen/types_enums.py:77
 msgid "Properties"
 msgstr ""
 
-#: ../Beremiz_service.py:450
+#: ../Beremiz_service.py:427
 msgid "Publishing service on local network"
 msgstr ""
 
-#: ../connectors/PYRO/__init__.py:121
+#: ../connectors/PYRO/__init__.py:126
 #, python-format
 msgid "Pyro exception: %s\n"
 msgstr ""
 
-#: ../Beremiz_service.py:437
-msgid "Pyro object's uri :"
-msgstr ""
-
-#: ../Beremiz_service.py:436
+#: ../Beremiz_service.py:420
 msgid "Pyro port :"
 msgstr ""
 
-#: ../py_ext/PythonEditor.py:82
+#: ../py_ext/PythonEditor.py:84
 msgid "Python code"
 msgstr ""
 
-#: ../features.py:33
+#: ../features.py:34
 msgid "Python file"
 msgstr ""
 
-#: ../dialogs/ActionBlockDialog.py:40
+#: ../dialogs/ActionBlockDialog.py:42
 msgid "Qualifier"
 msgstr ""
 
-#: ../BeremizIDE.py:268 ../PLCOpenEditor.py:148 ../Beremiz_service.py:283
+#: ../BeremizIDE.py:263 ../PLCOpenEditor.py:101 ../Beremiz_service.py:283
 msgid "Quit"
 msgstr ""
 
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:224
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:227
 msgid "Range:"
 msgstr ""
 
-#: ../ProjectController.py:1915
+#: ../ProjectController.py:1872
 msgid "Raw IEC code"
 msgstr ""
 
-#: ../BeremizIDE.py:1085
+#: ../BeremizIDE.py:1083
 #, python-format
 msgid "Really delete node '%s'?"
 msgstr ""
 
-#: ../IDEFrame.py:376 ../IDEFrame.py:436
+#: ../connectors/WAMP/dialog.py:50
+msgid "Realm:"
+msgstr ""
+
+#: ../IDEFrame.py:367 ../IDEFrame.py:424
 msgid "Redo"
 msgstr ""
 
-#: ../dialogs/SFCTransitionDialog.py:75
+#: ../dialogs/SFCTransitionDialog.py:76
 msgid "Reference"
 msgstr ""
 
-#: ../dialogs/DiscoveryDialog.py:115 ../IDEFrame.py:446
+#: ../dialogs/DiscoveryDialog.py:109 ../IDEFrame.py:434
 msgid "Refresh"
 msgstr ""
 
-#: ../dialogs/SearchInProjectDialog.py:69
+#: ../dialogs/SearchInProjectDialog.py:70
 msgid "Regular expression"
 msgstr ""
 
-#: ../dialogs/FindInPouDialog.py:97
+#: ../dialogs/FindInPouDialog.py:99
 msgid "Regular expressions"
 msgstr ""
 
-#: ../editors/Viewer.py:1644
+#: ../editors/Viewer.py:1636
 msgid "Release value"
 msgstr ""
 
@@ -2726,32 +2735,32 @@
 msgid "Remainder (modulo)"
 msgstr ""
 
-#: ../BeremizIDE.py:1086
+#: ../BeremizIDE.py:1084
 #, python-format
 msgid "Remove %s node"
 msgstr ""
 
-#: ../IDEFrame.py:2454
+#: ../IDEFrame.py:2445
 msgid "Remove Datatype"
 msgstr ""
 
-#: ../IDEFrame.py:2459
+#: ../IDEFrame.py:2450
 msgid "Remove Pou"
 msgstr ""
 
-#: ../dialogs/ActionBlockDialog.py:142
+#: ../dialogs/ActionBlockDialog.py:144
 msgid "Remove action"
 msgstr ""
 
-#: ../editors/DataTypeEditor.py:366
+#: ../editors/DataTypeEditor.py:365
 msgid "Remove element"
 msgstr ""
 
-#: ../editors/FileManagementPanel.py:64
+#: ../editors/FileManagementPanel.py:66
 msgid "Remove file from left folder"
 msgstr ""
 
-#: ../editors/ResourceEditor.py:282
+#: ../editors/ResourceEditor.py:284
 msgid "Remove instance"
 msgstr ""
 
@@ -2759,23 +2768,23 @@
 msgid "Remove slave"
 msgstr ""
 
-#: ../editors/ResourceEditor.py:251
+#: ../editors/ResourceEditor.py:253
 msgid "Remove task"
 msgstr ""
 
-#: ../editors/CodeFileEditor.py:660 ../controls/VariablePanel.py:482
+#: ../editors/CodeFileEditor.py:655 ../controls/VariablePanel.py:482
 msgid "Remove variable"
 msgstr ""
 
-#: ../IDEFrame.py:1985
+#: ../IDEFrame.py:1979
 msgid "Rename"
 msgstr ""
 
-#: ../editors/FileManagementPanel.py:185
+#: ../editors/FileManagementPanel.py:187
 msgid "Replace File"
 msgstr ""
 
-#: ../editors/Viewer.py:601
+#: ../editors/Viewer.py:598
 msgid "Replace Wire by connections"
 msgstr ""
 
@@ -2783,27 +2792,27 @@
 msgid "Replacement (within)"
 msgstr ""
 
-#: ../dialogs/LDElementDialog.py:77
+#: ../dialogs/LDElementDialog.py:79
 msgid "Reset"
 msgstr ""
 
-#: ../editors/Viewer.py:684
+#: ../editors/Viewer.py:681
 msgid "Reset Execution Order"
 msgstr ""
 
-#: ../IDEFrame.py:465
+#: ../IDEFrame.py:453
 msgid "Reset Perspective"
 msgstr ""
 
-#: ../controls/SearchResultPanel.py:111
+#: ../controls/SearchResultPanel.py:103
 msgid "Reset search result"
 msgstr ""
 
-#: ../BeremizIDE.py:1015 ../PLCControler.py:106
+#: ../BeremizIDE.py:1015 ../plcopen/types_enums.py:77
 msgid "Resources"
 msgstr ""
 
-#: ../controls/VariablePanel.py:76
+#: ../controls/VariablePanel.py:77
 msgid "Retain"
 msgstr ""
 
@@ -2811,15 +2820,15 @@
 msgid "Return Type:"
 msgstr ""
 
-#: ../editors/Viewer.py:586
+#: ../editors/Viewer.py:582
 msgid "Right"
 msgstr ""
 
-#: ../dialogs/LDPowerRailDialog.py:63
+#: ../dialogs/LDPowerRailDialog.py:65
 msgid "Right PowerRail"
 msgstr ""
 
-#: ../dialogs/LDElementDialog.py:78 ../editors/Viewer.py:559
+#: ../dialogs/LDElementDialog.py:80 ../editors/Viewer.py:555
 msgid "Rising Edge"
 msgstr ""
 
@@ -2835,113 +2844,113 @@
 msgid "Rounding up/down"
 msgstr ""
 
-#: ../ProjectController.py:1871
+#: ../ProjectController.py:1828
 msgid "Run"
 msgstr ""
 
-#: ../ProjectController.py:1125
+#: ../ProjectController.py:1127
 msgid "Runtime IO extensions C code generation failed !\n"
 msgstr ""
 
-#: ../ProjectController.py:1134
+#: ../ProjectController.py:1136
 msgid "Runtime library extensions C code generation failed !\n"
 msgstr ""
 
-#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:89
+#: ../canfestival/SlaveEditor.py:65 ../canfestival/NetworkEditor.py:89
 msgid "SDO Client"
 msgstr ""
 
-#: ../canfestival/SlaveEditor.py:63 ../canfestival/NetworkEditor.py:88
+#: ../canfestival/SlaveEditor.py:64 ../canfestival/NetworkEditor.py:88
 msgid "SDO Server"
 msgstr ""
 
-#: ../dialogs/PouDialog.py:42 ../controls/ProjectPropertiesPanel.py:148
+#: ../dialogs/PouDialog.py:44 ../controls/ProjectPropertiesPanel.py:158
 msgid "SFC"
 msgstr ""
 
-#: ../PLCGenerator.py:1409
+#: ../PLCGenerator.py:1433
 #, python-brace-format
 msgid "SFC jump in pou \"{a1}\" refers to non-existent SFC step \"{a2}\""
 msgstr ""
 
-#: ../PLCGenerator.py:779
+#: ../PLCGenerator.py:780
 #, python-format
 msgid "SFC transition in POU \"%s\" must be connected."
 msgstr ""
 
-#: ../dialogs/PouTransitionDialog.py:38 ../dialogs/PouActionDialog.py:34
-#: ../dialogs/PouDialog.py:42
+#: ../dialogs/PouTransitionDialog.py:40 ../dialogs/PouActionDialog.py:36
+#: ../dialogs/PouDialog.py:44
 msgid "ST"
 msgstr ""
 
-#: ../PLCOpenEditor.py:355
+#: ../PLCOpenEditor.py:308
 msgid "ST files (*.st)|*.st|All files|*.*"
 msgstr ""
 
-#: ../svgui/svgui.py:135
+#: ../svgui/svgui.py:136
 msgid "SVG files (*.svg)|*.svg|All files|*.*"
 msgstr ""
 
-#: ../features.py:35
+#: ../features.py:36
 msgid "SVGUI"
 msgstr ""
 
-#: ../BeremizIDE.py:252 ../BeremizIDE.py:283 ../PLCOpenEditor.py:131
-#: ../PLCOpenEditor.py:166
+#: ../BeremizIDE.py:247 ../BeremizIDE.py:278 ../PLCOpenEditor.py:84
+#: ../PLCOpenEditor.py:119
 msgid "Save"
 msgstr ""
 
-#: ../BeremizIDE.py:284 ../PLCOpenEditor.py:133 ../PLCOpenEditor.py:167
+#: ../BeremizIDE.py:279 ../PLCOpenEditor.py:86 ../PLCOpenEditor.py:120
 msgid "Save As..."
 msgstr ""
 
-#: ../BeremizIDE.py:254
+#: ../BeremizIDE.py:249
 msgid "Save as"
 msgstr ""
 
-#: ../ProjectController.py:528
+#: ../ProjectController.py:530
 msgid "Save path is the same as path of a project! \n"
 msgstr ""
 
-#: ../dialogs/SearchInProjectDialog.py:72
+#: ../dialogs/SearchInProjectDialog.py:73
 msgid "Scope"
 msgstr ""
 
-#: ../IDEFrame.py:659
+#: ../IDEFrame.py:644
 msgid "Search"
 msgstr ""
 
-#: ../dialogs/SearchInProjectDialog.py:48 ../IDEFrame.py:396 ../IDEFrame.py:442
+#: ../dialogs/SearchInProjectDialog.py:49 ../IDEFrame.py:384 ../IDEFrame.py:430
 msgid "Search in Project"
 msgstr ""
 
-#: ../dialogs/DurationEditorDialog.py:47
+#: ../dialogs/DurationEditorDialog.py:49
 msgid "Seconds:"
 msgstr ""
 
-#: ../IDEFrame.py:402
+#: ../IDEFrame.py:390
 msgid "Select All"
 msgstr ""
 
-#: ../editors/Viewer.py:328 ../editors/TextViewer.py:310
-#: ../controls/LocationCellEditor.py:99 ../controls/VariablePanel.py:315
+#: ../editors/Viewer.py:331 ../editors/TextViewer.py:305
+#: ../controls/LocationCellEditor.py:101 ../controls/VariablePanel.py:315
 #: ../controls/VariablePanel.py:378
 msgid "Select a variable class:"
 msgstr ""
 
-#: ../ProjectController.py:1288
+#: ../ProjectController.py:1293
 msgid "Select an editor:"
 msgstr ""
 
-#: ../controls/PouInstanceVariablesPanel.py:298
+#: ../controls/PouInstanceVariablesPanel.py:292
 msgid "Select an instance"
 msgstr ""
 
-#: ../IDEFrame.py:643
+#: ../IDEFrame.py:628
 msgid "Select an object"
 msgstr ""
 
-#: ../ProjectController.py:535
+#: ../ProjectController.py:537
 msgid "Selected directory already contains another project. Overwrite? \n"
 msgstr ""
 
@@ -2949,23 +2958,23 @@
 msgid "Selection"
 msgstr ""
 
+#: ../dialogs/SFCDivergenceDialog.py:66
+msgid "Selection Convergence"
+msgstr ""
+
 #: ../dialogs/SFCDivergenceDialog.py:65
-msgid "Selection Convergence"
-msgstr ""
-
-#: ../dialogs/SFCDivergenceDialog.py:64
 msgid "Selection Divergence"
 msgstr ""
 
-#: ../dialogs/DiscoveryDialog.py:87
+#: ../dialogs/DiscoveryDialog.py:135
 msgid "Service Discovery"
 msgstr ""
 
-#: ../dialogs/DiscoveryDialog.py:91
+#: ../dialogs/DiscoveryDialog.py:104
 msgid "Services available:"
 msgstr ""
 
-#: ../dialogs/LDElementDialog.py:77
+#: ../dialogs/LDElementDialog.py:79
 msgid "Set"
 msgstr ""
 
@@ -2977,27 +2986,27 @@
 msgid "Shift right"
 msgstr ""
 
-#: ../ProjectController.py:1906
+#: ../ProjectController.py:1863
 msgid "Show IEC code generated by PLCGenerator"
 msgstr ""
 
-#: ../canfestival/canfestival.py:416
+#: ../canfestival/canfestival.py:407
 msgid "Show Master"
 msgstr ""
 
-#: ../canfestival/canfestival.py:417
+#: ../canfestival/canfestival.py:408
 msgid "Show Master generated by config_utils"
 msgstr ""
 
-#: ../ProjectController.py:1905
+#: ../ProjectController.py:1862
 msgid "Show code"
 msgstr ""
 
+#: ../dialogs/SFCDivergenceDialog.py:68
+msgid "Simultaneous Convergence"
+msgstr ""
+
 #: ../dialogs/SFCDivergenceDialog.py:67
-msgid "Simultaneous Convergence"
-msgstr ""
-
-#: ../dialogs/SFCDivergenceDialog.py:66
 msgid "Simultaneous Divergence"
 msgstr ""
 
@@ -3005,15 +3014,15 @@
 msgid "Sine"
 msgstr ""
 
-#: ../editors/ResourceEditor.py:74
+#: ../editors/ResourceEditor.py:76
 msgid "Single"
 msgstr ""
 
-#: ../targets/toolchain_makefile.py:128
+#: ../targets/toolchain_makefile.py:130
 msgid "Source didn't change, no build.\n"
 msgstr ""
 
-#: ../PLCGenerator.py:401
+#: ../PLCGenerator.py:404
 #, python-brace-format
 msgid "Source signal has to be defined for single task '{a1}' in resource '{a2}.{a3}'."
 msgstr ""
@@ -3022,36 +3031,36 @@
 msgid "Square root (base 2)"
 msgstr ""
 
-#: ../plcopen/definitions.py:49
+#: ../plcopen/definitions.py:50
 msgid "Standard function blocks"
 msgstr ""
 
-#: ../ProjectController.py:1872 ../Beremiz_service.py:271
+#: ../ProjectController.py:1829 ../Beremiz_service.py:271
 msgid "Start PLC"
 msgstr ""
 
-#: ../ProjectController.py:1072
+#: ../ProjectController.py:1074
 #, python-format
 msgid "Start build in %s\n"
 msgstr ""
 
-#: ../ProjectController.py:1392
+#: ../ProjectController.py:1397
 msgid "Started"
 msgstr ""
 
-#: ../ProjectController.py:1679
+#: ../ProjectController.py:1633
 msgid "Starting PLC\n"
 msgstr ""
 
-#: ../BeremizIDE.py:398
+#: ../BeremizIDE.py:393
 msgid "Status ToolBar"
 msgstr ""
 
-#: ../editors/Viewer.py:654 ../editors/Viewer.py:2434
+#: ../editors/Viewer.py:651 ../editors/Viewer.py:2424
 msgid "Step"
 msgstr ""
 
-#: ../ProjectController.py:1878
+#: ../ProjectController.py:1835
 msgid "Stop"
 msgstr ""
 
@@ -3059,23 +3068,19 @@
 msgid "Stop PLC"
 msgstr ""
 
-#: ../ProjectController.py:1879
+#: ../ProjectController.py:1836
 msgid "Stop Running PLC"
 msgstr ""
 
-#: ../ProjectController.py:1393
+#: ../ProjectController.py:1398
 msgid "Stopped"
 msgstr ""
 
-#: ../ProjectController.py:1651
-msgid "Stopping debugger...\n"
-msgstr ""
-
-#: ../editors/DataTypeEditor.py:58
+#: ../editors/DataTypeEditor.py:60
 msgid "Structure"
 msgstr ""
 
-#: ../editors/DataTypeEditor.py:58
+#: ../editors/DataTypeEditor.py:60
 msgid "Subrange"
 msgstr ""
 
@@ -3083,19 +3088,19 @@
 msgid "Subtraction"
 msgstr ""
 
-#: ../ProjectController.py:1111
+#: ../ProjectController.py:1113
 msgid "Successfully built.\n"
 msgstr ""
 
-#: ../IDEFrame.py:461
+#: ../IDEFrame.py:449
 msgid "Switch perspective"
 msgstr ""
 
-#: ../dialogs/SearchInProjectDialog.py:168 ../dialogs/FindInPouDialog.py:116
+#: ../dialogs/SearchInProjectDialog.py:169 ../dialogs/FindInPouDialog.py:118
 msgid "Syntax error in regular expression of pattern to search!"
 msgstr ""
 
-#: ../dialogs/DiscoveryDialog.py:100
+#: ../dialogs/DiscoveryDialog.py:90
 msgid "TYPE"
 msgstr ""
 
@@ -3103,19 +3108,19 @@
 msgid "Tangent"
 msgstr ""
 
-#: ../editors/ResourceEditor.py:95
+#: ../editors/ResourceEditor.py:97
 msgid "Task"
 msgstr ""
 
-#: ../editors/ResourceEditor.py:246
+#: ../editors/ResourceEditor.py:248
 msgid "Tasks:"
 msgstr ""
 
-#: ../controls/VariablePanel.py:90
+#: ../controls/VariablePanel.py:91
 msgid "Temp"
 msgstr ""
 
-#: ../version.py:34
+#: ../version.py:35
 msgid ""
 "The best place to ask questions about Beremiz/PLCOpenEditor\n"
 "is project's mailing list: beremiz-devel@lists.sourceforge.net\n"
@@ -3127,37 +3132,37 @@
 "https://lists.sourceforge.net/lists/listinfo/beremiz-devel"
 msgstr ""
 
-#: ../editors/FileManagementPanel.py:184
+#: ../editors/FileManagementPanel.py:186
 #, python-format
 msgid ""
 "The file '%s' already exist.\n"
 "Do you want to replace it?"
 msgstr ""
 
-#: ../editors/LDViewer.py:891
+#: ../editors/LDViewer.py:893
 msgid "The group of block must be coherent!"
 msgstr ""
 
-#: ../BeremizIDE.py:577 ../IDEFrame.py:1052
+#: ../BeremizIDE.py:573 ../IDEFrame.py:1046
 msgid "There are changes, do you want to save?"
 msgstr ""
 
-#: ../IDEFrame.py:1695 ../IDEFrame.py:1714
+#: ../IDEFrame.py:1691 ../IDEFrame.py:1710
 #, python-format
 msgid "There is a POU named \"%s\". This could cause a conflict. Do you wish to continue?"
 msgstr ""
 
-#: ../IDEFrame.py:1139
+#: ../IDEFrame.py:1133
 msgid ""
 "There was a problem printing.\n"
 "Perhaps your current printer is not set correctly?"
 msgstr ""
 
-#: ../editors/LDViewer.py:900
+#: ../editors/LDViewer.py:902
 msgid "This option isn't available yet!"
 msgstr ""
 
-#: ../controls/DebugVariablePanel/DebugVariablePanel.py:564
+#: ../controls/DebugVariablePanel/DebugVariablePanel.py:567
 #, python-format
 msgid "Tick: %d"
 msgstr ""
@@ -3195,63 +3200,63 @@
 msgid "Time-of-day subtraction"
 msgstr ""
 
-#: ../dialogs/ForceVariableDialog.py:186
+#: ../dialogs/ForceVariableDialog.py:188
 msgid "Toggle value"
 msgstr ""
 
-#: ../editors/Viewer.py:588
+#: ../editors/Viewer.py:584
 msgid "Top"
 msgstr ""
 
-#: ../ProjectController.py:1891
+#: ../ProjectController.py:1848
 msgid "Transfer"
 msgstr ""
 
-#: ../ProjectController.py:1892
+#: ../ProjectController.py:1849
 msgid "Transfer PLC"
 msgstr ""
 
-#: ../ProjectController.py:1845
+#: ../ProjectController.py:1802
 msgid "Transfer completed successfully.\n"
 msgstr ""
 
-#: ../ProjectController.py:1848
+#: ../ProjectController.py:1805
 msgid "Transfer failed\n"
 msgstr ""
 
-#: ../editors/Viewer.py:655 ../editors/Viewer.py:2436 ../editors/Viewer.py:2463
+#: ../editors/Viewer.py:652 ../editors/Viewer.py:2426 ../editors/Viewer.py:2453
 msgid "Transition"
 msgstr ""
 
-#: ../PLCGenerator.py:1540
+#: ../PLCGenerator.py:1564
 #, python-format
 msgid "Transition \"%s\" body must contain an output variable or coil referring to its name"
 msgstr ""
 
-#: ../dialogs/PouTransitionDialog.py:89
+#: ../dialogs/PouTransitionDialog.py:91
 msgid "Transition Name"
 msgstr ""
 
-#: ../dialogs/PouTransitionDialog.py:58
+#: ../dialogs/PouTransitionDialog.py:60
 msgid "Transition Name:"
 msgstr ""
 
-#: ../PLCGenerator.py:1633
+#: ../PLCGenerator.py:1657
 #, python-brace-format
 msgid "Transition with content \"{a1}\" not connected to a next step in \"{a2}\" POU"
 msgstr ""
 
-#: ../PLCGenerator.py:1622
+#: ../PLCGenerator.py:1646
 #, python-brace-format
 msgid "Transition with content \"{a1}\" not connected to a previous step in \"{a2}\" POU"
 msgstr ""
 
-#: ../plcopen/plcopen.py:1382
+#: ../plcopen/plcopen.py:1526
 #, python-format
 msgid "Transition with name %s doesn't exist!"
 msgstr ""
 
-#: ../PLCControler.py:105
+#: ../plcopen/types_enums.py:76
 msgid "Transitions"
 msgstr ""
 
@@ -3259,17 +3264,17 @@
 msgid "Translated by"
 msgstr ""
 
-#: ../editors/ResourceEditor.py:74
+#: ../editors/ResourceEditor.py:76
 msgid "Triggering"
 msgstr ""
 
-#: ../Beremiz_service.py:487
+#: ../Beremiz_service.py:490
 msgid "Twisted unavailable."
 msgstr ""
 
-#: ../dialogs/ActionBlockDialog.py:40 ../editors/ResourceEditor.py:95
-#: ../editors/DataTypeEditor.py:53 ../editors/CodeFileEditor.py:748
-#: ../controls/VariablePanel.py:60
+#: ../dialogs/ActionBlockDialog.py:42 ../editors/ResourceEditor.py:97
+#: ../editors/DataTypeEditor.py:55 ../editors/CodeFileEditor.py:733
+#: ../controls/VariablePanel.py:61
 msgid "Type"
 msgstr ""
 
@@ -3277,7 +3282,7 @@
 msgid "Type and derivated"
 msgstr ""
 
-#: ../canfestival/config_utils.py:353 ../canfestival/config_utils.py:660
+#: ../canfestival/config_utils.py:359 ../canfestival/config_utils.py:666
 #, python-format
 msgid "Type conflict for location \"%s\""
 msgstr ""
@@ -3294,50 +3299,62 @@
 msgid "Type strict"
 msgstr ""
 
-#: ../dialogs/SFCDivergenceDialog.py:59 ../dialogs/SFCTransitionDialog.py:58
-#: ../dialogs/LDPowerRailDialog.py:56 ../dialogs/BrowseLocationsDialog.py:111
-#: ../dialogs/FBDBlockDialog.py:67 ../dialogs/ConnectionDialog.py:59
+#: ../dialogs/SFCDivergenceDialog.py:60 ../dialogs/SFCTransitionDialog.py:59
+#: ../dialogs/LDPowerRailDialog.py:58 ../dialogs/BrowseLocationsDialog.py:111
+#: ../dialogs/FBDBlockDialog.py:69 ../dialogs/ConnectionDialog.py:61
 msgid "Type:"
 msgstr ""
 
-#: ../canfestival/config_utils.py:494 ../canfestival/config_utils.py:509
+#: ../connectors/PYRO/dialog.py:39 ../connectors/WAMP/dialog.py:42
+msgid "URI host:"
+msgstr ""
+
+#: ../connectors/PYRO/dialog.py:43 ../connectors/WAMP/dialog.py:46
+msgid "URI port:"
+msgstr ""
+
+#: ../controls/UriLocationEditor.py:35
+msgid "URI type:"
+msgstr ""
+
+#: ../canfestival/config_utils.py:500 ../canfestival/config_utils.py:515
 #, python-format
 msgid "Unable to define PDO mapping for node %02x"
 msgstr ""
 
-#: ../targets/Xenomai/__init__.py:41
+#: ../targets/Xenomai/__init__.py:43
 #, python-format
 msgid "Unable to get Xenomai's %s \n"
 msgstr ""
 
-#: ../PLCGenerator.py:973 ../PLCGenerator.py:1228
+#: ../PLCGenerator.py:974 ../PLCGenerator.py:1252
 #, python-brace-format
 msgid "Undefined block type \"{a1}\" in \"{a2}\" POU"
 msgstr ""
 
-#: ../PLCGenerator.py:257
+#: ../PLCGenerator.py:261
 #, python-format
 msgid "Undefined pou type \"%s\""
 msgstr ""
 
-#: ../IDEFrame.py:374 ../IDEFrame.py:435
+#: ../IDEFrame.py:365 ../IDEFrame.py:423
 msgid "Undo"
 msgstr ""
 
-#: ../ProjectController.py:440
+#: ../ProjectController.py:442
 msgid "Unknown"
 msgstr ""
 
-#: ../editors/Viewer.py:434
+#: ../editors/Viewer.py:437
 #, python-format
 msgid "Unknown variable \"%s\" for this POU!"
 msgstr ""
 
-#: ../ProjectController.py:437 ../ProjectController.py:438
+#: ../ProjectController.py:439 ../ProjectController.py:440
 msgid "Unnamed"
 msgstr ""
 
-#: ../PLCControler.py:667
+#: ../PLCControler.py:263
 #, python-format
 msgid "Unnamed%d"
 msgstr ""
@@ -3347,73 +3364,103 @@
 msgid "Unrecognized data size \"%s\""
 msgstr ""
 
-#: ../editors/DataTypeEditor.py:645 ../controls/VariablePanel.py:862
+#: ../editors/DataTypeEditor.py:646 ../controls/VariablePanel.py:841
 msgid "User Data Types"
 msgstr ""
 
-#: ../canfestival/SlaveEditor.py:68 ../canfestival/NetworkEditor.py:93
+#: ../canfestival/SlaveEditor.py:69 ../canfestival/NetworkEditor.py:93
 msgid "User Type"
 msgstr ""
 
-#: ../PLCControler.py:104
+#: ../plcopen/types_enums.py:75
 msgid "User-defined POUs"
 msgstr ""
 
-#: ../dialogs/ActionBlockDialog.py:40
+#: ../dialogs/ActionBlockDialog.py:42
 msgid "Value"
 msgstr ""
 
-#: ../editors/DataTypeEditor.py:268
+#: ../editors/DataTypeEditor.py:267
 msgid "Values:"
 msgstr ""
 
-#: ../dialogs/ActionBlockDialog.py:45 ../editors/Viewer.py:625
-#: ../editors/Viewer.py:2466
+#: ../dialogs/ActionBlockDialog.py:47 ../editors/Viewer.py:622
+#: ../editors/Viewer.py:2456
 msgid "Variable"
 msgstr ""
 
-#: ../editors/Viewer.py:349 ../editors/Viewer.py:379 ../editors/Viewer.py:401
-#: ../editors/TextViewer.py:295 ../editors/TextViewer.py:349
-#: ../editors/TextViewer.py:372 ../controls/VariablePanel.py:355
+#: ../editors/Viewer.py:352 ../editors/Viewer.py:382 ../editors/Viewer.py:404
+#: ../editors/TextViewer.py:290 ../editors/TextViewer.py:344
+#: ../editors/TextViewer.py:367 ../controls/VariablePanel.py:355
 msgid "Variable Drop"
 msgstr ""
 
-#: ../dialogs/FBDVariableDialog.py:67
+#: ../dialogs/FBDVariableDialog.py:68
 msgid "Variable Properties"
 msgstr ""
 
-#: ../editors/Viewer.py:329 ../editors/TextViewer.py:311
-#: ../controls/LocationCellEditor.py:100 ../controls/VariablePanel.py:316
+#: ../editors/Viewer.py:332 ../editors/TextViewer.py:306
+#: ../controls/LocationCellEditor.py:102 ../controls/VariablePanel.py:316
 #: ../controls/VariablePanel.py:379
 msgid "Variable class"
 msgstr ""
 
-#: ../editors/Viewer.py:436 ../editors/TextViewer.py:393
+#: ../editors/Viewer.py:439 ../editors/TextViewer.py:388
 msgid "Variable don't belong to this POU!"
 msgstr ""
 
-#: ../dialogs/LDElementDialog.py:90
+#: ../dialogs/LDElementDialog.py:92
 msgid "Variable:"
 msgstr ""
 
-#: ../controls/VariablePanel.py:89
+#: ../controls/VariablePanel.py:90
 msgid "Variables"
 msgstr ""
 
-#: ../controls/ProjectPropertiesPanel.py:156
+#: ../controls/ProjectPropertiesPanel.py:166
 msgid "Vertical:"
 msgstr ""
 
-#: ../Beremiz_service.py:605
+#: ../runtime/WampClient.py:113
+#, python-format
+msgid "WAMP Client connection failed (%s) .. retrying .."
+msgstr ""
+
+#: ../runtime/WampClient.py:117
+#, python-format
+msgid "WAMP Client connection lost (%s) .. retrying .."
+msgstr ""
+
+#: ../connectors/WAMP/dialog.py:54
+msgid "WAMP ID:"
+msgstr ""
+
+#: ../runtime/WampClient.py:172
+msgid "WAMP client connecting to :"
+msgstr ""
+
+#: ../runtime/WampClient.py:148
+msgid "WAMP client connection not established!"
+msgstr ""
+
+#: ../Beremiz_service.py:625
 msgid "WAMP client startup failed. "
 msgstr ""
 
-#: ../connectors/WAMP/__init__.py:97
+#: ../Beremiz_service.py:621
+msgid "WAMP config is incomplete."
+msgstr ""
+
+#: ../Beremiz_service.py:623
+msgid "WAMP config is missing."
+msgstr ""
+
+#: ../connectors/WAMP/__init__.py:99
 #, python-format
 msgid "WAMP connecting to URL : %s\n"
 msgstr ""
 
-#: ../connectors/WAMP/__init__.py:139
+#: ../connectors/WAMP/__init__.py:140
 msgid "WAMP connection timeout"
 msgstr ""
 
@@ -3422,31 +3469,43 @@
 msgid "WAMP connection to '%s' failed.\n"
 msgstr ""
 
-#: ../Beremiz_service.py:581
+#: ../Beremiz_service.py:595
 msgid "WAMP import failed :"
 msgstr ""
 
-#: ../wxglade_hmi/wxglade_hmi.py:41
+#: ../runtime/WampClient.py:126
+msgid "WAMP load error: "
+msgstr ""
+
+#: ../runtime/WampClient.py:108
+msgid "WAMP session left"
+msgstr ""
+
+#: ../wxglade_hmi/wxglade_hmi.py:44
 msgid "WXGLADE GUI"
 msgstr ""
 
-#: ../dialogs/PouDialog.py:135 ../editors/LDViewer.py:900
+#: ../runtime/WampClient.py:137
+msgid "Wamp secret load error:"
+msgstr ""
+
+#: ../dialogs/PouDialog.py:137 ../editors/LDViewer.py:902
 msgid "Warning"
 msgstr ""
 
-#: ../ProjectController.py:724
+#: ../ProjectController.py:726
 msgid "Warnings in ST/IL/SFC code generator :\n"
 msgstr ""
 
-#: ../dialogs/SearchInProjectDialog.py:81
+#: ../dialogs/SearchInProjectDialog.py:82
 msgid "Whole Project"
 msgstr ""
 
-#: ../controls/ProjectPropertiesPanel.py:124
+#: ../controls/ProjectPropertiesPanel.py:134
 msgid "Width:"
 msgstr ""
 
-#: ../dialogs/FindInPouDialog.py:92
+#: ../dialogs/FindInPouDialog.py:94
 msgid "Wrap search"
 msgstr ""
 
@@ -3454,91 +3513,91 @@
 msgid "Written by"
 msgstr ""
 
-#: ../features.py:34
+#: ../features.py:35
 msgid "WxGlade GUI"
 msgstr ""
 
-#: ../svgui/svgui.py:149
+#: ../svgui/svgui.py:150
 msgid ""
 "You don't have write permissions.\n"
 "Open Inkscape anyway ?"
 msgstr ""
 
-#: ../wxglade_hmi/wxglade_hmi.py:158
+#: ../wxglade_hmi/wxglade_hmi.py:160
 msgid ""
 "You don't have write permissions.\n"
 "Open wxGlade anyway ?"
 msgstr ""
 
-#: ../ProjectController.py:388
+#: ../ProjectController.py:390
 msgid ""
 "You must have permission to work on the project\n"
 "Work on a project copy ?"
 msgstr ""
 
-#: ../editors/LDViewer.py:895
+#: ../editors/LDViewer.py:897
 msgid "You must select the block or group of blocks around which a branch should be added!"
 msgstr ""
 
-#: ../editors/LDViewer.py:675
+#: ../editors/LDViewer.py:677
 msgid "You must select the wire where a contact should be added!"
 msgstr ""
 
-#: ../dialogs/SFCStepNameDialog.py:49 ../dialogs/PouNameDialog.py:47
+#: ../dialogs/SFCStepNameDialog.py:52 ../dialogs/PouNameDialog.py:50
 msgid "You must type a name!"
 msgstr ""
 
-#: ../dialogs/ForceVariableDialog.py:207
+#: ../dialogs/ForceVariableDialog.py:209
 msgid "You must type a value!"
 msgstr ""
 
-#: ../IDEFrame.py:452
+#: ../IDEFrame.py:440
 msgid "Zoom"
 msgstr ""
 
-#: ../dialogs/DurationEditorDialog.py:156
+#: ../dialogs/DurationEditorDialog.py:158
 msgid "days"
 msgstr ""
 
-#: ../PLCOpenEditor.py:364
+#: ../PLCOpenEditor.py:317
 #, python-format
 msgid "error: %s\n"
 msgstr ""
 
-#: ../util/ProcessLogger.py:174
+#: ../util/ProcessLogger.py:178
 #, python-brace-format
 msgid "exited with status {a1} (pid {a2})\n"
 msgstr ""
 
-#: ../dialogs/PouDialog.py:34
+#: ../dialogs/PouDialog.py:36
 msgid "function"
 msgstr ""
 
-#: ../dialogs/PouDialog.py:34
+#: ../dialogs/PouDialog.py:36
 msgid "functionBlock"
 msgstr ""
 
-#: ../dialogs/DurationEditorDialog.py:156
+#: ../dialogs/DurationEditorDialog.py:158
 msgid "hours"
 msgstr ""
 
-#: ../ProjectController.py:751
+#: ../ProjectController.py:753
 msgid "matiec installation is not found\n"
 msgstr ""
 
-#: ../dialogs/DurationEditorDialog.py:158
+#: ../dialogs/DurationEditorDialog.py:160
 msgid "milliseconds"
 msgstr ""
 
-#: ../dialogs/DurationEditorDialog.py:157
+#: ../dialogs/DurationEditorDialog.py:159
 msgid "minutes"
 msgstr ""
 
-#: ../dialogs/PouDialog.py:34
+#: ../dialogs/PouDialog.py:36
 msgid "program"
 msgstr ""
 
-#: ../dialogs/DurationEditorDialog.py:157
+#: ../dialogs/DurationEditorDialog.py:159
 msgid "seconds"
 msgstr ""
 
@@ -3554,16 +3613,16 @@
 msgid "string right of"
 msgstr ""
 
-#: ../Beremiz.py:164
+#: ../Beremiz.py:167
 msgid "update info unavailable."
 msgstr ""
 
-#: ../PLCOpenEditor.py:362
+#: ../PLCOpenEditor.py:315
 #, python-format
 msgid "warning: %s\n"
 msgstr ""
 
-#: ../PLCControler.py:1028
+#: ../PLCControler.py:576
 #, python-brace-format
 msgid "{a1} \"{a2}\" can't be pasted as a {a3}."
 msgstr ""
@@ -3638,6 +3697,72 @@
 msgid "Win32"
 msgstr ""
 
+msgid "ModbusRequest"
+msgstr ""
+
+msgid "SlaveID"
+msgstr ""
+
+msgid "Nr_of_Channels"
+msgstr ""
+
+msgid "Start_Address"
+msgstr ""
+
+msgid "Timeout_in_ms"
+msgstr ""
+
+msgid "MemoryArea"
+msgstr ""
+
+msgid "MemoryAreaType"
+msgstr ""
+
+msgid "ModbusTCPclient"
+msgstr ""
+
+msgid "Remote_IP_Address"
+msgstr ""
+
+msgid "Remote_Port_Number"
+msgstr ""
+
+msgid "Invocation_Rate_in_ms"
+msgstr ""
+
+msgid "ModbusServerNode"
+msgstr ""
+
+msgid "Local_IP_Address"
+msgstr ""
+
+msgid "Local_Port_Number"
+msgstr ""
+
+msgid "ModbusRTUclient"
+msgstr ""
+
+msgid "Serial_Port"
+msgstr ""
+
+msgid "Baud_Rate"
+msgstr ""
+
+msgid "Parity"
+msgstr ""
+
+msgid "Stop_Bits"
+msgstr ""
+
+msgid "ModbusRTUslave"
+msgstr ""
+
+msgid "ModbusRoot"
+msgstr ""
+
+msgid "MaxRemoteTCPclients"
+msgstr ""
+
 msgid "BaseParams"
 msgstr ""
 
--- a/modbus/modbus.py	Sat Jun 23 09:08:13 2018 +0200
+++ b/modbus/modbus.py	Sat Jun 23 09:17:20 2018 +0200
@@ -598,10 +598,11 @@
             for j in range(i + 1, len(IPServer_port_numbers)):
                 if IPServer_port_numbers[i][1] == IPServer_port_numbers[j][1]:
                     self.GetCTRoot().logger.write_warning(
-                        _("Error: Modbus/IP Servers %s.x and %s.x use the same port number %s.\n") % (
-                            _lt_to_str(IPServer_port_numbers[i][0]),
-                            _lt_to_str(IPServer_port_numbers[j][0]),
-                            IPServer_port_numbers[j][1]))
+                        _("Error: Modbus/IP Servers %{a1}.x and %{a2}.x use the same port number {a3}.\n").
+                        format(
+                            a1=_lt_to_str(IPServer_port_numbers[i][0]),
+                            a2=_lt_to_str(IPServer_port_numbers[j][0]),
+                            a3=IPServer_port_numbers[j][1]))
                     raise Exception
                     # TODO: return an error code instead of raising an
                     # exception
--- a/targets/Linux/plc_Linux_main.c	Sat Jun 23 09:08:13 2018 +0200
+++ b/targets/Linux/plc_Linux_main.c	Sat Jun 23 09:17:20 2018 +0200
@@ -82,6 +82,10 @@
 
 int PLC_shutdown = 0;
 
+int ForceSaveRetainReq(void) {
+    return PLC_shutdown;
+}
+
 void PLC_thread_proc(void *arg)
 {
     while (!PLC_shutdown) {
@@ -117,7 +121,7 @@
     pthread_mutex_lock(&debug_wait_mutex);
     pthread_mutex_lock(&python_wait_mutex);
 
-    timer_create (CLOCK_REALTIME, &sigev, &PLC_timer);
+    timer_create (CLOCK_MONOTONIC, &sigev, &PLC_timer);
     if(  __init(argc,argv) == 0 ){
         PLC_SetTimer(common_ticktime__,common_ticktime__);
 
@@ -231,34 +235,3 @@
 {
     pthread_mutex_lock(&python_mutex);
 }
-
-#ifndef HAVE_RETAIN
-void InitRetain(void)
-{
-}
-
-void CleanupRetain(void)
-{
-}
-
-int CheckRetainBuffer(void)
-{
-	return 1;
-}
-
-void ValidateRetainBuffer(void)
-{
-}
-
-void InValidateRetainBuffer(void)
-{
-}
-
-void Retain(unsigned int offset, unsigned int count, void *p)
-{
-}
-
-void Remind(unsigned int offset, unsigned int count, void *p)
-{
-}
-#endif // !HAVE_RETAIN
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/Linux/plc_Linux_main_retain.c	Sat Jun 23 09:17:20 2018 +0200
@@ -0,0 +1,311 @@
+/*
+  This file is part of Beremiz, a Integrated Development Environment for
+  programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
+
+  See COPYING.runtime
+
+  Copyright (C) 2018: Sergey Surkov <surkov.sv@summatechnology.ru>
+  Copyright (C) 2018: Andrey Skvortsov <andrej.skvortzov@gmail.com>
+
+*/
+
+#ifndef HAVE_RETAIN
+#include <stdio.h>
+#include <stdint.h>
+#include <unistd.h>
+#include "iec_types.h"
+
+int GetRetainSize();
+
+/* Retain buffer.  */
+FILE *retain_buffer;
+const char rb_file[]      = "retain_buffer_file";
+const char rb_file_bckp[] = "retain_buffer_file.bak";
+
+
+/* Retain header struct.  */
+struct retain_info_t {
+	uint32_t retain_size;
+	uint32_t hash_size;
+	uint8_t* hash;
+	uint32_t header_offset;
+	uint32_t header_crc;
+};
+
+/* Init retain info structure.  */
+struct retain_info_t retain_info;
+
+/* CRC lookup table and initial state.  */
+uint32_t crc32_table[256];
+uint32_t retain_crc;
+
+
+/* Generate CRC32 lookup table.  */
+void GenerateCRC32Table(void)
+{
+	unsigned int i, j;
+	/* Use CRC-32-IEEE 802.3 polynomial 0x04C11DB7 (bit reflected).  */
+	uint32_t poly = 0xEDB88320;
+
+	for (i = 0; i <= 0xFF; i++)
+	{
+		uint32_t c = i;
+		for (j = 0 ; j < 8 ; j++)
+			c = (c & 1) ? (c >> 1 ) ^ poly : (c >> 1);
+		crc32_table[i] = c;
+	}
+}
+
+
+/* Calculate CRC32 for len bytes from pointer buf with init starting value.  */
+uint32_t GenerateCRC32Sum(const void* buf, unsigned int len, uint32_t init)
+{
+	uint32_t crc = ~init;
+	unsigned char* current = (unsigned char*) buf;
+	while (len--)
+		crc = crc32_table[(crc ^ *current++) & 0xFF] ^ (crc >> 8);
+	return ~crc;
+}
+
+/* Calc CRC32 for retain file byte by byte.  */
+int CheckFileCRC(FILE* file_buffer)
+{
+	/* Set the magic constant for one-pass CRC calc according to ZIP CRC32.  */
+	const uint32_t magic_number = 0x2144df1c;
+
+	/* CRC initial state.  */
+	uint32_t calc_crc32 = 0;
+	char data_block = 0;
+
+	while(!feof(file_buffer)){
+		if (fread(&data_block, sizeof(data_block), 1, file_buffer))
+			calc_crc32 = GenerateCRC32Sum(&data_block, sizeof(char), calc_crc32);
+	}
+
+	/* Compare crc result with a magic number.  */
+	return (calc_crc32 == magic_number) ? 1 : 0;
+}
+
+/* Compare current hash with hash from file byte by byte.  */
+int CheckFilehash(void)
+{
+	int k;
+	int offset = sizeof(retain_info.retain_size);
+
+	rewind(retain_buffer);
+	fseek(retain_buffer, offset , SEEK_SET);
+
+	uint32_t size;
+	fread(&size, sizeof(size), 1, retain_buffer);
+	if (size != retain_info.hash_size)
+		return 0;
+
+	for(k = 0; k < retain_info.hash_size; k++){
+		uint8_t file_digit;
+		fread(&file_digit, sizeof(char), 1, retain_buffer);
+		if (file_digit != *(retain_info.hash+k))
+			return 0;
+	}
+
+	return 1;
+}
+
+void InitRetain(void)
+{
+	int i;
+
+	/* Generate CRC32 lookup table.  */
+	GenerateCRC32Table();
+
+	/* Get retain size in bytes */
+	retain_info.retain_size = GetRetainSize();
+
+	/* Hash stored in retain file as array of char in hex digits
+	   (that's why we divide strlen in two).  */
+	retain_info.hash_size = PLC_ID ? strlen(PLC_ID)/2 : 0;
+	//retain_info.hash_size = 0;
+	retain_info.hash = malloc(retain_info.hash_size);
+
+	/* Transform hash string into byte sequence.  */
+	for (i = 0; i < retain_info.hash_size; i++) {
+		int byte = 0;
+		sscanf((PLC_ID + i*2), "%02X", &byte);
+		retain_info.hash[i] = byte;
+	}
+
+	/* Calc header offset.  */
+	retain_info.header_offset = sizeof(retain_info.retain_size) + \
+		sizeof(retain_info.hash_size) + \
+		retain_info.hash_size;
+
+	/*  Set header CRC initial state.  */
+	retain_info.header_crc = 0;
+
+	/* Calc crc for header.  */
+	retain_info.header_crc = GenerateCRC32Sum(
+		&retain_info.retain_size,
+		sizeof(retain_info.retain_size),
+		retain_info.header_crc);
+
+	retain_info.header_crc = GenerateCRC32Sum(
+		&retain_info.hash_size,
+		sizeof(retain_info.hash_size),
+		retain_info.header_crc);
+
+	retain_info.header_crc = GenerateCRC32Sum(
+		retain_info.hash,
+		retain_info.hash_size,
+		retain_info.header_crc);
+}
+
+void CleanupRetain(void)
+{
+	/* Free hash memory.  */
+	free(retain_info.hash);
+}
+
+int CheckRetainFile(const char * file)
+{
+	retain_buffer = fopen(file, "rb");
+	if (retain_buffer) {
+		/* Check CRC32 and hash.  */
+		if (CheckFileCRC(retain_buffer))
+			if (CheckFilehash())
+				return 1;
+		fclose(retain_buffer);
+		retain_buffer = NULL;
+	}
+	return 0;
+}
+
+int CheckRetainBuffer(void)
+{
+	retain_buffer = NULL;
+	if (!retain_info.retain_size)
+		return 1;
+
+	/* Check latest retain file.  */
+	if (CheckRetainFile(rb_file))
+		return 1;
+
+	/* Check if we have backup.  */
+	if (CheckRetainFile(rb_file_bckp))
+		return 1;
+
+	/* We don't have any valid retain buffer - nothing to remind.  */
+	return 0;
+}
+
+#ifndef FILE_RETAIN_SAVE_PERIOD_S
+#define FILE_RETAIN_SAVE_PERIOD_S 1.0
+#endif
+
+static double CalcDiffSeconds(IEC_TIME* t1, IEC_TIME *t2)
+{
+	IEC_TIME dt ={
+		t1->tv_sec  - t2->tv_sec,
+		t1->tv_nsec - t2->tv_nsec
+	};
+
+	if ((dt.tv_nsec < -1000000000) || ((dt.tv_sec > 0) && (dt.tv_nsec < 0))){
+		dt.tv_sec--;
+		dt.tv_nsec += 1000000000;
+	}
+	if ((dt.tv_nsec > +1000000000) || ((dt.tv_sec < 0) && (dt.tv_nsec > 0))){
+		dt.tv_sec++;
+		dt.tv_nsec -= 1000000000;
+	}
+	return dt.tv_sec + 1e-9*dt.tv_nsec;
+}
+
+
+int RetainSaveNeeded(void)
+{
+	int ret = 0;
+	static IEC_TIME last_save;
+	IEC_TIME now;
+	double diff_s;
+
+	/* no retain */
+	if (!retain_info.retain_size)
+		return 0;
+
+	/* periodic retain flush to avoid high I/O load */
+	PLC_GetTime(&now);
+
+	diff_s = CalcDiffSeconds(&now, &last_save);
+
+	if ((diff_s > FILE_RETAIN_SAVE_PERIOD_S) || ForceSaveRetainReq()) {
+		ret = 1;
+		last_save = now;
+	}
+	return ret;
+}
+
+void ValidateRetainBuffer(void)
+{
+	if (!retain_buffer)
+		return;
+
+	/* Add retain data CRC to the end of buffer file.  */
+	fseek(retain_buffer, 0, SEEK_END);
+	fwrite(&retain_crc, sizeof(uint32_t), 1, retain_buffer);
+
+	/* Sync file buffer and close file.  */
+#ifdef __WIN32
+	fflush(retain_buffer);
+#else
+	fsync(fileno(retain_buffer));
+#endif
+
+	fclose(retain_buffer);
+	retain_buffer = NULL;
+}
+
+void InValidateRetainBuffer(void)
+{
+	if (!RetainSaveNeeded())
+		return;
+
+	/* Rename old retain file into *.bak if it exists.  */
+	rename(rb_file, rb_file_bckp);
+
+	/* Set file CRC initial value.  */
+	retain_crc = retain_info.header_crc;
+
+	/* Create new retain file.  */
+	retain_buffer = fopen(rb_file, "wb+");
+	if (!retain_buffer) {
+		fprintf(stderr, "Failed to create retain file : %s\n", rb_file);
+		return;
+	}
+
+	/* Write header to the new file.  */
+	fwrite(&retain_info.retain_size,
+		sizeof(retain_info.retain_size), 1, retain_buffer);
+	fwrite(&retain_info.hash_size,
+		sizeof(retain_info.hash_size),   1, retain_buffer);
+	fwrite(retain_info.hash ,
+		sizeof(char), retain_info.hash_size, retain_buffer);
+}
+
+void Retain(unsigned int offset, unsigned int count, void *p)
+{
+	if (!retain_buffer)
+		return;
+
+	/* Generate CRC 32 for each data block.  */
+	retain_crc = GenerateCRC32Sum(p, count, retain_crc);
+
+	/* Save current var in file.  */
+	fseek(retain_buffer, retain_info.header_offset+offset, SEEK_SET);
+	fwrite(p, count, 1, retain_buffer);
+}
+
+void Remind(unsigned int offset, unsigned int count, void *p)
+{
+	/* Remind variable from file.  */
+	fseek(retain_buffer, retain_info.header_offset+offset, SEEK_SET);
+	fread((void *)p, count, 1, retain_buffer);
+}
+#endif // !HAVE_RETAIN
--- a/targets/Win32/plc_Win32_main.c	Sat Jun 23 09:08:13 2018 +0200
+++ b/targets/Win32/plc_Win32_main.c	Sat Jun 23 09:17:20 2018 +0200
@@ -54,11 +54,19 @@
     }
 }
 
+int PLC_shutdown;
+
+int ForceSaveRetainReq(void) {
+    return PLC_shutdown;
+}
+
 /* Variable used to stop plcloop thread */
 void PlcLoop()
 {
-    while(WaitForSingleObject(PLC_timer, INFINITE) == WAIT_OBJECT_0)
-    {
+    PLC_shutdown = 0;
+    while(!PLC_shutdown) {
+        if (WaitForSingleObject(PLC_timer, INFINITE) != WAIT_OBJECT_0)
+            PLC_shutdown = 1;
         PLC_timer_notify();
     }
 }
@@ -241,43 +249,6 @@
 	WaitForSingleObject(python_sem, INFINITE);
 }
 
-#ifndef HAVE_RETAIN
-void InitRetain(void)
-{
-}
-
-void CleanupRetain(void)
-{
-}
-
-int CheckRetainBuffer(void)
-{
-	return 1;
-}
-
-void ValidateRetainBuffer(void)
-{
-}
-
-void InValidateRetainBuffer(void)
-{
-}
-
-void Retain(unsigned int offset, unsigned int count, void * p)
-{
-    /*
-    unsigned int position;
-    for(position=0; position<count; position++ ){
-        printf("%d : 0x%2.2x\n", offset+position, ((char*)p)[position]);
-    }
-    */
-}
-
-void Remind(unsigned int offset, unsigned int count, void *p)
-{
-}
-#endif // !HAVE_RETAIN
-
 static void __attribute__((constructor))
 beremiz_dll_init(void)
 {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/Win32/plc_Win32_main_retain.c	Sat Jun 23 09:17:20 2018 +0200
@@ -0,0 +1,311 @@
+/*
+  This file is part of Beremiz, a Integrated Development Environment for
+  programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
+
+  See COPYING.runtime
+
+  Copyright (C) 2018: Sergey Surkov <surkov.sv@summatechnology.ru>
+  Copyright (C) 2018: Andrey Skvortsov <andrej.skvortzov@gmail.com>
+
+*/
+
+#ifndef HAVE_RETAIN
+#include <stdio.h>
+#include <stdint.h>
+#include <unistd.h>
+#include "iec_types.h"
+
+int GetRetainSize();
+
+/* Retain buffer.  */
+FILE *retain_buffer;
+const char rb_file[]      = "retain_buffer_file";
+const char rb_file_bckp[] = "retain_buffer_file.bak";
+
+
+/* Retain header struct.  */
+struct retain_info_t {
+	uint32_t retain_size;
+	uint32_t hash_size;
+	uint8_t* hash;
+	uint32_t header_offset;
+	uint32_t header_crc;
+};
+
+/* Init retain info structure.  */
+struct retain_info_t retain_info;
+
+/* CRC lookup table and initial state.  */
+uint32_t crc32_table[256];
+uint32_t retain_crc;
+
+
+/* Generate CRC32 lookup table.  */
+void GenerateCRC32Table(void)
+{
+	unsigned int i, j;
+	/* Use CRC-32-IEEE 802.3 polynomial 0x04C11DB7 (bit reflected).  */
+	uint32_t poly = 0xEDB88320;
+
+	for (i = 0; i <= 0xFF; i++)
+	{
+		uint32_t c = i;
+		for (j = 0 ; j < 8 ; j++)
+			c = (c & 1) ? (c >> 1 ) ^ poly : (c >> 1);
+		crc32_table[i] = c;
+	}
+}
+
+
+/* Calculate CRC32 for len bytes from pointer buf with init starting value.  */
+uint32_t GenerateCRC32Sum(const void* buf, unsigned int len, uint32_t init)
+{
+	uint32_t crc = ~init;
+	unsigned char* current = (unsigned char*) buf;
+	while (len--)
+		crc = crc32_table[(crc ^ *current++) & 0xFF] ^ (crc >> 8);
+	return ~crc;
+}
+
+/* Calc CRC32 for retain file byte by byte.  */
+int CheckFileCRC(FILE* file_buffer)
+{
+	/* Set the magic constant for one-pass CRC calc according to ZIP CRC32.  */
+	const uint32_t magic_number = 0x2144df1c;
+
+	/* CRC initial state.  */
+	uint32_t calc_crc32 = 0;
+	char data_block = 0;
+
+	while(!feof(file_buffer)){
+		if (fread(&data_block, sizeof(data_block), 1, file_buffer))
+			calc_crc32 = GenerateCRC32Sum(&data_block, sizeof(char), calc_crc32);
+	}
+
+	/* Compare crc result with a magic number.  */
+	return (calc_crc32 == magic_number) ? 1 : 0;
+}
+
+/* Compare current hash with hash from file byte by byte.  */
+int CheckFilehash(void)
+{
+	int k;
+	int offset = sizeof(retain_info.retain_size);
+
+	rewind(retain_buffer);
+	fseek(retain_buffer, offset , SEEK_SET);
+
+	uint32_t size;
+	fread(&size, sizeof(size), 1, retain_buffer);
+	if (size != retain_info.hash_size)
+		return 0;
+
+	for(k = 0; k < retain_info.hash_size; k++){
+		uint8_t file_digit;
+		fread(&file_digit, sizeof(char), 1, retain_buffer);
+		if (file_digit != *(retain_info.hash+k))
+			return 0;
+	}
+
+	return 1;
+}
+
+void InitRetain(void)
+{
+	int i;
+
+	/* Generate CRC32 lookup table.  */
+	GenerateCRC32Table();
+
+	/* Get retain size in bytes */
+	retain_info.retain_size = GetRetainSize();
+
+	/* Hash stored in retain file as array of char in hex digits
+	   (that's why we divide strlen in two).  */
+	retain_info.hash_size = PLC_ID ? strlen(PLC_ID)/2 : 0;
+	//retain_info.hash_size = 0;
+	retain_info.hash = malloc(retain_info.hash_size);
+
+	/* Transform hash string into byte sequence.  */
+	for (i = 0; i < retain_info.hash_size; i++) {
+		int byte = 0;
+		sscanf((PLC_ID + i*2), "%02X", &byte);
+		retain_info.hash[i] = byte;
+	}
+
+	/* Calc header offset.  */
+	retain_info.header_offset = sizeof(retain_info.retain_size) + \
+		sizeof(retain_info.hash_size) + \
+		retain_info.hash_size;
+
+	/*  Set header CRC initial state.  */
+	retain_info.header_crc = 0;
+
+	/* Calc crc for header.  */
+	retain_info.header_crc = GenerateCRC32Sum(
+		&retain_info.retain_size,
+		sizeof(retain_info.retain_size),
+		retain_info.header_crc);
+
+	retain_info.header_crc = GenerateCRC32Sum(
+		&retain_info.hash_size,
+		sizeof(retain_info.hash_size),
+		retain_info.header_crc);
+
+	retain_info.header_crc = GenerateCRC32Sum(
+		retain_info.hash,
+		retain_info.hash_size,
+		retain_info.header_crc);
+}
+
+void CleanupRetain(void)
+{
+	/* Free hash memory.  */
+	free(retain_info.hash);
+}
+
+int CheckRetainFile(const char * file)
+{
+	retain_buffer = fopen(file, "rb");
+	if (retain_buffer) {
+		/* Check CRC32 and hash.  */
+		if (CheckFileCRC(retain_buffer))
+			if (CheckFilehash())
+				return 1;
+		fclose(retain_buffer);
+		retain_buffer = NULL;
+	}
+	return 0;
+}
+
+int CheckRetainBuffer(void)
+{
+	retain_buffer = NULL;
+	if (!retain_info.retain_size)
+		return 1;
+
+	/* Check latest retain file.  */
+	if (CheckRetainFile(rb_file))
+		return 1;
+
+	/* Check if we have backup.  */
+	if (CheckRetainFile(rb_file_bckp))
+		return 1;
+
+	/* We don't have any valid retain buffer - nothing to remind.  */
+	return 0;
+}
+
+#ifndef FILE_RETAIN_SAVE_PERIOD_S
+#define FILE_RETAIN_SAVE_PERIOD_S 1.0
+#endif
+
+static double CalcDiffSeconds(IEC_TIME* t1, IEC_TIME *t2)
+{
+	IEC_TIME dt ={
+		t1->tv_sec  - t2->tv_sec,
+		t1->tv_nsec - t2->tv_nsec
+	};
+
+	if ((dt.tv_nsec < -1000000000) || ((dt.tv_sec > 0) && (dt.tv_nsec < 0))){
+		dt.tv_sec--;
+		dt.tv_nsec += 1000000000;
+	}
+	if ((dt.tv_nsec > +1000000000) || ((dt.tv_sec < 0) && (dt.tv_nsec > 0))){
+		dt.tv_sec++;
+		dt.tv_nsec -= 1000000000;
+	}
+	return dt.tv_sec + 1e-9*dt.tv_nsec;
+}
+
+
+int RetainSaveNeeded(void)
+{
+	int ret = 0;
+	static IEC_TIME last_save;
+	IEC_TIME now;
+	double diff_s;
+
+	/* no retain */
+	if (!retain_info.retain_size)
+		return 0;
+
+	/* periodic retain flush to avoid high I/O load */
+	PLC_GetTime(&now);
+
+	diff_s = CalcDiffSeconds(&now, &last_save);
+
+	if ((diff_s > FILE_RETAIN_SAVE_PERIOD_S) || ForceSaveRetainReq()) {
+		ret = 1;
+		last_save = now;
+	}
+	return ret;
+}
+
+void ValidateRetainBuffer(void)
+{
+	if (!retain_buffer)
+		return;
+
+	/* Add retain data CRC to the end of buffer file.  */
+	fseek(retain_buffer, 0, SEEK_END);
+	fwrite(&retain_crc, sizeof(uint32_t), 1, retain_buffer);
+
+	/* Sync file buffer and close file.  */
+#ifdef __WIN32
+	fflush(retain_buffer);
+#else
+	fsync(fileno(retain_buffer));
+#endif
+
+	fclose(retain_buffer);
+	retain_buffer = NULL;
+}
+
+void InValidateRetainBuffer(void)
+{
+	if (!RetainSaveNeeded())
+		return;
+
+	/* Rename old retain file into *.bak if it exists.  */
+	rename(rb_file, rb_file_bckp);
+
+	/* Set file CRC initial value.  */
+	retain_crc = retain_info.header_crc;
+
+	/* Create new retain file.  */
+	retain_buffer = fopen(rb_file, "wb+");
+	if (!retain_buffer) {
+		fprintf(stderr, "Failed to create retain file : %s\n", rb_file);
+		return;
+	}
+
+	/* Write header to the new file.  */
+	fwrite(&retain_info.retain_size,
+		sizeof(retain_info.retain_size), 1, retain_buffer);
+	fwrite(&retain_info.hash_size,
+		sizeof(retain_info.hash_size),   1, retain_buffer);
+	fwrite(retain_info.hash ,
+		sizeof(char), retain_info.hash_size, retain_buffer);
+}
+
+void Retain(unsigned int offset, unsigned int count, void *p)
+{
+	if (!retain_buffer)
+		return;
+
+	/* Generate CRC 32 for each data block.  */
+	retain_crc = GenerateCRC32Sum(p, count, retain_crc);
+
+	/* Save current var in file.  */
+	fseek(retain_buffer, retain_info.header_offset+offset, SEEK_SET);
+	fwrite(p, count, 1, retain_buffer);
+}
+
+void Remind(unsigned int offset, unsigned int count, void *p)
+{
+	/* Remind variable from file.  */
+	fseek(retain_buffer, retain_info.header_offset+offset, SEEK_SET);
+	fread((void *)p, count, 1, retain_buffer);
+}
+#endif // !HAVE_RETAIN
--- a/targets/beremiz.h	Sat Jun 23 09:08:13 2018 +0200
+++ b/targets/beremiz.h	Sat Jun 23 09:17:20 2018 +0200
@@ -9,6 +9,12 @@
 #define LOG_DEBUG 3
 
 extern unsigned long long common_ticktime__;
-int LogMessage(uint8_t level, char* buf, uint32_t size);
+
+#ifdef TARGET_LOGGING_DISABLE
+#define LogMessage(level, buf, size)
+#else
+int     LogMessage(uint8_t level, char* buf, uint32_t size);
+#endif
+
 long AtomicCompareExchange(long* atomicvar,long compared, long exchange);
 
--- a/targets/plc_debug.c	Sat Jun 23 09:08:13 2018 +0200
+++ b/targets/plc_debug.c	Sat Jun 23 09:17:20 2018 +0200
@@ -61,7 +61,7 @@
 typedef void(*__for_each_variable_do_fp)(dbgvardsc_t*);
 void __for_each_variable_do(__for_each_variable_do_fp fp)
 {
-    int i;
+    unsigned int i;
     for(i = 0; i < sizeof(dbgvardsc)/sizeof(dbgvardsc_t); i++){
         dbgvardsc_t *dsc = &dbgvardsc[i];
         if(dsc->type != UNKNOWN_ENUM) 
@@ -211,6 +211,31 @@
     BufferIterator(dsc, 0);
 }
 
+
+unsigned int retain_size = 0;
+
+/* GetRetainSizeIterator */
+void GetRetainSizeIterator(dbgvardsc_t *dsc)
+{
+    void *real_value_p = NULL;
+    char flags = 0;
+    UnpackVar(dsc, &real_value_p, &flags);
+
+    if(flags & __IEC_RETAIN_FLAG){
+        USINT size = __get_type_enum_size(dsc->type);
+        /* Calc retain buffer size */
+        retain_size += size;
+    }
+}
+
+/* Return size of all retain variables */
+unsigned int GetRetainSize(void)
+{
+    __for_each_variable_do(GetRetainSizeIterator);
+    return retain_size;
+}
+
+
 extern void PLC_GetTime(IEC_TIME*);
 extern int TryEnterDebugSection(void);
 extern long AtomicCompareExchange(long*, long, long);
@@ -274,7 +299,7 @@
              *(((__IEC_##TYPENAME##_p *)varp)->value) = *((TYPENAME *)force);\
             }\
             break;
-void RegisterDebugVariable(int idx, void* force)
+void RegisterDebugVariable(unsigned int idx, void* force)
 {
     if(idx  < sizeof(dbgvardsc)/sizeof(dbgvardsc_t)){
         unsigned char flags = force ?
--- a/targets/toolchain_gcc.py	Sat Jun 23 09:08:13 2018 +0200
+++ b/targets/toolchain_gcc.py	Sat Jun 23 09:17:20 2018 +0200
@@ -190,7 +190,7 @@
 
                         status, _result, _err_result = ProcessLogger(
                             self.CTRInstance.logger,
-                            "\"%s\" -c \"%s\" -o \"%s\" %s %s" %
+                            "\"%s\" -c \"%s\" -o \"%s\" -O2 %s %s" %
                             (self.compiler, CFile, objectfilename, Builder_CFLAGS, CFLAGS)
                         ).spin()
 
--- a/tests/first_steps/plc.xml	Sat Jun 23 09:08:13 2018 +0200
+++ b/tests/first_steps/plc.xml	Sat Jun 23 09:17:20 2018 +0200
@@ -1,7 +1,7 @@
 <?xml version='1.0' encoding='utf-8'?>
 <project xmlns:ns1="http://www.plcopen.org/xml/tc6_0201" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.plcopen.org/xml/tc6_0201">
   <fileHeader companyName="Beremiz" productName="Beremiz" productVersion="1" creationDateTime="2016-10-24T18:09:22"/>
-  <contentHeader name="First Steps" modificationDateTime="2016-10-26T20:18:02">
+  <contentHeader name="First Steps" modificationDateTime="2018-05-31T12:59:20">
     <coordinateInfo>
       <fbd>
         <scaling x="0" y="0"/>
@@ -17,6 +17,58 @@
   <types>
     <dataTypes/>
     <pous>
+      <pou name="AverageVal" pouType="function">
+        <interface>
+          <returnType>
+            <REAL/>
+          </returnType>
+          <inputVars>
+            <variable name="Cnt1">
+              <type>
+                <INT/>
+              </type>
+            </variable>
+            <variable name="Cnt2">
+              <type>
+                <INT/>
+              </type>
+            </variable>
+            <variable name="Cnt3">
+              <type>
+                <INT/>
+              </type>
+            </variable>
+            <variable name="Cnt4">
+              <type>
+                <INT/>
+              </type>
+            </variable>
+            <variable name="Cnt5">
+              <type>
+                <INT/>
+              </type>
+            </variable>
+          </inputVars>
+          <localVars>
+            <variable name="InputsNumber">
+              <type>
+                <REAL/>
+              </type>
+              <initialValue>
+                <simpleValue value="5.0"/>
+              </initialValue>
+              <documentation>
+                <xhtml:p><![CDATA[Количество входных значений]]></xhtml:p>
+              </documentation>
+            </variable>
+          </localVars>
+        </interface>
+        <body>
+          <ST>
+            <xhtml:p><![CDATA[AverageVal := INT_TO_REAL(Cnt1+Cnt2+Cnt3+Cnt4+Cnt5)/InputsNumber;]]></xhtml:p>
+          </ST>
+        </body>
+      </pou>
       <pou name="plc_prg" pouType="program">
         <interface>
           <inputVars>
@@ -79,6 +131,11 @@
                 <derived name="CounterLD"/>
               </type>
             </variable>
+            <variable name="AVCnt">
+              <type>
+                <REAL/>
+              </type>
+            </variable>
           </localVars>
         </interface>
         <body>
@@ -105,24 +162,13 @@
                 </variable>
               </outputVariables>
             </block>
-            <inVariable localId="2" executionOrderId="0" height="24" width="79" negated="false">
+            <inVariable localId="2" executionOrderId="0" height="30" width="79" negated="false">
               <position x="35" y="81"/>
               <connectionPointOut>
-                <relPosition x="79" y="12"/>
+                <relPosition x="79" y="15"/>
               </connectionPointOut>
               <expression>Reset</expression>
             </inVariable>
-            <outVariable localId="3" executionOrderId="0" height="24" width="106" negated="false">
-              <position x="424" y="81"/>
-              <connectionPointIn>
-                <relPosition x="0" y="12"/>
-                <connection refLocalId="1" formalParameter="OUT">
-                  <position x="424" y="93"/>
-                  <position x="332" y="93"/>
-                </connection>
-              </connectionPointIn>
-              <expression>Cnt1</expression>
-            </outVariable>
             <block localId="4" typeName="CounterFBD" instanceName="CounterFBD0" executionOrderId="0" height="54" width="121">
               <position x="211" y="145"/>
               <inputVariables>
@@ -145,19 +191,8 @@
                 </variable>
               </outputVariables>
             </block>
-            <outVariable localId="5" executionOrderId="0" height="24" width="103" negated="false">
-              <position x="426" y="170"/>
-              <connectionPointIn>
-                <relPosition x="0" y="12"/>
-                <connection refLocalId="4" formalParameter="OUT">
-                  <position x="426" y="182"/>
-                  <position x="332" y="182"/>
-                </connection>
-              </connectionPointIn>
-              <expression>Cnt2</expression>
-            </outVariable>
-            <comment localId="6" height="264" width="417">
-              <position x="569" y="55"/>
+            <comment localId="6" height="306" width="434">
+              <position x="620" y="130"/>
               <content>
                 <xhtml:p><![CDATA[In this example function block with the same functionality 
 is created using all five IEC 61131-3 programing languages:
@@ -199,17 +234,6 @@
                 </variable>
               </outputVariables>
             </block>
-            <outVariable localId="8" executionOrderId="0" height="24" width="97" negated="false">
-              <position x="431" y="261"/>
-              <connectionPointIn>
-                <relPosition x="0" y="12"/>
-                <connection refLocalId="7" formalParameter="OUT">
-                  <position x="431" y="273"/>
-                  <position x="332" y="273"/>
-                </connection>
-              </connectionPointIn>
-              <expression>Cnt3</expression>
-            </outVariable>
             <block localId="9" typeName="CounterIL" instanceName="CounterIL0" executionOrderId="0" height="62" width="121">
               <position x="211" y="322"/>
               <inputVariables>
@@ -232,35 +256,24 @@
                 </variable>
               </outputVariables>
             </block>
-            <inVariable localId="10" executionOrderId="0" height="24" width="67" negated="false">
+            <inVariable localId="10" executionOrderId="0" height="30" width="67" negated="false">
               <position x="34" y="351"/>
               <connectionPointOut>
-                <relPosition x="67" y="12"/>
+                <relPosition x="67" y="15"/>
               </connectionPointOut>
               <expression>Reset</expression>
             </inVariable>
-            <outVariable localId="11" executionOrderId="0" height="24" width="91" negated="false">
-              <position x="434" y="351"/>
-              <connectionPointIn>
-                <relPosition x="0" y="12"/>
-                <connection refLocalId="9" formalParameter="OUT">
-                  <position x="434" y="363"/>
-                  <position x="332" y="363"/>
-                </connection>
-              </connectionPointIn>
-              <expression>Cnt4</expression>
-            </outVariable>
-            <inVariable localId="12" executionOrderId="0" height="24" width="67" negated="false">
+            <inVariable localId="12" executionOrderId="0" height="30" width="67" negated="false">
               <position x="36" y="261"/>
               <connectionPointOut>
-                <relPosition x="67" y="12"/>
+                <relPosition x="67" y="15"/>
               </connectionPointOut>
               <expression>Reset</expression>
             </inVariable>
-            <inVariable localId="13" executionOrderId="0" height="24" width="79" negated="false">
+            <inVariable localId="13" executionOrderId="0" height="30" width="79" negated="false">
               <position x="36" y="170"/>
               <connectionPointOut>
-                <relPosition x="79" y="12"/>
+                <relPosition x="79" y="15"/>
               </connectionPointOut>
               <expression>Reset</expression>
             </inVariable>
@@ -286,24 +299,156 @@
                 </variable>
               </outputVariables>
             </block>
-            <outVariable localId="15" executionOrderId="0" height="24" width="88" negated="false">
-              <position x="437" y="440"/>
-              <connectionPointIn>
-                <relPosition x="0" y="12"/>
-                <connection refLocalId="14" formalParameter="Out">
-                  <position x="437" y="452"/>
-                  <position x="334" y="452"/>
-                </connection>
-              </connectionPointIn>
-              <expression>Cnt5</expression>
-            </outVariable>
-            <inVariable localId="16" executionOrderId="0" height="24" width="64" negated="false">
+            <inVariable localId="16" executionOrderId="0" height="30" width="64" negated="false">
               <position x="36" y="440"/>
               <connectionPointOut>
-                <relPosition x="64" y="12"/>
+                <relPosition x="64" y="15"/>
               </connectionPointOut>
               <expression>Reset</expression>
             </inVariable>
+            <block localId="17" typeName="AverageVal" executionOrderId="0" height="470" width="90">
+              <position x="514" y="28"/>
+              <inputVariables>
+                <variable formalParameter="Cnt1">
+                  <connectionPointIn>
+                    <relPosition x="0" y="65"/>
+                    <connection refLocalId="3">
+                      <position x="514" y="93"/>
+                      <position x="474" y="93"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="Cnt2">
+                  <connectionPointIn>
+                    <relPosition x="0" y="155"/>
+                    <connection refLocalId="5">
+                      <position x="514" y="183"/>
+                      <position x="497" y="183"/>
+                      <position x="497" y="182"/>
+                      <position x="473" y="182"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="Cnt3">
+                  <connectionPointIn>
+                    <relPosition x="0" y="245"/>
+                    <connection refLocalId="8">
+                      <position x="514" y="273"/>
+                      <position x="472" y="273"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="Cnt4">
+                  <connectionPointIn>
+                    <relPosition x="0" y="335"/>
+                    <connection refLocalId="11">
+                      <position x="514" y="363"/>
+                      <position x="469" y="363"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+                <variable formalParameter="Cnt5">
+                  <connectionPointIn>
+                    <relPosition x="0" y="425"/>
+                    <connection refLocalId="15">
+                      <position x="514" y="453"/>
+                      <position x="495" y="453"/>
+                      <position x="495" y="452"/>
+                      <position x="469" y="452"/>
+                    </connection>
+                  </connectionPointIn>
+                </variable>
+              </inputVariables>
+              <inOutVariables/>
+              <outputVariables>
+                <variable formalParameter="OUT">
+                  <connectionPointOut>
+                    <relPosition x="90" y="65"/>
+                  </connectionPointOut>
+                </variable>
+              </outputVariables>
+            </block>
+            <outVariable localId="18" executionOrderId="0" height="30" width="50" negated="false">
+              <position x="649" y="78"/>
+              <connectionPointIn>
+                <relPosition x="0" y="15"/>
+                <connection refLocalId="17" formalParameter="OUT">
+                  <position x="649" y="93"/>
+                  <position x="604" y="93"/>
+                </connection>
+              </connectionPointIn>
+              <expression>AVCnt</expression>
+            </outVariable>
+            <inOutVariable localId="3" executionOrderId="0" height="30" width="106" negatedOut="false" negatedIn="false">
+              <position x="368" y="78"/>
+              <connectionPointIn>
+                <relPosition x="0" y="15"/>
+                <connection refLocalId="1" formalParameter="OUT">
+                  <position x="368" y="93"/>
+                  <position x="332" y="93"/>
+                </connection>
+              </connectionPointIn>
+              <connectionPointOut>
+                <relPosition x="106" y="15"/>
+              </connectionPointOut>
+              <expression>Cnt1</expression>
+            </inOutVariable>
+            <inOutVariable localId="5" executionOrderId="0" height="30" width="103" negatedOut="false" negatedIn="false">
+              <position x="370" y="167"/>
+              <connectionPointIn>
+                <relPosition x="0" y="15"/>
+                <connection refLocalId="4" formalParameter="OUT">
+                  <position x="370" y="182"/>
+                  <position x="332" y="182"/>
+                </connection>
+              </connectionPointIn>
+              <connectionPointOut>
+                <relPosition x="103" y="15"/>
+              </connectionPointOut>
+              <expression>Cnt2</expression>
+            </inOutVariable>
+            <inOutVariable localId="8" executionOrderId="0" height="30" width="97" negatedOut="false" negatedIn="false">
+              <position x="375" y="258"/>
+              <connectionPointIn>
+                <relPosition x="0" y="15"/>
+                <connection refLocalId="7" formalParameter="OUT">
+                  <position x="375" y="273"/>
+                  <position x="332" y="273"/>
+                </connection>
+              </connectionPointIn>
+              <connectionPointOut>
+                <relPosition x="97" y="15"/>
+              </connectionPointOut>
+              <expression>Cnt3</expression>
+            </inOutVariable>
+            <inOutVariable localId="11" executionOrderId="0" height="30" width="91" negatedOut="false" negatedIn="false">
+              <position x="378" y="348"/>
+              <connectionPointIn>
+                <relPosition x="0" y="15"/>
+                <connection refLocalId="9" formalParameter="OUT">
+                  <position x="378" y="363"/>
+                  <position x="332" y="363"/>
+                </connection>
+              </connectionPointIn>
+              <connectionPointOut>
+                <relPosition x="91" y="15"/>
+              </connectionPointOut>
+              <expression>Cnt4</expression>
+            </inOutVariable>
+            <inOutVariable localId="15" executionOrderId="0" height="30" width="88" negatedOut="false" negatedIn="false">
+              <position x="381" y="437"/>
+              <connectionPointIn>
+                <relPosition x="0" y="15"/>
+                <connection refLocalId="14" formalParameter="Out">
+                  <position x="381" y="452"/>
+                  <position x="334" y="452"/>
+                </connection>
+              </connectionPointIn>
+              <connectionPointOut>
+                <relPosition x="88" y="15"/>
+              </connectionPointOut>
+              <expression>Cnt5</expression>
+            </inOutVariable>
           </FBD>
         </body>
       </pou>
--- a/tests/tools/check_source.sh	Sat Jun 23 09:08:13 2018 +0200
+++ b/tests/tools/check_source.sh	Sat Jun 23 09:17:20 2018 +0200
@@ -35,8 +35,6 @@
 compile_checks()
 {
     echo "Syntax checking using python ..."
-    py_files=$(find . -name '*.py')
-
     python --version
 
     # remove compiled Python files
@@ -93,7 +91,7 @@
     ignore=$user_ignore,$default_ignore
 
     # $pep8 --ignore $ignore --exclude build ./
-    $pep8 --max-line-length 300 --exclude build ./
+    $pep8 --max-line-length 300 --exclude build $py_files
     if [ $? -ne 0 ]; then
         set_exit_error
     fi
@@ -164,7 +162,7 @@
     user_select=$user_select,E402   # E402 module level import not at top of file
     user_select=$user_select,W503   # W503 line break before binary operator
 
-    $pep8 --select $user_select --exclude=build .
+    $pep8 --select $user_select --exclude=build $py_files
     if [ $? -ne 0 ]; then
         set_exit_error
     fi
@@ -187,7 +185,7 @@
     echo -n "flake8 version: "
     flake8 --version
 
-    flake8 --max-line-length=300  --exclude=build --builtins="_" ./
+    flake8 --max-line-length=300  --exclude=build --builtins="_" $py_files
     if [ $? -ne 0 ]; then
         set_exit_error
     fi
@@ -219,7 +217,7 @@
     disable=$disable,W1401        # (anomalous-backslash-in-string) Anomalous backslash in string: '\.'. String constant might be missing an r prefix.
     disable=$disable,W0613        # (unused-argument) Unused argument 'X'
     disable=$disable,W0622        # (redefined-builtin) Redefining built-in
-    disable=$disable,W0621        # (redefined-outer-name) Redefining name 'Y' from outer scope (line X)    
+    disable=$disable,W0621        # (redefined-outer-name) Redefining name 'Y' from outer scope (line X)
     disable=$disable,W0122        # (exec-used) Use of exec
     disable=$disable,W0123        # (eval-used) Use of eval
     disable=$disable,I0011        # (locally-disabled) Locally disabling ungrouped-imports (C0412)
@@ -233,7 +231,7 @@
     disable=$disable,W0703        # broad-except
     disable=$disable,C0301        # Line too long
     disable=$disable,C0302        # Too many lines in module
-    disable=$disable,W0511        # fixme    
+    disable=$disable,W0511        # fixme
     disable=$disable,R0901        # (too-many-ancestors) Too many ancestors (9/7)
     disable=$disable,R0902        # (too-many-instance-attributes) Too many instance attributes (10/7)
     disable=$disable,R0903        # (too-few-public-methods) Too few public methods (0/2)
@@ -250,14 +248,14 @@
 
     enable=
     enable=$enable,E1601          # print statement used
-    enable=$enable,C0325          # (superfluous-parens) Unnecessary parens after keyword    
-    enable=$enable,W0404          # reimported module    
+    enable=$enable,C0325          # (superfluous-parens) Unnecessary parens after keyword
+    enable=$enable,W0404          # reimported module
     enable=$enable,C0411          # (wrong-import-order) standard import "import x" comes before "import y"
     enable=$enable,W0108          # (unnecessary-lambda) Lambda may not be necessary
     enable=$enable,C0412          # (ungrouped-imports) Imports from package X are not grouped
     enable=$enable,C0321          # (multiple-statements) More than one statement on a single line
     enable=$enable,W0231          # (super-init-not-called) __init__ method from base class is not called
-    enable=$enable,W0105          # (pointless-string-statement) String statement has no effect    
+    enable=$enable,W0105          # (pointless-string-statement) String statement has no effect
     enable=$enable,W0311          # (bad-indentation) Bad indentation. Found 16 spaces, expected 12
     enable=$enable,W0101          # (unreachable) Unreachable code
     enable=$enable,E0102          # (function-redefined) method already defined
@@ -306,23 +304,81 @@
     fi
     # echo $options
 
-    find ./ -name '*.py' | grep -v '/build/' | xargs pylint $options 
-    if [ $? -ne 0 ]; then
-        set_exit_error
-    fi
-
-    echo "DONE"
-    echo ""
+    echo $py_files | xargs pylint $options
+    if [ $? -ne 0 ]; then
+        set_exit_error
+    fi
+
+    echo "DONE"
+    echo ""
+}
+
+
+get_files_to_check()
+{
+    py_files=$(find . -name '*.py' -not -path '*/build/*')
+    if [ "$1" = "--only-changes" ]; then
+        if which hg > /dev/null; then
+            if [ ! -z "$HG_NODE" ]; then
+                hg_change="--change $HG_NODE"
+                msg="for commit $HG_NODE"
+            else
+                hg_change=""
+                msg="in local repository"
+            fi
+            echo "Only changes ${msg} will be checked"
+            echo ""
+            py_files=$(hg status -m -a -n -I '**.py' $hg_change)
+            if [ $? -ne 0 ]; then
+                exit 1;
+            fi
+       fi
+    fi
+    if [ "$1" = "--files-to-check" ]; then
+        list="$2"
+        if [ -z "$list" ]; then
+            echo "--files-to-check requires filename as argument"
+            print_help
+        fi
+        if [ -e "$list" ]; then
+            py_files=$(cat $2 | grep '\.py$')
+        fi
+    fi
+    if [ -z "$py_files" ]; then
+        echo "No files to check"
+        exit 0;
+    fi
+}
+
+
+print_help()
+{
+    echo "Usage: check_source.sh [--only-changes | --files-to-check <filename> ]"
+    echo ""
+    echo "By default without arguments script checks all python source files"
+    echo ""
+    echo "--only-changes"
+    echo "                only files with local changes are checked. "
+    echo "                If script is called from mercurial pretxncommit hook,"
+    echo "                then only commited files are checked"
+    echo ""
+    echo "--files-to-check <file.lst>"
+    echo "                script read list of files to check from file.lst"
+
+    exit 1
 }
 
 main()
 {
+    get_files_to_check $@
     compile_checks
     pep8_checks_default
     # pep8_checks_selected
+
     # flake8_checks
     pylint_checks
     exit $exit_code
 }
 
-main
+[ "$1" = "--help" -o "$1" = "-h" ] && print_help
+main $@
--- a/wxglade_hmi/wxglade_hmi.py	Sat Jun 23 09:08:13 2018 +0200
+++ b/wxglade_hmi/wxglade_hmi.py	Sat Jun 23 09:17:20 2018 +0200
@@ -90,7 +90,10 @@
 
     def CTNGenerate_C(self, buildpath, locations):
 
-        hmi_frames = []
+        # list containing description of all objects declared in wxglade
+        hmi_objects = []
+        # list containing only description of the main frame object 
+        main_frames = []
 
         wxgfile_path = self._getWXGLADEpath()
         if os.path.exists(wxgfile_path):
@@ -100,12 +103,17 @@
 
             for node in wxgtree.childNodes[1].childNodes:
                 if node.nodeType == wxgtree.ELEMENT_NODE:
-                    hmi_frames.append({
-                        "name": node.getAttribute("name"),
+                    name = node.getAttribute("name")
+                    wxglade_object_desc = {
+                        "name": name,
                         "class": node.getAttribute("class"),
                         "handlers": [
                             hnode.firstChild.data for hnode in
-                            node.getElementsByTagName("handler")]})
+                            node.getElementsByTagName("handler")]}
+
+                    hmi_objects.append(wxglade_object_desc)
+                    if name == self.CTNName() :
+                        main_frames.append(wxglade_object_desc)
 
             hmipyfile_path = os.path.join(self._getBuildPath(), "hmi.py")
             if wx.Platform == '__WXMSW__':
@@ -122,12 +130,12 @@
         else:
             define_hmi = ""
 
-        declare_hmi = "\n".join(["%(name)s = None\n" % x +
-                                 "\n".join(["%(class)s.%(h)s = %(h)s" %
+        declare_hmi = "\n".join(["%(name)s = None\n" % x for x in main_frames])
+        declare_hmi += "\n".join(["\n".join(["%(class)s.%(h)s = %(h)s" %
                                             dict(x, h=h) for h in x['handlers']])
-                                 for x in hmi_frames])
+                                 for x in hmi_objects])
         global_hmi = ("global %s\n" % ",".join(
-            [x["name"] for x in hmi_frames]) if len(hmi_frames) > 0 else "")
+            [x["name"] for x in main_frames]) if len(main_frames) > 0 else "")
         init_hmi = "\n".join(["""\
 def OnCloseFrame(evt):
     wx.MessageBox(_("Please stop PLC to close"))
@@ -135,10 +143,10 @@
 %(name)s = %(class)s(None)
 %(name)s.Bind(wx.EVT_CLOSE, OnCloseFrame)
 %(name)s.Show()
-""" % x for x in hmi_frames])
+""" % x for x in main_frames])
         cleanup_hmi = "\n".join(
             ["if %(name)s is not None: %(name)s.Destroy()" % x
-             for x in hmi_frames])
+             for x in main_frames])
 
         self.PreSectionsTexts = {
             "globals": define_hmi,
@@ -150,6 +158,11 @@
             "start":   init_hmi,
         }
 
+        if len(main_frames) == 0 and \
+           len(getattr(self.CodeFile, "start").getanyText().strip()) == 0:
+                self.GetCTRoot().logger.write_warning(
+                    _("Warning: WxGlade HMI has no object with name identical to extension name, and no python code is provided in start section to create object.\n"))
+            
         return PythonFileCTNMixin.CTNGenerate_C(self, buildpath, locations)
 
     def _editWXGLADE(self):