diff --git a/CHANGES b/CHANGES
index 6cedbaf7dac416c1cfa47673eaf7eab985784648..a063ae75e9b43d50e205ffeb146f66b678f672cd 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,16 @@
+v3.0.1
+------
+
+- When an application does not request a specific language, use the
+  default one (or English)
+
+- Fix: applications failed to start when the system's default locale
+  was unsupported.
+
+- Now properly detects when launched with unsupported JVM (currently
+  v9 and v10), and informs the user before exiting.
+
+
 v3.0.0
 ------
 
diff --git a/build.xml b/build.xml
index 3fbae22a9c82bd3954d058037704263d99c03898..0509b93401665ba5f1e3497222d8ceea866dbb13 100644
--- a/build.xml
+++ b/build.xml
@@ -7,7 +7,7 @@
     <format property="build.time" pattern="yyyy-MM-dd'T'hh:mm:ss.SSSZ"/>
   </tstamp>
 
-  <property name="praxis.version" value="3.0.0"/>
+  <property name="praxis.version" value="3.0.1"/>
   <!-- If not called from an other project setting praxis.home, define it.
        In details:
        - it is unset when directly building the jars of Praxis,
diff --git a/data/i18n/native_to_ascii.sh b/data/i18n/native_to_ascii.sh
index c0560f1a914d8817118fea7d50e62acec535a928..b6d0467b4d6667f9d9eb2678783b86379e6e24cf 100755
--- a/data/i18n/native_to_ascii.sh
+++ b/data/i18n/native_to_ascii.sh
@@ -1,6 +1,8 @@
 #! /bin/bash
 shopt -s nullglob
 
+# transform original/praxis_XX files into .properties files
+
 cd ${0%/*}/original
 for lang in el en es fr; do
     t9n="praxis_${lang}"
@@ -13,6 +15,8 @@ for lang in el en es fr; do
     echo "${t9n}: ${encoding} to ascii..." >&2
 
     native2ascii -encoding "${encoding}" "${t9n}" "../${t9n}.properties"
+    # we use java.text.MessageFormat, escape simple quotes
+    sed -i -e "s/'/''/g" "../${t9n}.properties"
     # remove the emacs' coding system
     sed -i -e '/^# *-\*- coding:/ d' "../${t9n}.properties"
 done
diff --git a/data/i18n/original/praxis_el b/data/i18n/original/praxis_el
index 66ab28341da5c88ac7fc5b3a8badc782bf3bc5a6..dc3758fedd93a6b7be0060f8ff4d3d6cc71e7a5e 100644
--- a/data/i18n/original/praxis_el
+++ b/data/i18n/original/praxis_el
@@ -54,8 +54,8 @@ UI.actions.zoom_original                              = Ζουμ 1:1
 UI.actions.zoom_original_tt                           = Επαναφέρει τον προεπιλεγμένο συντελεστή ζουμ
 UI.actions.zoom_out                                   = Σμίκρυνση
 UI.actions.zoom_out_tt                                = Σχεδιάζει μια μικρότερη ροή εργασιών για να δείξει ένα μεγαλύτερο μέρος της
-UI.annotation.for_workflow                            = Σχόλιο για τη ροή εργασιών ''{0}''
-UI.annotation.for_program                             = Σχόλιο για το πρόγραμμα: ''{0}''
+UI.annotation.for_workflow                            = Σχόλιο για τη ροή εργασιών '{0}'
+UI.annotation.for_program                             = Σχόλιο για το πρόγραμμα: '{0}'
 UI.ctrlwf.run.file_does_not_exist                     = Το Αρχείο {0} δεν υπάρχει
 UI.ctrlwf.run.file_unreadable                         = Το Αρχείο {0} δεν μπορεί να διαβαστεί
 UI.ctrlwf.run.zip_failed                              = Η εκτέλεση της ροής εργασιών απέτυχε: παρουσιάστηκε μη αναμενόμενο σφάλμα κατά την προετοιμασία της εκτέλεσης\n\
@@ -298,9 +298,9 @@ UI.menu_items.changes                                 = Τροποποιήσει
 
 UI.menu_items.languages                               = Ρυθμίσεις Γλώσσας... (Language settings…)
 # value                                               = language (translated language)
+UI.menu_items.language.fr                             = Français (Γαλλικά)
 UI.menu_items.language.el                             = Ελληνικά
 UI.menu_items.language.en                             = English (Αγγλικά)
-UI.menu_items.language.fr                             = Français (Γαλλικά)
 UI.menu_items.language.es                             = Español (Ισπανικά)
 
 UI.progtree.database                                  = Βάση δεδομένων
@@ -335,34 +335,41 @@ common.error                              = Σφάλμα
 common.no                                 = Όχι
 common.yes                                = Ναι
 common.warning                            = Προειδοποίηση
-common.client_out_of_date                 = Αυτό το πρόγραμμα-πελάτης είναι εκτός λειτουργίας:\nΕπιλέξτε να κάνετε λήψη του νέου προγράμματος-πελάτη!
+common.client_out_of_date                 = Αυτό το πρόγραμμα-πελάτης είναι εκτός λειτουργίας:\n\
+Επιλέξτε να κάνετε λήψη του νέου προγράμματος-πελάτη!
 common.client_out_of_date_title           = Το πρόγραμμα-πελάτης δεν είναι ενημερωμένο
-common.cnx_rejected.invalid_credentials            = Δεν είναι δυνατή η σύνδεση με τον διακομιστή:\nμη έγκυρα διαπιστευτήρια.
+common.cnx_rejected.invalid_credentials            = Δεν είναι δυνατή η σύνδεση με τον διακομιστή:\n\
+μη έγκυρα διαπιστευτήρια.
 common.cnx_rejected.invalid_credentials_title      = Αποτυχία σύνδεσης
-common.cnx_rejected.client_already_connected       = Δεν είναι δυνατή η σύνδεση με τον διακομιστή:\nαυτός ο χρήστης είναι ήδη συνδεδεμένος.
+common.cnx_rejected.client_already_connected       = Δεν είναι δυνατή η σύνδεση με τον διακομιστή:\n\
+αυτός ο χρήστης είναι ήδη συνδεδεμένος.
 common.cnx_rejected.client_already_connected_title = Αποτυχία σύνδεσης
 common.cnx_rejected.client_login_disabled          = Ο διακομιστής απορρίπτει τις συνδέσεις, δοκιμάστε ξανά αργότερα.
 common.cnx_rejected.client_login_disabled_title    = Αποτυχία σύνδεσης
-common.cnx_rejected.client_login_disabled_w_reason = Ο διακομιστής απορρίπτει τις συνδέσεις\n{0}
+common.cnx_rejected.client_login_disabled_w_reason = Ο διακομιστής απορρίπτει τις συνδέσεις\n\
+{0}
 common.cnx_rejected.client_login_disabled_w_reason_title = Αποτυχία σύνδεσης
-common.cnx_rejected.maximum_number_of_clients       = Η σύνδεση απορρίφθηκε: ο διακομιστής δεν μπορεί να δεχτεί περισσότερες συνδέσεις\nΔοκιμάστε ξανά αργότερα\n\nΖητάμε συγνώμη για την ταλαιπωρία.
+common.cnx_rejected.maximum_number_of_clients       = Η σύνδεση απορρίφθηκε: ο διακομιστής δεν μπορεί να δεχτεί περισσότερες συνδέσεις\n\
+Δοκιμάστε ξανά αργότερα\n\
+\n\
+Ζητάμε συγνώμη για την ταλαιπωρία.
 common.cnx_rejected.maximum_number_of_clients_title = Άρνηση σύνδεσης
-wf.xmlwarnings.prg_desc_does_not_exists   = Η ροή εργασιών χρησιμοποίησε ένα πρόγραμμα με όνομα '' {0} '' το οποίο δεν είναι πλέον διαθέσιμο.
-wf.xmlwarnings.prg_desc_replace_by_alternative = Η ροή εργασιών χρησιμοποίησε ένα πρόγραμμα με όνομα '' {0} '' το οποίο δεν είναι πλέον διαθέσιμο.\n\
-Έχει αντικατασταθεί από το πρόγραμμα ''{1}''.\n\
+wf.xmlwarnings.prg_desc_does_not_exists   = Η ροή εργασιών χρησιμοποίησε ένα πρόγραμμα με όνομα ' {0} ' το οποίο δεν είναι πλέον διαθέσιμο.
+wf.xmlwarnings.prg_desc_replace_by_alternative = Η ροή εργασιών χρησιμοποίησε ένα πρόγραμμα με όνομα ' {0} ' το οποίο δεν είναι πλέον διαθέσιμο.\n\
+Έχει αντικατασταθεί από το πρόγραμμα '{1}'.\n\
 Είναι πιθανό αυτή η έκδοση να μην είναι πλήρως συμβατή με την παλαιότερη. Aν είναι απαραίτητο, θα εμφανιστούν στη συνέχεια οι προειδοποιήσεις \
 για να δώσουν όλες τις λεπτομέρειες σχετικά με αυτές τις πιθανές ασυμβατότητες.
-wf.xmlwarnings.prg_declares_invalid_param = Το πρόγραμμα '' {0} '' χρησιμοποίησε μια παράμετρο με το όνομα '' {1} '' που δεν ισχύει πια \
-(η τιμή για αυτήν την παράμετρο ήταν: ''{2}'').
-wf.xmlwarnings.prg_param_has_invalid_value = Το πρόγραμμα '' {0} '' δηλώνει μη έγκυρη τιμή για την παράμετρο '' {1} ''. Αυτή η τιμή \
-ήταν '' {2} '' και δεν ισχύει πια: η τιμή της παραμέτρου επαναφέρεται στην προεπιλεγμένη τιμή''{3}''.
-wf.xmlwarnings.prg_has_invalid_link        = Το πρόγραμμα '' {0} '' συνδέθηκε με την έξοδο του προγράμματος '' {1} '' (η έξοδος προσδιορίστηκε ως '' {2} '') αλλά ο σύνδεσμος είναι άκυρος\
-(είτε το '' {1} '' δεν είναι πλέον ένα έγκυρο πρόγραμμα στη ροή εργασιών, ή η αντίστοιχη έξοδος του δεν είναι πλέον έγκυρη).\n\
+wf.xmlwarnings.prg_declares_invalid_param = Το πρόγραμμα ' {0} ' χρησιμοποίησε μια παράμετρο με το όνομα ' {1} ' που δεν ισχύει πια \
+(η τιμή για αυτήν την παράμετρο ήταν: '{2}').
+wf.xmlwarnings.prg_param_has_invalid_value = Το πρόγραμμα ' {0} ' δηλώνει μη έγκυρη τιμή για την παράμετρο ' {1} '. Αυτή η τιμή \
+ήταν ' {2} ' και δεν ισχύει πια: η τιμή της παραμέτρου επαναφέρεται στην προεπιλεγμένη τιμή'{3}'.
+wf.xmlwarnings.prg_has_invalid_link        = Το πρόγραμμα ' {0} ' συνδέθηκε με την έξοδο του προγράμματος ' {1} ' (η έξοδος προσδιορίστηκε ως ' {2} ') αλλά ο σύνδεσμος είναι άκυρος\
+(είτε το ' {1} ' δεν είναι πλέον ένα έγκυρο πρόγραμμα στη ροή εργασιών, ή η αντίστοιχη έξοδος του δεν είναι πλέον έγκυρη).\n\
 Δεν ήταν δυνατή η αποκατάσταση της σύνδεσης μεταξύ των δύο προγραμμάτων.
-wf.xmlwarnings.prg_link_is_inactive        = Η έξοδος '' {1} '' του προγράμματος '' {0} '' και η είσοδος '' {3} '' του προγράμματος ''{2}'' \
+wf.xmlwarnings.prg_link_is_inactive        = Η έξοδος ' {1} ' του προγράμματος ' {0} ' και η είσοδος ' {3} ' του προγράμματος '{2}' \
 συνδέθηκαν το ένα με το άλλο, αλλά τουλάχιστον το ένα από τα δύο δεν ενεργοποιείται στην τρέχουσα παραμετροποίηση αυτών των δύο προγραμμάτων.\n\
 Δεν ήταν δυνατή η αποκατάσταση της σύνδεσης μεταξύ των δύο προγραμμάτων.
-wf.xmlwarnings.prg_contains_useless_parameter = Πληροφορίες: Το πρόγραμμα '' {0} '' δηλώνει μια παράμετρο '' {1} '' (παράμετρος '' {2} ''):
+wf.xmlwarnings.prg_contains_useless_parameter = Πληροφορίες: Το πρόγραμμα ' {0} ' δηλώνει μια παράμετρο ' {1} ' (παράμετρος ' {2} '):
 αυτή η παράμετρος αγνοείται (Σημείωση: αυτό το μήνυμα είναι καθαρά ενημερωτικό, μπορεί να αγνοηθεί με ασφάλεια)
 eu.telecom_bretagne.praxis.core.execution.Result.Status.UNSET     = Απενεργοποίηση
 eu.telecom_bretagne.praxis.core.execution.Result.Status.SUBMITTED = Υποβλήθηκε
diff --git a/data/i18n/original/praxis_en b/data/i18n/original/praxis_en
index 7bb0ece406bec7c03a198d94981782d391f7aa93..c895e75d1974e9d24cbeb193a4a4953d5bf16ab0 100644
--- a/data/i18n/original/praxis_en
+++ b/data/i18n/original/praxis_en
@@ -10,7 +10,7 @@ UI.actions.display_preferences.error                  = An error happened when b
 UI.actions.execute_wf.confirm                         = Are you sure you want to execute the workflow {0}?
 UI.actions.execute_wf.error                           = Execution of the workflow failed
 UI.actions.execute_wf.title                           = Confirmation of the execution of a workflow
-UI.actions.execute_wf.invalid_workflow                = Cannot execute an invalid workflow, please check the programs'' parameters and that all inputs are connected.
+UI.actions.execute_wf.invalid_workflow                = Cannot execute an invalid workflow, please check the programs' parameters and that all inputs are connected.
 UI.actions.finished_exec.msg                          = The workflow {0} has successfully been executed
 UI.actions.finished_exec_with_errors.msg              = The execution of {0} is finished: an error occurred
 UI.actions.finished_exec_with_warnings.msg            = The execution of {0} is finished; there were some warnings, check the results for details
@@ -33,18 +33,18 @@ UI.actions.wf_new                                     = New
 UI.actions.wf_new_tt                                  = Create a new workflow
 UI.actions.wf_open                                    = Open...
 UI.actions.wf_open_tt                                 = Open an existing workflow
-UI.actions.wf_open_err_no_workflow                    = <html>There isn''t any existing workflows yet!<br/>\
+UI.actions.wf_open_err_no_workflow                    = <html>There isn't any existing workflows yet!<br/>\
 To create a new workflow, use the menu "Workflow" and select "New"</html>
 UI.actions.wf_open_err_all_workflows_already_opened   = All existing workflows are already opened!
 UI.actions.wf_save                                    = Save
 UI.actions.wf_save_as                                 = Save as...
 UI.actions.wf_save_as_tt                              = Save as...
 UI.actions.wf_save_tt                                 = Save the current workflow
-UI.actions.show_results.connect_err                   = Results couldn''t be retrieved
+UI.actions.show_results.connect_err                   = Results couldn't be retrieved
 UI.actions.show_results.connect_err.title             = Connection error
 UI.actions.show_results.empty                         = No result available for this workflow
 UI.actions.show_results.empty.title                   = Results
-UI.actions.stop_exec.error                            = Error: execution couldn''t be stopped
+UI.actions.stop_exec.error                            = Error: execution couldn't be stopped
 UI.actions.valid_links_confirm                        = Are you sure you want to deactivate the automatic checking of validity of links between programs?
 UI.actions.create_file_error                          = Cannot create file {0}
 UI.actions.create_existing_file_error                 = Cannot create file {0}: it already exists
@@ -54,8 +54,8 @@ UI.actions.zoom_original                              = Zoom 1:1
 UI.actions.zoom_original_tt                           = Restores the default zoom factor
 UI.actions.zoom_out                                   = Zoom Out
 UI.actions.zoom_out_tt                                = Draws a smaller workflow to show a larger part of it
-UI.annotation.for_workflow                            = Annotation for workflow ''{0}''
-UI.annotation.for_program                             = Annotation for program: ''{0}''
+UI.annotation.for_workflow                            = Annotation for workflow '{0}'
+UI.annotation.for_program                             = Annotation for program: '{0}'
 UI.ctrlwf.run.file_does_not_exist                     = File {0} does not exist
 UI.ctrlwf.run.file_unreadable                         = File {0} cannot be read
 UI.ctrlwf.run.zip_failed                              = Failed to execute the workflow: an unexpected error happened while preparing execution\n\
@@ -228,7 +228,7 @@ UI.menu_items.about                                   = About...
 UI.menu_items.about_tt                                = About the software
 UI.menu_items.check_valid_links                       = Check that links are valid
 UI.menu_items.check_valid_links_tt                    = Activate/deactivate the automatic feature which checks that two elements of a workflow (programs, files or databases) are compatible when you try to link one with another
-UI.menu_items.open_all_results                        = Open all results'' files automatically
+UI.menu_items.open_all_results                        = Open all results' files automatically
 UI.menu_items.open_all_results_tt                     = Open all files automatically when a result is displayed
 UI.menu_items.options                                 = Options...
 UI.menu_items.options_tt                              = Options
@@ -247,9 +247,9 @@ UI.menu_items.exit_tt                                 = Exits the application
 UI.menu_items.help                                    = Help
 UI.menu_items.help_tt                                 = Help
 UI.menu_items.paste                                   = Paste
-UI.menu_items.paste_tt                                = Paste the clipboard''s content into the current workflow
+UI.menu_items.paste_tt                                = Paste the clipboard's content into the current workflow
 UI.menu_items.properties                              = Properties...
-UI.menu_items.properties_tt                           = Modify the selected object''s properties
+UI.menu_items.properties_tt                           = Modify the selected object's properties
 UI.menu_items.wf_delete                               = Delete workflow
 UI.menu_items.wf_delete_tt                            = Delete the current workflow
 UI.menu_items.result_delete                           = Delete this result
@@ -265,7 +265,7 @@ UI.menu_items.wf_execute_tt                           = Execute the current work
 UI.menu_items.wf_rename                               = Rename...
 UI.menu_items.wf_rename_tt                            = Rename the current workflow
 UI.menu_items.wf_results                              = Results
-UI.menu_items.wf_results_tt                           = Show the workflow''s results
+UI.menu_items.wf_results_tt                           = Show the workflow's results
 UI.menu_items.show_statusbar                          = Status bar
 UI.menu_items.show_statusbar_tt                       = Show/hide the status bar
 UI.menu_items.show_toolbar                            = Toolbar
@@ -335,35 +335,42 @@ common.error                              = Error
 common.no                                 = No
 common.yes                                = Yes
 common.warning                            = Warning
-common.client_out_of_date                 = This client is out-of-date:\nplease download the new client!
+common.client_out_of_date                 = This client is out-of-date:\n\
+please download the new client!
 common.client_out_of_date_title           = Client out-of-date
-common.cnx_rejected.invalid_credentials            = Cannot connect to the server:\ninvalid credentials.
+common.cnx_rejected.invalid_credentials            = Cannot connect to the server:\n\
+invalid credentials.
 common.cnx_rejected.invalid_credentials_title      = Connection failed
-common.cnx_rejected.client_already_connected       = Cannot connect to the server:\nthis user is already connected.
+common.cnx_rejected.client_already_connected       = Cannot connect to the server:\n\
+this user is already connected.
 common.cnx_rejected.client_already_connected_title = Connection failed
 common.cnx_rejected.client_login_disabled          = The server is currently refusing connections, please try again later.
 common.cnx_rejected.client_login_disabled_title    = Connection failed
-common.cnx_rejected.client_login_disabled_w_reason = The server is currently refusing connections\n{0}
+common.cnx_rejected.client_login_disabled_w_reason = The server is currently refusing connections\n\
+{0}
 common.cnx_rejected.client_login_disabled_w_reason_title = Connection failed
-common.cnx_rejected.maximum_number_of_clients       = Connection refused: the server cannot accept more connections\nPlease try again a moment later\n\nWe apology for the inconvenience.
+common.cnx_rejected.maximum_number_of_clients       = Connection refused: the server cannot accept more connections\n\
+Please try again a moment later\n\
+\n\
+We apology for the inconvenience.
 common.cnx_rejected.maximum_number_of_clients_title = Connection refused
 
-wf.xmlwarnings.prg_desc_does_not_exists   = The workflow used a program named ''{0}'' which is not available anymore.
-wf.xmlwarnings.prg_desc_replace_by_alternative = The workflow used a program named ''{0}'' which is not available anymore.\n\
-It has been replaced with the programme ''{1}''.\n\
+wf.xmlwarnings.prg_desc_does_not_exists   = The workflow used a program named '{0}' which is not available anymore.
+wf.xmlwarnings.prg_desc_replace_by_alternative = The workflow used a program named '{0}' which is not available anymore.\n\
+It has been replaced with the programme '{1}'.\n\
 It is possible that this version is not fully compatible with the older one; if necessary, warnings will be displayed hereafter \
 to give the full details on these possible incompatibilities.
-wf.xmlwarnings.prg_declares_invalid_param = The program ''{0}'' used a parameter named ''{1}'' which is not valid anymore \
-(the value for this parameter was: ''{2}'').
-wf.xmlwarnings.prg_param_has_invalid_value = The program ''{0}'' declared an invalid value for parameter ''{1}''. This value \
-was ''{2}'' and it is not valid anymore: the parameter''s value was reset to the default value ''{3}''.
-wf.xmlwarnings.prg_has_invalid_link        = The program ''{0}'' was linked to an output of the program ''{1}'' (output identified as ''{2}'') but the link is invalid \
-(either ''{1}'' is not longer a valid program in the workflow, or its corresponding output is not valid anymore).\n\
+wf.xmlwarnings.prg_declares_invalid_param = The program '{0}' used a parameter named '{1}' which is not valid anymore \
+(the value for this parameter was: '{2}').
+wf.xmlwarnings.prg_param_has_invalid_value = The program '{0}' declared an invalid value for parameter '{1}'. This value \
+was '{2}' and it is not valid anymore: the parameter's value was reset to the default value '{3}'.
+wf.xmlwarnings.prg_has_invalid_link        = The program '{0}' was linked to an output of the program '{1}' (output identified as '{2}') but the link is invalid \
+(either '{1}' is not longer a valid program in the workflow, or its corresponding output is not valid anymore).\n\
 The link between the two programs could not be restored.
-wf.xmlwarnings.prg_link_is_inactive        = The output ''{1}'' of program ''{0}'' and the input ''{3}'' of program ''{2}'' \
+wf.xmlwarnings.prg_link_is_inactive        = The output '{1}' of program '{0}' and the input '{3}' of program '{2}' \
 were linked one to each other, but at least one of them is not activated in the current parametering of these two programs.\n\
 The link between the two programs could not be restored.
-wf.xmlwarnings.prg_contains_useless_parameter = Info: the program ''{0}'' declares a parameter ''{1}'' (param.''s type is ''{2}''): \
+wf.xmlwarnings.prg_contains_useless_parameter = Info: the program '{0}' declares a parameter '{1}' (param.'s type is '{2}'): \
 this parameter is ignored (Note: this message is purely informational, it can be safely ignored)
 
 eu.telecom_bretagne.praxis.core.execution.Result.Status.UNSET     = Unset
diff --git a/data/i18n/original/praxis_es b/data/i18n/original/praxis_es
index 1e9568d93800ba5189e5375769d259639881c499..478520d4e72c397935479e70a5ca575500f6dcfe 100644
--- a/data/i18n/original/praxis_es
+++ b/data/i18n/original/praxis_es
@@ -368,33 +368,41 @@ common.error                              = Error
 common.no                                 = No
 common.yes                                = S�
 common.warning                            = Atenci�n
-common.client_out_of_date                 = Este cliente est� desactualizado: \n�por favor descargue un nuevo cliente!
+common.client_out_of_date                 = Este cliente est� desactualizado: \n\
+�por favor descargue un nuevo cliente!
 common.client_out_of_date_title           = Cliente desactualizado
-common.cnx_rejected.invalid_credentials            = No se puede conectar con el servidor:\ncredenciales no v�lidas.
+common.cnx_rejected.invalid_credentials            = No se puede conectar con el servidor:\n\
+credenciales no v�lidas.
 common.cnx_rejected.invalid_credentials_title      = Error en la connexi�n
-common.cnx_rejected.client_already_connected       = No se puede conectar con el servidor:\neste usuario ya est� conectado.
+common.cnx_rejected.client_already_connected       = No se puede conectar con el servidor:\n\
+este usuario ya est� conectado.
 common.cnx_rejected.client_already_connected_title = Error en la connexi�n
 common.cnx_rejected.client_login_disabled          = El servidor no admite conexi�nes en este momento, por favor int�ntelo de nuevo m�s tarde.
 common.cnx_rejected.client_login_disabled_title    = Error en la connexi�n
-common.cnx_rejected.client_login_disabled_w_reason = El servidor no admite conexi�nes en este momento\n{0}
+common.cnx_rejected.client_login_disabled_w_reason = El servidor no admite conexi�nes en este momento\n\
+{0}
 common.cnx_rejected.client_login_disabled_w_reason_title = Error en la connexi�n
-common.cnx_rejected.maximum_number_of_clients       = Conexi�n rechazada: el servidor no puede aceptar m�s conexiones\nPor favor int�ntelo de nuevo m�s tarde\n\nDisculpe los problemas ocasionados.
+common.cnx_rejected.maximum_number_of_clients       = Conexi�n rechazada: el servidor no puede aceptar m�s conexiones\n\
+Por favor int�ntelo de nuevo m�s tarde\n\
+\n\
+Disculpe los problemas ocasionados.
 common.cnx_rejected.maximum_number_of_clients_title = Conexi�n rechazada
 
-wf.xmlwarnings.prg_desc_does_not_exists   = El diagrama de flujo us� un programa llamado ''{0}'' que ya no est� disponible.
-wf.xmlwarnings.prg_desc_replace_by_alternative = El diagrama de flujo us� un programa llamado ''{0}'' que ya no est� disponible.\n\
-Ha sido reemplazado con el programa ''{1}''.\n\
+wf.xmlwarnings.prg_desc_does_not_exists   = El diagrama de flujo us� un programa llamado '{0}' que ya no est� disponible.
+wf.xmlwarnings.prg_desc_replace_by_alternative = El diagrama de flujo us� un programa llamado '{0}' que ya no est� disponible.\n\
+Ha sido reemplazado con el programa '{1}'.\n\
 Es posible que esta versi�n no sea totalmente compatible con la antigua; si es necesario, se mostrar�n las advertencias a continuaci�n \ para dar detalles completos de estas posibles incompatibilidades
-wf.xmlwarnings.prg_declares_invalid_param = El programa ''{0}'' us� un par�metro denominado ''{1}'' que ya no est� disponible \
-(el valor de este par�metro era: ''{2}'').
-wf.xmlwarnings.prg_param_has_invalid_value = El programa ''{0}'' declar� un valor no v�lido para el par�metro ''{1}''. Este valor \
-era ''{2}'' y ya no es v�lido: el valor del par�metro se restableci� al valor por defecto ''{3}''.
-wf.xmlwarnings.prg_has_invalid_link        = El programa ''{0}'' fue unido a un resultado del programa �{1}� (la salida se identific� como ''{2}'') pero el enlace no es v�lido \
-(otro ''{1}'' ya no es un programa v�lido en el diagrama de flujo, o su salida correspondiente ya no es v�lida).\n\ El enlace entre dos programas no se ha podido restaurar.
-wf.xmlwarnings.prg_link_is_inactive        = La salida ''{1}'' del programa ''{0}'' y del input ''{3}'' del programa ''{2}'' \
+wf.xmlwarnings.prg_declares_invalid_param = El programa '{0}' us� un par�metro denominado '{1}' que ya no est� disponible \
+(el valor de este par�metro era: '{2}').
+wf.xmlwarnings.prg_param_has_invalid_value = El programa '{0}' declar� un valor no v�lido para el par�metro '{1}'. Este valor \
+era '{2}' y ya no es v�lido: el valor del par�metro se restableci� al valor por defecto '{3}'.
+wf.xmlwarnings.prg_has_invalid_link        = El programa '{0}' fue unido a un resultado del programa �{1}� (la salida se identific� como '{2}') pero el enlace no es v�lido \
+(otro '{1}' ya no es un programa v�lido en el diagrama de flujo, o su salida correspondiente ya no es v�lida).\n\
+El enlace entre dos programas no se ha podido restaurar.
+wf.xmlwarnings.prg_link_is_inactive        = La salida '{1}' del programa '{0}' y del input '{3}' del programa '{2}' \
 estaban unidos, pero al menos uno de ellos no est� activado en la actual parametrizaci�n de esos dos programas.\n\
 El enlace entre los dos programas no podr� ser restaurado.
-wf.xmlwarnings.prg_contains_useless_parameter = Info: el programa ''{0}'' declara un par�metro ''{1}'' (el tipo del param.''s es ''{2}''): \
+wf.xmlwarnings.prg_contains_useless_parameter = Info: el programa '{0}' declara un par�metro '{1}' (el tipo del param.'s es '{2}'): \
 se ha ignorado este par�metro (Nota: este mensaje es puramente informativo, se puede ignorar de forma segura)
 
 eu.telecom_bretagne.praxis.core.execution.Result.Status.UNSET     = Desestablecer
diff --git a/data/i18n/original/praxis_fr b/data/i18n/original/praxis_fr
index 4014552faab92e8ab5faca92ba6754e0f79195e9..671478f1ca703f2eb9457ac43ad6e05506d5d9b6 100644
--- a/data/i18n/original/praxis_fr
+++ b/data/i18n/original/praxis_fr
@@ -1,30 +1,30 @@
 # -*- coding: utf-8 -*-
 UI.OptionsDialog.title                     = Options
 
-UI.TabbedPane.close                        = Fermer l''onglet
+UI.TabbedPane.close                        = Fermer l'onglet
 UI.TabbedPane.close_others                 = Fermer les autres onglets
 UI.TabbedPane.close_all                    = Fermer tous les onglets
 UI.TabbedPane.results                      = Tous les résultats...
 
 UI.actions.display_preferences.error                  = Une erreur est survenue lors de la création du panneau de préférence.
 UI.actions.execute_wf.confirm                         = Êtes-vous sûr de vouloir exécuter le workflow {0}?
-UI.actions.execute_wf.error                           = L''exécution du workflow a échoué
-UI.actions.execute_wf.title                           = Confirmation de l''exécution d''un workflow
-UI.actions.execute_wf.invalid_workflow                = Impossible d''exécuter le workflow: veuillez vérifier que toutes les entrées sont connectées, et que chaque programme a un paramètrage valide.
-UI.actions.finished_exec.msg                          = L''exécution du workflow {0} s''est terminée avec succès
-UI.actions.finished_exec_with_errors.msg              = L''exécution du workflow {0} est terminée: une erreur s''est produite
-UI.actions.finished_exec_with_warnings.msg            = L''exécution du workflow {0} est terminée, avec des avertissements: voir le détail dans les résultats
-UI.actions.finished_exec.title                        = Fin de l''exécution d''un workflow
+UI.actions.execute_wf.error                           = L'exécution du workflow a échoué
+UI.actions.execute_wf.title                           = Confirmation de l'exécution d'un workflow
+UI.actions.execute_wf.invalid_workflow                = Impossible d'exécuter le workflow: veuillez vérifier que toutes les entrées sont connectées, et que chaque programme a un paramètrage valide.
+UI.actions.finished_exec.msg                          = L'exécution du workflow {0} s'est terminée avec succès
+UI.actions.finished_exec_with_errors.msg              = L'exécution du workflow {0} est terminée: une erreur s'est produite
+UI.actions.finished_exec_with_warnings.msg            = L'exécution du workflow {0} est terminée, avec des avertissements: voir le détail dans les résultats
+UI.actions.finished_exec.title                        = Fin de l'exécution d'un workflow
 UI.actions.wf_close                                   = Fermer
 UI.actions.wf_close_tt                                = Fermer le workflow courant
 UI.actions.wf_close_all                               = Tout fermer
 UI.actions.wf_close_all_tt                            = Fermer tous les workflows
 UI.actions.wf_close_others                            = Fermer les autres
 UI.actions.wf_close_others_tt                         = Fermer les autres workflows
-UI.actions.wf_export                                  = Exporter sans les fichiers d''entrées......
+UI.actions.wf_export                                  = Exporter sans les fichiers d'entrées......
 UI.actions.wf_export_tt                               = Exporter un workflow
-UI.actions.wf_export_with_infiles                     = Exporter avec les fichiers d''entrées...
-UI.actions.wf_export_with_infiles_tt                  = Exporter un workflow avec tous ses fichiers d''entrées, dans un fichier zip
+UI.actions.wf_export_with_infiles                     = Exporter avec les fichiers d'entrées...
+UI.actions.wf_export_with_infiles_tt                  = Exporter un workflow avec tous ses fichiers d'entrées, dans un fichier zip
 UI.actions.wf_import                                  = Importer...
 UI.actions.wf_import_as_new                           = Importer dans un nouveau workflow...
 UI.actions.wf_import_as_new_tt                        = Importer un workflow dans un nouveau workflow
@@ -33,7 +33,7 @@ UI.actions.wf_new                                     = Nouveau
 UI.actions.wf_new_tt                                  = Créer un nouveau workflow
 UI.actions.wf_open                                    = Ouvrir...
 UI.actions.wf_open_tt                                 = Ouvrir un workflow existant
-UI.actions.wf_open_err_no_workflow                    = <html>Aucun workflow n''a encore été créé !<br/>\
+UI.actions.wf_open_err_no_workflow                    = <html>Aucun workflow n'a encore été créé !<br/>\
 Pour en créer un nouveau: menu <b>Workflow</b> puis <b>Nouveau</b></br>
 UI.actions.wf_open_err_all_workflows_already_opened   = Tous les workflows existants sont déjà ouverts !
 UI.actions.wf_save                                    = Sauvegarder
@@ -42,9 +42,9 @@ UI.actions.wf_save_as_tt                              = Sauvegarder sous...
 UI.actions.wf_save_tt                                 = Sauvegarder le workflow courant
 UI.actions.show_results.connect_err                   = Impossible de récupérer la liste des résultats
 UI.actions.show_results.connect_err.title             = Erreur de connexion
-UI.actions.show_results.empty                         = Aucun résultat n''est disponible pour ce workflow
+UI.actions.show_results.empty                         = Aucun résultat n'est disponible pour ce workflow
 UI.actions.show_results.empty.title                   = Visualisation des résultats
-UI.actions.stop_exec.error                            = Erreur: l''exécution n''a pas pu être arrêtée
+UI.actions.stop_exec.error                            = Erreur: l'exécution n'a pas pu être arrêtée
 UI.actions.valid_links_confirm                        = Êtes-vous certain(e) de vouloir désactiver la vérification automatique de la validité des liens entre programmes?
 UI.actions.create_file_error                          = Impossible de créer le fichier {0}
 UI.actions.create_existing_file_error                 = Impossible de créer le fichier {0}: il existe déjà
@@ -54,16 +54,16 @@ UI.actions.zoom_original                              = Zoom 1:1
 UI.actions.zoom_original_tt                           = Rétablit le facteur de zoom par défaut
 UI.actions.zoom_out                                   = Zoom arrière
 UI.actions.zoom_out_tt                                = Dessine un workflow plus petit pour en voir une portion plus large
-UI.annotation.for_workflow                            = Annotation du workflow ''{0}''
-UI.annotation.for_program                             = Annotation du programme: ''{0}''
-UI.ctrlwf.run.file_does_not_exist                     = Le fichier {0} n''existe pas
+UI.annotation.for_workflow                            = Annotation du workflow '{0}'
+UI.annotation.for_program                             = Annotation du programme: '{0}'
+UI.ctrlwf.run.file_does_not_exist                     = Le fichier {0} n'existe pas
 UI.ctrlwf.run.file_unreadable                         = Impossible de lire le fichier {0}
-UI.ctrlwf.run.zip_failed                              = Impossible d''exécuter le workflow: une erreur inattendue est survenue lors de la préparation de l''exécution\n\
+UI.ctrlwf.run.zip_failed                              = Impossible d'exécuter le workflow: une erreur inattendue est survenue lors de la préparation de l'exécution\n\
 \n\
 Détail:\n\
 {0}\n\
 
-UI.ctrlwf.run.zip_failed_missing_file                 = Impossible d''exécuter le workflow: au moins un des fichiers utilisés n''existe pas !\n\
+UI.ctrlwf.run.zip_failed_missing_file                 = Impossible d'exécuter le workflow: au moins un des fichiers utilisés n'existe pas !\n\
 \n\
 Détail:\n\
 {0}\n\
@@ -85,10 +85,10 @@ UI.dialog.about_content                               = <html>\
 UI.dialog.about_msg                                   =
 UI.dialog.connection.connect_to_server                = Établir la connexion au serveur :
 UI.dialog.connection.enter_login_passwd               = Veuillez saisir votre identifiant et votre mot de passe
-UI.dialog.connection.login                            = Nom d''utilisateur :
+UI.dialog.connection.login                            = Nom d'utilisateur :
 UI.dialog.connection.passwd                           = Mot de passe :
 UI.dialog.connection.server                           = Serveur (hôte:port) :
-UI.dialog.connection.title                            = Ouverture de l''application...
+UI.dialog.connection.title                            = Ouverture de l'application...
 UI.dialog.connection_failure                          = Impossible de se connecter au serveur, veuillez réessayer ultérieurement
 UI.dialog.connection_failure_title                    = Échec de la connexion
 UI.dialog.datasource_inputs.add                       = Ajouter
@@ -101,11 +101,11 @@ UI.dialog.disconnect_confirm                          = Souhaitez-vous vous déc
 UI.dialog.disconnect_confirm_title                    = Déconnexion du serveur
 UI.dialog.error                                       = Erreur !
 UI.dialog.file_chooser.title                          = Ajout de fichiers
-UI.dialog.file.overwrite                              = Le fichier existe déjà: l''écraser?
+UI.dialog.file.overwrite                              = Le fichier existe déjà: l'écraser?
 UI.dialog.help.title                                  = Aide
 UI.dialog.help.not_available                          = Aucune aide disponible pour le moment
-UI.dialog.image.save.failed_title                     = Échec de l''enregistrement
-UI.dialog.image.save.failed                           = L''image n''a pas pu être sauvegardée: une erreur est survenue
+UI.dialog.image.save.failed_title                     = Échec de l'enregistrement
+UI.dialog.image.save.failed                           = L'image n'a pas pu être sauvegardée: une erreur est survenue
 UI.dialog.import.label_wf                             = Workflow
 UI.dialog.import.label_ws                             = Espace de travail
 UI.dialog.import.msg_wf                               = Quel workflow voulez-vous importer?
@@ -113,11 +113,11 @@ UI.dialog.import.title                                = Import
 UI.dialog.save_as.title                               = Sauvegarder sous
 UI.dialog.rename.title                                = Renommer
 UI.dialog.logging_err_msg                             = Impossible de se connecter: utilisateur/mot de passe incorrects
-UI.dialog.login_mandatory                             = Vous devez au moins fournir un nom d''utilisateur !
+UI.dialog.login_mandatory                             = Vous devez au moins fournir un nom d'utilisateur !
 UI.dialog.open.label_wf                               = Sélectionner un workflow à ouvrir:\n\
 \n\
 
-UI.dialog.open.label_ws                               = Sélectionner l''espace de travail à ouvrir:\n\
+UI.dialog.open.label_ws                               = Sélectionner l'espace de travail à ouvrir:\n\
 \n\
 
 UI.dialog.open.title                                  = Ouverture
@@ -127,27 +127,27 @@ UI.dialog.datasource.incorrect_name_title             = Nom incorrect
 UI.dialog.datasource.incorrect_name                   = Les caractères :, ?, /, \\, <, >, \" et | ne sont pas autorisés
 UI.dialog.datasource.name_already_exists              = Il existe déjà une entrée portant ce nom. Veuillez en choisir un autre.
 UI.dialog.prg_properties.descr_window_title           = Description de: {0}
-UI.dialog.prg_properties.main_label                   = Description de: {0}  (cliquer pour l''afficher)
+UI.dialog.prg_properties.main_label                   = Description de: {0}  (cliquer pour l'afficher)
 UI.dialog.prg_properties.parameters                   = Paramètres :
 UI.dialog.prg_properties.parameters_default           = (et leur valeur par défaut)
 UI.dialog.prg_properties.title                        = Propriétés de programme
 UI.dialog.quit                                        = Quitter
 UI.dialog.quit_and_disconnect_msg                     = \n\
-Voulez-vous quitter l''application?\n\
+Voulez-vous quitter l'application?\n\
 
-UI.dialog.quit_msg                                    = Voulez-vous quitter l''application?
+UI.dialog.quit_msg                                    = Voulez-vous quitter l'application?
 UI.dialog.save_ws.btn_none                            = Aucun
 UI.dialog.save_ws.btn_ok                              = OK
 UI.dialog.save_ws.msg                                 = Sélectionner les workflows à sauvegarder :
 UI.dialog.save_ws.title                               = Sauvegarde de {0}
 UI.dialog.wf.already_opened                           = Ce workflow est déjà ouvert !
 UI.dialog.wf.close_confirm                            = Voulez-vous sauvegarder le workflow "{0}" avant de le fermer?
-UI.dialog.wf.close_title                              = Fermeture d''un workflow
+UI.dialog.wf.close_title                              = Fermeture d'un workflow
 UI.dialog.wf.enter_name                               = Choisir un nom pour le workflow:
 UI.dialog.wf.creation_failed_ws_not_selected          = Veuillez créer ou sélectionner un espace de travail avant de créer un workflow
-UI.dialog.wf.creation_failure_title                   = Erreur lors de la création d''un workflow
-UI.dialog.wf.creation_title                           = Création d''un workflow
-UI.dialog.wf.delete_result_confirm_title              = Effacement d''un résultat
+UI.dialog.wf.creation_failure_title                   = Erreur lors de la création d'un workflow
+UI.dialog.wf.creation_title                           = Création d'un workflow
+UI.dialog.wf.delete_result_confirm_title              = Effacement d'un résultat
 UI.dialog.wf.delete_result_confirm                    = Êtes-vous sûr(e) de vouloir effacer définitivement ce résultat ?
 UI.dialog.wf.delete_all_results_confirm_title         = Effacement de tous les résultats
 UI.dialog.wf.delete_all_results_confirm               = Êtes-vous sûr(e) de vouloir effacer définitivement tous les résultats de ce workflow ?
@@ -155,41 +155,41 @@ UI.dialog.wf.delete                                   = Suppression du workflow
 UI.dialog.wf.delete_confirm                           = \n\
 Êtes-vous certain(e) de vouloir définitivement effacer ce workflow?\n\
 \n\
-Cet opération supprimera définitivement l''ensemble de ses résultats.\n\
+Cet opération supprimera définitivement l'ensemble de ses résultats.\n\
 
 UI.dialog.wf.existing_names                           = Les workflows déjà existants sont:
-UI.dialog.wf.export_title                             = Export d''un workflow
-UI.dialog.wf.export_failed                            = Échec de l''export
-UI.dialog.wf.import_cannot_extract                    = Impossible d''extraire les fichiers
+UI.dialog.wf.export_title                             = Export d'un workflow
+UI.dialog.wf.export_failed                            = Échec de l'export
+UI.dialog.wf.import_cannot_extract                    = Impossible d'extraire les fichiers
 UI.dialog.wf.import_cannot_create_dir                 = Impossible de créer le répertoire choisi. Vérifiez que vous avez les droits suffisants.
 UI.dialog.wf.import_cannot_read_zip                   = Impossible de lire le fichier zip
-UI.dialog.wf.import_create_dir                        = Le répertoire choisi n''existe pas. Voulez-vous le créer?
-UI.dialog.wf.import_drop_file_in_dir                  = Déposer les fichiers d''entré dans ce répertoire
-UI.dialog.wf.import_failure                           = Une erreur inattendue s''est produite lors de l''importation du workflow
-UI.dialog.wf.import_failure_title                     = Échec de l''importation d''un workflow
-UI.dialog.wf.import_impossible_coz_execution          = Impossible d''importer le workflow: une exécution est en cours
+UI.dialog.wf.import_create_dir                        = Le répertoire choisi n'existe pas. Voulez-vous le créer?
+UI.dialog.wf.import_drop_file_in_dir                  = Déposer les fichiers d'entré dans ce répertoire
+UI.dialog.wf.import_failure                           = Une erreur inattendue s'est produite lors de l'importation du workflow
+UI.dialog.wf.import_failure_title                     = Échec de l'importation d'un workflow
+UI.dialog.wf.import_impossible_coz_execution          = Impossible d'importer le workflow: une exécution est en cours
 UI.dialog.wf.import_invalid_archive                   = Archive invalide
-UI.dialog.wf.import_not_a_dir                         = "{0}" n''est pas un répertoire. Veuillez sélectionner un répertoire.
+UI.dialog.wf.import_not_a_dir                         = "{0}" n'est pas un répertoire. Veuillez sélectionner un répertoire.
 UI.dialog.wf.invalid_name_empty                       = Le nom ne peut pas être vide!
 UI.dialog.wf.invalid_name_already_exists              = Un autre workflow a déjà ce nom!
-UI.dialog.wf.open_failed_no_workflow                  = Impossible d''ouvrir un workflow: aucun n''est disponible !
-UI.dialog.wf.open_failed_xml_not_conform_to_DTD       = Impossible d''ouvrir le workflow: le xml n''est pas conforme à la DTD
-UI.dialog.wf.open_failure                             = Une erreur inattendue s''est produite lors de l''ouverture du workflow
-UI.dialog.wf.rename_save_before_confirm               = Le workflow a été modifié et doit être sauvegardé avant d''être renommé.\n\
+UI.dialog.wf.open_failed_no_workflow                  = Impossible d'ouvrir un workflow: aucun n'est disponible !
+UI.dialog.wf.open_failed_xml_not_conform_to_DTD       = Impossible d'ouvrir le workflow: le xml n'est pas conforme à la DTD
+UI.dialog.wf.open_failure                             = Une erreur inattendue s'est produite lors de l'ouverture du workflow
+UI.dialog.wf.rename_save_before_confirm               = Le workflow a été modifié et doit être sauvegardé avant d'être renommé.\n\
 Souhaitez-vous le faire maintenant?
-UI.dialog.wf.open_failure_title                       = Échec de l''ouverture d''un workflow
+UI.dialog.wf.open_failure_title                       = Échec de l'ouverture d'un workflow
 UI.dialog.wf.open_select_workflows                    = Sélectionnez le(s) workflow(s) à ouvrir:
-UI.dialog.wf.rename_failure_title                     = Échec du renommage d''un workflow
+UI.dialog.wf.rename_failure_title                     = Échec du renommage d'un workflow
 UI.dialog.wf.rename_impossible                        = Échec du renommage (raison inconnue).\n\
-Cause d''échec possible: les fichiers correspondants sont peut-être ouverts dans un autre outil.
+Cause d'échec possible: les fichiers correspondants sont peut-être ouverts dans un autre outil.
 UI.dialog.wf.rename_impossible_coz_execution          = Impossible de renommer le workflow: une exécution est en cours
 UI.dialog.wf.rename_title                             = Renommage de {0}
-UI.dialog.wf.save_title                               = Sauvegarde d''un workflow
+UI.dialog.wf.save_title                               = Sauvegarde d'un workflow
 UI.dialog.wf.save_failed                              = Impossible de sauvegarder le workflow
 UI.dialog.wf.delete_title                             = Suppression du workflow {0}
 UI.dialog.wf.delete_confirm_msg                       = Êtes-vous sûr(e) de vouloir supprimer le workflow {0}?
 UI.dialog.wf.delete_confirm_msg_with_results          = Êtes-vous sûr(e) de vouloir supprimer le workflow {0}?\n\
-Ce workflow a déjà été exécuté; l''effacer entraînera également la suppression de tous les résultats correspondants.
+Ce workflow a déjà été exécuté; l'effacer entraînera également la suppression de tous les résultats correspondants.
 UI.dialog.wf.warnings_title                           = Le workflow nécessite des vérifications
 UI.dialog.wf.warnings                                 = Attention: en chargeant le workflow, des incohérences ont été \
 trouvées dans le paramétrage de certains programmes.\n\
@@ -198,7 +198,7 @@ Nous vous conseillons de vérifier ces corrections et de vous assurer par ailleu
 
 UI.dialog.result.rename                               = Nom du résultat :
 UI.dialog.result.rename_title                         = Renommage du résultat
-UI.dialog.result.rename_failed_title                  = Échec du renommage d''un résultat
+UI.dialog.result.rename_failed_title                  = Échec du renommage d'un résultat
 UI.dialog.result.rename_failed                        = Le renommage du résultat a échoué
 UI.dialog.btn_cancel                                  = Annuler
 UI.dialog.btn_ok                                      = OK
@@ -227,9 +227,9 @@ UI.menu.workspace                                     = Espace de travail
 UI.menu_items.about                                   = À propos...
 UI.menu_items.about_tt                                = Informations sur le logiciel
 UI.menu_items.check_valid_links                       = Vérifier la validité des liens
-UI.menu_items.check_valid_links_tt                    = Permet d''activer ou de désactiver la procédure automatique qui contrôle que deux éléments d''un workflow (programmes, fichiers ou bases de données) sont compatibles lorsque l''on cherche à les enchaîner l''un à la suite de l''autre.
+UI.menu_items.check_valid_links_tt                    = Permet d'activer ou de désactiver la procédure automatique qui contrôle que deux éléments d'un workflow (programmes, fichiers ou bases de données) sont compatibles lorsque l'on cherche à les enchaîner l'un à la suite de l'autre.
 UI.menu_items.open_all_results                        = Ouvrir immédiatement tous les fichiers résultat
-UI.menu_items.open_all_results_tt                     = Ouvre automatiquement tous les fichiers lorsqu''un résultat est sélectionné
+UI.menu_items.open_all_results_tt                     = Ouvre automatiquement tous les fichiers lorsqu'un résultat est sélectionné
 UI.menu_items.options                                 = Options...
 UI.menu_items.options_tt                              = Options du logiciel
 UI.menu_items.connect                                 = Connexion
@@ -241,15 +241,15 @@ UI.menu_items.delete_tt                               = Supprime le ou les objet
 UI.menu_items.disconnect                              = Déconnexion
 UI.menu_items.disconnect_tt                           = Déconnexion du serveur
 UI.menu_items.edit_rename                             = Renommer...
-UI.menu_items.edit_rename_tt                          = Permet de renommer l''objet sélectionné
+UI.menu_items.edit_rename_tt                          = Permet de renommer l'objet sélectionné
 UI.menu_items.exit                                    = Quitter
-UI.menu_items.exit_tt                                 = Quitte l''application
+UI.menu_items.exit_tt                                 = Quitte l'application
 UI.menu_items.help                                    = Aide
 UI.menu_items.help_tt                                 = Aide
 UI.menu_items.paste                                   = Coller
 UI.menu_items.paste_tt                                = Colle le contenu du presse-papier dans le workflow en cours
 UI.menu_items.properties                              = Propriétés...
-UI.menu_items.properties_tt                           = Modifie les propriétés de l''objet sélectionné
+UI.menu_items.properties_tt                           = Modifie les propriétés de l'objet sélectionné
 UI.menu_items.wf_delete                               = Supprimer le workflow
 UI.menu_items.wf_delete_tt                            = Supprime le workflow actuel
 UI.menu_items.result_delete                           = Supprimer ce résultat
@@ -259,7 +259,7 @@ UI.menu_items.result_rename                           = Renommer ce résultat
 UI.menu_items.all_results_delete                      = Supprimer tous les résultats
 UI.menu_items.all_results_delete_tt                   = Supprime tous les résultats pour ce workflow
 UI.menu_items.wf_exec_stop                            = Interrompre
-UI.menu_items.wf_exec_stop_tt                         = Interrompt l''exécution en cours
+UI.menu_items.wf_exec_stop_tt                         = Interrompt l'exécution en cours
 UI.menu_items.wf_execute                              = Exécuter
 UI.menu_items.wf_execute_tt                           = Exécute le workflow actuel
 UI.menu_items.wf_rename                               = Renommer...
@@ -268,17 +268,17 @@ UI.menu_items.wf_results                              = Résultats
 UI.menu_items.wf_results_tt                           = Afficher les résultats du workflow
 UI.menu_items.show_statusbar                          = Barre de statut
 UI.menu_items.show_statusbar_tt                       = Affiche/cache la barre de statut
-UI.menu_items.show_toolbar                            = Barre d''outils
-UI.menu_items.show_toolbar_tt                         = Affiche/cache la barre d''outils
+UI.menu_items.show_toolbar                            = Barre d'outils
+UI.menu_items.show_toolbar_tt                         = Affiche/cache la barre d'outils
 
 UI.menu_items.create_file                             = Créer le fichier
 UI.menu_items.open_with                               = Ouvrir avec...
 UI.menu_items.display_file_action                     = Voir le contenu
 UI.menu_items.display_file_action_tt                  = Voir le contenu du fichier sélectionné
 UI.menu_items.anti_aliasing                           = Antialiasing
-UI.menu_items.anti_aliasing_tt                        = Utiliser ou non l''antialiasing
+UI.menu_items.anti_aliasing_tt                        = Utiliser ou non l'antialiasing
 UI.menu_items.show_grid                               = Voir la grille
-UI.menu_items.show_grid_tt                            = Afficher/masquer la grille dans l''éditeur de graphe
+UI.menu_items.show_grid_tt                            = Afficher/masquer la grille dans l'éditeur de graphe
 UI.menu_items.snap_to_grid                            = Aligner sur la grille
 UI.menu_items.snap_to_grid_tt                         = Aligner les éléments graphiques sur la grille
 UI.menu_items.grid_size                               = Talle de la grille
@@ -299,8 +299,8 @@ UI.menu_items.changes                                 = Modifications...
 UI.menu_items.languages                               = Changer la langue... (Language settings…)
 # value                                               = language (translated language)
 UI.menu_items.language.fr                             = Français
-UI.menu_items.language.en                             = English (Anglais)
 UI.menu_items.language.el                             = Ελληνικά (Grec)
+UI.menu_items.language.en                             = English (Anglais)
 UI.menu_items.language.es                             = Español (Espagnol)
 
 UI.progtree.database                                  = Base de données
@@ -309,8 +309,8 @@ UI.progtree.file                                      = Fichier(s)
 UI.progtree.directory                                 = Répertoire
 UI.progtree.programs                                  = Programmes
 UI.results.info_title                                 = Informations
-UI.results.info_unimplemented                         = Aucune information supplémentaire n''est disponible sur ce fichier
-UI.results.input_files_popup_menu                     = Fichiers d''entrée
+UI.results.info_unimplemented                         = Aucune information supplémentaire n'est disponible sur ce fichier
+UI.results.input_files_popup_menu                     = Fichiers d'entrée
 UI.results.file_truncated                             = Ce fichier de résultat est trop volumineux pour être affiché dans cette fenêtre: seul le début est affiché.\n\
 Pour le visualiser en entier, sélectionnez un des visualisateurs externes disponibles.
 UI.results.viewers.launch_failed                      = Impossible de lancer le visualisateur externe sélectionné
@@ -322,7 +322,7 @@ UI.tab.close                                          = Ferme cet onglet
 
 UI.label.search                                       = Recherche:
 UI.label.service_unknown                              = Cette ressource est inconnue: elle ne peut pas être utilisée
-UI.label.invalid_program_description                  = La description de ce programme n''est pas valide, il ne peut être utilisé
+UI.label.invalid_program_description                  = La description de ce programme n'est pas valide, il ne peut être utilisé
 
 UI.view.opened_workflows                              = Workflows ouverts
 UI.view.resources                                     = Programmes
@@ -335,40 +335,47 @@ common.error                              = Erreur
 common.no                                 = Non
 common.yes                                = Oui
 common.warning                            = Attention
-common.client_out_of_date                 = Ce client n''est plus à jour:\nveuillez s''il vous plait télécharger une nouvelle version!
+common.client_out_of_date                 = Ce client n'est plus à jour:\n\
+veuillez s'il vous plait télécharger une nouvelle version!
 common.client_out_of_date_title           = Mise à jour du client
-common.cnx_rejected.invalid_credentials            = Impossible de se connecter au serveur:\nlogin/mot de passe invalides.
+common.cnx_rejected.invalid_credentials            = Impossible de se connecter au serveur:\n\
+login/mot de passe invalides.
 common.cnx_rejected.invalid_credentials_title      = Échec de la connexion
-common.cnx_rejected.client_already_connected       = Impossible de se connecter au serveur:\ncet utilisateur est déjà connecté.
+common.cnx_rejected.client_already_connected       = Impossible de se connecter au serveur:\n\
+cet utilisateur est déjà connecté.
 common.cnx_rejected.client_already_connected_title = Échec de la connexion
 common.cnx_rejected.client_login_disabled          = Les connexions au serveur ne sont pas autorisées pour le moment, veuillez réessayer ultérieurement.
 common.cnx_rejected.client_login_disabled_title    = Échec de la connexion
-common.cnx_rejected.client_login_disabled_w_reason = Les connexions au serveur ne sont pas autorisées pour le moment\n{0}
+common.cnx_rejected.client_login_disabled_w_reason = Les connexions au serveur ne sont pas autorisées pour le moment\n\
+{0}
 common.cnx_rejected.client_login_disabled_w_reason_title = Échec de la connexion
-common.cnx_rejected.maximum_number_of_clients       = Connexion refusée: le serveur ne peut plus accepter de nouvelles sessions\n Merci de réessayer un peu plus tard\n\nVeuillez nous excuser pour la gêne occasionnée.
+common.cnx_rejected.maximum_number_of_clients       = Connexion refusée: le serveur ne peut plus accepter de nouvelles sessions\n\
+ Merci de réessayer un peu plus tard\n\
+\n\
+Veuillez nous excuser pour la gêne occasionnée.
 common.cnx_rejected.maximum_number_of_clients_title = Connection refusée
 
-wf.xmlwarnings.prg_desc_does_not_exists   = Le workflow utilisait un programme nommé ''{0}'', qui n''est plus disponible.
-wf.xmlwarnings.prg_desc_replace_by_alternative = Le workflow utilisait un programme nommé ''{0}'', qui n''est plus disponible.\n\
-Il a été remplacé par le programme ''{1}''.\n\
-Il est possible que cette version ne soit pas compatible complètement avec l''ancienne; la présence d''avertissements ci-après \
+wf.xmlwarnings.prg_desc_does_not_exists   = Le workflow utilisait un programme nommé '{0}', qui n'est plus disponible.
+wf.xmlwarnings.prg_desc_replace_by_alternative = Le workflow utilisait un programme nommé '{0}', qui n'est plus disponible.\n\
+Il a été remplacé par le programme '{1}'.\n\
+Il est possible que cette version ne soit pas compatible complètement avec l'ancienne; la présence d'avertissements ci-après \
 vous donnera, si besoin, les détails sur ces incompatibilités.
-wf.xmlwarnings.prg_declares_invalid_param = Le programme ''{0}'' utilisait un paramètre ''{1}'' qui n''est plus valide \
-(la valeur pour ce paramètre était: ''{2}'').
-wf.xmlwarnings.prg_param_has_invalid_value = Le programme ''{0}'' déclarait une valeur invalide pour le paramètre ''{1}''. \
-Cette valeur était ''{2}''; la valeur du paramètre a été réinitialisée à la valeur par défaut: ''{3}''.
-wf.xmlwarnings.prg_has_invalid_link        = Le programme ''{0}'' était relié à une sortie du programme ''{1}'' (sortie identifiée comme: ''{2}'') mais ce lien \
-n''est plus valide (soit ''{1}'' n''est plus un programme valide, soit cette sortie n''est plus valide).\n\
-Le lien entre les deux programmes n''a pas pu être rétabli.
-wf.xmlwarnings.prg_link_is_inactive        = La sortie ''{1}'' du programme ''{0}'' et l''entrée ''{3}'' du programme ''{2}'' \
- étaient liés l''un à l''autre, mais l''un et/ou l''autre de ces entrées/sorties n''est plus actif dans la configuration actuelle des programmes.\n\
-Le lien entre les deux programmes n''a pas pu être rétabli.
-wf.xmlwarnings.prg_contains_useless_parameter = Info: le programme ''{0}'' déclare un paramètre ''{1}'' (de type ''{2}''): \
-ce paramètre est ignoré (Note: ce message est pour information seulement, vous pouvez l''ignorer)
+wf.xmlwarnings.prg_declares_invalid_param = Le programme '{0}' utilisait un paramètre '{1}' qui n'est plus valide \
+(la valeur pour ce paramètre était: '{2}').
+wf.xmlwarnings.prg_param_has_invalid_value = Le programme '{0}' déclarait une valeur invalide pour le paramètre '{1}'. \
+Cette valeur était '{2}'; la valeur du paramètre a été réinitialisée à la valeur par défaut: '{3}'.
+wf.xmlwarnings.prg_has_invalid_link        = Le programme '{0}' était relié à une sortie du programme '{1}' (sortie identifiée comme: '{2}') mais ce lien \
+n'est plus valide (soit '{1}' n'est plus un programme valide, soit cette sortie n'est plus valide).\n\
+Le lien entre les deux programmes n'a pas pu être rétabli.
+wf.xmlwarnings.prg_link_is_inactive        = La sortie '{1}' du programme '{0}' et l'entrée '{3}' du programme '{2}' \
+ étaient liés l'un à l'autre, mais l'un et/ou l'autre de ces entrées/sorties n'est plus actif dans la configuration actuelle des programmes.\n\
+Le lien entre les deux programmes n'a pas pu être rétabli.
+wf.xmlwarnings.prg_contains_useless_parameter = Info: le programme '{0}' déclare un paramètre '{1}' (de type '{2}'): \
+ce paramètre est ignoré (Note: ce message est pour information seulement, vous pouvez l'ignorer)
 
 eu.telecom_bretagne.praxis.core.execution.Result.Status.UNSET     = Non disponible
 eu.telecom_bretagne.praxis.core.execution.Result.Status.SUBMITTED = Soumis
-eu.telecom_bretagne.praxis.core.execution.Result.Status.RUNNING   = En cours d''exécution
+eu.telecom_bretagne.praxis.core.execution.Result.Status.RUNNING   = En cours d'exécution
 eu.telecom_bretagne.praxis.core.execution.Result.Status.OK        = OK
 eu.telecom_bretagne.praxis.core.execution.Result.Status.WARNING   = OK, avec avertissements
 eu.telecom_bretagne.praxis.core.execution.Result.Status.ERROR     = Erreur
diff --git a/data/i18n/praxis_el.properties b/data/i18n/praxis_el.properties
index a8a0d11382068bb73d90df4c9384af63a9031bdc..911513ce4a5ee08e16ec1583a4374c7bde243f5f 100644
--- a/data/i18n/praxis_el.properties
+++ b/data/i18n/praxis_el.properties
@@ -298,9 +298,9 @@ UI.menu_items.changes                                 = \u03a4\u03c1\u03bf\u03c0
 
 UI.menu_items.languages                               = \u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2 \u0393\u03bb\u03ce\u03c3\u03c3\u03b1\u03c2... (Language settings\u2026)
 # value                                               = language (translated language)
+UI.menu_items.language.fr                             = Fran\u00e7ais (\u0393\u03b1\u03bb\u03bb\u03b9\u03ba\u03ac)
 UI.menu_items.language.el                             = \u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac
 UI.menu_items.language.en                             = English (\u0391\u03b3\u03b3\u03bb\u03b9\u03ba\u03ac)
-UI.menu_items.language.fr                             = Fran\u00e7ais (\u0393\u03b1\u03bb\u03bb\u03b9\u03ba\u03ac)
 UI.menu_items.language.es                             = Espa\u00f1ol (\u0399\u03c3\u03c0\u03b1\u03bd\u03b9\u03ba\u03ac)
 
 UI.progtree.database                                  = \u0392\u03ac\u03c3\u03b7 \u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd
@@ -335,17 +335,24 @@ common.error                              = \u03a3\u03c6\u03ac\u03bb\u03bc\u03b1
 common.no                                 = \u038c\u03c7\u03b9
 common.yes                                = \u039d\u03b1\u03b9
 common.warning                            = \u03a0\u03c1\u03bf\u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7
-common.client_out_of_date                 = \u0391\u03c5\u03c4\u03cc \u03c4\u03bf \u03c0\u03c1\u03cc\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1-\u03c0\u03b5\u03bb\u03ac\u03c4\u03b7\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03ba\u03c4\u03cc\u03c2 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1\u03c2:\n\u0395\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03bd\u03b1 \u03ba\u03ac\u03bd\u03b5\u03c4\u03b5 \u03bb\u03ae\u03c8\u03b7 \u03c4\u03bf\u03c5 \u03bd\u03ad\u03bf\u03c5 \u03c0\u03c1\u03bf\u03b3\u03c1\u03ac\u03bc\u03bc\u03b1\u03c4\u03bf\u03c2-\u03c0\u03b5\u03bb\u03ac\u03c4\u03b7!
+common.client_out_of_date                 = \u0391\u03c5\u03c4\u03cc \u03c4\u03bf \u03c0\u03c1\u03cc\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1-\u03c0\u03b5\u03bb\u03ac\u03c4\u03b7\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03ba\u03c4\u03cc\u03c2 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1\u03c2:\n\
+\u0395\u03c0\u03b9\u03bb\u03ad\u03be\u03c4\u03b5 \u03bd\u03b1 \u03ba\u03ac\u03bd\u03b5\u03c4\u03b5 \u03bb\u03ae\u03c8\u03b7 \u03c4\u03bf\u03c5 \u03bd\u03ad\u03bf\u03c5 \u03c0\u03c1\u03bf\u03b3\u03c1\u03ac\u03bc\u03bc\u03b1\u03c4\u03bf\u03c2-\u03c0\u03b5\u03bb\u03ac\u03c4\u03b7!
 common.client_out_of_date_title           = \u03a4\u03bf \u03c0\u03c1\u03cc\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1-\u03c0\u03b5\u03bb\u03ac\u03c4\u03b7\u03c2 \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03bd\u03b7\u03bc\u03b5\u03c1\u03c9\u03bc\u03ad\u03bd\u03bf
-common.cnx_rejected.invalid_credentials            = \u0394\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7 \u03bc\u03b5 \u03c4\u03bf\u03bd \u03b4\u03b9\u03b1\u03ba\u03bf\u03bc\u03b9\u03c3\u03c4\u03ae:\n\u03bc\u03b7 \u03ad\u03b3\u03ba\u03c5\u03c1\u03b1 \u03b4\u03b9\u03b1\u03c0\u03b9\u03c3\u03c4\u03b5\u03c5\u03c4\u03ae\u03c1\u03b9\u03b1.
+common.cnx_rejected.invalid_credentials            = \u0394\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7 \u03bc\u03b5 \u03c4\u03bf\u03bd \u03b4\u03b9\u03b1\u03ba\u03bf\u03bc\u03b9\u03c3\u03c4\u03ae:\n\
+\u03bc\u03b7 \u03ad\u03b3\u03ba\u03c5\u03c1\u03b1 \u03b4\u03b9\u03b1\u03c0\u03b9\u03c3\u03c4\u03b5\u03c5\u03c4\u03ae\u03c1\u03b9\u03b1.
 common.cnx_rejected.invalid_credentials_title      = \u0391\u03c0\u03bf\u03c4\u03c5\u03c7\u03af\u03b1 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2
-common.cnx_rejected.client_already_connected       = \u0394\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7 \u03bc\u03b5 \u03c4\u03bf\u03bd \u03b4\u03b9\u03b1\u03ba\u03bf\u03bc\u03b9\u03c3\u03c4\u03ae:\n\u03b1\u03c5\u03c4\u03cc\u03c2 \u03bf \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03ae\u03b4\u03b7 \u03c3\u03c5\u03bd\u03b4\u03b5\u03b4\u03b5\u03bc\u03ad\u03bd\u03bf\u03c2.
+common.cnx_rejected.client_already_connected       = \u0394\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7 \u03bc\u03b5 \u03c4\u03bf\u03bd \u03b4\u03b9\u03b1\u03ba\u03bf\u03bc\u03b9\u03c3\u03c4\u03ae:\n\
+\u03b1\u03c5\u03c4\u03cc\u03c2 \u03bf \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03ae\u03b4\u03b7 \u03c3\u03c5\u03bd\u03b4\u03b5\u03b4\u03b5\u03bc\u03ad\u03bd\u03bf\u03c2.
 common.cnx_rejected.client_already_connected_title = \u0391\u03c0\u03bf\u03c4\u03c5\u03c7\u03af\u03b1 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2
 common.cnx_rejected.client_login_disabled          = \u039f \u03b4\u03b9\u03b1\u03ba\u03bf\u03bc\u03b9\u03c3\u03c4\u03ae\u03c2 \u03b1\u03c0\u03bf\u03c1\u03c1\u03af\u03c0\u03c4\u03b5\u03b9 \u03c4\u03b9\u03c2 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03b5\u03b9\u03c2, \u03b4\u03bf\u03ba\u03b9\u03bc\u03ac\u03c3\u03c4\u03b5 \u03be\u03b1\u03bd\u03ac \u03b1\u03c1\u03b3\u03cc\u03c4\u03b5\u03c1\u03b1.
 common.cnx_rejected.client_login_disabled_title    = \u0391\u03c0\u03bf\u03c4\u03c5\u03c7\u03af\u03b1 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2
-common.cnx_rejected.client_login_disabled_w_reason = \u039f \u03b4\u03b9\u03b1\u03ba\u03bf\u03bc\u03b9\u03c3\u03c4\u03ae\u03c2 \u03b1\u03c0\u03bf\u03c1\u03c1\u03af\u03c0\u03c4\u03b5\u03b9 \u03c4\u03b9\u03c2 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03b5\u03b9\u03c2\n{0}
+common.cnx_rejected.client_login_disabled_w_reason = \u039f \u03b4\u03b9\u03b1\u03ba\u03bf\u03bc\u03b9\u03c3\u03c4\u03ae\u03c2 \u03b1\u03c0\u03bf\u03c1\u03c1\u03af\u03c0\u03c4\u03b5\u03b9 \u03c4\u03b9\u03c2 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03b5\u03b9\u03c2\n\
+{0}
 common.cnx_rejected.client_login_disabled_w_reason_title = \u0391\u03c0\u03bf\u03c4\u03c5\u03c7\u03af\u03b1 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2
-common.cnx_rejected.maximum_number_of_clients       = \u0397 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7 \u03b1\u03c0\u03bf\u03c1\u03c1\u03af\u03c6\u03b8\u03b7\u03ba\u03b5: \u03bf \u03b4\u03b9\u03b1\u03ba\u03bf\u03bc\u03b9\u03c3\u03c4\u03ae\u03c2 \u03b4\u03b5\u03bd \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03b4\u03b5\u03c7\u03c4\u03b5\u03af \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b5\u03c2 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03b5\u03b9\u03c2\n\u0394\u03bf\u03ba\u03b9\u03bc\u03ac\u03c3\u03c4\u03b5 \u03be\u03b1\u03bd\u03ac \u03b1\u03c1\u03b3\u03cc\u03c4\u03b5\u03c1\u03b1\n\n\u0396\u03b7\u03c4\u03ac\u03bc\u03b5 \u03c3\u03c5\u03b3\u03bd\u03ce\u03bc\u03b7 \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03c4\u03b1\u03bb\u03b1\u03b9\u03c0\u03c9\u03c1\u03af\u03b1.
+common.cnx_rejected.maximum_number_of_clients       = \u0397 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7 \u03b1\u03c0\u03bf\u03c1\u03c1\u03af\u03c6\u03b8\u03b7\u03ba\u03b5: \u03bf \u03b4\u03b9\u03b1\u03ba\u03bf\u03bc\u03b9\u03c3\u03c4\u03ae\u03c2 \u03b4\u03b5\u03bd \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03b4\u03b5\u03c7\u03c4\u03b5\u03af \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b5\u03c2 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03b5\u03b9\u03c2\n\
+\u0394\u03bf\u03ba\u03b9\u03bc\u03ac\u03c3\u03c4\u03b5 \u03be\u03b1\u03bd\u03ac \u03b1\u03c1\u03b3\u03cc\u03c4\u03b5\u03c1\u03b1\n\
+\n\
+\u0396\u03b7\u03c4\u03ac\u03bc\u03b5 \u03c3\u03c5\u03b3\u03bd\u03ce\u03bc\u03b7 \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03c4\u03b1\u03bb\u03b1\u03b9\u03c0\u03c9\u03c1\u03af\u03b1.
 common.cnx_rejected.maximum_number_of_clients_title = \u0386\u03c1\u03bd\u03b7\u03c3\u03b7 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7\u03c2
 wf.xmlwarnings.prg_desc_does_not_exists   = \u0397 \u03c1\u03bf\u03ae \u03b5\u03c1\u03b3\u03b1\u03c3\u03b9\u03ce\u03bd \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b5 \u03ad\u03bd\u03b1 \u03c0\u03c1\u03cc\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1 \u03bc\u03b5 \u03cc\u03bd\u03bf\u03bc\u03b1 '' {0} '' \u03c4\u03bf \u03bf\u03c0\u03bf\u03af\u03bf \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03c0\u03bb\u03ad\u03bf\u03bd \u03b4\u03b9\u03b1\u03b8\u03ad\u03c3\u03b9\u03bc\u03bf.
 wf.xmlwarnings.prg_desc_replace_by_alternative = \u0397 \u03c1\u03bf\u03ae \u03b5\u03c1\u03b3\u03b1\u03c3\u03b9\u03ce\u03bd \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b5 \u03ad\u03bd\u03b1 \u03c0\u03c1\u03cc\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1 \u03bc\u03b5 \u03cc\u03bd\u03bf\u03bc\u03b1 '' {0} '' \u03c4\u03bf \u03bf\u03c0\u03bf\u03af\u03bf \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03c0\u03bb\u03ad\u03bf\u03bd \u03b4\u03b9\u03b1\u03b8\u03ad\u03c3\u03b9\u03bc\u03bf.\n\
diff --git a/data/i18n/praxis_en.properties b/data/i18n/praxis_en.properties
index 06e17ef0d16ca2c8a8c4527065ae33bee1ce80c6..ce0709ba29fe026d261c339e2bc9fc3c0da61df2 100644
--- a/data/i18n/praxis_en.properties
+++ b/data/i18n/praxis_en.properties
@@ -334,17 +334,24 @@ common.error                              = Error
 common.no                                 = No
 common.yes                                = Yes
 common.warning                            = Warning
-common.client_out_of_date                 = This client is out-of-date:\nplease download the new client!
+common.client_out_of_date                 = This client is out-of-date:\n\
+please download the new client!
 common.client_out_of_date_title           = Client out-of-date
-common.cnx_rejected.invalid_credentials            = Cannot connect to the server:\ninvalid credentials.
+common.cnx_rejected.invalid_credentials            = Cannot connect to the server:\n\
+invalid credentials.
 common.cnx_rejected.invalid_credentials_title      = Connection failed
-common.cnx_rejected.client_already_connected       = Cannot connect to the server:\nthis user is already connected.
+common.cnx_rejected.client_already_connected       = Cannot connect to the server:\n\
+this user is already connected.
 common.cnx_rejected.client_already_connected_title = Connection failed
 common.cnx_rejected.client_login_disabled          = The server is currently refusing connections, please try again later.
 common.cnx_rejected.client_login_disabled_title    = Connection failed
-common.cnx_rejected.client_login_disabled_w_reason = The server is currently refusing connections\n{0}
+common.cnx_rejected.client_login_disabled_w_reason = The server is currently refusing connections\n\
+{0}
 common.cnx_rejected.client_login_disabled_w_reason_title = Connection failed
-common.cnx_rejected.maximum_number_of_clients       = Connection refused: the server cannot accept more connections\nPlease try again a moment later\n\nWe apology for the inconvenience.
+common.cnx_rejected.maximum_number_of_clients       = Connection refused: the server cannot accept more connections\n\
+Please try again a moment later\n\
+\n\
+We apology for the inconvenience.
 common.cnx_rejected.maximum_number_of_clients_title = Connection refused
 
 wf.xmlwarnings.prg_desc_does_not_exists   = The workflow used a program named ''{0}'' which is not available anymore.
diff --git a/data/i18n/praxis_es.properties b/data/i18n/praxis_es.properties
index a5c18fd82aef1315029a70fd221095af5cb9eec4..e433475d2437fb5dfece12682559ad2bcd1d46db 100644
--- a/data/i18n/praxis_es.properties
+++ b/data/i18n/praxis_es.properties
@@ -367,17 +367,24 @@ common.error                              = Error
 common.no                                 = No
 common.yes                                = S\u00ed
 common.warning                            = Atenci\u00f3n
-common.client_out_of_date                 = Este cliente est\u00e1 desactualizado: \n\u00a1por favor descargue un nuevo cliente!
+common.client_out_of_date                 = Este cliente est\u00e1 desactualizado: \n\
+\u00a1por favor descargue un nuevo cliente!
 common.client_out_of_date_title           = Cliente desactualizado
-common.cnx_rejected.invalid_credentials            = No se puede conectar con el servidor:\ncredenciales no v\u00e1lidas.
+common.cnx_rejected.invalid_credentials            = No se puede conectar con el servidor:\n\
+credenciales no v\u00e1lidas.
 common.cnx_rejected.invalid_credentials_title      = Error en la connexi\u00f3n
-common.cnx_rejected.client_already_connected       = No se puede conectar con el servidor:\neste usuario ya est\u00e1 conectado.
+common.cnx_rejected.client_already_connected       = No se puede conectar con el servidor:\n\
+este usuario ya est\u00e1 conectado.
 common.cnx_rejected.client_already_connected_title = Error en la connexi\u00f3n
 common.cnx_rejected.client_login_disabled          = El servidor no admite conexi\u00f3nes en este momento, por favor int\u00e9ntelo de nuevo m\u00e1s tarde.
 common.cnx_rejected.client_login_disabled_title    = Error en la connexi\u00f3n
-common.cnx_rejected.client_login_disabled_w_reason = El servidor no admite conexi\u00f3nes en este momento\n{0}
+common.cnx_rejected.client_login_disabled_w_reason = El servidor no admite conexi\u00f3nes en este momento\n\
+{0}
 common.cnx_rejected.client_login_disabled_w_reason_title = Error en la connexi\u00f3n
-common.cnx_rejected.maximum_number_of_clients       = Conexi\u00f3n rechazada: el servidor no puede aceptar m\u00e1s conexiones\nPor favor int\u00e9ntelo de nuevo m\u00e1s tarde\n\nDisculpe los problemas ocasionados.
+common.cnx_rejected.maximum_number_of_clients       = Conexi\u00f3n rechazada: el servidor no puede aceptar m\u00e1s conexiones\n\
+Por favor int\u00e9ntelo de nuevo m\u00e1s tarde\n\
+\n\
+Disculpe los problemas ocasionados.
 common.cnx_rejected.maximum_number_of_clients_title = Conexi\u00f3n rechazada
 
 wf.xmlwarnings.prg_desc_does_not_exists   = El diagrama de flujo us\u00f3 un programa llamado ''{0}'' que ya no est\u00e1 disponible.
@@ -389,7 +396,8 @@ wf.xmlwarnings.prg_declares_invalid_param = El programa ''{0}'' us\u00f3 un par\
 wf.xmlwarnings.prg_param_has_invalid_value = El programa ''{0}'' declar\u00f3 un valor no v\u00e1lido para el par\u00e1metro ''{1}''. Este valor \
 era ''{2}'' y ya no es v\u00e1lido: el valor del par\u00e1metro se restableci\u00f3 al valor por defecto ''{3}''.
 wf.xmlwarnings.prg_has_invalid_link        = El programa ''{0}'' fue unido a un resultado del programa \u201c{1}\u201d (la salida se identific\u00f3 como ''{2}'') pero el enlace no es v\u00e1lido \
-(otro ''{1}'' ya no es un programa v\u00e1lido en el diagrama de flujo, o su salida correspondiente ya no es v\u00e1lida).\n\ El enlace entre dos programas no se ha podido restaurar.
+(otro ''{1}'' ya no es un programa v\u00e1lido en el diagrama de flujo, o su salida correspondiente ya no es v\u00e1lida).\n\
+El enlace entre dos programas no se ha podido restaurar.
 wf.xmlwarnings.prg_link_is_inactive        = La salida ''{1}'' del programa ''{0}'' y del input ''{3}'' del programa ''{2}'' \
 estaban unidos, pero al menos uno de ellos no est\u00e1 activado en la actual parametrizaci\u00f3n de esos dos programas.\n\
 El enlace entre los dos programas no podr\u00e1 ser restaurado.
diff --git a/data/i18n/praxis_fr.properties b/data/i18n/praxis_fr.properties
index dfdf80d11db09f841425fa9c98ec1cdba6067a7c..067931db0127c1b9d81a9e74fa6ba02927430b4d 100644
--- a/data/i18n/praxis_fr.properties
+++ b/data/i18n/praxis_fr.properties
@@ -298,8 +298,8 @@ UI.menu_items.changes                                 = Modifications...
 UI.menu_items.languages                               = Changer la langue... (Language settings\u2026)
 # value                                               = language (translated language)
 UI.menu_items.language.fr                             = Fran\u00e7ais
-UI.menu_items.language.en                             = English (Anglais)
 UI.menu_items.language.el                             = \u0395\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac (Grec)
+UI.menu_items.language.en                             = English (Anglais)
 UI.menu_items.language.es                             = Espa\u00f1ol (Espagnol)
 
 UI.progtree.database                                  = Base de donn\u00e9es
@@ -334,17 +334,24 @@ common.error                              = Erreur
 common.no                                 = Non
 common.yes                                = Oui
 common.warning                            = Attention
-common.client_out_of_date                 = Ce client n''est plus \u00e0 jour:\nveuillez s''il vous plait t\u00e9l\u00e9charger une nouvelle version!
+common.client_out_of_date                 = Ce client n''est plus \u00e0 jour:\n\
+veuillez s''il vous plait t\u00e9l\u00e9charger une nouvelle version!
 common.client_out_of_date_title           = Mise \u00e0 jour du client
-common.cnx_rejected.invalid_credentials            = Impossible de se connecter au serveur:\nlogin/mot de passe invalides.
+common.cnx_rejected.invalid_credentials            = Impossible de se connecter au serveur:\n\
+login/mot de passe invalides.
 common.cnx_rejected.invalid_credentials_title      = \u00c9chec de la connexion
-common.cnx_rejected.client_already_connected       = Impossible de se connecter au serveur:\ncet utilisateur est d\u00e9j\u00e0 connect\u00e9.
+common.cnx_rejected.client_already_connected       = Impossible de se connecter au serveur:\n\
+cet utilisateur est d\u00e9j\u00e0 connect\u00e9.
 common.cnx_rejected.client_already_connected_title = \u00c9chec de la connexion
 common.cnx_rejected.client_login_disabled          = Les connexions au serveur ne sont pas autoris\u00e9es pour le moment, veuillez r\u00e9essayer ult\u00e9rieurement.
 common.cnx_rejected.client_login_disabled_title    = \u00c9chec de la connexion
-common.cnx_rejected.client_login_disabled_w_reason = Les connexions au serveur ne sont pas autoris\u00e9es pour le moment\n{0}
+common.cnx_rejected.client_login_disabled_w_reason = Les connexions au serveur ne sont pas autoris\u00e9es pour le moment\n\
+{0}
 common.cnx_rejected.client_login_disabled_w_reason_title = \u00c9chec de la connexion
-common.cnx_rejected.maximum_number_of_clients       = Connexion refus\u00e9e: le serveur ne peut plus accepter de nouvelles sessions\n Merci de r\u00e9essayer un peu plus tard\n\nVeuillez nous excuser pour la g\u00eane occasionn\u00e9e.
+common.cnx_rejected.maximum_number_of_clients       = Connexion refus\u00e9e: le serveur ne peut plus accepter de nouvelles sessions\n\
+ Merci de r\u00e9essayer un peu plus tard\n\
+\n\
+Veuillez nous excuser pour la g\u00eane occasionn\u00e9e.
 common.cnx_rejected.maximum_number_of_clients_title = Connection refus\u00e9e
 
 wf.xmlwarnings.prg_desc_does_not_exists   = Le workflow utilisait un programme nomm\u00e9 ''{0}'', qui n''est plus disponible.
diff --git a/src/eu/telecom_bretagne/praxis/client/Client.java b/src/eu/telecom_bretagne/praxis/client/Client.java
index 04dd3a0d90053340a6816b92d4e143c4a7292a76..4c94b7e2bb0456bdf3bb20fa5cf07788eecdcba0 100644
--- a/src/eu/telecom_bretagne/praxis/client/Client.java
+++ b/src/eu/telecom_bretagne/praxis/client/Client.java
@@ -323,40 +323,6 @@ public class Client implements ApplicationListener
 	 */
 	private Utile.SimpleContainer connection_status = new Utile.SimpleContainer();
 	
-	public void displayErrorMessage(String title, String message)
-	{
-		@SuppressWarnings("rawtypes")
-		Class MessageDialogClass = null;
-		if (!Configuration.getBoolean("client.no_gui"))
-		{
-			try
-			{
-				MessageDialogClass = Class.forName("eu.telecom_bretagne.praxis.client.ui.dialog.MessageDialog");
-			}
-			catch (Throwable e) { /* ignore */ }
-		}
-		if (MessageDialogClass!=null)
-		{
-			try
-			{
-				@SuppressWarnings("unchecked")
-				java.lang.reflect.Method showMessageDialog =
-					MessageDialogClass.getDeclaredMethod("showMessageDialog",
-					                                     java.awt.Component.class,
-					                                     java.lang.String.class,
-					                                     int.class,
-					                                     java.lang.String.class);
-				showMessageDialog.invoke(null, null, message, javax.swing.JOptionPane.WARNING_MESSAGE, title);
-			}
-			catch (Throwable t)
-			{
-				MessageDialogClass = null;
-			}
-		}
-		// log it in any cases
-		Log.log.severe(()->title+" - "+message);
-	}
-	
 	public void connectAndWaitAnswer(String login, String password, boolean connectStorageManager)
 	{
 		cnx.addListener(new ServerToClientEventAdapter() {
@@ -387,7 +353,7 @@ public class Client implements ApplicationListener
 						else
 							error_title = "Unknown error";
 
-						displayErrorMessage(error_title, error);
+						ErrorDialog.displayErrorMessage(error_title, error);
 						System.exit(-1);// TODO list & identify all exit status
 					}
 					connection_status.data = ( event.data instanceof Integer );
diff --git a/src/eu/telecom_bretagne/praxis/common/Configuration.java b/src/eu/telecom_bretagne/praxis/common/Configuration.java
index b579a2b9d5de6c4e105a6f1a833b2055870544e5..f9d7e30de707f050d4dd2535086f8caec9a29428 100644
--- a/src/eu/telecom_bretagne/praxis/common/Configuration.java
+++ b/src/eu/telecom_bretagne/praxis/common/Configuration.java
@@ -2,10 +2,15 @@
 package eu.telecom_bretagne.praxis.common;
 
 import java.awt.Color;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
+import java.net.URL;
 import java.rmi.server.RMISocketFactory;
 import java.security.KeyStore;
+import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Locale;
 import java.util.Properties;
@@ -29,6 +34,10 @@ import eu.telecom_bretagne.praxis.core.resource.ProgramDescription;
 public final class Configuration
 {
 	private static final String REVISION = "revision";
+
+	/** This class name */
+	private static final String CLASS = PraxisPreferences.class.getName();
+
 	/*
 	 * Java par.8.7 Static Initializers The static initializers and class variable initializers are executed in
 	 * textual order.
@@ -76,9 +85,9 @@ public final class Configuration
 				throw new IllegalArgumentException(Utile.join(errors, "\n"));
 
 			if ("true".equals(get("rmi.useHTTP")))
-				RMISocketFactory.setSocketFactory(new RMIMasterSocketFactory(new sun.rmi.transport.proxy.RMIHttpToCGISocketFactory()));
+				/*FIX sun.rmi*/RMISocketFactory.setSocketFactory(new RMIMasterSocketFactory(new sun.rmi.transport.proxy.RMIHttpToCGISocketFactory()));
 			else
-				RMISocketFactory.setSocketFactory(new RMIMasterSocketFactory());
+				/*FIX sun.rmi*/RMISocketFactory.setSocketFactory(new RMIMasterSocketFactory());
 			// windows specific: use system LAF
 			// note: do not use the system LAF on linux, it is slooow (+some items, such as JTrees, are not displayed as they should)
 			if ("WINDOWS".equals(Environment.getPlatformOS()))
@@ -610,11 +619,24 @@ public final class Configuration
 	 * @see java.util.Locale
 	 * @see I18N
 	 */
-	public static void resetLocale(String language)
+	public static void resetLocale(final String language)
 	{
+		Log.log.entering(CLASS, "resetLocale()", language);
 		if (language == null)
-			language = "en";
-		I18N.setLocale(new Locale(language));
+		{
+			Log.log.exiting(CLASS, "resetlocale()");
+			return;
+		}
+		Log.log.fine(() -> MessageFormat.format("Language: {0}", language));
+		try
+		{
+			I18N.setLocale(new Locale(language));
+		}
+		catch (Throwable t)
+		{
+			Log.log.log(Level.SEVERE, "Failed to set the locale "+language, t);
+		}
+		Log.log.exiting(CLASS, "resetlocale()");
 	}
 
 	/**
@@ -624,21 +646,55 @@ public final class Configuration
 	protected static void resetLogManager()
 	{
 		String error=null;
+
+		InputStream loggingProperties = null;
+
 		try
 		{
-			Log.log.info("Reinitializing the logging properties");
-			LogManager.getLogManager().readConfiguration();
-		}
-		catch (SecurityException e)
-		{
-			error="Could not reinitialize the logging properties (SecurityException)";
+			// is there a logging.properties in the current directory?
+			if (new File("logging.properties").isFile())
+				try
+				{
+					loggingProperties = new FileInputStream(new File("logging.properties"));
+				}
+				catch (FileNotFoundException e)
+				{
+					Log.log.warning(() -> MessageFormat.format("Oops, file not found ({0})", e));
+				}
+
+			if ( loggingProperties == null )
+			{
+				// nothing in the current dir, let's search our class path
+				try
+				{
+					final URL url = FileResources.url("logging.properties");
+					loggingProperties = url.openStream();
+
+				}
+				catch (ResourceNotFoundException | IOException e)
+				{
+					Log.log.info("logging.properties not found in the resources");
+				}	
+			}
+			try
+			{
+				Log.log.info("Reinitializing the logging properties");
+				LogManager.getLogManager().readConfiguration(loggingProperties);
+			}
+			catch (SecurityException e)
+			{
+				error="Could not reinitialize the logging properties (SecurityException)";
+				Log.log.log(Level.WARNING, error, e);
+			}
+			catch (IOException e)
+			{
+				error="Could not reinitialize the logging properties (IOException)";
+				Log.log.log(Level.WARNING, error, e);
+			}
 		}
-		catch (IOException e)
-		{
-			error="Could not reinitialize the logging properties (IOException)";
+		finally {
+			try { if (loggingProperties!= null ) loggingProperties.close(); } catch (IOException e) { /* ignore */ }
 		}
-		if (error!=null)
-			Log.log.warning(error);
 	}
 
 	/** Private constructor so that the class cannot be instanciated elsewhere: this is a singleton */
diff --git a/src/eu/telecom_bretagne/praxis/common/I18N.java b/src/eu/telecom_bretagne/praxis/common/I18N.java
index 1e82875abd606133ae825cc93ecac4ff156ec38c..1b2fa6a7d2ed69d94b4ffcd1ea54b2cee7f63ac5 100644
--- a/src/eu/telecom_bretagne/praxis/common/I18N.java
+++ b/src/eu/telecom_bretagne/praxis/common/I18N.java
@@ -2,7 +2,9 @@
 package eu.telecom_bretagne.praxis.common;
 
 import java.text.MessageFormat;
-import java.util.*;
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
 import java.util.logging.Level;
 
 /**
@@ -17,21 +19,68 @@ public class I18N
 
 	private static final MessageFormat msg_fmt = new MessageFormat("");
 	
+	/** This class name */
+	private static final String CLASS = PraxisPreferences.class.getName();
+
 	static
 	{
-		setLocale(Locale.getDefault());
+		try
+		{
+			setLocale(Locale.getDefault());
+		}
+		catch (Throwable t)
+		{
+			// Log it and try to continue nevertheless
+			Log.log.log(Level.SEVERE, "Caught an exception in the static initializer", t);
+		}
 	}
 
-	public static void setLocale(Locale locale)
+	public static void setLocale(final Locale locale)
 	{
-		praxis = ResourceBundle.getBundle("data/i18n/praxis", locale);
+		Log.log.entering(CLASS, "setLocale()", locale);
+		// This is the locale to use in the formatter in case we cannot find the corresponding praxis bundle,
+		// or the app.specific bundle using the locale passed as parameter.
+		Locale msg_fmt_locale = locale;
+		try
+		{
+			praxis = ResourceBundle.getBundle("data/i18n/praxis", locale);
+		}
+		catch (NullPointerException | MissingResourceException e)
+		{
+			Log.log.info(MessageFormat.format("Could not find bundle for praxis and locale: {0}, defaulting to English", locale));
+			praxis = ResourceBundle.getBundle("data/i18n/praxis", new Locale("en"));
+			msg_fmt_locale = new Locale("en");
+		}
 		String appSpecific = Configuration.get("i18n", "");
+
 		if (!"".equals(appSpecific))
-			applicationSpecific = ResourceBundle.getBundle(appSpecific, locale);
+		{
+			// try to find the requested one.
+			// If it fails: defaults to English
+			// And if it fails again: pretend the app. specific bundle was not set
+			try
+			{
+				applicationSpecific = ResourceBundle.getBundle(appSpecific, locale);
+			}
+			catch (NullPointerException | MissingResourceException e)
+			{
+				Log.log.info(MessageFormat.format("Could not find the bundle for app. specific locale {0}, defaulting to English", locale));
+				try
+				{
+					applicationSpecific = ResourceBundle.getBundle(appSpecific, new Locale("en"));
+				}
+				catch (NullPointerException | MissingResourceException e2)
+				{
+					Log.log.info("Could not find the app. English bundle: ignoring app.specific locale");
+					applicationSpecific = null;
+				}
+			}
+		}
 		else
 			applicationSpecific = null;
-		Log.log.log(java.util.logging.Level.INFO, "Setting locale: {0}", locale);
-		synchronized(msg_fmt) { msg_fmt.setLocale(locale); }
+		Log.log.log(java.util.logging.Level.INFO, MessageFormat.format("Setting formatter''s locale: {0}", msg_fmt_locale));
+		synchronized(msg_fmt) { msg_fmt.setLocale(msg_fmt_locale); }
+		Log.log.exiting(CLASS, "setLocale()");
 	}
 
 	public static Locale getLocale()
diff --git a/src/eu/telecom_bretagne/praxis/common/Launcher.java b/src/eu/telecom_bretagne/praxis/common/Launcher.java
index c4fccb240473e9c17b024f562971e49871f7c01e..77d12e6adc1cc17120e9d55efc88f6d12434083e 100644
--- a/src/eu/telecom_bretagne/praxis/common/Launcher.java
+++ b/src/eu/telecom_bretagne/praxis/common/Launcher.java
@@ -4,6 +4,7 @@ package eu.telecom_bretagne.praxis.common;
 import java.net.ProxySelector;
 
 import eu.telecom_bretagne.praxis.client.Client;
+import eu.telecom_bretagne.praxis.client.ErrorDialog;
 import eu.telecom_bretagne.praxis.core.execution.ExecutionLoop;
 import eu.telecom_bretagne.praxis.platform.Platform;
 import eu.telecom_bretagne.praxis.platform.PlatformToClientBridge;
@@ -75,16 +76,27 @@ public class Launcher
 	{
 		final String vendor = System.getProperty("java.vendor");
 		final String version = System.getProperty("java.version");
+
+		final int firstDotPosition = version.indexOf('.');
+		final int jvmVersion = Integer.parseInt(version.substring (0, firstDotPosition));
+
 		// we do not want to display anything for mac os x / vendor="Apple Inc.", the jvm shipped with mac os is okay.
 		// since java 7, vendor is Oracle Corporation
 		if (!"Sun Microsystems Inc.".equals(vendor) && !"Apple Inc.".equals(vendor) && !"Oracle Corporation".equals(vendor))
-			Client.uiClient.displayErrorMessage("JVM Warning",
+			ErrorDialog.displayWarningMessage("JVM Warning",
 			                           "We strongly recommend that you use a Java Virtual Machine provided by Oracle!\n\n"
 			                           + "You're currently using the following JVM:\n  - version: "
 			                           + version
 			                           + "\n  - by: "
 			                           + vendor
 			                           + "\nYou may encounter errors, slowdowns and unexpected behaviour in general.");
+
+		else if (jvmVersion >= 9)
+		{
+			ErrorDialog.displayErrorMessage("Error",
+			                                "Error: this application requires java 8 but java "+jvmVersion+" is used.");
+			System.exit(-2);
+		}
 		else
 			Log.log.info(()->"Running with JVM version " + version + " by " + vendor + ", fine");
 	}
@@ -188,7 +200,7 @@ public class Launcher
 			}
 			catch (Throwable t)
 			{
-				Client.uiClient.displayErrorMessage("Connection error",
+				ErrorDialog.displayErrorMessage("Connection error",
 				                                    "Error: unable to connect to the server\nReason: "+t.toString());
 				System.exit(1);
 			}
diff --git a/src/eu/telecom_bretagne/praxis/common/Log.java b/src/eu/telecom_bretagne/praxis/common/Log.java
index 09bb18bb0a3f948bb67dbc418d33e4ff9b035cd4..76bdc767f5c860670983846a4e5dfd0cdd924e66 100644
--- a/src/eu/telecom_bretagne/praxis/common/Log.java
+++ b/src/eu/telecom_bretagne/praxis/common/Log.java
@@ -5,6 +5,12 @@ import java.util.logging.Logger;
 
 public class Log
 {
-  public static Logger log = Logger.getLogger("praxis");
-  public static Logger migration = Logger.getLogger("praxis.migration");
-}
\ No newline at end of file
+	/*
+	 * NB: Log levels are always localized
+	 * https://stackoverflow.com/questions/3920930/java-util-logging-how-to-set-level-by-logger-package-or-prefix
+	 */
+	public static final Logger log		 = Logger.getLogger("praxis", null);
+
+	public static final Logger migration = Logger.getLogger("praxis.migration");
+
+}
diff --git a/src/eu/telecom_bretagne/praxis/common/PraxisPreferences.java b/src/eu/telecom_bretagne/praxis/common/PraxisPreferences.java
index 2d477bc6a9e3d63f41cea7176a53433894aa0fc7..194baac4d25de85f2ae028f5bc527e8155d10d1d 100644
--- a/src/eu/telecom_bretagne/praxis/common/PraxisPreferences.java
+++ b/src/eu/telecom_bretagne/praxis/common/PraxisPreferences.java
@@ -17,6 +17,7 @@ import eu.telecom_bretagne.praxis.client.SimpleCommandLine;
  */
 public class PraxisPreferences
 {
+	static final String CLASS = PraxisPreferences.class.getName();
 	/**
 	 * Used to customize the initialization of preferences in a praxis project.<br>
 	 * <br>
@@ -185,6 +186,7 @@ public class PraxisPreferences
 
 	protected static void initClient()
 	{
+		Log.log.entering(CLASS, "initClient()");
 		try
 		{
 			Class.forName("eu.telecom_bretagne.praxis.client.ClientPrefs");
@@ -268,6 +270,7 @@ public class PraxisPreferences
 		
 		if (projectPreferences!=null)
 			projectPreferences.initClient();
+		Log.log.exiting(CLASS, "initClient()");
 	}
 
 	/**
diff --git a/src/eu/telecom_bretagne/praxis/common/RMIMasterSocketFactory.java b/src/eu/telecom_bretagne/praxis/common/RMIMasterSocketFactory.java
index 54725bc95b3427ad6ba2383b1c83153ad0842437..5bd872383619a9d3f4c93662be55a7e742379081 100644
--- a/src/eu/telecom_bretagne/praxis/common/RMIMasterSocketFactory.java
+++ b/src/eu/telecom_bretagne/praxis/common/RMIMasterSocketFactory.java
@@ -8,8 +8,8 @@ import java.io.IOException;
 import java.rmi.server.RMISocketFactory;
 import java.util.Vector;
 
-import sun.rmi.transport.proxy.RMIHttpToCGISocketFactory;
-import sun.rmi.transport.proxy.RMIHttpToPortSocketFactory;
+import sun.rmi.transport.proxy.RMIHttpToCGISocketFactory;/*FIX sun.rmi*/
+import sun.rmi.transport.proxy.RMIHttpToPortSocketFactory;/*FIX sun.rmi*/
 
 /**
  * This RMISocketfactory alters the behaviour of the default strategies used by RMI to connect to the server.
@@ -23,7 +23,7 @@ import sun.rmi.transport.proxy.RMIHttpToPortSocketFactory;
  * @author Sébastien Bigaret
  */
 class RMIMasterSocketFactory
-    extends sun.rmi.transport.proxy.RMIMasterSocketFactory
+    extends sun.rmi.transport.proxy.RMIMasterSocketFactory/*FIX sun.rmi*/
 {
 	private final RMISocketFactory factory;
 
diff --git a/src/eu/telecom_bretagne/praxis/common/ReleaseInfo.java b/src/eu/telecom_bretagne/praxis/common/ReleaseInfo.java
index a7f452d0b23256d52948b851d0def8ddca9b4445..6c94c1ce48d41b48f8cd5b150bef9218f7de6a79 100644
--- a/src/eu/telecom_bretagne/praxis/common/ReleaseInfo.java
+++ b/src/eu/telecom_bretagne/praxis/common/ReleaseInfo.java
@@ -7,9 +7,9 @@ package eu.telecom_bretagne.praxis.common;
  */
 public abstract class ReleaseInfo
 {
-	public static final String release              = "3.0.0";
+	public static final String release              = "3.0.1";
 
-	public static final String release_date         = "2018-07-17";
+	public static final String release_date         = "2018-07-25";
 
 	public static final int    application_revision = Configuration.getInt("revision");
 
diff --git a/src/eu/telecom_bretagne/praxis/common/events/RMICommunicationFacade.java b/src/eu/telecom_bretagne/praxis/common/events/RMICommunicationFacade.java
index 1c8fb4d3189988d273445cdd769590e7d4c8bc94..1e90dd33f588f63a8e18b7f12cbb23d5a8131d6a 100644
--- a/src/eu/telecom_bretagne/praxis/common/events/RMICommunicationFacade.java
+++ b/src/eu/telecom_bretagne/praxis/common/events/RMICommunicationFacade.java
@@ -284,7 +284,7 @@ public class RMICommunicationFacade
 				// TODO: test that the java property proxyHost IS set
 				if (RMISocketFactory.getSocketFactory() != null)
 					Log.log.warning("Overriding a non-null RMISocketFactory: " + RMISocketFactory.getSocketFactory());
-				RMISocketFactory.setSocketFactory(new sun.rmi.transport.proxy.RMIHttpToCGISocketFactory());
+				/*FIX sun.rmi*/RMISocketFactory.setSocketFactory(new sun.rmi.transport.proxy.RMIHttpToCGISocketFactory());
 			}
 			Registry registry;
 			if (useSSL)
diff --git a/src/eu/telecom_bretagne/praxis/platform/PlatformToClientBridge.java b/src/eu/telecom_bretagne/praxis/platform/PlatformToClientBridge.java
index 22a2dd1fac7d0219ee64c514e4485ad02c9339b1..c0fe672bb3acd5a90655b0e384a13402c5764fb8 100644
--- a/src/eu/telecom_bretagne/praxis/platform/PlatformToClientBridge.java
+++ b/src/eu/telecom_bretagne/praxis/platform/PlatformToClientBridge.java
@@ -13,6 +13,7 @@ import org.jdom.Document;
 import org.jdom.Element;
 
 import eu.telecom_bretagne.praxis.client.Client;
+import eu.telecom_bretagne.praxis.client.ErrorDialog;
 import eu.telecom_bretagne.praxis.common.Configuration;
 import eu.telecom_bretagne.praxis.common.Environment;
 import eu.telecom_bretagne.praxis.common.I18N;
@@ -95,7 +96,7 @@ public class PlatformToClientBridge
 
 			Log.log.severe(()->error_title+": "+error);
 
-			client.displayErrorMessage(error_title, error);
+			ErrorDialog.displayErrorMessage(error_title, error);
 			System.exit(-1);// TODO list & identify all exit status
 		}
 	}
@@ -196,7 +197,7 @@ public class PlatformToClientBridge
 	public void receivedMessage(ServerToClientEvent event)
 	{
 		if (event.forward)
-			client.displayErrorMessage("Message from server", (String)((Object[]) event.data)[0]);
+			ErrorDialog.displayWarningMessage("Message from server", (String)((Object[]) event.data)[0]);
 	}
 
 	@Override