[tryton-debian-vcs] tryton-client branch debian updated. debian/3.0.3-1-1-g2e3418e

Mathias Behrle tryton-debian-vcs at alioth.debian.org
Tue Apr 22 13:04:18 UTC 2014


The following commit has been merged in the debian branch:
https://alioth.debian.org/plugins/scmgit/cgi-bin/gitweb.cgi/?p=tryton/tryton-client.git;a=commitdiff;h=debian/3.0.3-1-1-g2e3418e

commit 2e3418e83e00c5f61ce0c2342b4a0d336a53137c
Author: Mathias Behrle <mathiasb at m9s.biz>
Date:   Tue Apr 22 14:20:23 2014 +0200

    Merging upstream version 3.2.0.

diff --git a/CHANGELOG b/CHANGELOG
index c47ee1f..4df6535 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,11 +1,21 @@
-Version 3.0.3 - 2014-04-07
-* Bug fixes (see mercurial logs for details)
-
-Version 3.0.2 - 2013-12-04
-* Bug fixes (see mercurial logs for details)
-
-Version 3.0.1 - 2013-11-03
+Version 3.2.0 - 2014-04-21
 * Bug fixes (see mercurial logs for details)
+* Add option to show revisions
+* Add a multi selection widget for many2many
+* Remove auto-refresh
+* Add support of domain for non-relation field
+* Allow drag & drop on the attachment button
+* Replace sha widget by password
+* Add Len to PYSON
+* Use a pool of connection
+* Manage client actions from button and wizard
+* Add tree_invisible attribute to button in tree view
+* Add buttons of the view in actions menu
+* Don't evaluate anymore relate action with the record
+* Paste on editable list create new records if needed
+* Drop support of Python 2.6
+* Allow to search on rec_name of Reference fields
+* Use local timezone
 * Sanitize report file extension
 
 Version 3.0.0 - 2013-10-21
diff --git a/PKG-INFO b/PKG-INFO
index 6c6833d..b05d04d 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,12 +1,12 @@
 Metadata-Version: 1.1
 Name: tryton
-Version: 3.0.3
+Version: 3.2.0
 Summary: Tryton client
 Home-page: http://www.tryton.org/
 Author: Tryton
-Author-email: UNKNOWN
+Author-email: issue_tracker at tryton.org
 License: GPL-3
-Download-URL: http://downloads.tryton.org/3.0/
+Download-URL: http://downloads.tryton.org/3.2/
 Description: tryton
         ======
         
@@ -65,7 +65,8 @@ Description: tryton
         
           http://www.tryton.org/
         
-Platform: UNKNOWN
+Keywords: business application ERP
+Platform: any
 Classifier: Development Status :: 5 - Production/Stable
 Classifier: Environment :: X11 Applications :: GTK
 Classifier: Framework :: Tryton
@@ -84,6 +85,5 @@ Classifier: Natural Language :: Slovak
 Classifier: Natural Language :: Slovenian
 Classifier: Natural Language :: Japanese
 Classifier: Operating System :: OS Independent
-Classifier: Programming Language :: Python :: 2.6
 Classifier: Programming Language :: Python :: 2.7
 Classifier: Topic :: Office/Business
diff --git a/doc/conf.py b/doc/conf.py
index aff51ca..22adaab 100644
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -46,9 +46,9 @@ copyright = u'2008-2011,  Anne Krings, Bertrand Chenal, Cédric Krier, \
 # built documents.
 #
 # The short X.Y version.
-version = '3.0'
+version = '3.2'
 # The full version, including alpha/beta/rc tags.
-release = '3.0'
+release = '3.2'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff --git a/doc/installation.rst b/doc/installation.rst
index 14ecd9c..36b04cf 100644
--- a/doc/installation.rst
+++ b/doc/installation.rst
@@ -4,13 +4,11 @@ Installing tryton
 Prerequisites
 -------------
 
- * Python 2.6 or later (http://www.python.org/)
+ * Python 2.7 or later (http://www.python.org/)
  * pygtk 2.22 or later (http://www.pygtk.org/)
  * librsvg (http://librsvg.sourceforge.net/)
  * python-dateutil (http://labix.org/python-dateutil)
- * weakrefset for Python 2.6 (https://code.google.com/p/weakrefset/)
  * Optional: simplejson (http://undefined.org/python/#simplejson)
- * Optional: pytz (http://pytz.sourceforge.net/)
  * Optional: cdecimal (http://www.bytereef.org/mpdecimal/index.html)
  * Optional: GooCalendar (http://code.google.com/p/goocalendar/)
 
diff --git a/setup.py b/setup.py
index d358a2c..de7b229 100644
--- a/setup.py
+++ b/setup.py
@@ -118,20 +118,29 @@ elif sys.platform == 'darwin':
         },
     }
 
+PACKAGE, VERSION, LICENSE, WEBSITE = None, None, None, None
 execfile(os.path.join('tryton', 'version.py'))
 
-WEAKREF = []
-if sys.version_info < (2, 7):
-    WEAKREF = ['weakrefset']
+major_version, minor_version, _ = VERSION.split('.', 2)
+major_version = int(major_version)
+minor_version = int(minor_version)
+
+download_url = 'http://downloads.tryton.org/%s.%s/' % (
+    major_version, minor_version)
+if minor_version % 2:
+    VERSION = '%s.%s.dev0' % (major_version, minor_version)
+    download_url = 'hg+http://hg.tryton.org/%s#egg=%s-%s' % (
+        PACKAGE, PACKAGE, VERSION)
 
 dist = setup(name=PACKAGE,
     version=VERSION,
     description='Tryton client',
     long_description=read('README'),
     author='Tryton',
+    author_email='issue_tracker at tryton.org',
     url=WEBSITE,
-    download_url=("http://downloads.tryton.org/" +
-        VERSION.rsplit('.', 1)[0] + '/'),
+    download_url=download_url,
+    keywords='business application ERP',
     packages=find_packages(),
     data_files=data_files,
     scripts=['bin/tryton'],
@@ -154,21 +163,21 @@ dist = setup(name=PACKAGE,
         'Natural Language :: Slovenian',
         'Natural Language :: Japanese',
         'Operating System :: OS Independent',
-        'Programming Language :: Python :: 2.6',
         'Programming Language :: Python :: 2.7',
         'Topic :: Office/Business',
         ],
+    platforms='any',
     license=LICENSE,
     install_requires=[
         #"pygtk >= 2.6",
         "python-dateutil",
-        ] + WEAKREF,
+        ],
     extras_require={
-        'timezone': ['pytz'],
         'simplejson': ['simplejson'],
         'cdecimal': ['cdecimal'],
         'calendar': ['GooCalendar'],
         },
+    zip_safe=False,
     **args
     )
 
diff --git a/share/locale/bg_BG/LC_MESSAGES/tryton.mo b/share/locale/bg_BG/LC_MESSAGES/tryton.mo
index c60d09d..9d9f899 100644
Binary files a/share/locale/bg_BG/LC_MESSAGES/tryton.mo and b/share/locale/bg_BG/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/bg_BG/LC_MESSAGES/tryton.po b/share/locale/bg_BG/LC_MESSAGES/tryton.po
index 1f3ad46..21147c3 100644
--- a/share/locale/bg_BG/LC_MESSAGES/tryton.po
+++ b/share/locale/bg_BG/LC_MESSAGES/tryton.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: tryton 1.5.0\n"
 "Report-Msgid-Bugs-To: issue_tracker at tryton.org\n"
-"POT-Creation-Date: 2013-10-20 16:34+0200\n"
+"POT-Creation-Date: 2014-04-18 22:49+0200\n"
 "PO-Revision-Date: 2012-04-23 11:06+0200\n"
 "Last-Translator: Nickolay Kolev <nickyk at gmx.net>\n"
 "Language-Team: bg_BG <LL at li.org>\n"
@@ -64,62 +64,62 @@ msgstr "Не може да запише конфигурационен файл
 msgid "Unable to set locale %s"
 msgstr "Не може да зададе локални настройки %s"
 
-#: tryton/action/main.py:163
+#: tryton/action/main.py:171
 msgid "Select your action"
 msgstr "Изберете действие"
 
-#: tryton/action/main.py:169
+#: tryton/action/main.py:177
 msgid "No action defined!"
 msgstr "Не е зададено действие!"
 
-#: tryton/common/common.py:270
+#: tryton/common/common.py:284
 msgid "Tryton Connection"
 msgstr "Tryton връзка"
 
-#: tryton/common/common.py:281
+#: tryton/common/common.py:295
 msgid "Server:"
 msgstr "Сървър:"
 
-#: tryton/common/common.py:299 tryton/gui/window/dblogin.py:79
+#: tryton/common/common.py:313 tryton/gui/window/dblogin.py:79
 msgid "Port:"
 msgstr "Порт:"
 
-#: tryton/common/common.py:369
+#: tryton/common/common.py:383
 msgid "Selection"
 msgstr "Избор:"
 
-#: tryton/common/common.py:378
+#: tryton/common/common.py:392
 msgid "Your selection:"
 msgstr "Вашия избор"
 
-#: tryton/common/common.py:498 tryton/gui/main.py:1407
-#: tryton/gui/window/win_export.py:402
+#: tryton/common/common.py:528 tryton/gui/main.py:1420
+#: tryton/gui/window/win_export.py:409
 #: tryton/gui/window/view_form/view/form_gtk/binary.py:69
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:138
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:150
 #: tryton/gui/window/view_form/view/form_gtk/image.py:74
-#: tryton/gui/window/view_form/view/form_gtk/image.py:158
+#: tryton/gui/window/view_form/view/form_gtk/image.py:161
 #: tryton/gui/window/view_form/view/graph_gtk/parser.py:105
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:656
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:686
 msgid "Save As..."
 msgstr "Запис като ..."
 
-#: tryton/common/common.py:649
+#: tryton/common/common.py:675
 msgid "Always ignore this warning."
 msgstr "Винаги игнорирай това предупреждение."
 
-#: tryton/common/common.py:654
+#: tryton/common/common.py:680
 msgid "Do you want to proceed?"
 msgstr ""
 
-#: tryton/common/common.py:673
+#: tryton/common/common.py:699
 msgid "Confirmation"
 msgstr "Потвърждение"
 
-#: tryton/common/common.py:779 tryton/common/common.py:1083
+#: tryton/common/common.py:805 tryton/common/common.py:1114
 msgid "Concurrency Exception"
 msgstr "Грешка при достъп"
 
-#: tryton/common/common.py:793
+#: tryton/common/common.py:819
 msgid ""
 "<b>Write Concurrency Warning:</b>\n"
 "\n"
@@ -137,50 +137,50 @@ msgstr ""
 "   - \"Сравняване\" за да видите променената версия;\n"
 "   - \"Запис \" за да запишете вашата текуща версия."
 
-#: tryton/common/common.py:802
+#: tryton/common/common.py:828
 msgid "Compare"
 msgstr "Сравняване"
 
-#: tryton/common/common.py:807
+#: tryton/common/common.py:833
 msgid "Write Anyway"
 msgstr "Запис"
 
-#: tryton/common/common.py:833 tryton/gui/window/win_export.py:435
-#: tryton/gui/window/win_import.py:260 tryton/gui/window/win_import.py:288
+#: tryton/common/common.py:859 tryton/gui/window/win_export.py:442
+#: tryton/gui/window/win_import.py:262 tryton/gui/window/win_import.py:290
 msgid "Error"
 msgstr "Грешка"
 
-#: tryton/common/common.py:837
+#: tryton/common/common.py:863
 msgid "Report Bug"
 msgstr "Съобщаване за грешка"
 
-#: tryton/common/common.py:844
+#: tryton/common/common.py:870
 msgid "Application Error!"
 msgstr "Грешка в приложението!"
 
-#: tryton/common/common.py:867
+#: tryton/common/common.py:893
 msgid "Error: "
 msgstr "Грешка: "
 
-#: tryton/common/common.py:887
+#: tryton/common/common.py:913
 #, python-format
 msgid "To report bugs you must have an account on <u>%s</u>"
 msgstr "За да съобщите за грешка трябва да имате сметка на <u>%s</u>"
 
-#: tryton/common/common.py:917
+#: tryton/common/common.py:943
 msgid "Bug Tracker"
 msgstr ""
 
-#: tryton/common/common.py:935
+#: tryton/common/common.py:961
 msgid "User:"
 msgstr "Потребител: "
 
-#: tryton/common/common.py:943 tryton/common/common.py:1101
+#: tryton/common/common.py:969 tryton/common/common.py:1132
 #: tryton/gui/window/dblogin.py:462
 msgid "Password:"
 msgstr "Парола:"
 
-#: tryton/common/common.py:993
+#: tryton/common/common.py:1024
 msgid ""
 "The same bug was already reported by another user.\n"
 "To keep you informed your username is added to the nosy-list of this issue"
@@ -188,11 +188,11 @@ msgstr ""
 "Тази грешка е вече съобщена от друг потребител..\n"
 "За да бъдете информирани потребителя ви е добавен списъка за този проблем"
 
-#: tryton/common/common.py:1004
+#: tryton/common/common.py:1035
 msgid "Created new bug with ID "
 msgstr "Създадена е нова грешка с ID"
 
-#: tryton/common/common.py:1012 tryton/gui/main.py:921
+#: tryton/common/common.py:1043 tryton/gui/main.py:928
 msgid ""
 "Connection error!\n"
 "Bad username or password!"
@@ -200,11 +200,11 @@ msgstr ""
 "Грешка при свързване!\n"
 "Грешно потребителско име или парола!"
 
-#: tryton/common/common.py:1017
+#: tryton/common/common.py:1048
 msgid "Exception:"
 msgstr "Грешка:"
 
-#: tryton/common/common.py:1034
+#: tryton/common/common.py:1065
 msgid ""
 "The server fingerprint has changed since last connection!\n"
 "The application will stop connecting to this server until its fingerprint"
@@ -214,12 +214,12 @@ msgstr ""
 "Приложението ще спре да се връзва към сървъра докато не бъде оправен "
 "идентификатора му."
 
-#: tryton/common/common.py:1036
+#: tryton/common/common.py:1067
 msgid "Security risk!"
 msgstr "Риск за сигурността"
 
-#: tryton/common/common.py:1042 tryton/common/common.py:1108
-#: tryton/gui/main.py:918
+#: tryton/common/common.py:1073 tryton/common/common.py:1139
+#: tryton/gui/main.py:925
 msgid ""
 "Connection error!\n"
 "Unable to connect to the server!"
@@ -227,39 +227,39 @@ msgstr ""
 "Грешка при свързване!\n"
 "Невъзможност да се свърже със сървъра!"
 
-#: tryton/common/common.py:1123
+#: tryton/common/common.py:1154
 msgid "Network Error!"
 msgstr "Мрежова грешка!"
 
-#: tryton/common/common.py:1354
+#: tryton/common/common.py:1409
 msgid "Y"
 msgstr "Г"
 
-#: tryton/common/common.py:1355
+#: tryton/common/common.py:1410
 msgid "M"
 msgstr "М"
 
-#: tryton/common/common.py:1356
+#: tryton/common/common.py:1411
 msgid "w"
 msgstr "с"
 
-#: tryton/common/common.py:1357
+#: tryton/common/common.py:1412
 msgid "d"
 msgstr "д"
 
-#: tryton/common/common.py:1358
+#: tryton/common/common.py:1413
 msgid "h"
 msgstr "ч"
 
-#: tryton/common/common.py:1359
+#: tryton/common/common.py:1414
 msgid "m"
 msgstr "м"
 
-#: tryton/common/completion.py:22
+#: tryton/common/completion.py:21
 msgid "<i>Search...</i>"
 msgstr ""
 
-#: tryton/common/completion.py:23
+#: tryton/common/completion.py:22
 msgid "<i>Create...</i>"
 msgstr ""
 
@@ -268,257 +268,262 @@ msgstr ""
 msgid "Open the calendar <F2>"
 msgstr "Отваряне на календара"
 
-#: tryton/common/date_widget.py:271
+#: tryton/common/date_widget.py:275
 msgid "Date Selection"
 msgstr "Избор на дата"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "y"
 msgstr "г"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "yes"
 msgstr "да"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "true"
 msgstr "Истина"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "t"
 msgstr ""
 
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
 msgid "True"
 msgstr "Истина"
 
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
 msgid "False"
 msgstr "Лъжа"
 
-#: tryton/common/popup_menu.py:71
+#: tryton/common/popup_menu.py:72
+#, fuzzy
+msgid "Edit..."
+msgstr "Изход..."
+
+#: tryton/common/popup_menu.py:77
 msgid "Attachments..."
 msgstr "Прикачен файл:"
 
-#: tryton/common/popup_menu.py:76
+#: tryton/common/popup_menu.py:87
 msgid "Actions..."
 msgstr "Действия..."
 
-#: tryton/common/popup_menu.py:77
+#: tryton/common/popup_menu.py:88
 #, fuzzy
 msgid "Relate..."
 msgstr "Свързани..."
 
-#: tryton/common/popup_menu.py:78
+#: tryton/common/popup_menu.py:89
 msgid "Report..."
 msgstr "Справки..."
 
-#: tryton/common/popup_menu.py:79
+#: tryton/common/popup_menu.py:90
 msgid "E-Mail..."
 msgstr "Email..."
 
-#: tryton/common/popup_menu.py:80
+#: tryton/common/popup_menu.py:91
 msgid "Print..."
 msgstr "Печат..."
 
-#: tryton/gui/main.py:217
+#: tryton/gui/main.py:218
 msgid "_File"
 msgstr "Файл"
 
-#: tryton/gui/main.py:225
+#: tryton/gui/main.py:226
 msgid "_User"
 msgstr "Потребител"
 
-#: tryton/gui/main.py:239
+#: tryton/gui/main.py:240
 msgid "_Options"
 msgstr "Настройки"
 
-#: tryton/gui/main.py:247
+#: tryton/gui/main.py:248
 msgid "Fa_vorites"
 msgstr ""
 
-#: tryton/gui/main.py:263
+#: tryton/gui/main.py:264
 msgid "_Help"
 msgstr "Помощ"
 
-#: tryton/gui/main.py:285 tryton/gui/window/win_search.py:26
+#: tryton/gui/main.py:286 tryton/gui/window/win_search.py:26
 #: tryton/gui/window/view_form/view/screen_container.py:100
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:333
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:332
 #: tryton/gui/window/view_form/view/form_gtk/many2many.py:40
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:45
 msgid "Search"
 msgstr "Търсене"
 
-#: tryton/gui/main.py:364
+#: tryton/gui/main.py:374
 msgid "No result found."
 msgstr ""
 
-#: tryton/gui/main.py:384
+#: tryton/gui/main.py:396
 msgid "_Connect..."
 msgstr "Свързване..."
 
-#: tryton/gui/main.py:393
+#: tryton/gui/main.py:405
 msgid "_Disconnect"
 msgstr "Изключване"
 
-#: tryton/gui/main.py:403
+#: tryton/gui/main.py:415
 msgid "Data_base"
 msgstr "База данни"
 
-#: tryton/gui/main.py:414
+#: tryton/gui/main.py:426
 msgid "_New Database..."
 msgstr "Нова база данни"
 
-#: tryton/gui/main.py:423
+#: tryton/gui/main.py:435
 msgid "_Restore Database..."
 msgstr "Възтановяване на база данни..."
 
-#: tryton/gui/main.py:432
+#: tryton/gui/main.py:444
 msgid "_Backup Database..."
 msgstr "Архивиране на база данни..."
 
-#: tryton/gui/main.py:441
+#: tryton/gui/main.py:453
 msgid "Dro_p Database..."
 msgstr "Изтриване на база данни..."
 
-#: tryton/gui/main.py:450
+#: tryton/gui/main.py:462
 msgid "_Quit..."
 msgstr "Изход..."
 
-#: tryton/gui/main.py:465
+#: tryton/gui/main.py:477
 msgid "_Preferences..."
 msgstr "Предпочитания..."
 
-#: tryton/gui/main.py:476
+#: tryton/gui/main.py:488
 msgid "_Menu Reload"
 msgstr "Презареждане"
 
-#: tryton/gui/main.py:485
+#: tryton/gui/main.py:497
 msgid "_Menu Toggle"
 msgstr "Превключване на меню"
 
-#: tryton/gui/main.py:492
+#: tryton/gui/main.py:504
 msgid "_Global Search"
 msgstr ""
 
-#: tryton/gui/main.py:507
+#: tryton/gui/main.py:519
 msgid "_Toolbar"
 msgstr "Лента с инструменти"
 
-#: tryton/gui/main.py:515
+#: tryton/gui/main.py:527
 msgid "_Default"
 msgstr "По подразбиране"
 
-#: tryton/gui/main.py:525
+#: tryton/gui/main.py:537
 msgid "_Text and Icons"
 msgstr "Текс и икони"
 
-#: tryton/gui/main.py:535
+#: tryton/gui/main.py:547
 msgid "_Icons"
 msgstr "Икони"
 
-#: tryton/gui/main.py:544
+#: tryton/gui/main.py:556
 msgid "_Text"
 msgstr "Текст"
 
-#: tryton/gui/main.py:553
+#: tryton/gui/main.py:565
 msgid "_Menubar"
 msgstr "Лента с меню"
 
-#: tryton/gui/main.py:561
+#: tryton/gui/main.py:573
 msgid "Change Accelerators"
 msgstr "Смяна на бързи клавиши"
 
-#: tryton/gui/main.py:569
+#: tryton/gui/main.py:581
 msgid "_Mode"
 msgstr "Режим"
 
-#: tryton/gui/main.py:577
+#: tryton/gui/main.py:589
 msgid "_Normal"
 msgstr "Нормален"
 
-#: tryton/gui/main.py:585
+#: tryton/gui/main.py:597
 msgid "_PDA"
 msgstr "PDA"
 
-#: tryton/gui/main.py:592
+#: tryton/gui/main.py:604
 msgid "_Form"
 msgstr "Форма"
 
-#: tryton/gui/main.py:601
+#: tryton/gui/main.py:613
 msgid "Save Width/Height"
 msgstr "Запазване на ширина/височина"
 
-#: tryton/gui/main.py:612
+#: tryton/gui/main.py:624
 #, fuzzy
 msgid "Save Tree State"
 msgstr "Запазване на състояние разгърнато дърво"
 
-#: tryton/gui/main.py:624
+#: tryton/gui/main.py:636
 msgid "Spell Checking"
 msgstr "Проверка на правопис"
 
-#: tryton/gui/main.py:634
+#: tryton/gui/main.py:646
 msgid "Tabs Position"
 msgstr "Позиции на табове"
 
-#: tryton/gui/main.py:642
+#: tryton/gui/main.py:654
 msgid "Top"
 msgstr "Отгоре"
 
-#: tryton/gui/main.py:651
+#: tryton/gui/main.py:663
 msgid "Left"
 msgstr "Отляво"
 
-#: tryton/gui/main.py:661
+#: tryton/gui/main.py:673
 msgid "Right"
 msgstr "Отдясно"
 
-#: tryton/gui/main.py:671
+#: tryton/gui/main.py:683
 msgid "Bottom"
 msgstr "Отдолу"
 
-#: tryton/gui/main.py:680
+#: tryton/gui/main.py:692
 #, fuzzy
 msgid "_Previous Tab"
 msgstr "Предишен"
 
-#: tryton/gui/main.py:686
+#: tryton/gui/main.py:698
 msgid "_Next Tab"
 msgstr ""
 
-#: tryton/gui/main.py:692
+#: tryton/gui/main.py:704
 msgid "Search Limit..."
 msgstr "Ограничение при търсене..."
 
-#: tryton/gui/main.py:698
+#: tryton/gui/main.py:710
 msgid "_Email..."
 msgstr "Email..."
 
-#: tryton/gui/main.py:706
+#: tryton/gui/main.py:718
 msgid "_Save Options"
 msgstr "Запазване на опции"
 
-#: tryton/gui/main.py:718
+#: tryton/gui/main.py:730
 msgid "_Tips..."
 msgstr "Подсказки..."
 
-#: tryton/gui/main.py:727
+#: tryton/gui/main.py:739
 msgid "_Keyboard Shortcuts..."
 msgstr "Бързи клавиши..."
 
-#: tryton/gui/main.py:736
+#: tryton/gui/main.py:748
 msgid "_About..."
 msgstr "Относно..."
 
-#: tryton/gui/main.py:787
+#: tryton/gui/main.py:799
 #, fuzzy
 msgid "Manage Favorites"
 msgstr "Управление на профили"
 
-#: tryton/gui/main.py:935
+#: tryton/gui/main.py:942
 msgid ""
 "The following action requires to close all tabs.\n"
 "Do you want to continue?"
@@ -526,11 +531,11 @@ msgstr ""
 "Следващите действия изискват затваряне на всички прозорци.\n"
 "Искате ли да продължите?"
 
-#: tryton/gui/main.py:1196
+#: tryton/gui/main.py:1206
 msgid "Close Tab"
 msgstr "Затваряне на таб"
 
-#: tryton/gui/main.py:1314
+#: tryton/gui/main.py:1327
 msgid ""
 "You are going to delete a Tryton database.\n"
 "Are you really sure to proceed?"
@@ -538,7 +543,7 @@ msgstr ""
 "Ще изтриете Tryton база данни.\n"
 "Сигурни ли сте че искате да продължите?"
 
-#: tryton/gui/main.py:1324
+#: tryton/gui/main.py:1337
 msgid ""
 "Wrong Tryton Server Password\n"
 "Please try again."
@@ -546,28 +551,28 @@ msgstr ""
 "Грешна парола за Tryton сървъра\n"
 "Моля опитайте отново."
 
-#: tryton/gui/main.py:1326 tryton/gui/main.py:1362 tryton/gui/main.py:1398
-#: tryton/gui/window/dbcreate.py:382
+#: tryton/gui/main.py:1339 tryton/gui/main.py:1375 tryton/gui/main.py:1411
+#: tryton/gui/window/dbcreate.py:384
 msgid "Access denied!"
 msgstr "Достъпа отказан!"
 
-#: tryton/gui/main.py:1329
+#: tryton/gui/main.py:1342
 msgid "Database drop failed with error message:\n"
 msgstr "Изтриването на базата данни неуспя с грешка:\n"
 
-#: tryton/gui/main.py:1330
+#: tryton/gui/main.py:1343
 msgid "Database drop failed!"
 msgstr "Изтриването на базата данни неуспешно!"
 
-#: tryton/gui/main.py:1332
+#: tryton/gui/main.py:1345
 msgid "Database dropped successfully!"
 msgstr "Базата данни изтрита успешно!"
 
-#: tryton/gui/main.py:1337
+#: tryton/gui/main.py:1350
 msgid "Open Backup File to Restore..."
 msgstr "Отваряне на архивиран файл за възтановяване..."
 
-#: tryton/gui/main.py:1354
+#: tryton/gui/main.py:1367
 msgid ""
 "It is not possible to restore a password protected database.\n"
 "Backup and restore needed to be proceed manual."
@@ -575,11 +580,11 @@ msgstr ""
 "Не може да се възтановяви база данни защитена с парола.\n"
 "Архивирането и възтановяването трябва да стане ръчно."
 
-#: tryton/gui/main.py:1358 tryton/gui/main.py:1394
+#: tryton/gui/main.py:1371 tryton/gui/main.py:1407
 msgid "Database is password protected!"
 msgstr "Базата данни е защитена с парола!"
 
-#: tryton/gui/main.py:1360 tryton/gui/main.py:1396
+#: tryton/gui/main.py:1373 tryton/gui/main.py:1409
 msgid ""
 "Wrong Tryton Server Password.\n"
 "Please try again."
@@ -587,19 +592,19 @@ msgstr ""
 "Грешна парола за Tryton сървъра.\n"
 "Моля опитайте отново."
 
-#: tryton/gui/main.py:1365
+#: tryton/gui/main.py:1378
 msgid "Database restore failed with error message:\n"
 msgstr "Възтановяването на базата данни неуспя с грешка:\n"
 
-#: tryton/gui/main.py:1367 tryton/gui/main.py:1372
+#: tryton/gui/main.py:1380 tryton/gui/main.py:1385
 msgid "Database restore failed!"
 msgstr "Възтановяването на базата неуспешно"
 
-#: tryton/gui/main.py:1370
+#: tryton/gui/main.py:1383
 msgid "Database restored successfully!"
 msgstr "Възтановяването на базата данни неуспешно"
 
-#: tryton/gui/main.py:1391
+#: tryton/gui/main.py:1404
 msgid ""
 "It is not possible to dump a password protected Database.\n"
 "Backup and restore needed to be proceed manual."
@@ -607,75 +612,75 @@ msgstr ""
 "Не е възможно да се извлече база данни защитена с парола.\n"
 "Архивирането и възтановяването трябва да стане ръчно."
 
-#: tryton/gui/main.py:1401
+#: tryton/gui/main.py:1414
 msgid "Database dump failed with error message:\n"
 msgstr "Извличането на базата данни неуспя с грешка:\n"
 
-#: tryton/gui/main.py:1403
+#: tryton/gui/main.py:1416
 msgid "Database dump failed!"
 msgstr "Извличането на базата данни неуспешно!"
 
-#: tryton/gui/main.py:1414
+#: tryton/gui/main.py:1427
 msgid "Database backuped successfully!"
 msgstr "Базата данни архивирана успешно!"
 
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
 msgid "New"
 msgstr "Нов"
 
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
 msgid "Create a new record"
 msgstr "Създаване на нов запис"
 
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
 #: tryton/gui/window/win_export.py:142
 msgid "Save"
 msgstr "Съхраняване"
 
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
 msgid "Save this record"
 msgstr "Съхраняване на този запис"
 
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
-#: tryton/gui/window/win_form.py:228
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
+#: tryton/gui/window/win_form.py:232
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:154
 msgid "Switch"
 msgstr "Превключване"
 
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
 msgid "Switch view"
 msgstr "Превключване на изглед"
 
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
 msgid "_Reload"
 msgstr "Презареждане"
 
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
 msgid "Reload"
 msgstr "Презареждане"
 
-#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:48
+#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:50
 msgid "_New"
 msgstr "Нов"
 
-#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:49
-#: tryton/gui/window/win_form.py:66
+#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:51
+#: tryton/gui/window/win_form.py:67
 msgid "_Save"
 msgstr "Съхраняване"
 
-#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:50
+#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:52
 msgid "_Switch View"
 msgstr "Превключване на изглед"
 
-#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:52
+#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:54
 msgid "_Reload/Undo"
 msgstr "Презареждане/Обратно"
 
-#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:56
+#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:58
 msgid "_Delete..."
 msgstr "Изтриване..."
 
-#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:65
+#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:68
 msgid "_Close Tab"
 msgstr "Затваряне на таб"
 
@@ -709,28 +714,28 @@ msgstr ""
 "адреса на сървъра и порта(обикновенно 8000) не са блокирани.\n"
 "Натиснете на 'Промяна' за да смените адреса."
 
-#: tryton/gui/window/dbcreate.py:137
+#: tryton/gui/window/dbcreate.py:139
 msgid "Create new database"
 msgstr "Създаване на нова база данни"
 
-#: tryton/gui/window/dbcreate.py:147
+#: tryton/gui/window/dbcreate.py:149
 msgid "C_reate"
 msgstr "Създаване"
 
-#: tryton/gui/window/dbcreate.py:155
+#: tryton/gui/window/dbcreate.py:157
 msgid "Create the new database."
 msgstr "Създай новата база данни"
 
-#: tryton/gui/window/dbcreate.py:166
+#: tryton/gui/window/dbcreate.py:168
 msgid "Server Setup:"
 msgstr "Настройка на сървър"
 
-#: tryton/gui/window/dbcreate.py:171
+#: tryton/gui/window/dbcreate.py:173
 msgid "Server connection:"
 msgstr "Връзка към сървъра:"
 
-#: tryton/gui/window/dbcreate.py:180 tryton/gui/window/dbdumpdrop.py:140
-#: tryton/gui/window/dbrestore.py:86
+#: tryton/gui/window/dbcreate.py:182 tryton/gui/window/dbdumpdrop.py:140
+#: tryton/gui/window/dbrestore.py:88
 msgid ""
 "This is the URL of the server. Use server 'localhost' and port '8000' if "
 "the server is installed on this computer. Click on 'Change' to change the"
@@ -740,22 +745,22 @@ msgstr ""
 "порт'8000' ако сървъра е инсталиран на този компютър. Натиснете 'Промяна'"
 " за да промените адреса."
 
-#: tryton/gui/window/dbcreate.py:183 tryton/gui/window/dbdumpdrop.py:147
-#: tryton/gui/window/dbrestore.py:91
+#: tryton/gui/window/dbcreate.py:185 tryton/gui/window/dbdumpdrop.py:147
+#: tryton/gui/window/dbrestore.py:93
 msgid "C_hange"
 msgstr "Промяна"
 
-#: tryton/gui/window/dbcreate.py:192 tryton/gui/window/dbrestore.py:97
+#: tryton/gui/window/dbcreate.py:194 tryton/gui/window/dbrestore.py:99
 msgid "Setup the server connection..."
 msgstr "Настройка на връзката със сървъра..."
 
-#: tryton/gui/window/dbcreate.py:195 tryton/gui/window/dbdumpdrop.py:186
-#: tryton/gui/window/dbrestore.py:100
+#: tryton/gui/window/dbcreate.py:197 tryton/gui/window/dbdumpdrop.py:186
+#: tryton/gui/window/dbrestore.py:102
 msgid "Tryton Server Password:"
 msgstr "Парола за Tryton сървъра"
 
-#: tryton/gui/window/dbcreate.py:205 tryton/gui/window/dbdumpdrop.py:196
-#: tryton/gui/window/dbrestore.py:109
+#: tryton/gui/window/dbcreate.py:207 tryton/gui/window/dbdumpdrop.py:196
+#: tryton/gui/window/dbrestore.py:111
 msgid ""
 "This is the password of the Tryton server. It doesn't belong to a real "
 "user. This password is usually defined in the trytond configuration."
@@ -763,15 +768,15 @@ msgstr ""
 "Това е паролата на Tryton сървъра. Тя не е на никой потребител. Тя "
 "обикновенно се задава по време на конфигурирането на trytond."
 
-#: tryton/gui/window/dbcreate.py:216
+#: tryton/gui/window/dbcreate.py:218
 msgid "New database setup:"
 msgstr "Настройка на нова база данни:"
 
-#: tryton/gui/window/dbcreate.py:222
+#: tryton/gui/window/dbcreate.py:224
 msgid "Database name:"
 msgstr "Име:"
 
-#: tryton/gui/window/dbcreate.py:234
+#: tryton/gui/window/dbcreate.py:236
 msgid ""
 "Choose the name of the new database.\n"
 "Allowed characters are alphanumerical or _ (underscore)\n"
@@ -782,11 +787,11 @@ msgstr ""
 "Позволени символи за букви, цифри и _ (под черта)\n"
 "Избягвайте акценти, празен символ или специални символи! Пример: tryton"
 
-#: tryton/gui/window/dbcreate.py:241
+#: tryton/gui/window/dbcreate.py:243
 msgid "Default language:"
 msgstr "Език по подразбиране"
 
-#: tryton/gui/window/dbcreate.py:251
+#: tryton/gui/window/dbcreate.py:253
 msgid ""
 "Choose the default language that will be installed for this database. You"
 " will be able to install new languages after installation through the "
@@ -795,11 +800,11 @@ msgstr ""
 "Изберете езика по подразбиране за тази база данни. Може да добавите след "
 "инсталацията друг език през менюто за администрация."
 
-#: tryton/gui/window/dbcreate.py:255
+#: tryton/gui/window/dbcreate.py:257
 msgid "Admin password:"
 msgstr "Парола на администратор:"
 
-#: tryton/gui/window/dbcreate.py:265
+#: tryton/gui/window/dbcreate.py:267
 msgid ""
 "Choose a password for the admin user of the new database. With these "
 "credentials you will be later able to login into the database:\n"
@@ -811,15 +816,15 @@ msgstr ""
 "Потребителско име: admin\n"
 "Парола: <Паролата която сте избрали>"
 
-#: tryton/gui/window/dbcreate.py:273
+#: tryton/gui/window/dbcreate.py:275
 msgid "Confirm admin password:"
 msgstr "Потвърждаване на паролата:"
 
-#: tryton/gui/window/dbcreate.py:282
+#: tryton/gui/window/dbcreate.py:284
 msgid "Type the Admin password again"
 msgstr "Напишете отново паролата на администратора"
 
-#: tryton/gui/window/dbcreate.py:330
+#: tryton/gui/window/dbcreate.py:332
 msgid ""
 "The database name is restricted to alpha-nummerical characters and \"_\" "
 "(underscore). Avoid all accents, space and any other special characters."
@@ -827,31 +832,31 @@ msgstr ""
 "Името на базата данни е ограничено до латински букви, цифри и \"_\" (под "
 "черта). Избягвайте акценти, празен символ или специални символи."
 
-#: tryton/gui/window/dbcreate.py:335
+#: tryton/gui/window/dbcreate.py:337
 msgid "Wrong characters in database name!"
 msgstr "Грешни символи в името на базата данни!"
 
-#: tryton/gui/window/dbcreate.py:339
+#: tryton/gui/window/dbcreate.py:341
 msgid "The new admin password doesn't match the confirmation field.\n"
 msgstr ""
 "Новата парола на администратора не съвпада с тази в полето за "
 "потвърждение.\n"
 
-#: tryton/gui/window/dbcreate.py:341
+#: tryton/gui/window/dbcreate.py:343
 msgid "Passwords doesn't match!"
 msgstr "Паролата не съвпада!"
 
-#: tryton/gui/window/dbcreate.py:344
+#: tryton/gui/window/dbcreate.py:346
 msgid "Admin password and confirmation are required to create a new database."
 msgstr ""
 "За зъздаване на нова база данни са необходими парола за администратор и "
 "парола за потвърждение."
 
-#: tryton/gui/window/dbcreate.py:346
+#: tryton/gui/window/dbcreate.py:348
 msgid "Missing admin password!"
 msgstr "Липсва парола за администратор!"
 
-#: tryton/gui/window/dbcreate.py:361
+#: tryton/gui/window/dbcreate.py:363
 msgid ""
 "A database with the same name already exists.\n"
 "Try another database name."
@@ -859,15 +864,15 @@ msgstr ""
 "Вече съществува база данни с това име.\n"
 "Опитайте с друго име на базата данни."
 
-#: tryton/gui/window/dbcreate.py:364
+#: tryton/gui/window/dbcreate.py:366
 msgid "This database name already exist!"
 msgstr "Вече съществува база данни с такова име!"
 
-#: tryton/gui/window/dbcreate.py:379
+#: tryton/gui/window/dbcreate.py:381
 msgid "Sorry, wrong password for the Tryton server. Please try again."
 msgstr "Грешна парола за Tryton сървъра. Моля опитайте отново."
 
-#: tryton/gui/window/dbcreate.py:387
+#: tryton/gui/window/dbcreate.py:389
 msgid ""
 "Can't create the database, caused by an unknown reason.\n"
 "If there is a database created, it could be broken. Maybe drop this "
@@ -879,7 +884,7 @@ msgstr ""
 "тази база данни! За повече информация вижте съобщинието за грешка.\n"
 "Съобщение за грешка:\n"
 
-#: tryton/gui/window/dbcreate.py:395
+#: tryton/gui/window/dbcreate.py:397
 msgid "Error creating database!"
 msgstr "Грешка при създаване на база данни!"
 
@@ -927,7 +932,7 @@ msgstr "Изтриване на избраната база данни."
 msgid "Choose a Tryton database to delete:"
 msgstr "Избор на Tryton база данни за изтриване:"
 
-#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:75
+#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:77
 msgid "Server Connection:"
 msgstr "Връзка със сървъра:"
 
@@ -1018,15 +1023,15 @@ msgstr "Хост:"
 msgid "User name:"
 msgstr "Потребителско име:"
 
-#: tryton/gui/window/dbrestore.py:64
+#: tryton/gui/window/dbrestore.py:66
 msgid "Restore Database"
 msgstr "Възтановяване на база данни"
 
-#: tryton/gui/window/dbrestore.py:117
+#: tryton/gui/window/dbrestore.py:119
 msgid "File to Restore:"
 msgstr "Файл за възтановяването"
 
-#: tryton/gui/window/dbrestore.py:131
+#: tryton/gui/window/dbrestore.py:133
 msgid ""
 "Choose the name of the database to be restored.\n"
 "Allowed characters are alphanumerical or _ (underscore)\n"
@@ -1038,15 +1043,15 @@ msgstr ""
 "Не може да използвате акценти, празен символ или специални символи! \n"
 "Пример: tryton"
 
-#: tryton/gui/window/dbrestore.py:137
+#: tryton/gui/window/dbrestore.py:139
 msgid "New Database Name:"
 msgstr "Име на нова база данни:"
 
-#: tryton/gui/window/dbrestore.py:140
+#: tryton/gui/window/dbrestore.py:142
 msgid "Update Database:"
 msgstr "Обновяване на база данни:"
 
-#: tryton/gui/window/dbrestore.py:144
+#: tryton/gui/window/dbrestore.py:146
 msgid ""
 "Check for an automatic database update after restoring a database from a "
 "previous Tryton version."
@@ -1054,11 +1059,11 @@ msgstr ""
 "Проверка за автоматични обновявания след възтановяване на база данни от "
 "предишна Tryton версия."
 
-#: tryton/gui/window/dbrestore.py:154
+#: tryton/gui/window/dbrestore.py:156
 msgid "Restore"
 msgstr "Възтановяване"
 
-#: tryton/gui/window/dbrestore.py:163
+#: tryton/gui/window/dbrestore.py:165
 msgid "Restore the database from file."
 msgstr "Възтановяване на база данни от файл."
 
@@ -1098,156 +1103,160 @@ msgstr "Тяло:"
 msgid "Attachment:"
 msgstr "Прикачен файл:"
 
-#: tryton/gui/window/form.py:39 tryton/gui/window/tips.py:74
-#: tryton/gui/window/win_form.py:201
-#: tryton/gui/window/view_form/view/screen_container.py:165
+#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:74
+#: tryton/gui/window/win_form.py:205
+#: tryton/gui/window/view_form/view/screen_container.py:163
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:128
 msgid "Previous"
 msgstr "Предишен"
 
-#: tryton/gui/window/form.py:40
+#: tryton/gui/window/form.py:42
 msgid "Previous Record"
 msgstr "Предишен запис"
 
-#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:81
-#: tryton/gui/window/win_form.py:215
-#: tryton/gui/window/view_form/view/screen_container.py:177
+#: tryton/gui/window/form.py:43 tryton/gui/window/tips.py:81
+#: tryton/gui/window/win_form.py:219
+#: tryton/gui/window/view_form/view/screen_container.py:175
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:142
 msgid "Next"
 msgstr "Следващ"
 
-#: tryton/gui/window/form.py:41
+#: tryton/gui/window/form.py:43
 msgid "Next Record"
 msgstr "Следващ запис"
 
-#: tryton/gui/window/form.py:44
+#: tryton/gui/window/form.py:46
 msgid "Attachment(0)"
 msgstr "Прикачен файл(0)"
 
-#: tryton/gui/window/form.py:45
+#: tryton/gui/window/form.py:47
 msgid "Add an attachment to the record"
 msgstr "Добавяне на прикачен файл към записа"
 
-#: tryton/gui/window/form.py:54
+#: tryton/gui/window/form.py:56
 msgid "_Duplicate"
 msgstr "Дублиране"
 
-#: tryton/gui/window/form.py:59
+#: tryton/gui/window/form.py:61
 msgid "_Previous"
 msgstr "Предишен"
 
-#: tryton/gui/window/form.py:61
+#: tryton/gui/window/form.py:63
 msgid "_Next"
 msgstr "Следващ"
 
-#: tryton/gui/window/form.py:62
+#: tryton/gui/window/form.py:64
 #, fuzzy
 msgid "_Search"
 msgstr "Търсене"
 
-#: tryton/gui/window/form.py:63
+#: tryton/gui/window/form.py:65
 msgid "View _Logs..."
 msgstr "Преглед на логове"
 
-#: tryton/gui/window/form.py:68
+#: tryton/gui/window/form.py:66
+msgid "Show revisions..."
+msgstr ""
+
+#: tryton/gui/window/form.py:71
 #, fuzzy
 msgid "A_ttachments..."
 msgstr "Прикачен файл:"
 
-#: tryton/gui/window/form.py:70
+#: tryton/gui/window/form.py:73
 msgid "_Actions..."
 msgstr "Действия..."
 
-#: tryton/gui/window/form.py:72
+#: tryton/gui/window/form.py:75
 msgid "_Relate..."
 msgstr "Свързани..."
 
-#: tryton/gui/window/form.py:75
+#: tryton/gui/window/form.py:78
 msgid "_Report..."
 msgstr "Справки..."
 
-#: tryton/gui/window/form.py:77
+#: tryton/gui/window/form.py:80
 msgid "_E-Mail..."
 msgstr "Email..."
 
-#: tryton/gui/window/form.py:79
+#: tryton/gui/window/form.py:82
 msgid "_Print..."
 msgstr "Печат..."
 
-#: tryton/gui/window/form.py:82
+#: tryton/gui/window/form.py:85
 msgid "_Export Data..."
 msgstr "Извличане на данни..."
 
-#: tryton/gui/window/form.py:84
+#: tryton/gui/window/form.py:87
 msgid "_Import Data..."
 msgstr "Вмъкване на данни..."
 
-#: tryton/gui/window/form.py:219
+#: tryton/gui/window/form.py:216
 #, python-format
 msgid "Attachment(%d)"
 msgstr "Прикачен файл(%d)"
 
-#: tryton/gui/window/form.py:237
+#: tryton/gui/window/form.py:234
 msgid "You have to select one record!"
 msgstr "Трябва да изберете един запис!"
 
-#: tryton/gui/window/form.py:241
+#: tryton/gui/window/form.py:238
 msgid "ID:"
 msgstr "ID:"
 
-#: tryton/gui/window/form.py:242
+#: tryton/gui/window/form.py:239
 msgid "Creation User:"
 msgstr "Потребител създал:"
 
-#: tryton/gui/window/form.py:243
+#: tryton/gui/window/form.py:240
 msgid "Creation Date:"
 msgstr "Дата на създаване:"
 
-#: tryton/gui/window/form.py:244
+#: tryton/gui/window/form.py:241
 msgid "Latest Modification by:"
 msgstr "Последно променен от:"
 
-#: tryton/gui/window/form.py:245
+#: tryton/gui/window/form.py:242
 msgid "Latest Modification Date:"
 msgstr "Дата на последна промяна:"
 
-#: tryton/gui/window/form.py:263
+#: tryton/gui/window/form.py:260
 msgid "Model:"
 msgstr "Модел:"
 
-#: tryton/gui/window/form.py:271
+#: tryton/gui/window/form.py:304
 msgid "Are you sure to remove this record?"
 msgstr "Наистина ли искате да изтриете този запис?"
 
-#: tryton/gui/window/form.py:273
+#: tryton/gui/window/form.py:306
 msgid "Are you sure to remove those records?"
 msgstr "Наистина ли искате да изтриете тези записи?"
 
-#: tryton/gui/window/form.py:276
+#: tryton/gui/window/form.py:309
 msgid "Records not removed!"
 msgstr "Записа не е изтрит!"
 
-#: tryton/gui/window/form.py:278
+#: tryton/gui/window/form.py:311
 msgid "Records removed!"
 msgstr "Записите изтрити!"
 
-#: tryton/gui/window/form.py:318
+#: tryton/gui/window/form.py:345
 msgid "Working now on the duplicated record(s)!"
 msgstr "Работите върху дублиран(и) запис(и)!"
 
-#: tryton/gui/window/form.py:325
+#: tryton/gui/window/form.py:352
 msgid "Record saved!"
 msgstr "Записа съхранен!"
 
-#: tryton/gui/window/form.py:328
+#: tryton/gui/window/form.py:355
 msgid "Invalid form!"
 msgstr "Невалидна форма!"
 
-#: tryton/gui/window/form.py:436
+#: tryton/gui/window/form.py:462
 msgid " of "
 msgstr " от"
 
-#: tryton/gui/window/form.py:457
+#: tryton/gui/window/form.py:483
 msgid ""
 "This record has been modified\n"
 "do you want to save it ?"
@@ -1255,46 +1264,52 @@ msgstr ""
 "Този запис е променен\n"
 "искате ли да го запишете ?"
 
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
 msgid "Action"
 msgstr "Действие"
 
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
 msgid "Launch action"
 msgstr "Започване на действие"
 
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
 msgid "Relate"
 msgstr "Свързани"
 
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
 msgid "Open related records"
 msgstr "Отваряне на свързани записи"
 
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
 msgid "Report"
 msgstr "Справки"
 
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
 msgid "Open report"
 msgstr "Отваряне на справка"
 
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
 msgid "E-Mail"
 msgstr "Email"
 
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
 msgid "E-Mail report"
 msgstr "Изращане на справка по Email"
 
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
 msgid "Print"
 msgstr "Печат"
 
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
 msgid "Print report"
 msgstr "Отпечатване на справка"
 
+#: tryton/gui/window/form.py:607
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:257
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:1050
+msgid "Unknown"
+msgstr "Неизвестен"
+
 #: tryton/gui/window/limit.py:17
 msgid "Limit"
 msgstr "Ограничение"
@@ -1323,6 +1338,20 @@ msgstr "Настройки"
 msgid "Current Password:"
 msgstr "Текуща парола"
 
+#: tryton/gui/window/revision.py:20
+#, fuzzy
+msgid "Revision"
+msgstr "Предишен"
+
+#: tryton/gui/window/revision.py:29
+#, fuzzy
+msgid "Select a revision"
+msgstr "Избор:"
+
+#: tryton/gui/window/revision.py:32
+msgid "Revision:"
+msgstr ""
+
 #: tryton/gui/window/shortcuts.py:17
 msgid "Keyboard Shortcuts"
 msgstr "Бързи клавиши"
@@ -1501,21 +1530,21 @@ msgstr "Добавяне на имена на полета"
 msgid "Name"
 msgstr "Име"
 
-#: tryton/gui/window/win_export.py:306
+#: tryton/gui/window/win_export.py:309
 msgid "What is the name of this export?"
 msgstr "Какво е името на това извличане?"
 
-#: tryton/gui/window/win_export.py:429
+#: tryton/gui/window/win_export.py:436
 #, python-format
 msgid "%d record saved!"
 msgstr "%d заспис съхранен!"
 
-#: tryton/gui/window/win_export.py:431
+#: tryton/gui/window/win_export.py:438
 #, python-format
 msgid "%d records saved!"
 msgstr "%d записа съхранени!"
 
-#: tryton/gui/window/win_export.py:434
+#: tryton/gui/window/win_export.py:441
 #, python-format
 msgid ""
 "Operation failed!\n"
@@ -1530,26 +1559,26 @@ msgstr ""
 msgid "Link"
 msgstr "Връзка"
 
-#: tryton/gui/window/win_form.py:134
+#: tryton/gui/window/win_form.py:136
 msgid "Add"
 msgstr "Добавяне"
 
-#: tryton/gui/window/win_form.py:147
+#: tryton/gui/window/win_form.py:149
 msgid "Remove <Del>"
 msgstr "Изтриване <Del>"
 
-#: tryton/gui/window/win_form.py:162
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:73
+#: tryton/gui/window/win_form.py:164
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:75
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:86
 msgid "Create a new record <F3>"
 msgstr "Създаване на нов запис <F3>"
 
-#: tryton/gui/window/win_form.py:174
+#: tryton/gui/window/win_form.py:176
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:106
 msgid "Delete selected record <Del>"
 msgstr "Изтриване на избрания запис <Del>"
 
-#: tryton/gui/window/win_form.py:188
+#: tryton/gui/window/win_form.py:190
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:116
 msgid "Undelete selected record <Ins>"
 msgstr "Възтановяване на избрания запис <Ins>"
@@ -1572,10 +1601,10 @@ msgstr "Файл за вмъкване:"
 
 #: tryton/gui/window/win_import.py:111
 #: tryton/gui/window/view_form/view/form_gtk/binary.py:57
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:111
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:118
 #: tryton/gui/window/view_form/view/form_gtk/image.py:62
 #: tryton/gui/window/view_form/view/form_gtk/image.py:131
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:624
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:650
 msgid "Open..."
 msgstr "Отваряне..."
 
@@ -1599,19 +1628,19 @@ msgstr "Кодиране:"
 msgid "Lines to Skip:"
 msgstr "Редове за пропускане:"
 
-#: tryton/gui/window/win_import.py:184 tryton/gui/window/win_import.py:189
+#: tryton/gui/window/win_import.py:185 tryton/gui/window/win_import.py:190
 msgid "Field name"
 msgstr "Име на поле"
 
-#: tryton/gui/window/win_import.py:249
+#: tryton/gui/window/win_import.py:251
 msgid "You must select an import file first!"
 msgstr "Първо трябва да изберете файл за вмъкване!"
 
-#: tryton/gui/window/win_import.py:260
+#: tryton/gui/window/win_import.py:262
 msgid "Error opening CSV file"
 msgstr "Грешка при отваряне на CSV файл"
 
-#: tryton/gui/window/win_import.py:287
+#: tryton/gui/window/win_import.py:289
 #, python-format
 msgid "Error processing the file at field %s."
 msgstr "Грешка при обработка на файл при поле %s"
@@ -1626,20 +1655,7 @@ msgstr "%d запис вмъкнат!"
 msgid "%d records imported!"
 msgstr "%d записи вмъкнати!"
 
-#: tryton/gui/window/win_import.py:371
-msgid "Importation Error!"
-msgstr "Грешка при вмъкване!"
-
-#: tryton/gui/window/win_import.py:372
-#, python-format
-msgid ""
-"Error importing record %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-msgstr ""
-
-#: tryton/gui/window/wizard.py:291
+#: tryton/gui/window/wizard.py:286
 msgid "Wizard"
 msgstr "Помощник"
 
@@ -1648,45 +1664,41 @@ msgstr "Помощник"
 msgid "No String Attr."
 msgstr "Няма атрибут низ"
 
-#: tryton/gui/window/view_form/screen/screen.py:135
+#: tryton/gui/window/view_form/screen/screen.py:129
 #, fuzzy
 msgid "ID"
 msgstr "д"
 
-#: tryton/gui/window/view_form/screen/screen.py:136
+#: tryton/gui/window/view_form/screen/screen.py:130
 #, fuzzy
 msgid "Creation User"
 msgstr "Потребител създал:"
 
-#: tryton/gui/window/view_form/screen/screen.py:137
+#: tryton/gui/window/view_form/screen/screen.py:131
 #, fuzzy
 msgid "Creation Date"
 msgstr "Дата на създаване:"
 
-#: tryton/gui/window/view_form/screen/screen.py:138
+#: tryton/gui/window/view_form/screen/screen.py:132
 #, fuzzy
 msgid "Modification User"
 msgstr "Дата на последна промяна:"
 
-#: tryton/gui/window/view_form/screen/screen.py:139
+#: tryton/gui/window/view_form/screen/screen.py:133
 #, fuzzy
 msgid "Modification Date"
 msgstr "Дата на последна промяна:"
 
-#: tryton/gui/window/view_form/screen/screen.py:634
+#: tryton/gui/window/view_form/screen/screen.py:631
 msgid "Unable to get view tree state"
 msgstr ""
 
-#: tryton/gui/window/view_form/screen/screen.py:671
-#, fuzzy, python-format
+#: tryton/gui/window/view_form/screen/screen.py:668
+#, fuzzy
 msgid "Unable to set view tree state"
 msgstr "Не може да зададе локални настройки %s"
 
-#: tryton/gui/window/view_form/view/list.py:651
-msgid "You must select a record to use the relation!"
-msgstr "Трябва за изберете запис за използвате връзката! "
-
-#: tryton/gui/window/view_form/view/screen_container.py:25
+#: tryton/gui/window/view_form/view/screen_container.py:23
 msgid ".."
 msgstr ""
 
@@ -1694,19 +1706,19 @@ msgstr ""
 msgid "F_ilters"
 msgstr "Филтри"
 
-#: tryton/gui/window/view_form/view/screen_container.py:149
+#: tryton/gui/window/view_form/view/screen_container.py:147
 msgid "Show bookmarks of filters"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/screen_container.py:314
+#: tryton/gui/window/view_form/view/screen_container.py:312
 msgid "Remove this bookmark"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/screen_container.py:321
+#: tryton/gui/window/view_form/view/screen_container.py:319
 msgid "Bookmark this filter"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/screen_container.py:380
+#: tryton/gui/window/view_form/view/screen_container.py:384
 msgid "Bookmark Name:"
 msgstr ""
 
@@ -1737,24 +1749,24 @@ msgstr ""
 msgid "Select a File..."
 msgstr "Избор на файл"
 
-#: tryton/gui/window/view_form/view/form_gtk/char.py:157
+#: tryton/gui/window/view_form/view/form_gtk/char.py:161
 msgid "Show plain text"
 msgstr "Показване само на текст"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:349
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:348
 msgid "Add value"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:459
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:461
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:199
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:201
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:458
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:460
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:202
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:204
 #: tryton/gui/window/view_form/view/form_gtk/parser.py:255
 #: tryton/gui/window/view_form/view/form_gtk/parser.py:259
 msgid ":"
 msgstr ":"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:471
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:470
 #, python-format
 msgid "Remove \"%s\""
 msgstr ""
@@ -1771,24 +1783,24 @@ msgstr "Всички файлове"
 msgid "Images"
 msgstr "Изображения"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:175
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:178
 #, fuzzy
 msgid "Translation"
 msgstr "Добавяне на превод"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:231
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:234
 msgid "Edit"
 msgstr "Редактиране"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:236
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:239
 msgid "Fuzzy"
 msgstr "Неясно"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:305
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:308
 msgid "You need to save the record before adding translations!"
 msgstr "Трябва да съхраните записа преди да добавите преводи!"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:316
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:319
 msgid "No other language available!"
 msgstr "Няма наличен друг език!"
 
@@ -1803,12 +1815,12 @@ msgstr "Съхраняване на този запис"
 msgid "Remove selected record <Del>"
 msgstr "Изтриване на избрания запис <Del>"
 
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:74
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:351
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:76
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:356
 msgid "Open a record <F2>"
 msgstr "Отваряне на запис"
 
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:354
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:359
 msgid "Search a record <F2>"
 msgstr "Тъсене на запис"
 
@@ -1901,15 +1913,10 @@ msgstr "PNG изображение (*.png)"
 msgid "Image size too large!"
 msgstr "Размера на изображението е много голям!"
 
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:245
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:244
 msgid ": "
 msgstr ": "
 
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:258
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:1023
-msgid "Unknown"
-msgstr "Неизвестен"
-
 #: tryton/plugins/translation/__init__.py:18
 msgid "Translate view"
 msgstr "Превод на изглед"
diff --git a/share/locale/ca_ES/LC_MESSAGES/tryton.mo b/share/locale/ca_ES/LC_MESSAGES/tryton.mo
index a344cd8..a84d937 100644
Binary files a/share/locale/ca_ES/LC_MESSAGES/tryton.mo and b/share/locale/ca_ES/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/ca_ES/LC_MESSAGES/tryton.po b/share/locale/ca_ES/LC_MESSAGES/tryton.po
index 95339bc..bbc5dd8 100644
--- a/share/locale/ca_ES/LC_MESSAGES/tryton.po
+++ b/share/locale/ca_ES/LC_MESSAGES/tryton.po
@@ -4,14 +4,15 @@
 # Sergi Almacellas Abellana <sergi at koolpi.com> 2012.
 # Jordi Esteve Cusiné <jesteve at zikzakmedia.com> 2012.
 #
+# , 2014.
 msgid ""
 msgstr ""
 "Project-Id-Version: tryton 2.4.0\n"
 "Report-Msgid-Bugs-To: issue_tracker at tryton.org\n"
-"POT-Creation-Date: 2013-10-20 16:34+0200\n"
-"PO-Revision-Date: 2013-10-14 14:29+0100\n"
-"Last-Translator: Sergi Almacellas Abellana <sergi at koolpi.com>\n"
-"Language-Team: <tryton-es at googlegroups.com>\n"
+"POT-Creation-Date: 2014-04-18 22:49+0200\n"
+"PO-Revision-Date: 2014-04-17 18:49+0200\n"
+"Last-Translator: \n"
+"Language-Team: Catalan <kde-i18n-ca at kde.org>\n"
 "Plural-Forms: nplurals=2; plural=(n != 1)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
@@ -65,62 +66,62 @@ msgstr "No s'ha pogut escriure el fitxer configuració %s"
 msgid "Unable to set locale %s"
 msgstr "No s'ha pogut establir l'idioma %s"
 
-#: tryton/action/main.py:163
+#: tryton/action/main.py:171
 msgid "Select your action"
 msgstr "Seleccioneu la vostra acció"
 
-#: tryton/action/main.py:169
+#: tryton/action/main.py:177
 msgid "No action defined!"
 msgstr "No s'ha definit cap acció."
 
-#: tryton/common/common.py:270
+#: tryton/common/common.py:284
 msgid "Tryton Connection"
 msgstr "Connexió a Tryton"
 
-#: tryton/common/common.py:281
+#: tryton/common/common.py:295
 msgid "Server:"
 msgstr "Servidor:"
 
-#: tryton/common/common.py:299 tryton/gui/window/dblogin.py:79
+#: tryton/common/common.py:313 tryton/gui/window/dblogin.py:79
 msgid "Port:"
 msgstr "Port:"
 
-#: tryton/common/common.py:369
+#: tryton/common/common.py:383
 msgid "Selection"
 msgstr "Selecció"
 
-#: tryton/common/common.py:378
+#: tryton/common/common.py:392
 msgid "Your selection:"
 msgstr "La vostra selecció:"
 
-#: tryton/common/common.py:498 tryton/gui/main.py:1407
-#: tryton/gui/window/win_export.py:402
+#: tryton/common/common.py:528 tryton/gui/main.py:1420
+#: tryton/gui/window/win_export.py:409
 #: tryton/gui/window/view_form/view/form_gtk/binary.py:69
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:138
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:150
 #: tryton/gui/window/view_form/view/form_gtk/image.py:74
-#: tryton/gui/window/view_form/view/form_gtk/image.py:158
+#: tryton/gui/window/view_form/view/form_gtk/image.py:161
 #: tryton/gui/window/view_form/view/graph_gtk/parser.py:105
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:656
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:686
 msgid "Save As..."
 msgstr "Desa com..."
 
-#: tryton/common/common.py:649
+#: tryton/common/common.py:675
 msgid "Always ignore this warning."
 msgstr "Ignora sempre aquest advertiment."
 
-#: tryton/common/common.py:654
+#: tryton/common/common.py:680
 msgid "Do you want to proceed?"
 msgstr "Voleu continuar?"
 
-#: tryton/common/common.py:673
+#: tryton/common/common.py:699
 msgid "Confirmation"
 msgstr "Confirmació"
 
-#: tryton/common/common.py:779 tryton/common/common.py:1083
+#: tryton/common/common.py:805 tryton/common/common.py:1114
 msgid "Concurrency Exception"
 msgstr "Excepció de concurrència"
 
-#: tryton/common/common.py:793
+#: tryton/common/common.py:819
 msgid ""
 "<b>Write Concurrency Warning:</b>\n"
 "\n"
@@ -132,56 +133,56 @@ msgid ""
 msgstr ""
 "<b>Avís de concurrència d'escriptura:</b>\n"
 "\n"
-"Aquest registre ha estat modificat mentre l'editaveu.\n"
+"Aquest registre ha estat modificat mentre l'editàveu.\n"
 "  Trieu:\n"
 "   - \"Cancel·la\" per no desar;\n"
 "   - \"Compara\" per veure la versió modificada:\n"
 "   - \"Desa de totes formes\" per desar els vostres canvis."
 
-#: tryton/common/common.py:802
+#: tryton/common/common.py:828
 msgid "Compare"
 msgstr "Compara"
 
-#: tryton/common/common.py:807
+#: tryton/common/common.py:833
 msgid "Write Anyway"
 msgstr "Desa de totes formes"
 
-#: tryton/common/common.py:833 tryton/gui/window/win_export.py:435
-#: tryton/gui/window/win_import.py:260 tryton/gui/window/win_import.py:288
+#: tryton/common/common.py:859 tryton/gui/window/win_export.py:442
+#: tryton/gui/window/win_import.py:262 tryton/gui/window/win_import.py:290
 msgid "Error"
 msgstr "Error"
 
-#: tryton/common/common.py:837
+#: tryton/common/common.py:863
 msgid "Report Bug"
 msgstr "Informa de l'error"
 
-#: tryton/common/common.py:844
+#: tryton/common/common.py:870
 msgid "Application Error!"
 msgstr "Error d'aplicació."
 
-#: tryton/common/common.py:867
+#: tryton/common/common.py:893
 msgid "Error: "
 msgstr "Error: "
 
-#: tryton/common/common.py:887
+#: tryton/common/common.py:913
 #, python-format
 msgid "To report bugs you must have an account on <u>%s</u>"
 msgstr "Per informar d'errors heu de tenir un compte a <u>%s</u>"
 
-#: tryton/common/common.py:917
+#: tryton/common/common.py:943
 msgid "Bug Tracker"
 msgstr "Seguiment d'errors"
 
-#: tryton/common/common.py:935
+#: tryton/common/common.py:961
 msgid "User:"
 msgstr "Usuari:"
 
-#: tryton/common/common.py:943 tryton/common/common.py:1101
+#: tryton/common/common.py:969 tryton/common/common.py:1132
 #: tryton/gui/window/dblogin.py:462
 msgid "Password:"
 msgstr "Contrasenya:"
 
-#: tryton/common/common.py:993
+#: tryton/common/common.py:1024
 msgid ""
 "The same bug was already reported by another user.\n"
 "To keep you informed your username is added to the nosy-list of this issue"
@@ -190,11 +191,11 @@ msgstr ""
 "Per mantenir-vos informat afegirem el vostre usuari a la llista "
 "d'interessats en aquest assumpte."
 
-#: tryton/common/common.py:1004
+#: tryton/common/common.py:1035
 msgid "Created new bug with ID "
 msgstr "S'ha creat una nou informe d'error amb l'identificador "
 
-#: tryton/common/common.py:1012 tryton/gui/main.py:921
+#: tryton/common/common.py:1043 tryton/gui/main.py:928
 msgid ""
 "Connection error!\n"
 "Bad username or password!"
@@ -202,11 +203,11 @@ msgstr ""
 "Error de connexió.\n"
 "Nom d'usuari o contrasenya incorrectes."
 
-#: tryton/common/common.py:1017
+#: tryton/common/common.py:1048
 msgid "Exception:"
 msgstr "Excepció:"
 
-#: tryton/common/common.py:1034
+#: tryton/common/common.py:1065
 msgid ""
 "The server fingerprint has changed since last connection!\n"
 "The application will stop connecting to this server until its fingerprint"
@@ -216,12 +217,12 @@ msgstr ""
 "L'aplicació no es podrà connectar a aquest servidor fins que es "
 "corregeixi l'empremta digital del servidor."
 
-#: tryton/common/common.py:1036
+#: tryton/common/common.py:1067
 msgid "Security risk!"
 msgstr "Risc de seguretat."
 
-#: tryton/common/common.py:1042 tryton/common/common.py:1108
-#: tryton/gui/main.py:918
+#: tryton/common/common.py:1073 tryton/common/common.py:1139
+#: tryton/gui/main.py:925
 msgid ""
 "Connection error!\n"
 "Unable to connect to the server!"
@@ -229,39 +230,39 @@ msgstr ""
 "Error de connexió.\n"
 "No ha estat possible connectar-se al servidor."
 
-#: tryton/common/common.py:1123
+#: tryton/common/common.py:1154
 msgid "Network Error!"
 msgstr "Error de xarxa."
 
-#: tryton/common/common.py:1354
+#: tryton/common/common.py:1409
 msgid "Y"
 msgstr "A"
 
-#: tryton/common/common.py:1355
+#: tryton/common/common.py:1410
 msgid "M"
 msgstr "M"
 
-#: tryton/common/common.py:1356
+#: tryton/common/common.py:1411
 msgid "w"
 msgstr "s"
 
-#: tryton/common/common.py:1357
+#: tryton/common/common.py:1412
 msgid "d"
 msgstr "d"
 
-#: tryton/common/common.py:1358
+#: tryton/common/common.py:1413
 msgid "h"
 msgstr "h"
 
-#: tryton/common/common.py:1359
+#: tryton/common/common.py:1414
 msgid "m"
 msgstr "m"
 
-#: tryton/common/completion.py:22
+#: tryton/common/completion.py:21
 msgid "<i>Search...</i>"
 msgstr "<i>Cerca...</i>"
 
-#: tryton/common/completion.py:23
+#: tryton/common/completion.py:22
 msgid "<i>Create...</i>"
 msgstr "<i>Crea...</i>"
 
@@ -269,253 +270,257 @@ msgstr "<i>Crea...</i>"
 msgid "Open the calendar <F2>"
 msgstr "Obre el calendari <F2>"
 
-#: tryton/common/date_widget.py:271
+#: tryton/common/date_widget.py:275
 msgid "Date Selection"
 msgstr "Selecció de data"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "y"
 msgstr "a"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "yes"
 msgstr "sí"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "true"
 msgstr "verdader"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "t"
 msgstr "v"
 
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
 msgid "True"
 msgstr "Verdader"
 
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
 msgid "False"
 msgstr "Fals"
 
-#: tryton/common/popup_menu.py:71
+#: tryton/common/popup_menu.py:72
+msgid "Edit..."
+msgstr "Edita..."
+
+#: tryton/common/popup_menu.py:77
 msgid "Attachments..."
 msgstr "Adjunts..."
 
-#: tryton/common/popup_menu.py:76
+#: tryton/common/popup_menu.py:87
 msgid "Actions..."
 msgstr "Accions..."
 
-#: tryton/common/popup_menu.py:77
+#: tryton/common/popup_menu.py:88
 msgid "Relate..."
 msgstr "Relacionat..."
 
-#: tryton/common/popup_menu.py:78
+#: tryton/common/popup_menu.py:89
 msgid "Report..."
 msgstr "Informe..."
 
-#: tryton/common/popup_menu.py:79
+#: tryton/common/popup_menu.py:90
 msgid "E-Mail..."
 msgstr "Correu electrònic..."
 
-#: tryton/common/popup_menu.py:80
+#: tryton/common/popup_menu.py:91
 msgid "Print..."
 msgstr "Imprimeix..."
 
-#: tryton/gui/main.py:217
+#: tryton/gui/main.py:218
 msgid "_File"
 msgstr "_Fitxer"
 
-#: tryton/gui/main.py:225
+#: tryton/gui/main.py:226
 msgid "_User"
 msgstr "U_suari"
 
-#: tryton/gui/main.py:239
+#: tryton/gui/main.py:240
 msgid "_Options"
 msgstr "_Opcions"
 
-#: tryton/gui/main.py:247
+#: tryton/gui/main.py:248
 msgid "Fa_vorites"
 msgstr "_Preferits"
 
-#: tryton/gui/main.py:263
+#: tryton/gui/main.py:264
 msgid "_Help"
 msgstr "Aj_uda"
 
-#: tryton/gui/main.py:285 tryton/gui/window/win_search.py:26
+#: tryton/gui/main.py:286 tryton/gui/window/win_search.py:26
 #: tryton/gui/window/view_form/view/screen_container.py:100
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:333
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:332
 #: tryton/gui/window/view_form/view/form_gtk/many2many.py:40
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:45
 msgid "Search"
 msgstr "Cerca"
 
-#: tryton/gui/main.py:364
+#: tryton/gui/main.py:374
 msgid "No result found."
 msgstr "No s'han trobat resultats."
 
-#: tryton/gui/main.py:384
+#: tryton/gui/main.py:396
 msgid "_Connect..."
 msgstr "_Connecta..."
 
-#: tryton/gui/main.py:393
+#: tryton/gui/main.py:405
 msgid "_Disconnect"
 msgstr "_Desconnecta"
 
-#: tryton/gui/main.py:403
+#: tryton/gui/main.py:415
 msgid "Data_base"
 msgstr "_Base de dades"
 
-#: tryton/gui/main.py:414
+#: tryton/gui/main.py:426
 msgid "_New Database..."
 msgstr "_Nova base de dades..."
 
-#: tryton/gui/main.py:423
+#: tryton/gui/main.py:435
 msgid "_Restore Database..."
 msgstr "_Restaura una base de dades..."
 
-#: tryton/gui/main.py:432
+#: tryton/gui/main.py:444
 msgid "_Backup Database..."
 msgstr "Fes _còpia de seguretat de la base de dades..."
 
-#: tryton/gui/main.py:441
+#: tryton/gui/main.py:453
 msgid "Dro_p Database..."
 msgstr "_Elimina una base de dades..."
 
-#: tryton/gui/main.py:450
+#: tryton/gui/main.py:462
 msgid "_Quit..."
 msgstr "_Surt..."
 
-#: tryton/gui/main.py:465
+#: tryton/gui/main.py:477
 msgid "_Preferences..."
 msgstr "_Preferències..."
 
-#: tryton/gui/main.py:476
+#: tryton/gui/main.py:488
 msgid "_Menu Reload"
 msgstr "_Recarrega el menú"
 
-#: tryton/gui/main.py:485
+#: tryton/gui/main.py:497
 msgid "_Menu Toggle"
 msgstr "Commuta el _menú"
 
-#: tryton/gui/main.py:492
+#: tryton/gui/main.py:504
 msgid "_Global Search"
 msgstr "Cerca _Global"
 
-#: tryton/gui/main.py:507
+#: tryton/gui/main.py:519
 msgid "_Toolbar"
 msgstr "Barra d'_eines"
 
-#: tryton/gui/main.py:515
+#: tryton/gui/main.py:527
 msgid "_Default"
 msgstr "Per _defecte"
 
-#: tryton/gui/main.py:525
+#: tryton/gui/main.py:537
 msgid "_Text and Icons"
 msgstr "Text _i icones"
 
-#: tryton/gui/main.py:535
+#: tryton/gui/main.py:547
 msgid "_Icons"
 msgstr "_Icones"
 
-#: tryton/gui/main.py:544
+#: tryton/gui/main.py:556
 msgid "_Text"
 msgstr "_Text"
 
-#: tryton/gui/main.py:553
+#: tryton/gui/main.py:565
 msgid "_Menubar"
 msgstr "Barra de _menú"
 
-#: tryton/gui/main.py:561
+#: tryton/gui/main.py:573
 msgid "Change Accelerators"
 msgstr "Canvia tecles ràpides"
 
-#: tryton/gui/main.py:569
+#: tryton/gui/main.py:581
 msgid "_Mode"
 msgstr "_Mode"
 
-#: tryton/gui/main.py:577
+#: tryton/gui/main.py:589
 msgid "_Normal"
 msgstr "_Normal"
 
-#: tryton/gui/main.py:585
+#: tryton/gui/main.py:597
 msgid "_PDA"
 msgstr "_PDA"
 
-#: tryton/gui/main.py:592
+#: tryton/gui/main.py:604
 msgid "_Form"
 msgstr "_Formulari"
 
-#: tryton/gui/main.py:601
+#: tryton/gui/main.py:613
 msgid "Save Width/Height"
 msgstr "Desa ample/alt"
 
-#: tryton/gui/main.py:612
+#: tryton/gui/main.py:624
 msgid "Save Tree State"
 msgstr "Desa l'estat de l'arbre"
 
-#: tryton/gui/main.py:624
+#: tryton/gui/main.py:636
 msgid "Spell Checking"
 msgstr "Correcció ortogràfica"
 
-#: tryton/gui/main.py:634
+#: tryton/gui/main.py:646
 msgid "Tabs Position"
 msgstr "Posició de les pestanyes"
 
-#: tryton/gui/main.py:642
+#: tryton/gui/main.py:654
 msgid "Top"
 msgstr "Superior"
 
-#: tryton/gui/main.py:651
+#: tryton/gui/main.py:663
 msgid "Left"
 msgstr "Esquerra"
 
-#: tryton/gui/main.py:661
+#: tryton/gui/main.py:673
 msgid "Right"
 msgstr "Dreta"
 
-#: tryton/gui/main.py:671
+#: tryton/gui/main.py:683
 msgid "Bottom"
 msgstr "Inferior"
 
-#: tryton/gui/main.py:680
+#: tryton/gui/main.py:692
 msgid "_Previous Tab"
 msgstr "_Anterior"
 
-#: tryton/gui/main.py:686
+#: tryton/gui/main.py:698
 msgid "_Next Tab"
 msgstr "_Següent"
 
-#: tryton/gui/main.py:692
+#: tryton/gui/main.py:704
 msgid "Search Limit..."
 msgstr "_Límit de cerca..."
 
-#: tryton/gui/main.py:698
+#: tryton/gui/main.py:710
 msgid "_Email..."
 msgstr "_Correu electrònic..."
 
-#: tryton/gui/main.py:706
+#: tryton/gui/main.py:718
 msgid "_Save Options"
 msgstr "_Desa opcions"
 
-#: tryton/gui/main.py:718
+#: tryton/gui/main.py:730
 msgid "_Tips..."
 msgstr "Conse_lls..."
 
-#: tryton/gui/main.py:727
+#: tryton/gui/main.py:739
 msgid "_Keyboard Shortcuts..."
 msgstr "Com_binacions de tecles..."
 
-#: tryton/gui/main.py:736
+#: tryton/gui/main.py:748
 msgid "_About..."
 msgstr "_Quant a..."
 
-#: tryton/gui/main.py:787
+#: tryton/gui/main.py:799
 msgid "Manage Favorites"
 msgstr "_Gestiona els preferits"
 
-#: tryton/gui/main.py:935
+#: tryton/gui/main.py:942
 msgid ""
 "The following action requires to close all tabs.\n"
 "Do you want to continue?"
@@ -523,11 +528,11 @@ msgstr ""
 "L'acció seleccionada requereix tancar totes les pestanyes.\n"
 "Voleu continuar?"
 
-#: tryton/gui/main.py:1196
+#: tryton/gui/main.py:1206
 msgid "Close Tab"
 msgstr "Tanca pestanya"
 
-#: tryton/gui/main.py:1314
+#: tryton/gui/main.py:1327
 msgid ""
 "You are going to delete a Tryton database.\n"
 "Are you really sure to proceed?"
@@ -535,7 +540,7 @@ msgstr ""
 "Esteu a punt d'eliminar una base de dades de Tryton.\n"
 "Esteu segur que voleu continuar?"
 
-#: tryton/gui/main.py:1324
+#: tryton/gui/main.py:1337
 msgid ""
 "Wrong Tryton Server Password\n"
 "Please try again."
@@ -543,28 +548,28 @@ msgstr ""
 "La contrasenya del servidor Tryton és incorrecta.\n"
 "Intenteu-ho de nou."
 
-#: tryton/gui/main.py:1326 tryton/gui/main.py:1362 tryton/gui/main.py:1398
-#: tryton/gui/window/dbcreate.py:382
+#: tryton/gui/main.py:1339 tryton/gui/main.py:1375 tryton/gui/main.py:1411
+#: tryton/gui/window/dbcreate.py:384
 msgid "Access denied!"
 msgstr "Accés denegat."
 
-#: tryton/gui/main.py:1329
+#: tryton/gui/main.py:1342
 msgid "Database drop failed with error message:\n"
 msgstr "L'eliminació de la base de dades ha fallat amb el missatge d'error:\n"
 
-#: tryton/gui/main.py:1330
+#: tryton/gui/main.py:1343
 msgid "Database drop failed!"
 msgstr "Ha fallat l'eliminació de la base de dades."
 
-#: tryton/gui/main.py:1332
+#: tryton/gui/main.py:1345
 msgid "Database dropped successfully!"
 msgstr "La base de dades s'ha eliminat correctament."
 
-#: tryton/gui/main.py:1337
+#: tryton/gui/main.py:1350
 msgid "Open Backup File to Restore..."
 msgstr "Obre una còpia de seguretat per restaurar..."
 
-#: tryton/gui/main.py:1354
+#: tryton/gui/main.py:1367
 msgid ""
 "It is not possible to restore a password protected database.\n"
 "Backup and restore needed to be proceed manual."
@@ -572,11 +577,11 @@ msgstr ""
 "No és possible restaurar una base de dades protegida amb contrasenya.\n"
 "La còpia de seguretat i la seva restauració ha de ser manual."
 
-#: tryton/gui/main.py:1358 tryton/gui/main.py:1394
+#: tryton/gui/main.py:1371 tryton/gui/main.py:1407
 msgid "Database is password protected!"
 msgstr "La base de dades està protegida amb contrasenya."
 
-#: tryton/gui/main.py:1360 tryton/gui/main.py:1396
+#: tryton/gui/main.py:1373 tryton/gui/main.py:1409
 msgid ""
 "Wrong Tryton Server Password.\n"
 "Please try again."
@@ -584,19 +589,19 @@ msgstr ""
 "La contrasenya del servidor Tryton és incorrecta.\n"
 "Intenteu-ho de nou."
 
-#: tryton/gui/main.py:1365
+#: tryton/gui/main.py:1378
 msgid "Database restore failed with error message:\n"
 msgstr "La restauració de la base de dades ha fallat amb l'error:\n"
 
-#: tryton/gui/main.py:1367 tryton/gui/main.py:1372
+#: tryton/gui/main.py:1380 tryton/gui/main.py:1385
 msgid "Database restore failed!"
 msgstr "La restauració de la base de dades ha fallat."
 
-#: tryton/gui/main.py:1370
+#: tryton/gui/main.py:1383
 msgid "Database restored successfully!"
 msgstr "La base de dades s'ha restaurat correctament."
 
-#: tryton/gui/main.py:1391
+#: tryton/gui/main.py:1404
 msgid ""
 "It is not possible to dump a password protected Database.\n"
 "Backup and restore needed to be proceed manual."
@@ -604,75 +609,75 @@ msgstr ""
 "No és possible fer còpia d'una base de dades protegida amb contrasenya.\n"
 "La còpia de seguretat i la seva restauració ha de ser manual."
 
-#: tryton/gui/main.py:1401
+#: tryton/gui/main.py:1414
 msgid "Database dump failed with error message:\n"
 msgstr "L'extracció de la base de dades ha fallat amb el missatge d'error:\n"
 
-#: tryton/gui/main.py:1403
+#: tryton/gui/main.py:1416
 msgid "Database dump failed!"
 msgstr "L'extracció de la base de dades ha fallat."
 
-#: tryton/gui/main.py:1414
+#: tryton/gui/main.py:1427
 msgid "Database backuped successfully!"
 msgstr "La còpia de seguretat de la base de dades ha finalitzat correctament."
 
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
 msgid "New"
 msgstr "Nou"
 
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
 msgid "Create a new record"
 msgstr "Crea un nou registre"
 
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
 #: tryton/gui/window/win_export.py:142
 msgid "Save"
 msgstr "Desa"
 
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
 msgid "Save this record"
 msgstr "Desa aquest registre"
 
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
-#: tryton/gui/window/win_form.py:228
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
+#: tryton/gui/window/win_form.py:232
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:154
 msgid "Switch"
 msgstr "Canvia la vista"
 
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
 msgid "Switch view"
 msgstr "Canvia la vista"
 
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
 msgid "_Reload"
 msgstr "_Recarrega"
 
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
 msgid "Reload"
 msgstr "Recarrega"
 
-#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:48
+#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:50
 msgid "_New"
 msgstr "_Nou"
 
-#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:49
-#: tryton/gui/window/win_form.py:66
+#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:51
+#: tryton/gui/window/win_form.py:67
 msgid "_Save"
 msgstr "_Desa"
 
-#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:50
+#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:52
 msgid "_Switch View"
 msgstr "Canvia la vi_sta"
 
-#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:52
+#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:54
 msgid "_Reload/Undo"
 msgstr "_Recarrega/Desfés"
 
-#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:56
+#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:58
 msgid "_Delete..."
 msgstr "_Elimina..."
 
-#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:65
+#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:68
 msgid "_Close Tab"
 msgstr "_Tanca la pestanya"
 
@@ -707,28 +712,28 @@ msgstr ""
 "bloquejats.\n"
 "Premeu a «Canvia» per canviar l'adreça."
 
-#: tryton/gui/window/dbcreate.py:137
+#: tryton/gui/window/dbcreate.py:139
 msgid "Create new database"
 msgstr "Crea nova base de dades"
 
-#: tryton/gui/window/dbcreate.py:147
+#: tryton/gui/window/dbcreate.py:149
 msgid "C_reate"
 msgstr "C_rea"
 
-#: tryton/gui/window/dbcreate.py:155
+#: tryton/gui/window/dbcreate.py:157
 msgid "Create the new database."
 msgstr "Crea la nova base de dades."
 
-#: tryton/gui/window/dbcreate.py:166
+#: tryton/gui/window/dbcreate.py:168
 msgid "Server Setup:"
 msgstr "Configuració del servidor:"
 
-#: tryton/gui/window/dbcreate.py:171
+#: tryton/gui/window/dbcreate.py:173
 msgid "Server connection:"
 msgstr "Connexió amb el servidor:"
 
-#: tryton/gui/window/dbcreate.py:180 tryton/gui/window/dbdumpdrop.py:140
-#: tryton/gui/window/dbrestore.py:86
+#: tryton/gui/window/dbcreate.py:182 tryton/gui/window/dbdumpdrop.py:140
+#: tryton/gui/window/dbrestore.py:88
 msgid ""
 "This is the URL of the server. Use server 'localhost' and port '8000' if "
 "the server is installed on this computer. Click on 'Change' to change the"
@@ -738,22 +743,22 @@ msgstr ""
 "«8000» si el servidor està instal·lat en aquest ordinador. Premeu a "
 "«Canvia» per canviar l'adreça."
 
-#: tryton/gui/window/dbcreate.py:183 tryton/gui/window/dbdumpdrop.py:147
-#: tryton/gui/window/dbrestore.py:91
+#: tryton/gui/window/dbcreate.py:185 tryton/gui/window/dbdumpdrop.py:147
+#: tryton/gui/window/dbrestore.py:93
 msgid "C_hange"
 msgstr "C_anvia"
 
-#: tryton/gui/window/dbcreate.py:192 tryton/gui/window/dbrestore.py:97
+#: tryton/gui/window/dbcreate.py:194 tryton/gui/window/dbrestore.py:99
 msgid "Setup the server connection..."
 msgstr "Configura la connexió amb el servidor..."
 
-#: tryton/gui/window/dbcreate.py:195 tryton/gui/window/dbdumpdrop.py:186
-#: tryton/gui/window/dbrestore.py:100
+#: tryton/gui/window/dbcreate.py:197 tryton/gui/window/dbdumpdrop.py:186
+#: tryton/gui/window/dbrestore.py:102
 msgid "Tryton Server Password:"
 msgstr "Contrasenya del servidor Tryton:"
 
-#: tryton/gui/window/dbcreate.py:205 tryton/gui/window/dbdumpdrop.py:196
-#: tryton/gui/window/dbrestore.py:109
+#: tryton/gui/window/dbcreate.py:207 tryton/gui/window/dbdumpdrop.py:196
+#: tryton/gui/window/dbrestore.py:111
 msgid ""
 "This is the password of the Tryton server. It doesn't belong to a real "
 "user. This password is usually defined in the trytond configuration."
@@ -761,15 +766,15 @@ msgstr ""
 "Aquesta és la contrasenya del servidor Tryton. No correspon a un usuari "
 "real. Aquesta contrasenya es defineix en la configuració de trytond."
 
-#: tryton/gui/window/dbcreate.py:216
+#: tryton/gui/window/dbcreate.py:218
 msgid "New database setup:"
 msgstr "Nova configuració de la base de dades:"
 
-#: tryton/gui/window/dbcreate.py:222
+#: tryton/gui/window/dbcreate.py:224
 msgid "Database name:"
 msgstr "Nom de la base de dades:"
 
-#: tryton/gui/window/dbcreate.py:234
+#: tryton/gui/window/dbcreate.py:236
 msgid ""
 "Choose the name of the new database.\n"
 "Allowed characters are alphanumerical or _ (underscore)\n"
@@ -780,25 +785,25 @@ msgstr ""
 "Podeu utilitzar caràcters alfanumèrics o _ (guió baix)\n"
 "Eviteu qualsevol accent, espai o caràcters especials. Exemple: tryton"
 
-#: tryton/gui/window/dbcreate.py:241
+#: tryton/gui/window/dbcreate.py:243
 msgid "Default language:"
 msgstr "Idioma per defecte:"
 
-#: tryton/gui/window/dbcreate.py:251
+#: tryton/gui/window/dbcreate.py:253
 msgid ""
 "Choose the default language that will be installed for this database. You"
 " will be able to install new languages after installation through the "
 "administration menu."
 msgstr ""
-"Esculliu l'idioma per defecte que s'instal·larà per a aquesta base de "
+"Escolliu l'idioma per defecte que s'instal·larà per a aquesta base de "
 "dades. Podreu instal·lar nous idiomes després de la instal·lació, "
 "mitjançant el menú d'administració."
 
-#: tryton/gui/window/dbcreate.py:255
+#: tryton/gui/window/dbcreate.py:257
 msgid "Admin password:"
 msgstr "Contrasenya de l'administrador:"
 
-#: tryton/gui/window/dbcreate.py:265
+#: tryton/gui/window/dbcreate.py:267
 msgid ""
 "Choose a password for the admin user of the new database. With these "
 "credentials you will be later able to login into the database:\n"
@@ -810,15 +815,15 @@ msgstr ""
 "Nom d'usuari: admin\n"
 "Contrasenya: <La contrasenya que introduïu aquí>"
 
-#: tryton/gui/window/dbcreate.py:273
+#: tryton/gui/window/dbcreate.py:275
 msgid "Confirm admin password:"
 msgstr "Confirmeu la contrasenya de l'administrador:"
 
-#: tryton/gui/window/dbcreate.py:282
+#: tryton/gui/window/dbcreate.py:284
 msgid "Type the Admin password again"
 msgstr "Teclegeu la contrasenya de l'administrador de nou"
 
-#: tryton/gui/window/dbcreate.py:330
+#: tryton/gui/window/dbcreate.py:332
 msgid ""
 "The database name is restricted to alpha-nummerical characters and \"_\" "
 "(underscore). Avoid all accents, space and any other special characters."
@@ -827,31 +832,31 @@ msgstr ""
 "\"_\" (guió baix). Eviteu tots els accents, espais i qualsevol altre "
 "caràcter especial."
 
-#: tryton/gui/window/dbcreate.py:335
+#: tryton/gui/window/dbcreate.py:337
 msgid "Wrong characters in database name!"
 msgstr "Heu introduït caràcters incorrectes al nom de la base de dades."
 
-#: tryton/gui/window/dbcreate.py:339
+#: tryton/gui/window/dbcreate.py:341
 msgid "The new admin password doesn't match the confirmation field.\n"
 msgstr ""
 "La nova contrasenya de l'administrador no coincideix amb el camp de "
 "confirmació.\n"
 
-#: tryton/gui/window/dbcreate.py:341
+#: tryton/gui/window/dbcreate.py:343
 msgid "Passwords doesn't match!"
 msgstr "Les contrasenyes no coincideixen."
 
-#: tryton/gui/window/dbcreate.py:344
+#: tryton/gui/window/dbcreate.py:346
 msgid "Admin password and confirmation are required to create a new database."
 msgstr ""
 "La contrasenya de l'administrador i la seva confirmació són necessàries "
 "per crear una nova base de dades."
 
-#: tryton/gui/window/dbcreate.py:346
+#: tryton/gui/window/dbcreate.py:348
 msgid "Missing admin password!"
 msgstr "Falta la contrasenya de l'administrador."
 
-#: tryton/gui/window/dbcreate.py:361
+#: tryton/gui/window/dbcreate.py:363
 msgid ""
 "A database with the same name already exists.\n"
 "Try another database name."
@@ -859,15 +864,15 @@ msgstr ""
 "Ja existeix una base de dades amb el mateix nom.\n"
 "Intenteu-ho amb un altre nom de base de dades."
 
-#: tryton/gui/window/dbcreate.py:364
+#: tryton/gui/window/dbcreate.py:366
 msgid "This database name already exist!"
 msgstr "Ja existeix una base de dades amb aquest nom."
 
-#: tryton/gui/window/dbcreate.py:379
+#: tryton/gui/window/dbcreate.py:381
 msgid "Sorry, wrong password for the Tryton server. Please try again."
 msgstr "La contrasenya del servidor Tryton no és correcta. Intenteu-ho de nou."
 
-#: tryton/gui/window/dbcreate.py:387
+#: tryton/gui/window/dbcreate.py:389
 msgid ""
 "Can't create the database, caused by an unknown reason.\n"
 "If there is a database created, it could be broken. Maybe drop this "
@@ -880,7 +885,7 @@ msgstr ""
 " informació addicional.\n"
 "Missatge d'error:\n"
 
-#: tryton/gui/window/dbcreate.py:395
+#: tryton/gui/window/dbcreate.py:397
 msgid "Error creating database!"
 msgstr "S'ha produït un error al crear la base de dades."
 
@@ -928,7 +933,7 @@ msgstr "Elimina la base de dades seleccionada."
 msgid "Choose a Tryton database to delete:"
 msgstr "Trieu la base de dades Tryton a eliminar:"
 
-#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:75
+#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:77
 msgid "Server Connection:"
 msgstr "Connexió al servidor:"
 
@@ -1019,15 +1024,15 @@ msgstr "Servidor:"
 msgid "User name:"
 msgstr "Nom d'usuari:"
 
-#: tryton/gui/window/dbrestore.py:64
+#: tryton/gui/window/dbrestore.py:66
 msgid "Restore Database"
 msgstr "Restaura una base de dades"
 
-#: tryton/gui/window/dbrestore.py:117
+#: tryton/gui/window/dbrestore.py:119
 msgid "File to Restore:"
 msgstr "Fitxer a restaurar:"
 
-#: tryton/gui/window/dbrestore.py:131
+#: tryton/gui/window/dbrestore.py:133
 msgid ""
 "Choose the name of the database to be restored.\n"
 "Allowed characters are alphanumerical or _ (underscore)\n"
@@ -1039,15 +1044,15 @@ msgstr ""
 "Eviteu tots els accents, espais, o caràcters especials. \n"
 "Exemple: tryton"
 
-#: tryton/gui/window/dbrestore.py:137
+#: tryton/gui/window/dbrestore.py:139
 msgid "New Database Name:"
 msgstr "Nom de la base de dades nova:"
 
-#: tryton/gui/window/dbrestore.py:140
+#: tryton/gui/window/dbrestore.py:142
 msgid "Update Database:"
 msgstr "Actualitza base de dades:"
 
-#: tryton/gui/window/dbrestore.py:144
+#: tryton/gui/window/dbrestore.py:146
 msgid ""
 "Check for an automatic database update after restoring a database from a "
 "previous Tryton version."
@@ -1056,11 +1061,11 @@ msgstr ""
 "dades des d'una versió anterior de Tryton, després de restaurar la base "
 "de dades."
 
-#: tryton/gui/window/dbrestore.py:154
+#: tryton/gui/window/dbrestore.py:156
 msgid "Restore"
 msgstr "Restaura"
 
-#: tryton/gui/window/dbrestore.py:163
+#: tryton/gui/window/dbrestore.py:165
 msgid "Restore the database from file."
 msgstr "Restaura la base de dades des d'un fitxer."
 
@@ -1100,154 +1105,158 @@ msgstr "Missatge:"
 msgid "Attachment:"
 msgstr "Adjunt:"
 
-#: tryton/gui/window/form.py:39 tryton/gui/window/tips.py:74
-#: tryton/gui/window/win_form.py:201
-#: tryton/gui/window/view_form/view/screen_container.py:165
+#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:74
+#: tryton/gui/window/win_form.py:205
+#: tryton/gui/window/view_form/view/screen_container.py:163
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:128
 msgid "Previous"
 msgstr "Anterior"
 
-#: tryton/gui/window/form.py:40
+#: tryton/gui/window/form.py:42
 msgid "Previous Record"
 msgstr "Registre anterior"
 
-#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:81
-#: tryton/gui/window/win_form.py:215
-#: tryton/gui/window/view_form/view/screen_container.py:177
+#: tryton/gui/window/form.py:43 tryton/gui/window/tips.py:81
+#: tryton/gui/window/win_form.py:219
+#: tryton/gui/window/view_form/view/screen_container.py:175
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:142
 msgid "Next"
 msgstr "Següent"
 
-#: tryton/gui/window/form.py:41
+#: tryton/gui/window/form.py:43
 msgid "Next Record"
 msgstr "Registre següent"
 
-#: tryton/gui/window/form.py:44
+#: tryton/gui/window/form.py:46
 msgid "Attachment(0)"
 msgstr "Adjunt(0)"
 
-#: tryton/gui/window/form.py:45
+#: tryton/gui/window/form.py:47
 msgid "Add an attachment to the record"
 msgstr "Afegeix un adjunt al registre"
 
-#: tryton/gui/window/form.py:54
+#: tryton/gui/window/form.py:56
 msgid "_Duplicate"
 msgstr "_Duplica"
 
-#: tryton/gui/window/form.py:59
+#: tryton/gui/window/form.py:61
 msgid "_Previous"
 msgstr "_Anterior"
 
-#: tryton/gui/window/form.py:61
+#: tryton/gui/window/form.py:63
 msgid "_Next"
 msgstr "Seg_üent"
 
-#: tryton/gui/window/form.py:62
+#: tryton/gui/window/form.py:64
 msgid "_Search"
 msgstr "_Cerca"
 
-#: tryton/gui/window/form.py:63
+#: tryton/gui/window/form.py:65
 msgid "View _Logs..."
 msgstr "Veure _registre..."
 
-#: tryton/gui/window/form.py:68
+#: tryton/gui/window/form.py:66
+msgid "Show revisions..."
+msgstr "Mostra revisions..."
+
+#: tryton/gui/window/form.py:71
 msgid "A_ttachments..."
 msgstr "Adjun_ts..."
 
-#: tryton/gui/window/form.py:70
+#: tryton/gui/window/form.py:73
 msgid "_Actions..."
 msgstr "_Accions..."
 
-#: tryton/gui/window/form.py:72
+#: tryton/gui/window/form.py:75
 msgid "_Relate..."
 msgstr "_Relacionat..."
 
-#: tryton/gui/window/form.py:75
+#: tryton/gui/window/form.py:78
 msgid "_Report..."
 msgstr "_Informes..."
 
-#: tryton/gui/window/form.py:77
+#: tryton/gui/window/form.py:80
 msgid "_E-Mail..."
 msgstr "_Correu electrònic..."
 
-#: tryton/gui/window/form.py:79
+#: tryton/gui/window/form.py:82
 msgid "_Print..."
 msgstr "Im_primeix..."
 
-#: tryton/gui/window/form.py:82
+#: tryton/gui/window/form.py:85
 msgid "_Export Data..."
 msgstr "_Exporta dades..."
 
-#: tryton/gui/window/form.py:84
+#: tryton/gui/window/form.py:87
 msgid "_Import Data..."
 msgstr "_Importa dades..."
 
-#: tryton/gui/window/form.py:219
+#: tryton/gui/window/form.py:216
 #, python-format
 msgid "Attachment(%d)"
 msgstr "Adjunt(%d)"
 
-#: tryton/gui/window/form.py:237
+#: tryton/gui/window/form.py:234
 msgid "You have to select one record!"
 msgstr "Heu de triar un registre."
 
-#: tryton/gui/window/form.py:241
+#: tryton/gui/window/form.py:238
 msgid "ID:"
 msgstr "ID:"
 
-#: tryton/gui/window/form.py:242
+#: tryton/gui/window/form.py:239
 msgid "Creation User:"
 msgstr "Creat per:"
 
-#: tryton/gui/window/form.py:243
+#: tryton/gui/window/form.py:240
 msgid "Creation Date:"
 msgstr "Data de creació:"
 
-#: tryton/gui/window/form.py:244
+#: tryton/gui/window/form.py:241
 msgid "Latest Modification by:"
 msgstr "Última modificació per:"
 
-#: tryton/gui/window/form.py:245
+#: tryton/gui/window/form.py:242
 msgid "Latest Modification Date:"
 msgstr "Última data de modificació:"
 
-#: tryton/gui/window/form.py:263
+#: tryton/gui/window/form.py:260
 msgid "Model:"
 msgstr "Model:"
 
-#: tryton/gui/window/form.py:271
+#: tryton/gui/window/form.py:304
 msgid "Are you sure to remove this record?"
 msgstr "Esteu segur que voleu eliminar aquest registre?"
 
-#: tryton/gui/window/form.py:273
+#: tryton/gui/window/form.py:306
 msgid "Are you sure to remove those records?"
 msgstr "Esteu segur que voleu eliminar aquests registres?"
 
-#: tryton/gui/window/form.py:276
+#: tryton/gui/window/form.py:309
 msgid "Records not removed!"
 msgstr "Els registres no s'han eliminat."
 
-#: tryton/gui/window/form.py:278
+#: tryton/gui/window/form.py:311
 msgid "Records removed!"
 msgstr "Registres eliminats."
 
-#: tryton/gui/window/form.py:318
+#: tryton/gui/window/form.py:345
 msgid "Working now on the duplicated record(s)!"
 msgstr "Ara esteu treballant en el registre duplicat."
 
-#: tryton/gui/window/form.py:325
+#: tryton/gui/window/form.py:352
 msgid "Record saved!"
 msgstr "Registre desat."
 
-#: tryton/gui/window/form.py:328
+#: tryton/gui/window/form.py:355
 msgid "Invalid form!"
 msgstr "Formulari incorrecte."
 
-#: tryton/gui/window/form.py:436
+#: tryton/gui/window/form.py:462
 msgid " of "
 msgstr " de "
 
-#: tryton/gui/window/form.py:457
+#: tryton/gui/window/form.py:483
 msgid ""
 "This record has been modified\n"
 "do you want to save it ?"
@@ -1255,46 +1264,52 @@ msgstr ""
 "Aquest registre ha estat modificat.\n"
 "Voleu desar-lo?"
 
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
 msgid "Action"
 msgstr "Acció"
 
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
 msgid "Launch action"
 msgstr "Executa acció"
 
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
 msgid "Relate"
 msgstr "_Relacionat"
 
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
 msgid "Open related records"
 msgstr "Obre registres relacionats"
 
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
 msgid "Report"
 msgstr "Informes"
 
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
 msgid "Open report"
 msgstr "Obre informe"
 
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
 msgid "E-Mail"
-msgstr "Email"
+msgstr "Correu electrònic"
 
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
 msgid "E-Mail report"
 msgstr "Informe per email"
 
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
 msgid "Print"
 msgstr "Imprimeix"
 
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
 msgid "Print report"
 msgstr "Imprimeix informe"
 
+#: tryton/gui/window/form.py:607
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:257
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:1050
+msgid "Unknown"
+msgstr "Desconegut"
+
 #: tryton/gui/window/limit.py:17
 msgid "Limit"
 msgstr "Límit"
@@ -1323,6 +1338,18 @@ msgstr "Preferències"
 msgid "Current Password:"
 msgstr "Contrasenya actual:"
 
+#: tryton/gui/window/revision.py:20
+msgid "Revision"
+msgstr "Revisió"
+
+#: tryton/gui/window/revision.py:29
+msgid "Select a revision"
+msgstr "Seleccioneu una revisió"
+
+#: tryton/gui/window/revision.py:32
+msgid "Revision:"
+msgstr "Revisió:"
+
 #: tryton/gui/window/shortcuts.py:17
 msgid "Keyboard Shortcuts"
 msgstr "Combinacions de tecles"
@@ -1501,21 +1528,21 @@ msgstr "Afegeix noms de _camp"
 msgid "Name"
 msgstr "Nom"
 
-#: tryton/gui/window/win_export.py:306
+#: tryton/gui/window/win_export.py:309
 msgid "What is the name of this export?"
 msgstr "Quin és el nom d'aquesta exportació?"
 
-#: tryton/gui/window/win_export.py:429
+#: tryton/gui/window/win_export.py:436
 #, python-format
 msgid "%d record saved!"
 msgstr "S'ha desat %d registre."
 
-#: tryton/gui/window/win_export.py:431
+#: tryton/gui/window/win_export.py:438
 #, python-format
 msgid "%d records saved!"
 msgstr "S'han desat %d registres."
 
-#: tryton/gui/window/win_export.py:434
+#: tryton/gui/window/win_export.py:441
 #, python-format
 msgid ""
 "Operation failed!\n"
@@ -1530,26 +1557,26 @@ msgstr ""
 msgid "Link"
 msgstr "Enllaç"
 
-#: tryton/gui/window/win_form.py:134
+#: tryton/gui/window/win_form.py:136
 msgid "Add"
 msgstr "Afegeix"
 
-#: tryton/gui/window/win_form.py:147
+#: tryton/gui/window/win_form.py:149
 msgid "Remove <Del>"
 msgstr "Elimina <Supr>"
 
-#: tryton/gui/window/win_form.py:162
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:73
+#: tryton/gui/window/win_form.py:164
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:75
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:86
 msgid "Create a new record <F3>"
 msgstr "Crea un nou registre <F3>"
 
-#: tryton/gui/window/win_form.py:174
+#: tryton/gui/window/win_form.py:176
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:106
 msgid "Delete selected record <Del>"
 msgstr "Elimina el registre seleccionat <Supr>"
 
-#: tryton/gui/window/win_form.py:188
+#: tryton/gui/window/win_form.py:190
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:116
 msgid "Undelete selected record <Ins>"
 msgstr "Recupera el registre seleccionat <Ins>"
@@ -1572,10 +1599,10 @@ msgstr "Fitxer a importar:"
 
 #: tryton/gui/window/win_import.py:111
 #: tryton/gui/window/view_form/view/form_gtk/binary.py:57
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:111
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:118
 #: tryton/gui/window/view_form/view/form_gtk/image.py:62
 #: tryton/gui/window/view_form/view/form_gtk/image.py:131
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:624
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:650
 msgid "Open..."
 msgstr "Obre..."
 
@@ -1599,19 +1626,19 @@ msgstr "Codificació:"
 msgid "Lines to Skip:"
 msgstr "Línies a ometre:"
 
-#: tryton/gui/window/win_import.py:184 tryton/gui/window/win_import.py:189
+#: tryton/gui/window/win_import.py:185 tryton/gui/window/win_import.py:190
 msgid "Field name"
 msgstr "Nom del camp"
 
-#: tryton/gui/window/win_import.py:249
+#: tryton/gui/window/win_import.py:251
 msgid "You must select an import file first!"
 msgstr "Primer heu de triar un fitxer a importar."
 
-#: tryton/gui/window/win_import.py:260
+#: tryton/gui/window/win_import.py:262
 msgid "Error opening CSV file"
 msgstr "Error a l'obrir el fitxer CSV"
 
-#: tryton/gui/window/win_import.py:287
+#: tryton/gui/window/win_import.py:289
 #, python-format
 msgid "Error processing the file at field %s."
 msgstr "S'ha produït un error en processar el fitxer en el camp %s."
@@ -1626,24 +1653,7 @@ msgstr "S'ha importat %d registre."
 msgid "%d records imported!"
 msgstr "S'han importat %d registres."
 
-#: tryton/gui/window/win_import.py:371
-msgid "Importation Error!"
-msgstr "Error d'importació."
-
-#: tryton/gui/window/win_import.py:372
-#, python-format
-msgid ""
-"Error importing record %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-msgstr ""
-"Error important registre %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-
-#: tryton/gui/window/wizard.py:291
+#: tryton/gui/window/wizard.py:286
 msgid "Wizard"
 msgstr "Assistent"
 
@@ -1652,39 +1662,35 @@ msgstr "Assistent"
 msgid "No String Attr."
 msgstr "No té una cadena com atribut."
 
-#: tryton/gui/window/view_form/screen/screen.py:135
+#: tryton/gui/window/view_form/screen/screen.py:129
 msgid "ID"
 msgstr "ID"
 
-#: tryton/gui/window/view_form/screen/screen.py:136
+#: tryton/gui/window/view_form/screen/screen.py:130
 msgid "Creation User"
 msgstr "Creat per"
 
-#: tryton/gui/window/view_form/screen/screen.py:137
+#: tryton/gui/window/view_form/screen/screen.py:131
 msgid "Creation Date"
 msgstr "Data de creació"
 
-#: tryton/gui/window/view_form/screen/screen.py:138
+#: tryton/gui/window/view_form/screen/screen.py:132
 msgid "Modification User"
 msgstr "Modificat per"
 
-#: tryton/gui/window/view_form/screen/screen.py:139
+#: tryton/gui/window/view_form/screen/screen.py:133
 msgid "Modification Date"
 msgstr "Data de modificació"
 
-#: tryton/gui/window/view_form/screen/screen.py:634
+#: tryton/gui/window/view_form/screen/screen.py:631
 msgid "Unable to get view tree state"
 msgstr "No s'ha pogut obtenir l'estat de la vista d'arbre"
 
-#: tryton/gui/window/view_form/screen/screen.py:671
+#: tryton/gui/window/view_form/screen/screen.py:668
 msgid "Unable to set view tree state"
 msgstr "No s'ha pogut desar l'estat de la vista d'arbre"
 
-#: tryton/gui/window/view_form/view/list.py:651
-msgid "You must select a record to use the relation!"
-msgstr "Heu de seleccionar un registre per usar la relació."
-
-#: tryton/gui/window/view_form/view/screen_container.py:25
+#: tryton/gui/window/view_form/view/screen_container.py:23
 msgid ".."
 msgstr ".."
 
@@ -1692,19 +1698,19 @@ msgstr ".."
 msgid "F_ilters"
 msgstr "F_iltres"
 
-#: tryton/gui/window/view_form/view/screen_container.py:149
+#: tryton/gui/window/view_form/view/screen_container.py:147
 msgid "Show bookmarks of filters"
 msgstr "Mostra les cerques preferides"
 
-#: tryton/gui/window/view_form/view/screen_container.py:314
+#: tryton/gui/window/view_form/view/screen_container.py:312
 msgid "Remove this bookmark"
 msgstr "Elimina de les cerques preferides"
 
-#: tryton/gui/window/view_form/view/screen_container.py:321
+#: tryton/gui/window/view_form/view/screen_container.py:319
 msgid "Bookmark this filter"
 msgstr "Desa com a cerca preferida"
 
-#: tryton/gui/window/view_form/view/screen_container.py:380
+#: tryton/gui/window/view_form/view/screen_container.py:384
 msgid "Bookmark Name:"
 msgstr "Nom de la cerca preferida:"
 
@@ -1732,24 +1738,24 @@ msgstr "Setmana"
 msgid "Select a File..."
 msgstr "Selecciona un fitxer..."
 
-#: tryton/gui/window/view_form/view/form_gtk/char.py:157
+#: tryton/gui/window/view_form/view/form_gtk/char.py:161
 msgid "Show plain text"
 msgstr "Mostra com a text pla"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:349
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:348
 msgid "Add value"
 msgstr "Afegeix un valor"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:459
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:461
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:199
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:201
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:458
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:460
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:202
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:204
 #: tryton/gui/window/view_form/view/form_gtk/parser.py:255
 #: tryton/gui/window/view_form/view/form_gtk/parser.py:259
 msgid ":"
 msgstr ":"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:471
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:470
 #, python-format
 msgid "Remove \"%s\""
 msgstr "Eliminar \"%s\""
@@ -1766,23 +1772,23 @@ msgstr "Tots els fitxers"
 msgid "Images"
 msgstr "Imatges"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:175
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:178
 msgid "Translation"
 msgstr "Traducció"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:231
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:234
 msgid "Edit"
 msgstr "Edita"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:236
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:239
 msgid "Fuzzy"
 msgstr "Dubtós"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:305
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:308
 msgid "You need to save the record before adding translations!"
 msgstr "Heu de desar el registre abans d'afegir traduccions."
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:316
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:319
 msgid "No other language available!"
 msgstr "No hi ha cap altre idioma disponible."
 
@@ -1795,12 +1801,12 @@ msgstr "Afegeix un registre existent"
 msgid "Remove selected record <Del>"
 msgstr "Elimina el registre seleccionat <Supr>"
 
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:74
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:351
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:76
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:356
 msgid "Open a record <F2>"
 msgstr "Obre el registre <F2>"
 
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:354
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:359
 msgid "Search a record <F2>"
 msgstr "Cerca un registre <F2>"
 
@@ -1846,7 +1852,7 @@ msgstr "Alinea la línia a la dreta"
 
 #: tryton/gui/window/view_form/view/form_gtk/richtextbox.py:167
 msgid "Justify of line to fill window"
-msgstr "Justifica la línia per omplenar la finestra"
+msgstr "Justifica la línia per emplenar la finestra"
 
 #: tryton/gui/window/view_form/view/form_gtk/richtextbox.py:169
 msgid "Change the foreground text"
@@ -1892,15 +1898,10 @@ msgstr "Imatge PNG (*.png)"
 msgid "Image size too large!"
 msgstr "La mida de la imatge és massa gran."
 
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:245
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:244
 msgid ": "
 msgstr ": "
 
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:258
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:1023
-msgid "Unknown"
-msgstr "Desconegut"
-
 #: tryton/plugins/translation/__init__.py:18
 msgid "Translate view"
 msgstr "Tradueix la vista"
diff --git a/share/locale/cs_CZ/LC_MESSAGES/tryton.mo b/share/locale/cs_CZ/LC_MESSAGES/tryton.mo
index d2d9305..abe3177 100644
Binary files a/share/locale/cs_CZ/LC_MESSAGES/tryton.mo and b/share/locale/cs_CZ/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/cs_CZ/LC_MESSAGES/tryton.po b/share/locale/cs_CZ/LC_MESSAGES/tryton.po
index ce7d7f1..9338785 100644
--- a/share/locale/cs_CZ/LC_MESSAGES/tryton.po
+++ b/share/locale/cs_CZ/LC_MESSAGES/tryton.po
@@ -3,7 +3,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version:  1.0\n"
 "Report-Msgid-Bugs-To: issue_tracker at tryton.org\n"
-"POT-Creation-Date: 2013-10-20 16:34+0200\n"
+"POT-Creation-Date: 2014-04-18 22:49+0200\n"
 "PO-Revision-Date: 2012-04-23 11:06+0200\n"
 "Last-Translator: Dan Horák <dan at danny.cz>\n"
 "Language-Team: Czech\n"
@@ -61,62 +61,62 @@ msgstr "Nelze zapsat konfigurační soubor %s!"
 msgid "Unable to set locale %s"
 msgstr "Nemohu nastavit lokalizaci %s"
 
-#: tryton/action/main.py:163
+#: tryton/action/main.py:171
 msgid "Select your action"
 msgstr "Vyberte akci"
 
-#: tryton/action/main.py:169
+#: tryton/action/main.py:177
 msgid "No action defined!"
 msgstr "Žádná akce není definována!"
 
-#: tryton/common/common.py:270
+#: tryton/common/common.py:284
 msgid "Tryton Connection"
 msgstr "Tryton spojení"
 
-#: tryton/common/common.py:281
+#: tryton/common/common.py:295
 msgid "Server:"
 msgstr "Server:"
 
-#: tryton/common/common.py:299 tryton/gui/window/dblogin.py:79
+#: tryton/common/common.py:313 tryton/gui/window/dblogin.py:79
 msgid "Port:"
 msgstr "Port:"
 
-#: tryton/common/common.py:369
+#: tryton/common/common.py:383
 msgid "Selection"
 msgstr "Výběr"
 
-#: tryton/common/common.py:378
+#: tryton/common/common.py:392
 msgid "Your selection:"
 msgstr "Váš výběr:"
 
-#: tryton/common/common.py:498 tryton/gui/main.py:1407
-#: tryton/gui/window/win_export.py:402
+#: tryton/common/common.py:528 tryton/gui/main.py:1420
+#: tryton/gui/window/win_export.py:409
 #: tryton/gui/window/view_form/view/form_gtk/binary.py:69
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:138
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:150
 #: tryton/gui/window/view_form/view/form_gtk/image.py:74
-#: tryton/gui/window/view_form/view/form_gtk/image.py:158
+#: tryton/gui/window/view_form/view/form_gtk/image.py:161
 #: tryton/gui/window/view_form/view/graph_gtk/parser.py:105
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:656
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:686
 msgid "Save As..."
 msgstr "Uložit jako..."
 
-#: tryton/common/common.py:649
+#: tryton/common/common.py:675
 msgid "Always ignore this warning."
 msgstr "zadejte alternativní konfigurační soubor"
 
-#: tryton/common/common.py:654
+#: tryton/common/common.py:680
 msgid "Do you want to proceed?"
 msgstr ""
 
-#: tryton/common/common.py:673
+#: tryton/common/common.py:699
 msgid "Confirmation"
 msgstr "Potvrzení"
 
-#: tryton/common/common.py:779 tryton/common/common.py:1083
+#: tryton/common/common.py:805 tryton/common/common.py:1114
 msgid "Concurrency Exception"
 msgstr "Výjimka při souběhu"
 
-#: tryton/common/common.py:793
+#: tryton/common/common.py:819
 #, fuzzy
 msgid ""
 "<b>Write Concurrency Warning:</b>\n"
@@ -135,50 +135,50 @@ msgstr ""
 "  - \"Porovnat\" pro zobrazení změněné verze,\n"
 "  - \"Přesto zapsat\" pro zapsání vaší verze."
 
-#: tryton/common/common.py:802
+#: tryton/common/common.py:828
 msgid "Compare"
 msgstr "Porovnat"
 
-#: tryton/common/common.py:807
+#: tryton/common/common.py:833
 msgid "Write Anyway"
 msgstr "Přesto zapsat"
 
-#: tryton/common/common.py:833 tryton/gui/window/win_export.py:435
-#: tryton/gui/window/win_import.py:260 tryton/gui/window/win_import.py:288
+#: tryton/common/common.py:859 tryton/gui/window/win_export.py:442
+#: tryton/gui/window/win_import.py:262 tryton/gui/window/win_import.py:290
 msgid "Error"
 msgstr "Chyba"
 
-#: tryton/common/common.py:837
+#: tryton/common/common.py:863
 msgid "Report Bug"
 msgstr "Nahlásit chybu"
 
-#: tryton/common/common.py:844
+#: tryton/common/common.py:870
 msgid "Application Error!"
 msgstr "Chyba aplikace!"
 
-#: tryton/common/common.py:867
+#: tryton/common/common.py:893
 msgid "Error: "
 msgstr "Chyba:"
 
-#: tryton/common/common.py:887
+#: tryton/common/common.py:913
 #, fuzzy, python-format
 msgid "To report bugs you must have an account on <u>%s</u>"
 msgstr "Pro hlášení chyb musíte mít účet na <u>%s</u>"
 
-#: tryton/common/common.py:917
+#: tryton/common/common.py:943
 msgid "Bug Tracker"
 msgstr "Sledování chyb"
 
-#: tryton/common/common.py:935
+#: tryton/common/common.py:961
 msgid "User:"
 msgstr "Uživatel:"
 
-#: tryton/common/common.py:943 tryton/common/common.py:1101
+#: tryton/common/common.py:969 tryton/common/common.py:1132
 #: tryton/gui/window/dblogin.py:462
 msgid "Password:"
 msgstr "Heslo:"
 
-#: tryton/common/common.py:993
+#: tryton/common/common.py:1024
 msgid ""
 "The same bug was already reported by another user.\n"
 "To keep you informed your username is added to the nosy-list of this issue"
@@ -186,11 +186,11 @@ msgstr ""
 "Ta samá chyba již byla nahlášena jiným uživatelem.\n"
 "Vaše uživatelské jméno bylo přidáno na její seznam."
 
-#: tryton/common/common.py:1004
+#: tryton/common/common.py:1035
 msgid "Created new bug with ID "
 msgstr "Založena nová chyba s ID"
 
-#: tryton/common/common.py:1012 tryton/gui/main.py:921
+#: tryton/common/common.py:1043 tryton/gui/main.py:928
 msgid ""
 "Connection error!\n"
 "Bad username or password!"
@@ -198,23 +198,23 @@ msgstr ""
 "Chyba při spojení!\n"
 "Špatné uživatelské jméno nebo heslo!"
 
-#: tryton/common/common.py:1017
+#: tryton/common/common.py:1048
 msgid "Exception:"
 msgstr "Výjimka:"
 
-#: tryton/common/common.py:1034
+#: tryton/common/common.py:1065
 msgid ""
 "The server fingerprint has changed since last connection!\n"
 "The application will stop connecting to this server until its fingerprint"
 " is fixed."
 msgstr ""
 
-#: tryton/common/common.py:1036
+#: tryton/common/common.py:1067
 msgid "Security risk!"
 msgstr ""
 
-#: tryton/common/common.py:1042 tryton/common/common.py:1108
-#: tryton/gui/main.py:918
+#: tryton/common/common.py:1073 tryton/common/common.py:1139
+#: tryton/gui/main.py:925
 msgid ""
 "Connection error!\n"
 "Unable to connect to the server!"
@@ -222,39 +222,39 @@ msgstr ""
 "Chyba spojení!\n"
 "Nelze se připojit k serveru!"
 
-#: tryton/common/common.py:1123
+#: tryton/common/common.py:1154
 msgid "Network Error!"
 msgstr "Chyba sítě!"
 
-#: tryton/common/common.py:1354
+#: tryton/common/common.py:1409
 msgid "Y"
 msgstr ""
 
-#: tryton/common/common.py:1355
+#: tryton/common/common.py:1410
 msgid "M"
 msgstr ""
 
-#: tryton/common/common.py:1356
+#: tryton/common/common.py:1411
 msgid "w"
 msgstr ""
 
-#: tryton/common/common.py:1357
+#: tryton/common/common.py:1412
 msgid "d"
 msgstr ""
 
-#: tryton/common/common.py:1358
+#: tryton/common/common.py:1413
 msgid "h"
 msgstr ""
 
-#: tryton/common/common.py:1359
+#: tryton/common/common.py:1414
 msgid "m"
 msgstr ""
 
-#: tryton/common/completion.py:22
+#: tryton/common/completion.py:21
 msgid "<i>Search...</i>"
 msgstr ""
 
-#: tryton/common/completion.py:23
+#: tryton/common/completion.py:22
 msgid "<i>Create...</i>"
 msgstr ""
 
@@ -263,274 +263,279 @@ msgstr ""
 msgid "Open the calendar <F2>"
 msgstr "Otevřít kalendář"
 
-#: tryton/common/date_widget.py:271
+#: tryton/common/date_widget.py:275
 msgid "Date Selection"
 msgstr "Výběr datumu"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "y"
 msgstr ""
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 #, fuzzy
 msgid "yes"
 msgstr "bajtů"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 #, fuzzy
 msgid "true"
 msgstr "Pravda"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "t"
 msgstr ""
 
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
 msgid "True"
 msgstr "Pravda"
 
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
 msgid "False"
 msgstr "Nepravda"
 
-#: tryton/common/popup_menu.py:71
+#: tryton/common/popup_menu.py:72
+#, fuzzy
+msgid "Edit..."
+msgstr "Konec..."
+
+#: tryton/common/popup_menu.py:77
 #, fuzzy
 msgid "Attachments..."
 msgstr "Příloha:"
 
-#: tryton/common/popup_menu.py:76
+#: tryton/common/popup_menu.py:87
 #, fuzzy
 msgid "Actions..."
 msgstr "Akce..."
 
-#: tryton/common/popup_menu.py:77
+#: tryton/common/popup_menu.py:88
 #, fuzzy
 msgid "Relate..."
 msgstr "_Odstranit..."
 
-#: tryton/common/popup_menu.py:78
+#: tryton/common/popup_menu.py:89
 #, fuzzy
 msgid "Report..."
 msgstr "Importovat data..."
 
-#: tryton/common/popup_menu.py:79
+#: tryton/common/popup_menu.py:90
 #, fuzzy
 msgid "E-Mail..."
 msgstr "_Email..."
 
-#: tryton/common/popup_menu.py:80
+#: tryton/common/popup_menu.py:91
 #, fuzzy
 msgid "Print..."
 msgstr "_Tisk..."
 
-#: tryton/gui/main.py:217
+#: tryton/gui/main.py:218
 msgid "_File"
 msgstr "_Soubor"
 
-#: tryton/gui/main.py:225
+#: tryton/gui/main.py:226
 msgid "_User"
 msgstr "_Uživatel"
 
-#: tryton/gui/main.py:239
+#: tryton/gui/main.py:240
 msgid "_Options"
 msgstr "_Volby"
 
-#: tryton/gui/main.py:247
+#: tryton/gui/main.py:248
 msgid "Fa_vorites"
 msgstr ""
 
-#: tryton/gui/main.py:263
+#: tryton/gui/main.py:264
 msgid "_Help"
 msgstr "Nápo_věda"
 
-#: tryton/gui/main.py:285 tryton/gui/window/win_search.py:26
+#: tryton/gui/main.py:286 tryton/gui/window/win_search.py:26
 #: tryton/gui/window/view_form/view/screen_container.py:100
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:333
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:332
 #: tryton/gui/window/view_form/view/form_gtk/many2many.py:40
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:45
 msgid "Search"
 msgstr "Hledat"
 
-#: tryton/gui/main.py:364
+#: tryton/gui/main.py:374
 msgid "No result found."
 msgstr ""
 
-#: tryton/gui/main.py:384
+#: tryton/gui/main.py:396
 msgid "_Connect..."
 msgstr "_Připojit..."
 
-#: tryton/gui/main.py:393
+#: tryton/gui/main.py:405
 msgid "_Disconnect"
 msgstr "_Odpojit"
 
-#: tryton/gui/main.py:403
+#: tryton/gui/main.py:415
 msgid "Data_base"
 msgstr "Databáze"
 
-#: tryton/gui/main.py:414
+#: tryton/gui/main.py:426
 msgid "_New Database..."
 msgstr "Nová databáze..."
 
-#: tryton/gui/main.py:423
+#: tryton/gui/main.py:435
 msgid "_Restore Database..."
 msgstr "Obnovit databázi..."
 
-#: tryton/gui/main.py:432
+#: tryton/gui/main.py:444
 msgid "_Backup Database..."
 msgstr "Zazálohovat databázi..."
 
-#: tryton/gui/main.py:441
+#: tryton/gui/main.py:453
 msgid "Dro_p Database..."
 msgstr "Smazat databázi"
 
-#: tryton/gui/main.py:450
+#: tryton/gui/main.py:462
 msgid "_Quit..."
 msgstr "Konec..."
 
-#: tryton/gui/main.py:465
+#: tryton/gui/main.py:477
 msgid "_Preferences..."
 msgstr "_Vlastnosti..."
 
-#: tryton/gui/main.py:476
+#: tryton/gui/main.py:488
 #, fuzzy
 msgid "_Menu Reload"
 msgstr "_Obnovit"
 
-#: tryton/gui/main.py:485
+#: tryton/gui/main.py:497
 msgid "_Menu Toggle"
 msgstr ""
 
-#: tryton/gui/main.py:492
+#: tryton/gui/main.py:504
 msgid "_Global Search"
 msgstr ""
 
-#: tryton/gui/main.py:507
+#: tryton/gui/main.py:519
 #, fuzzy
 msgid "_Toolbar"
 msgstr "Nástrojová lišta"
 
-#: tryton/gui/main.py:515
+#: tryton/gui/main.py:527
 msgid "_Default"
 msgstr "_Výchozí"
 
-#: tryton/gui/main.py:525
+#: tryton/gui/main.py:537
 msgid "_Text and Icons"
 msgstr "_Text a ikony"
 
-#: tryton/gui/main.py:535
+#: tryton/gui/main.py:547
 msgid "_Icons"
 msgstr "_Ikony"
 
-#: tryton/gui/main.py:544
+#: tryton/gui/main.py:556
 msgid "_Text"
 msgstr "_Text"
 
-#: tryton/gui/main.py:553
+#: tryton/gui/main.py:565
 msgid "_Menubar"
 msgstr "Hlavní nabídka"
 
-#: tryton/gui/main.py:561
+#: tryton/gui/main.py:573
 msgid "Change Accelerators"
 msgstr ""
 
-#: tryton/gui/main.py:569
+#: tryton/gui/main.py:581
 msgid "_Mode"
 msgstr "_Režim"
 
-#: tryton/gui/main.py:577
+#: tryton/gui/main.py:589
 msgid "_Normal"
 msgstr "_Normální"
 
-#: tryton/gui/main.py:585
+#: tryton/gui/main.py:597
 msgid "_PDA"
 msgstr "_PDA"
 
-#: tryton/gui/main.py:592
+#: tryton/gui/main.py:604
 msgid "_Form"
 msgstr "Formulář"
 
-#: tryton/gui/main.py:601
+#: tryton/gui/main.py:613
 msgid "Save Width/Height"
 msgstr ""
 
-#: tryton/gui/main.py:612
+#: tryton/gui/main.py:624
 msgid "Save Tree State"
 msgstr ""
 
-#: tryton/gui/main.py:624
+#: tryton/gui/main.py:636
 msgid "Spell Checking"
 msgstr "Kontrola pravopisu"
 
-#: tryton/gui/main.py:634
+#: tryton/gui/main.py:646
 msgid "Tabs Position"
 msgstr "Pozice záložek"
 
-#: tryton/gui/main.py:642
+#: tryton/gui/main.py:654
 msgid "Top"
 msgstr "Nahoře"
 
-#: tryton/gui/main.py:651
+#: tryton/gui/main.py:663
 msgid "Left"
 msgstr "Vlevo"
 
-#: tryton/gui/main.py:661
+#: tryton/gui/main.py:673
 msgid "Right"
 msgstr "Vpravo"
 
-#: tryton/gui/main.py:671
+#: tryton/gui/main.py:683
 msgid "Bottom"
 msgstr "Dole"
 
-#: tryton/gui/main.py:680
+#: tryton/gui/main.py:692
 #, fuzzy
 msgid "_Previous Tab"
 msgstr "_Předchozí"
 
-#: tryton/gui/main.py:686
+#: tryton/gui/main.py:698
 msgid "_Next Tab"
 msgstr ""
 
-#: tryton/gui/main.py:692
+#: tryton/gui/main.py:704
 msgid "Search Limit..."
 msgstr ""
 
-#: tryton/gui/main.py:698
+#: tryton/gui/main.py:710
 msgid "_Email..."
 msgstr "_Email..."
 
-#: tryton/gui/main.py:706
+#: tryton/gui/main.py:718
 msgid "_Save Options"
 msgstr "Uložit nastavení"
 
-#: tryton/gui/main.py:718
+#: tryton/gui/main.py:730
 msgid "_Tips..."
 msgstr "_Tipy..."
 
-#: tryton/gui/main.py:727
+#: tryton/gui/main.py:739
 msgid "_Keyboard Shortcuts..."
 msgstr "_Klávesové zkratky..."
 
-#: tryton/gui/main.py:736
+#: tryton/gui/main.py:748
 msgid "_About..."
 msgstr "_O programu..."
 
-#: tryton/gui/main.py:787
+#: tryton/gui/main.py:799
 msgid "Manage Favorites"
 msgstr ""
 
-#: tryton/gui/main.py:935
+#: tryton/gui/main.py:942
 msgid ""
 "The following action requires to close all tabs.\n"
 "Do you want to continue?"
 msgstr ""
 
-#: tryton/gui/main.py:1196
+#: tryton/gui/main.py:1206
 msgid "Close Tab"
 msgstr "Zavřít záložku"
 
-#: tryton/gui/main.py:1314
+#: tryton/gui/main.py:1327
 msgid ""
 "You are going to delete a Tryton database.\n"
 "Are you really sure to proceed?"
@@ -538,7 +543,7 @@ msgstr ""
 "Bude smazána Tryton databáze.\n"
 "Opravdu chcete pokračovat?"
 
-#: tryton/gui/main.py:1324
+#: tryton/gui/main.py:1337
 msgid ""
 "Wrong Tryton Server Password\n"
 "Please try again."
@@ -546,28 +551,28 @@ msgstr ""
 "Špatné heslo Tryton serveru\n"
 "Zkuste to znovu."
 
-#: tryton/gui/main.py:1326 tryton/gui/main.py:1362 tryton/gui/main.py:1398
-#: tryton/gui/window/dbcreate.py:382
+#: tryton/gui/main.py:1339 tryton/gui/main.py:1375 tryton/gui/main.py:1411
+#: tryton/gui/window/dbcreate.py:384
 msgid "Access denied!"
 msgstr "Přístup odepřen!"
 
-#: tryton/gui/main.py:1329
+#: tryton/gui/main.py:1342
 msgid "Database drop failed with error message:\n"
 msgstr "Odstranění databáze selhalo s chybovou zprávou:\n"
 
-#: tryton/gui/main.py:1330
+#: tryton/gui/main.py:1343
 msgid "Database drop failed!"
 msgstr "Odstranění databáze selhalo!"
 
-#: tryton/gui/main.py:1332
+#: tryton/gui/main.py:1345
 msgid "Database dropped successfully!"
 msgstr "Databáze úspěšné odstraněna!"
 
-#: tryton/gui/main.py:1337
+#: tryton/gui/main.py:1350
 msgid "Open Backup File to Restore..."
 msgstr "Otevřít soubor se zálohou pro obnovu..."
 
-#: tryton/gui/main.py:1354
+#: tryton/gui/main.py:1367
 msgid ""
 "It is not possible to restore a password protected database.\n"
 "Backup and restore needed to be proceed manual."
@@ -575,11 +580,11 @@ msgstr ""
 "Není možné obnovit databázi chráněnou heslem.\n"
 "Záloha a obnova musí být provedeny ručně."
 
-#: tryton/gui/main.py:1358 tryton/gui/main.py:1394
+#: tryton/gui/main.py:1371 tryton/gui/main.py:1407
 msgid "Database is password protected!"
 msgstr "Databáze je chráněna heslem!"
 
-#: tryton/gui/main.py:1360 tryton/gui/main.py:1396
+#: tryton/gui/main.py:1373 tryton/gui/main.py:1409
 msgid ""
 "Wrong Tryton Server Password.\n"
 "Please try again."
@@ -587,19 +592,19 @@ msgstr ""
 "Špatné heslo Tryton serveru\n"
 "Zkuste to znovu."
 
-#: tryton/gui/main.py:1365
+#: tryton/gui/main.py:1378
 msgid "Database restore failed with error message:\n"
 msgstr "Obnovení databáze selhalo s chybovou zprávou:\n"
 
-#: tryton/gui/main.py:1367 tryton/gui/main.py:1372
+#: tryton/gui/main.py:1380 tryton/gui/main.py:1385
 msgid "Database restore failed!"
 msgstr "Obnova databáze selhala!"
 
-#: tryton/gui/main.py:1370
+#: tryton/gui/main.py:1383
 msgid "Database restored successfully!"
 msgstr "Databáze úspěšně obnovena!"
 
-#: tryton/gui/main.py:1391
+#: tryton/gui/main.py:1404
 msgid ""
 "It is not possible to dump a password protected Database.\n"
 "Backup and restore needed to be proceed manual."
@@ -607,76 +612,76 @@ msgstr ""
 "Není možné zálohovat databázi chráněnou heslem.\n"
 "Záloha a obnova musí být provedeny ručně."
 
-#: tryton/gui/main.py:1401
+#: tryton/gui/main.py:1414
 msgid "Database dump failed with error message:\n"
 msgstr "Záloha databáze selhala s chybovou zprávou:\n"
 
-#: tryton/gui/main.py:1403
+#: tryton/gui/main.py:1416
 msgid "Database dump failed!"
 msgstr "Záloha databáze selhala!"
 
-#: tryton/gui/main.py:1414
+#: tryton/gui/main.py:1427
 msgid "Database backuped successfully!"
 msgstr "Databáze úspěšně zazálohována!"
 
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
 msgid "New"
 msgstr ""
 
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
 msgid "Create a new record"
 msgstr "Vytvořit nový záznam"
 
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
 #: tryton/gui/window/win_export.py:142
 #, fuzzy
 msgid "Save"
 msgstr "_Uložit"
 
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
 msgid "Save this record"
 msgstr "Uložit tento záznam"
 
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
-#: tryton/gui/window/win_form.py:228
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
+#: tryton/gui/window/win_form.py:232
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:154
 msgid "Switch"
 msgstr "Přepnout"
 
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
 msgid "Switch view"
 msgstr "Přepnout pohled"
 
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
 msgid "_Reload"
 msgstr "_Obnovit"
 
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
 msgid "Reload"
 msgstr "Obnovit"
 
-#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:48
+#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:50
 msgid "_New"
 msgstr "_Nový"
 
-#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:49
-#: tryton/gui/window/win_form.py:66
+#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:51
+#: tryton/gui/window/win_form.py:67
 msgid "_Save"
 msgstr "_Uložit"
 
-#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:50
+#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:52
 msgid "_Switch View"
 msgstr "Přepnout pohled"
 
-#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:52
+#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:54
 msgid "_Reload/Undo"
 msgstr "Obnovit/Zpět"
 
-#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:56
+#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:58
 msgid "_Delete..."
 msgstr "_Odstranit..."
 
-#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:65
+#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:68
 msgid "_Close Tab"
 msgstr "_Zavřít kartu"
 
@@ -712,28 +717,28 @@ msgstr ""
 "port (obvykle 8070) serveru nejsou blokovány.\n"
 "Klikněte na \"Změnit\" pro změnu adresy."
 
-#: tryton/gui/window/dbcreate.py:137
+#: tryton/gui/window/dbcreate.py:139
 msgid "Create new database"
 msgstr "Vytvořit novou databázi"
 
-#: tryton/gui/window/dbcreate.py:147
+#: tryton/gui/window/dbcreate.py:149
 msgid "C_reate"
 msgstr "_Vytvořit"
 
-#: tryton/gui/window/dbcreate.py:155
+#: tryton/gui/window/dbcreate.py:157
 msgid "Create the new database."
 msgstr "Vytvořit novou databázi."
 
-#: tryton/gui/window/dbcreate.py:166
+#: tryton/gui/window/dbcreate.py:168
 msgid "Server Setup:"
 msgstr "Nastavení serveru:"
 
-#: tryton/gui/window/dbcreate.py:171
+#: tryton/gui/window/dbcreate.py:173
 msgid "Server connection:"
 msgstr "Spojení k serveru:"
 
-#: tryton/gui/window/dbcreate.py:180 tryton/gui/window/dbdumpdrop.py:140
-#: tryton/gui/window/dbrestore.py:86
+#: tryton/gui/window/dbcreate.py:182 tryton/gui/window/dbdumpdrop.py:140
+#: tryton/gui/window/dbrestore.py:88
 #, fuzzy
 msgid ""
 "This is the URL of the server. Use server 'localhost' and port '8000' if "
@@ -744,22 +749,22 @@ msgstr ""
 "pokud je server nainstalován na tomto počítači. Klikněte na \"Změnit\" "
 "pro změnu adresy."
 
-#: tryton/gui/window/dbcreate.py:183 tryton/gui/window/dbdumpdrop.py:147
-#: tryton/gui/window/dbrestore.py:91
+#: tryton/gui/window/dbcreate.py:185 tryton/gui/window/dbdumpdrop.py:147
+#: tryton/gui/window/dbrestore.py:93
 msgid "C_hange"
 msgstr "Změnit"
 
-#: tryton/gui/window/dbcreate.py:192 tryton/gui/window/dbrestore.py:97
+#: tryton/gui/window/dbcreate.py:194 tryton/gui/window/dbrestore.py:99
 msgid "Setup the server connection..."
 msgstr "Nastavení spojení k serveru..."
 
-#: tryton/gui/window/dbcreate.py:195 tryton/gui/window/dbdumpdrop.py:186
-#: tryton/gui/window/dbrestore.py:100
+#: tryton/gui/window/dbcreate.py:197 tryton/gui/window/dbdumpdrop.py:186
+#: tryton/gui/window/dbrestore.py:102
 msgid "Tryton Server Password:"
 msgstr "Heslo pro Tryton server:"
 
-#: tryton/gui/window/dbcreate.py:205 tryton/gui/window/dbdumpdrop.py:196
-#: tryton/gui/window/dbrestore.py:109
+#: tryton/gui/window/dbcreate.py:207 tryton/gui/window/dbdumpdrop.py:196
+#: tryton/gui/window/dbrestore.py:111
 msgid ""
 "This is the password of the Tryton server. It doesn't belong to a real "
 "user. This password is usually defined in the trytond configuration."
@@ -767,15 +772,15 @@ msgstr ""
 "Toto je heslo pro Tryton server. Nepatří žádnému skutečnému uživateli. "
 "Toto heslo je obvykle definováno v konfiguračním souboru serveru."
 
-#: tryton/gui/window/dbcreate.py:216
+#: tryton/gui/window/dbcreate.py:218
 msgid "New database setup:"
 msgstr "Nastavení nové databáze:"
 
-#: tryton/gui/window/dbcreate.py:222
+#: tryton/gui/window/dbcreate.py:224
 msgid "Database name:"
 msgstr "Název databáze:"
 
-#: tryton/gui/window/dbcreate.py:234
+#: tryton/gui/window/dbcreate.py:236
 msgid ""
 "Choose the name of the new database.\n"
 "Allowed characters are alphanumerical or _ (underscore)\n"
@@ -787,11 +792,11 @@ msgstr ""
 "Nepoužívejte znaky s akcenty, mezeru nebo speciální znaky!\n"
 "Příklad: tryton"
 
-#: tryton/gui/window/dbcreate.py:241
+#: tryton/gui/window/dbcreate.py:243
 msgid "Default language:"
 msgstr "Výchozí jazyk:"
 
-#: tryton/gui/window/dbcreate.py:251
+#: tryton/gui/window/dbcreate.py:253
 msgid ""
 "Choose the default language that will be installed for this database. You"
 " will be able to install new languages after installation through the "
@@ -801,11 +806,11 @@ msgstr ""
 "instalaci budete schopni instalovat další jazyky pomocí administračního "
 "menu."
 
-#: tryton/gui/window/dbcreate.py:255
+#: tryton/gui/window/dbcreate.py:257
 msgid "Admin password:"
 msgstr "Heslo správce:"
 
-#: tryton/gui/window/dbcreate.py:265
+#: tryton/gui/window/dbcreate.py:267
 msgid ""
 "Choose a password for the admin user of the new database. With these "
 "credentials you will be later able to login into the database:\n"
@@ -817,15 +822,15 @@ msgstr ""
 "Uživatel: admin\n"
 "Heslo: <právě zadané heslo>"
 
-#: tryton/gui/window/dbcreate.py:273
+#: tryton/gui/window/dbcreate.py:275
 msgid "Confirm admin password:"
 msgstr "Potvrzení hesla správce:"
 
-#: tryton/gui/window/dbcreate.py:282
+#: tryton/gui/window/dbcreate.py:284
 msgid "Type the Admin password again"
 msgstr "Zadejte znovu heslo správce"
 
-#: tryton/gui/window/dbcreate.py:330
+#: tryton/gui/window/dbcreate.py:332
 #, fuzzy
 msgid ""
 "The database name is restricted to alpha-nummerical characters and \"_\" "
@@ -835,27 +840,27 @@ msgstr ""
 "začínat písmenem a být maximálně 63 znaků dlouhý.\n"
 "Nepoužívejte znaky s akcenty, mezeru nebo jiné speciální znaky."
 
-#: tryton/gui/window/dbcreate.py:335
+#: tryton/gui/window/dbcreate.py:337
 msgid "Wrong characters in database name!"
 msgstr "Neplatný znak v názvu databáze!"
 
-#: tryton/gui/window/dbcreate.py:339
+#: tryton/gui/window/dbcreate.py:341
 msgid "The new admin password doesn't match the confirmation field.\n"
 msgstr "Heslo správce a jeho zopakování nejsou shodné.\n"
 
-#: tryton/gui/window/dbcreate.py:341
+#: tryton/gui/window/dbcreate.py:343
 msgid "Passwords doesn't match!"
 msgstr "Hesla nesouhlasí!"
 
-#: tryton/gui/window/dbcreate.py:344
+#: tryton/gui/window/dbcreate.py:346
 msgid "Admin password and confirmation are required to create a new database."
 msgstr "Heslo správce a jeho zopakování jsou nutné pro vytvoření nové databáze."
 
-#: tryton/gui/window/dbcreate.py:346
+#: tryton/gui/window/dbcreate.py:348
 msgid "Missing admin password!"
 msgstr "Chybí heslo administrátora!"
 
-#: tryton/gui/window/dbcreate.py:361
+#: tryton/gui/window/dbcreate.py:363
 msgid ""
 "A database with the same name already exists.\n"
 "Try another database name."
@@ -863,15 +868,15 @@ msgstr ""
 "Databáze se stejným názvem již existuje.\n"
 "Použijte jiný název."
 
-#: tryton/gui/window/dbcreate.py:364
+#: tryton/gui/window/dbcreate.py:366
 msgid "This database name already exist!"
 msgstr "Databáze s tímto názvem již existuje!"
 
-#: tryton/gui/window/dbcreate.py:379
+#: tryton/gui/window/dbcreate.py:381
 msgid "Sorry, wrong password for the Tryton server. Please try again."
 msgstr "Zadali jste špatné heslo pro Tryton server. Zkuste to znovu."
 
-#: tryton/gui/window/dbcreate.py:387
+#: tryton/gui/window/dbcreate.py:389
 msgid ""
 "Can't create the database, caused by an unknown reason.\n"
 "If there is a database created, it could be broken. Maybe drop this "
@@ -883,7 +888,7 @@ msgstr ""
 " Zkontrolujte chybové hlášení pro případné další informace.\n"
 "Chybová zpráva:\n"
 
-#: tryton/gui/window/dbcreate.py:395
+#: tryton/gui/window/dbcreate.py:397
 msgid "Error creating database!"
 msgstr "Chyba při vytváření databáze!"
 
@@ -931,7 +936,7 @@ msgstr "Smazat vybranou databázi."
 msgid "Choose a Tryton database to delete:"
 msgstr "Vyberte Tryton databázi pro smazání:"
 
-#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:75
+#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:77
 msgid "Server Connection:"
 msgstr "Přepojení k serveru:"
 
@@ -1029,15 +1034,15 @@ msgstr "Port:"
 msgid "User name:"
 msgstr "Uživatelské jméno:"
 
-#: tryton/gui/window/dbrestore.py:64
+#: tryton/gui/window/dbrestore.py:66
 msgid "Restore Database"
 msgstr "Obnovit databázi"
 
-#: tryton/gui/window/dbrestore.py:117
+#: tryton/gui/window/dbrestore.py:119
 msgid "File to Restore:"
 msgstr "Obnovit ze souboru:"
 
-#: tryton/gui/window/dbrestore.py:131
+#: tryton/gui/window/dbrestore.py:133
 msgid ""
 "Choose the name of the database to be restored.\n"
 "Allowed characters are alphanumerical or _ (underscore)\n"
@@ -1049,26 +1054,26 @@ msgstr ""
 "Nepoužívejte znaky s akcenty, mezeru nebo speciální znaky!\n"
 "Příklad: tryton"
 
-#: tryton/gui/window/dbrestore.py:137
+#: tryton/gui/window/dbrestore.py:139
 msgid "New Database Name:"
 msgstr "Název nové databáze:"
 
-#: tryton/gui/window/dbrestore.py:140
+#: tryton/gui/window/dbrestore.py:142
 #, fuzzy
 msgid "Update Database:"
 msgstr "Zálohovat databázi"
 
-#: tryton/gui/window/dbrestore.py:144
+#: tryton/gui/window/dbrestore.py:146
 msgid ""
 "Check for an automatic database update after restoring a database from a "
 "previous Tryton version."
 msgstr ""
 
-#: tryton/gui/window/dbrestore.py:154
+#: tryton/gui/window/dbrestore.py:156
 msgid "Restore"
 msgstr "Obnovit"
 
-#: tryton/gui/window/dbrestore.py:163
+#: tryton/gui/window/dbrestore.py:165
 msgid "Restore the database from file."
 msgstr "Obnovit databázi ze souboru."
 
@@ -1108,159 +1113,163 @@ msgstr "Tělo:"
 msgid "Attachment:"
 msgstr "Příloha:"
 
-#: tryton/gui/window/form.py:39 tryton/gui/window/tips.py:74
-#: tryton/gui/window/win_form.py:201
-#: tryton/gui/window/view_form/view/screen_container.py:165
+#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:74
+#: tryton/gui/window/win_form.py:205
+#: tryton/gui/window/view_form/view/screen_container.py:163
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:128
 msgid "Previous"
 msgstr "Předchozí"
 
-#: tryton/gui/window/form.py:40
+#: tryton/gui/window/form.py:42
 msgid "Previous Record"
 msgstr "Předchozí záznam"
 
-#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:81
-#: tryton/gui/window/win_form.py:215
-#: tryton/gui/window/view_form/view/screen_container.py:177
+#: tryton/gui/window/form.py:43 tryton/gui/window/tips.py:81
+#: tryton/gui/window/win_form.py:219
+#: tryton/gui/window/view_form/view/screen_container.py:175
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:142
 msgid "Next"
 msgstr "Další"
 
-#: tryton/gui/window/form.py:41
+#: tryton/gui/window/form.py:43
 msgid "Next Record"
 msgstr "Následující záznam"
 
-#: tryton/gui/window/form.py:44
+#: tryton/gui/window/form.py:46
 msgid "Attachment(0)"
 msgstr "Přílohy(0)"
 
-#: tryton/gui/window/form.py:45
+#: tryton/gui/window/form.py:47
 msgid "Add an attachment to the record"
 msgstr "Přidat přílohu k záznamu"
 
-#: tryton/gui/window/form.py:54
+#: tryton/gui/window/form.py:56
 msgid "_Duplicate"
 msgstr "_Duplikovat"
 
-#: tryton/gui/window/form.py:59
+#: tryton/gui/window/form.py:61
 msgid "_Previous"
 msgstr "_Předchozí"
 
-#: tryton/gui/window/form.py:61
+#: tryton/gui/window/form.py:63
 msgid "_Next"
 msgstr "_Následující"
 
-#: tryton/gui/window/form.py:62
+#: tryton/gui/window/form.py:64
 #, fuzzy
 msgid "_Search"
 msgstr "Hledat"
 
-#: tryton/gui/window/form.py:63
+#: tryton/gui/window/form.py:65
 msgid "View _Logs..."
 msgstr "Zobrazit záznamy..."
 
-#: tryton/gui/window/form.py:68
+#: tryton/gui/window/form.py:66
+msgid "Show revisions..."
+msgstr ""
+
+#: tryton/gui/window/form.py:71
 #, fuzzy
 msgid "A_ttachments..."
 msgstr "Příloha:"
 
-#: tryton/gui/window/form.py:70
+#: tryton/gui/window/form.py:73
 msgid "_Actions..."
 msgstr "Akce..."
 
-#: tryton/gui/window/form.py:72
+#: tryton/gui/window/form.py:75
 #, fuzzy
 msgid "_Relate..."
 msgstr "_Odstranit..."
 
-#: tryton/gui/window/form.py:75
+#: tryton/gui/window/form.py:78
 #, fuzzy
 msgid "_Report..."
 msgstr "Importovat data..."
 
-#: tryton/gui/window/form.py:77
+#: tryton/gui/window/form.py:80
 #, fuzzy
 msgid "_E-Mail..."
 msgstr "_Email..."
 
-#: tryton/gui/window/form.py:79
+#: tryton/gui/window/form.py:82
 msgid "_Print..."
 msgstr "_Tisk..."
 
-#: tryton/gui/window/form.py:82
+#: tryton/gui/window/form.py:85
 msgid "_Export Data..."
 msgstr "Exportovat data"
 
-#: tryton/gui/window/form.py:84
+#: tryton/gui/window/form.py:87
 msgid "_Import Data..."
 msgstr "Importovat data..."
 
-#: tryton/gui/window/form.py:219
+#: tryton/gui/window/form.py:216
 #, python-format
 msgid "Attachment(%d)"
 msgstr "Příloha(%d)"
 
-#: tryton/gui/window/form.py:237
+#: tryton/gui/window/form.py:234
 msgid "You have to select one record!"
 msgstr "Musíte vybrat právě jeden záznam!"
 
-#: tryton/gui/window/form.py:241
+#: tryton/gui/window/form.py:238
 msgid "ID:"
 msgstr "ID:"
 
-#: tryton/gui/window/form.py:242
+#: tryton/gui/window/form.py:239
 msgid "Creation User:"
 msgstr "Vytvořeno uživatelem:"
 
-#: tryton/gui/window/form.py:243
+#: tryton/gui/window/form.py:240
 msgid "Creation Date:"
 msgstr "Datum vytvoření:"
 
-#: tryton/gui/window/form.py:244
+#: tryton/gui/window/form.py:241
 msgid "Latest Modification by:"
 msgstr "Poslední úpravu provedl:"
 
-#: tryton/gui/window/form.py:245
+#: tryton/gui/window/form.py:242
 msgid "Latest Modification Date:"
 msgstr "Datum poslední úpravy:"
 
-#: tryton/gui/window/form.py:263
+#: tryton/gui/window/form.py:260
 msgid "Model:"
 msgstr "Model:"
 
-#: tryton/gui/window/form.py:271
+#: tryton/gui/window/form.py:304
 msgid "Are you sure to remove this record?"
 msgstr "Opravdu chcete odstranit tento záznam?"
 
-#: tryton/gui/window/form.py:273
+#: tryton/gui/window/form.py:306
 msgid "Are you sure to remove those records?"
 msgstr "Opravdu chcete odstranit tyto záznamy?"
 
-#: tryton/gui/window/form.py:276
+#: tryton/gui/window/form.py:309
 msgid "Records not removed!"
 msgstr "Záznamy neodstraněny!"
 
-#: tryton/gui/window/form.py:278
+#: tryton/gui/window/form.py:311
 msgid "Records removed!"
 msgstr "Záznamy odstraněny!"
 
-#: tryton/gui/window/form.py:318
+#: tryton/gui/window/form.py:345
 msgid "Working now on the duplicated record(s)!"
 msgstr "Nyní pracujete s duplicitním záznamem!"
 
-#: tryton/gui/window/form.py:325
+#: tryton/gui/window/form.py:352
 msgid "Record saved!"
 msgstr "Záznam uložen!"
 
-#: tryton/gui/window/form.py:328
+#: tryton/gui/window/form.py:355
 msgid "Invalid form!"
 msgstr "Neplatný formulář!"
 
-#: tryton/gui/window/form.py:436
+#: tryton/gui/window/form.py:462
 msgid " of "
 msgstr " z "
 
-#: tryton/gui/window/form.py:457
+#: tryton/gui/window/form.py:483
 msgid ""
 "This record has been modified\n"
 "do you want to save it ?"
@@ -1268,51 +1277,57 @@ msgstr ""
 "Tento záznam byl upraven\n"
 "chcete ho uložit?"
 
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
 msgid "Action"
 msgstr "Akce"
 
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
 msgid "Launch action"
 msgstr ""
 
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
 #, fuzzy
 msgid "Relate"
 msgstr "_Vytvořit"
 
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
 #, fuzzy
 msgid "Open related records"
 msgstr "Otevřít záznam"
 
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
 #, fuzzy
 msgid "Report"
 msgstr "Sestavy"
 
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
 #, fuzzy
 msgid "Open report"
 msgstr "Otevřít záznam"
 
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
 #, fuzzy
 msgid "E-Mail"
 msgstr "Email"
 
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
 msgid "E-Mail report"
 msgstr ""
 
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
 msgid "Print"
 msgstr "Tisk"
 
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
 msgid "Print report"
 msgstr ""
 
+#: tryton/gui/window/form.py:607
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:257
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:1050
+msgid "Unknown"
+msgstr "Neznámý"
+
 #: tryton/gui/window/limit.py:17
 #, fuzzy
 msgid "Limit"
@@ -1344,6 +1359,20 @@ msgstr "Nastavení"
 msgid "Current Password:"
 msgstr "Heslo správce:"
 
+#: tryton/gui/window/revision.py:20
+#, fuzzy
+msgid "Revision"
+msgstr "Předchozí"
+
+#: tryton/gui/window/revision.py:29
+#, fuzzy
+msgid "Select a revision"
+msgstr "Výběr"
+
+#: tryton/gui/window/revision.py:32
+msgid "Revision:"
+msgstr ""
+
 #: tryton/gui/window/shortcuts.py:17
 msgid "Keyboard Shortcuts"
 msgstr "Klávesové zkratky"
@@ -1519,21 +1548,21 @@ msgstr "Přidat jména polí"
 msgid "Name"
 msgstr ""
 
-#: tryton/gui/window/win_export.py:306
+#: tryton/gui/window/win_export.py:309
 msgid "What is the name of this export?"
 msgstr ""
 
-#: tryton/gui/window/win_export.py:429
+#: tryton/gui/window/win_export.py:436
 #, python-format
 msgid "%d record saved!"
 msgstr "%d záznam uložen!"
 
-#: tryton/gui/window/win_export.py:431
+#: tryton/gui/window/win_export.py:438
 #, python-format
 msgid "%d records saved!"
 msgstr "%d záznamů uloženo!"
 
-#: tryton/gui/window/win_export.py:434
+#: tryton/gui/window/win_export.py:441
 #, python-format
 msgid ""
 "Operation failed!\n"
@@ -1548,28 +1577,28 @@ msgstr ""
 msgid "Link"
 msgstr "Odkaz"
 
-#: tryton/gui/window/win_form.py:134
+#: tryton/gui/window/win_form.py:136
 msgid "Add"
 msgstr "Přidat"
 
-#: tryton/gui/window/win_form.py:147
+#: tryton/gui/window/win_form.py:149
 msgid "Remove <Del>"
 msgstr ""
 
-#: tryton/gui/window/win_form.py:162
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:73
+#: tryton/gui/window/win_form.py:164
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:75
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:86
 #, fuzzy
 msgid "Create a new record <F3>"
 msgstr "Vytvořit nový záznam"
 
-#: tryton/gui/window/win_form.py:174
+#: tryton/gui/window/win_form.py:176
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:106
 #, fuzzy
 msgid "Delete selected record <Del>"
 msgstr "Smazat vybraný záznam"
 
-#: tryton/gui/window/win_form.py:188
+#: tryton/gui/window/win_form.py:190
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:116
 #, fuzzy
 msgid "Undelete selected record <Ins>"
@@ -1593,10 +1622,10 @@ msgstr "Soubor k importu:"
 
 #: tryton/gui/window/win_import.py:111
 #: tryton/gui/window/view_form/view/form_gtk/binary.py:57
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:111
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:118
 #: tryton/gui/window/view_form/view/form_gtk/image.py:62
 #: tryton/gui/window/view_form/view/form_gtk/image.py:131
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:624
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:650
 msgid "Open..."
 msgstr "Otevřít..."
 
@@ -1621,19 +1650,19 @@ msgstr "Kódování:"
 msgid "Lines to Skip:"
 msgstr "Vynechané řádky:"
 
-#: tryton/gui/window/win_import.py:184 tryton/gui/window/win_import.py:189
+#: tryton/gui/window/win_import.py:185 tryton/gui/window/win_import.py:190
 msgid "Field name"
 msgstr "Jméno pole"
 
-#: tryton/gui/window/win_import.py:249
+#: tryton/gui/window/win_import.py:251
 msgid "You must select an import file first!"
 msgstr "Nejprve je nutné vybrat soubor pro import!"
 
-#: tryton/gui/window/win_import.py:260
+#: tryton/gui/window/win_import.py:262
 msgid "Error opening CSV file"
 msgstr "Chyba při otevírání CSV souboru"
 
-#: tryton/gui/window/win_import.py:287
+#: tryton/gui/window/win_import.py:289
 #, fuzzy, python-format
 msgid "Error processing the file at field %s."
 msgstr "Chyba při zpracování souboru u pole %s.\n"
@@ -1648,20 +1677,7 @@ msgstr "%d záznam načten!"
 msgid "%d records imported!"
 msgstr "%d záznamů načteno!"
 
-#: tryton/gui/window/win_import.py:371
-msgid "Importation Error!"
-msgstr "Chyba načítání!"
-
-#: tryton/gui/window/win_import.py:372
-#, python-format
-msgid ""
-"Error importing record %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-msgstr ""
-
-#: tryton/gui/window/wizard.py:291
+#: tryton/gui/window/wizard.py:286
 msgid "Wizard"
 msgstr "Průvodce"
 
@@ -1670,45 +1686,41 @@ msgstr "Průvodce"
 msgid "No String Attr."
 msgstr "Žádný řetězcový atribut"
 
-#: tryton/gui/window/view_form/screen/screen.py:135
+#: tryton/gui/window/view_form/screen/screen.py:129
 #, fuzzy
 msgid "ID"
 msgstr "Najít"
 
-#: tryton/gui/window/view_form/screen/screen.py:136
+#: tryton/gui/window/view_form/screen/screen.py:130
 #, fuzzy
 msgid "Creation User"
 msgstr "Vytvořeno uživatelem:"
 
-#: tryton/gui/window/view_form/screen/screen.py:137
+#: tryton/gui/window/view_form/screen/screen.py:131
 #, fuzzy
 msgid "Creation Date"
 msgstr "Datum vytvoření:"
 
-#: tryton/gui/window/view_form/screen/screen.py:138
+#: tryton/gui/window/view_form/screen/screen.py:132
 #, fuzzy
 msgid "Modification User"
 msgstr "Datum poslední úpravy:"
 
-#: tryton/gui/window/view_form/screen/screen.py:139
+#: tryton/gui/window/view_form/screen/screen.py:133
 #, fuzzy
 msgid "Modification Date"
 msgstr "Datum poslední úpravy:"
 
-#: tryton/gui/window/view_form/screen/screen.py:634
+#: tryton/gui/window/view_form/screen/screen.py:631
 msgid "Unable to get view tree state"
 msgstr ""
 
-#: tryton/gui/window/view_form/screen/screen.py:671
-#, fuzzy, python-format
+#: tryton/gui/window/view_form/screen/screen.py:668
+#, fuzzy
 msgid "Unable to set view tree state"
 msgstr "Nemohu nastavit lokalizaci %s"
 
-#: tryton/gui/window/view_form/view/list.py:651
-msgid "You must select a record to use the relation!"
-msgstr "Musíte vybrat záznam před použitím relace!"
-
-#: tryton/gui/window/view_form/view/screen_container.py:25
+#: tryton/gui/window/view_form/view/screen_container.py:23
 msgid ".."
 msgstr ""
 
@@ -1717,19 +1729,19 @@ msgstr ""
 msgid "F_ilters"
 msgstr "_Soubor"
 
-#: tryton/gui/window/view_form/view/screen_container.py:149
+#: tryton/gui/window/view_form/view/screen_container.py:147
 msgid "Show bookmarks of filters"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/screen_container.py:314
+#: tryton/gui/window/view_form/view/screen_container.py:312
 msgid "Remove this bookmark"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/screen_container.py:321
+#: tryton/gui/window/view_form/view/screen_container.py:319
 msgid "Bookmark this filter"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/screen_container.py:380
+#: tryton/gui/window/view_form/view/screen_container.py:384
 msgid "Bookmark Name:"
 msgstr ""
 
@@ -1761,24 +1773,24 @@ msgstr ""
 msgid "Select a File..."
 msgstr "Vyberte soubor"
 
-#: tryton/gui/window/view_form/view/form_gtk/char.py:157
+#: tryton/gui/window/view_form/view/form_gtk/char.py:161
 msgid "Show plain text"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:349
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:348
 msgid "Add value"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:459
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:461
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:199
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:201
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:458
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:460
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:202
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:204
 #: tryton/gui/window/view_form/view/form_gtk/parser.py:255
 #: tryton/gui/window/view_form/view/form_gtk/parser.py:259
 msgid ":"
 msgstr ":"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:471
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:470
 #, python-format
 msgid "Remove \"%s\""
 msgstr ""
@@ -1796,24 +1808,24 @@ msgstr "Všechny soubory"
 msgid "Images"
 msgstr "Obrázky"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:175
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:178
 #, fuzzy
 msgid "Translation"
 msgstr "Přidat překlad"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:231
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:234
 msgid "Edit"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:236
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:239
 msgid "Fuzzy"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:305
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:308
 msgid "You need to save the record before adding translations!"
 msgstr "Musíte uložit záznam před přidáváním překladů!"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:316
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:319
 msgid "No other language available!"
 msgstr "Jiný jazyk není k dispozici!"
 
@@ -1828,13 +1840,13 @@ msgstr "Uložit tento záznam"
 msgid "Remove selected record <Del>"
 msgstr "Smazat vybraný záznam"
 
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:74
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:351
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:76
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:356
 #, fuzzy
 msgid "Open a record <F2>"
 msgstr "Otevřít záznam"
 
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:354
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:359
 #, fuzzy
 msgid "Search a record <F2>"
 msgstr "Hledat záznam"
@@ -1929,16 +1941,11 @@ msgstr "Obrázek PNG (*.png)"
 msgid "Image size too large!"
 msgstr "Rozměry obrázku jsou příliš velké!"
 
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:245
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:244
 #, fuzzy
 msgid ": "
 msgstr ":"
 
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:258
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:1023
-msgid "Unknown"
-msgstr "Neznámý"
-
 #: tryton/plugins/translation/__init__.py:18
 msgid "Translate view"
 msgstr "Přeložit pohled"
diff --git a/share/locale/de_DE/LC_MESSAGES/tryton.mo b/share/locale/de_DE/LC_MESSAGES/tryton.mo
index 3a76ddb..53bb90b 100644
Binary files a/share/locale/de_DE/LC_MESSAGES/tryton.mo and b/share/locale/de_DE/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/de_DE/LC_MESSAGES/tryton.po b/share/locale/de_DE/LC_MESSAGES/tryton.po
index e49ff0a..5cdcaa4 100644
--- a/share/locale/de_DE/LC_MESSAGES/tryton.po
+++ b/share/locale/de_DE/LC_MESSAGES/tryton.po
@@ -1,16 +1,17 @@
 # German (Germany) translations for tryton.
-# Copyright (C) 2008 B2CK
+# Copyright (C) 2008-2014 MBSolutions
 # This file is distributed under the same license as the tryton project.
 # Udo Spallek <udono at gmx.net>, 2008.
+# Mathias Behrle <mbehrle at m9s.biz>, 2008-2014.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: tryton 0.0.1\n"
+"Project-Id-Version: tryton 3.2.0\n"
 "Report-Msgid-Bugs-To: issue_tracker at tryton.org\n"
-"POT-Creation-Date: 2013-10-20 16:34+0200\n"
-"PO-Revision-Date: 2013-10-16 12:46+0100\n"
+"POT-Creation-Date: 2014-04-18 22:49+0200\n"
+"PO-Revision-Date: 2014-04-14 12:23+0100\n"
 "Last-Translator: Mathias Behrle <mbehrle at m9s.biz>\n"
-"Language-Team: de_DE <LL at li.org>\n"
+"Language-Team: de_DE <tryton-de at googlegroups.com>\n"
 "Plural-Forms: nplurals=2; plural=(n != 1)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
@@ -64,62 +65,62 @@ msgstr "Kann Konfigurationsdatei '%s' nicht schreiben!"
 msgid "Unable to set locale %s"
 msgstr "Kann locale %s nicht setzen"
 
-#: tryton/action/main.py:163
+#: tryton/action/main.py:171
 msgid "Select your action"
 msgstr "Aktion wählen"
 
-#: tryton/action/main.py:169
+#: tryton/action/main.py:177
 msgid "No action defined!"
 msgstr "Keine Aktion angegeben!"
 
-#: tryton/common/common.py:270
+#: tryton/common/common.py:284
 msgid "Tryton Connection"
 msgstr "Verbindung"
 
-#: tryton/common/common.py:281
+#: tryton/common/common.py:295
 msgid "Server:"
 msgstr "Server:"
 
-#: tryton/common/common.py:299 tryton/gui/window/dblogin.py:79
+#: tryton/common/common.py:313 tryton/gui/window/dblogin.py:79
 msgid "Port:"
 msgstr "Port:"
 
-#: tryton/common/common.py:369
+#: tryton/common/common.py:383
 msgid "Selection"
 msgstr "Auswahl"
 
-#: tryton/common/common.py:378
+#: tryton/common/common.py:392
 msgid "Your selection:"
 msgstr "Ihre Auswahl:"
 
-#: tryton/common/common.py:498 tryton/gui/main.py:1407
-#: tryton/gui/window/win_export.py:402
+#: tryton/common/common.py:528 tryton/gui/main.py:1420
+#: tryton/gui/window/win_export.py:409
 #: tryton/gui/window/view_form/view/form_gtk/binary.py:69
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:138
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:150
 #: tryton/gui/window/view_form/view/form_gtk/image.py:74
-#: tryton/gui/window/view_form/view/form_gtk/image.py:158
+#: tryton/gui/window/view_form/view/form_gtk/image.py:161
 #: tryton/gui/window/view_form/view/graph_gtk/parser.py:105
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:656
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:686
 msgid "Save As..."
 msgstr "Speichern unter..."
 
-#: tryton/common/common.py:649
+#: tryton/common/common.py:675
 msgid "Always ignore this warning."
 msgstr "Diese Warnung künftig nicht mehr anzeigen"
 
-#: tryton/common/common.py:654
+#: tryton/common/common.py:680
 msgid "Do you want to proceed?"
 msgstr "Fortfahren?"
 
-#: tryton/common/common.py:673
+#: tryton/common/common.py:699
 msgid "Confirmation"
 msgstr "Bestätigung"
 
-#: tryton/common/common.py:779 tryton/common/common.py:1083
+#: tryton/common/common.py:805 tryton/common/common.py:1114
 msgid "Concurrency Exception"
 msgstr "Aktualisierungskonflikt"
 
-#: tryton/common/common.py:793
+#: tryton/common/common.py:819
 msgid ""
 "<b>Write Concurrency Warning:</b>\n"
 "\n"
@@ -140,52 +141,52 @@ msgstr ""
 "   - \"Überschreiben\" um die gespeicherte Version mit Ihrer Version zu "
 "überschreiben"
 
-#: tryton/common/common.py:802
+#: tryton/common/common.py:828
 msgid "Compare"
 msgstr "Vergleichen"
 
-#: tryton/common/common.py:807
+#: tryton/common/common.py:833
 msgid "Write Anyway"
 msgstr "Überschreiben"
 
-#: tryton/common/common.py:833 tryton/gui/window/win_export.py:435
-#: tryton/gui/window/win_import.py:260 tryton/gui/window/win_import.py:288
+#: tryton/common/common.py:859 tryton/gui/window/win_export.py:442
+#: tryton/gui/window/win_import.py:262 tryton/gui/window/win_import.py:290
 msgid "Error"
 msgstr "Fehler"
 
-#: tryton/common/common.py:837
+#: tryton/common/common.py:863
 msgid "Report Bug"
 msgstr "Fehler berichten"
 
-#: tryton/common/common.py:844
+#: tryton/common/common.py:870
 msgid "Application Error!"
 msgstr "Anwendungsfehler!"
 
-#: tryton/common/common.py:867
+#: tryton/common/common.py:893
 msgid "Error: "
 msgstr "Fehler:"
 
-#: tryton/common/common.py:887
+#: tryton/common/common.py:913
 #, python-format
 msgid "To report bugs you must have an account on <u>%s</u>"
 msgstr ""
 "Um Fehler online berichten zu können, benötigen Sie ein Konto auf "
 "<u>%s</u>"
 
-#: tryton/common/common.py:917
+#: tryton/common/common.py:943
 msgid "Bug Tracker"
 msgstr "Fehler melden"
 
-#: tryton/common/common.py:935
+#: tryton/common/common.py:961
 msgid "User:"
 msgstr "Anmeldename:"
 
-#: tryton/common/common.py:943 tryton/common/common.py:1101
+#: tryton/common/common.py:969 tryton/common/common.py:1132
 #: tryton/gui/window/dblogin.py:462
 msgid "Password:"
 msgstr "Passwort:"
 
-#: tryton/common/common.py:993
+#: tryton/common/common.py:1024
 msgid ""
 "The same bug was already reported by another user.\n"
 "To keep you informed your username is added to the nosy-list of this issue"
@@ -195,11 +196,11 @@ msgstr ""
 "Zu Ihrer Information wurde Ihr Benutzername auf der Interessentenliste "
 "eingetragen."
 
-#: tryton/common/common.py:1004
+#: tryton/common/common.py:1035
 msgid "Created new bug with ID "
 msgstr "Neuer Fehlerbericht angelegt mit ID "
 
-#: tryton/common/common.py:1012 tryton/gui/main.py:921
+#: tryton/common/common.py:1043 tryton/gui/main.py:928
 msgid ""
 "Connection error!\n"
 "Bad username or password!"
@@ -207,11 +208,11 @@ msgstr ""
 "Verbindungsfehler!\n"
 "Anmeldename oder Passwort fehlerhaft."
 
-#: tryton/common/common.py:1017
+#: tryton/common/common.py:1048
 msgid "Exception:"
 msgstr "Ausnahme: "
 
-#: tryton/common/common.py:1034
+#: tryton/common/common.py:1065
 msgid ""
 "The server fingerprint has changed since last connection!\n"
 "The application will stop connecting to this server until its fingerprint"
@@ -222,12 +223,12 @@ msgstr ""
 "Der Client wird sich nicht mehr zu diesem Server verbinden bis der "
 "Fingerabdruck wieder dem des Servers entspricht."
 
-#: tryton/common/common.py:1036
+#: tryton/common/common.py:1067
 msgid "Security risk!"
 msgstr "Sicherheitsrisiko!"
 
-#: tryton/common/common.py:1042 tryton/common/common.py:1108
-#: tryton/gui/main.py:918
+#: tryton/common/common.py:1073 tryton/common/common.py:1139
+#: tryton/gui/main.py:925
 msgid ""
 "Connection error!\n"
 "Unable to connect to the server!"
@@ -235,39 +236,39 @@ msgstr ""
 "Verbindungsfehler!\n"
 "Kann nicht zum Server verbinden."
 
-#: tryton/common/common.py:1123
+#: tryton/common/common.py:1154
 msgid "Network Error!"
 msgstr "Netzwerkfehler!"
 
-#: tryton/common/common.py:1354
+#: tryton/common/common.py:1409
 msgid "Y"
 msgstr "J"
 
-#: tryton/common/common.py:1355
+#: tryton/common/common.py:1410
 msgid "M"
 msgstr "M"
 
-#: tryton/common/common.py:1356
+#: tryton/common/common.py:1411
 msgid "w"
 msgstr "W"
 
-#: tryton/common/common.py:1357
+#: tryton/common/common.py:1412
 msgid "d"
 msgstr "t"
 
-#: tryton/common/common.py:1358
+#: tryton/common/common.py:1413
 msgid "h"
 msgstr "h"
 
-#: tryton/common/common.py:1359
+#: tryton/common/common.py:1414
 msgid "m"
 msgstr "m"
 
-#: tryton/common/completion.py:22
+#: tryton/common/completion.py:21
 msgid "<i>Search...</i>"
 msgstr "<i>Suche...</i>"
 
-#: tryton/common/completion.py:23
+#: tryton/common/completion.py:22
 msgid "<i>Create...</i>"
 msgstr "<i>Erstelle...</i>"
 
@@ -275,253 +276,257 @@ msgstr "<i>Erstelle...</i>"
 msgid "Open the calendar <F2>"
 msgstr "Kalender öffnen <F2>"
 
-#: tryton/common/date_widget.py:271
+#: tryton/common/date_widget.py:275
 msgid "Date Selection"
 msgstr "Auswahl Datum"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "y"
 msgstr "J"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "yes"
 msgstr "Ja"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "true"
 msgstr "Wahr"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "t"
 msgstr "w"
 
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
 msgid "True"
 msgstr "Wahr"
 
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
 msgid "False"
 msgstr "Falsch"
 
-#: tryton/common/popup_menu.py:71
+#: tryton/common/popup_menu.py:72
+msgid "Edit..."
+msgstr "Bearbeiten..."
+
+#: tryton/common/popup_menu.py:77
 msgid "Attachments..."
 msgstr "Anhänge..."
 
-#: tryton/common/popup_menu.py:76
+#: tryton/common/popup_menu.py:87
 msgid "Actions..."
 msgstr "Aktionen..."
 
-#: tryton/common/popup_menu.py:77
+#: tryton/common/popup_menu.py:88
 msgid "Relate..."
 msgstr "Beziehungen..."
 
-#: tryton/common/popup_menu.py:78
+#: tryton/common/popup_menu.py:89
 msgid "Report..."
 msgstr "Berichte..."
 
-#: tryton/common/popup_menu.py:79
+#: tryton/common/popup_menu.py:90
 msgid "E-Mail..."
 msgstr "E-Mail..."
 
-#: tryton/common/popup_menu.py:80
+#: tryton/common/popup_menu.py:91
 msgid "Print..."
 msgstr "Drucken..."
 
-#: tryton/gui/main.py:217
+#: tryton/gui/main.py:218
 msgid "_File"
 msgstr "_Datei"
 
-#: tryton/gui/main.py:225
+#: tryton/gui/main.py:226
 msgid "_User"
 msgstr "_Benutzer"
 
-#: tryton/gui/main.py:239
+#: tryton/gui/main.py:240
 msgid "_Options"
 msgstr "_Einstellungen"
 
-#: tryton/gui/main.py:247
+#: tryton/gui/main.py:248
 msgid "Fa_vorites"
 msgstr "Fa_voriten"
 
-#: tryton/gui/main.py:263
+#: tryton/gui/main.py:264
 msgid "_Help"
 msgstr "_Hilfe"
 
-#: tryton/gui/main.py:285 tryton/gui/window/win_search.py:26
+#: tryton/gui/main.py:286 tryton/gui/window/win_search.py:26
 #: tryton/gui/window/view_form/view/screen_container.py:100
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:333
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:332
 #: tryton/gui/window/view_form/view/form_gtk/many2many.py:40
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:45
 msgid "Search"
 msgstr "Suchen"
 
-#: tryton/gui/main.py:364
+#: tryton/gui/main.py:374
 msgid "No result found."
 msgstr "Kein Ergebnis."
 
-#: tryton/gui/main.py:384
+#: tryton/gui/main.py:396
 msgid "_Connect..."
 msgstr "_Verbinden..."
 
-#: tryton/gui/main.py:393
+#: tryton/gui/main.py:405
 msgid "_Disconnect"
 msgstr "Verbindung _trennen"
 
-#: tryton/gui/main.py:403
+#: tryton/gui/main.py:415
 msgid "Data_base"
 msgstr "_Datenbank"
 
-#: tryton/gui/main.py:414
+#: tryton/gui/main.py:426
 msgid "_New Database..."
 msgstr "_Neue Datenbank..."
 
-#: tryton/gui/main.py:423
+#: tryton/gui/main.py:435
 msgid "_Restore Database..."
 msgstr "Datenbank _wiederherstellen..."
 
-#: tryton/gui/main.py:432
+#: tryton/gui/main.py:444
 msgid "_Backup Database..."
-msgstr "Datenbank _sichern..."
+msgstr "Datenbankbackup er_stellen..."
 
-#: tryton/gui/main.py:441
+#: tryton/gui/main.py:453
 msgid "Dro_p Database..."
 msgstr "Datenbank _löschen..."
 
-#: tryton/gui/main.py:450
+#: tryton/gui/main.py:462
 msgid "_Quit..."
 msgstr "_Beenden..."
 
-#: tryton/gui/main.py:465
+#: tryton/gui/main.py:477
 msgid "_Preferences..."
 msgstr "_Einstellungen..."
 
-#: tryton/gui/main.py:476
+#: tryton/gui/main.py:488
 msgid "_Menu Reload"
 msgstr "_Menü neu laden"
 
-#: tryton/gui/main.py:485
+#: tryton/gui/main.py:497
 msgid "_Menu Toggle"
 msgstr "Menü _umschalten"
 
-#: tryton/gui/main.py:492
+#: tryton/gui/main.py:504
 msgid "_Global Search"
 msgstr "_Globale Suche"
 
-#: tryton/gui/main.py:507
+#: tryton/gui/main.py:519
 msgid "_Toolbar"
 msgstr "_Werkzeugleiste"
 
-#: tryton/gui/main.py:515
+#: tryton/gui/main.py:527
 msgid "_Default"
 msgstr "_Standard"
 
-#: tryton/gui/main.py:525
+#: tryton/gui/main.py:537
 msgid "_Text and Icons"
 msgstr "Text _und Symbole"
 
-#: tryton/gui/main.py:535
+#: tryton/gui/main.py:547
 msgid "_Icons"
 msgstr "_Symbole"
 
-#: tryton/gui/main.py:544
+#: tryton/gui/main.py:556
 msgid "_Text"
 msgstr "_Text"
 
-#: tryton/gui/main.py:553
+#: tryton/gui/main.py:565
 msgid "_Menubar"
 msgstr "_Menüleiste"
 
-#: tryton/gui/main.py:561
+#: tryton/gui/main.py:573
 msgid "Change Accelerators"
 msgstr "Schnelltasten ändern"
 
-#: tryton/gui/main.py:569
+#: tryton/gui/main.py:581
 msgid "_Mode"
 msgstr "_Modus"
 
-#: tryton/gui/main.py:577
+#: tryton/gui/main.py:589
 msgid "_Normal"
 msgstr "_Normal"
 
-#: tryton/gui/main.py:585
+#: tryton/gui/main.py:597
 msgid "_PDA"
 msgstr "_PDA"
 
-#: tryton/gui/main.py:592
+#: tryton/gui/main.py:604
 msgid "_Form"
 msgstr "_Formular"
 
-#: tryton/gui/main.py:601
+#: tryton/gui/main.py:613
 msgid "Save Width/Height"
 msgstr "Breite/Höhe speichern"
 
-#: tryton/gui/main.py:612
+#: tryton/gui/main.py:624
 msgid "Save Tree State"
 msgstr "Menüansicht speichern"
 
-#: tryton/gui/main.py:624
+#: tryton/gui/main.py:636
 msgid "Spell Checking"
 msgstr "Rechtschreibkorrektur"
 
-#: tryton/gui/main.py:634
+#: tryton/gui/main.py:646
 msgid "Tabs Position"
 msgstr "Position der Tabs"
 
-#: tryton/gui/main.py:642
+#: tryton/gui/main.py:654
 msgid "Top"
 msgstr "Oben"
 
-#: tryton/gui/main.py:651
+#: tryton/gui/main.py:663
 msgid "Left"
 msgstr "Links"
 
-#: tryton/gui/main.py:661
+#: tryton/gui/main.py:673
 msgid "Right"
 msgstr "Rechts"
 
-#: tryton/gui/main.py:671
+#: tryton/gui/main.py:683
 msgid "Bottom"
 msgstr "Unten"
 
-#: tryton/gui/main.py:680
+#: tryton/gui/main.py:692
 msgid "_Previous Tab"
 msgstr "_Vorheriger Tab"
 
-#: tryton/gui/main.py:686
+#: tryton/gui/main.py:698
 msgid "_Next Tab"
 msgstr "_Nächster Tab"
 
-#: tryton/gui/main.py:692
+#: tryton/gui/main.py:704
 msgid "Search Limit..."
 msgstr "Suchlimitierung..."
 
-#: tryton/gui/main.py:698
+#: tryton/gui/main.py:710
 msgid "_Email..."
 msgstr "_E-Mail..."
 
-#: tryton/gui/main.py:706
+#: tryton/gui/main.py:718
 msgid "_Save Options"
 msgstr "Einstellungen _speichern"
 
-#: tryton/gui/main.py:718
+#: tryton/gui/main.py:730
 msgid "_Tips..."
 msgstr "_Tipps..."
 
-#: tryton/gui/main.py:727
+#: tryton/gui/main.py:739
 msgid "_Keyboard Shortcuts..."
 msgstr "_Schnelltasten..."
 
-#: tryton/gui/main.py:736
+#: tryton/gui/main.py:748
 msgid "_About..."
 msgstr "_Über..."
 
-#: tryton/gui/main.py:787
+#: tryton/gui/main.py:799
 msgid "Manage Favorites"
 msgstr "Favoriten verwalten"
 
-#: tryton/gui/main.py:935
+#: tryton/gui/main.py:942
 msgid ""
 "The following action requires to close all tabs.\n"
 "Do you want to continue?"
@@ -529,11 +534,11 @@ msgstr ""
 "Die folgende Aktion erfordert die Schließung aller Tabs.\n"
 "Fortfahren?"
 
-#: tryton/gui/main.py:1196
+#: tryton/gui/main.py:1206
 msgid "Close Tab"
 msgstr "Tab schließen"
 
-#: tryton/gui/main.py:1314
+#: tryton/gui/main.py:1327
 msgid ""
 "You are going to delete a Tryton database.\n"
 "Are you really sure to proceed?"
@@ -541,7 +546,7 @@ msgstr ""
 "Sie werden eine Tryton Datenbank löschen.\n"
 "Wirklich fortfahren?"
 
-#: tryton/gui/main.py:1324
+#: tryton/gui/main.py:1337
 msgid ""
 "Wrong Tryton Server Password\n"
 "Please try again."
@@ -549,30 +554,30 @@ msgstr ""
 "Falsches Passwort für den Tryton Server\n"
 "Bitte geben Sie es noch einmal ein."
 
-#: tryton/gui/main.py:1326 tryton/gui/main.py:1362 tryton/gui/main.py:1398
-#: tryton/gui/window/dbcreate.py:382
+#: tryton/gui/main.py:1339 tryton/gui/main.py:1375 tryton/gui/main.py:1411
+#: tryton/gui/window/dbcreate.py:384
 msgid "Access denied!"
 msgstr "Zugang verweigert!"
 
-#: tryton/gui/main.py:1329
+#: tryton/gui/main.py:1342
 msgid "Database drop failed with error message:\n"
 msgstr ""
 "Das Löschen der Datenbank ist fehlgeschlagen mit der folgenden "
 "Fehlermeldung:\n"
 
-#: tryton/gui/main.py:1330
+#: tryton/gui/main.py:1343
 msgid "Database drop failed!"
 msgstr "Datenbank konnte nicht gelöscht werden!"
 
-#: tryton/gui/main.py:1332
+#: tryton/gui/main.py:1345
 msgid "Database dropped successfully!"
-msgstr "Datenbank erfolgreich gelöscht!"
+msgstr "Datenbank erfolgreich gelöscht."
 
-#: tryton/gui/main.py:1337
+#: tryton/gui/main.py:1350
 msgid "Open Backup File to Restore..."
 msgstr "Backup Datei für Wiederherstellung öffnen..."
 
-#: tryton/gui/main.py:1354
+#: tryton/gui/main.py:1367
 msgid ""
 "It is not possible to restore a password protected database.\n"
 "Backup and restore needed to be proceed manual."
@@ -582,11 +587,11 @@ msgstr ""
 "Backup und Wiederherstellung müssen in diesem Fall manuell durchgeführt "
 "werden."
 
-#: tryton/gui/main.py:1358 tryton/gui/main.py:1394
+#: tryton/gui/main.py:1371 tryton/gui/main.py:1407
 msgid "Database is password protected!"
 msgstr "Datenbank ist passwortgeschützt!"
 
-#: tryton/gui/main.py:1360 tryton/gui/main.py:1396
+#: tryton/gui/main.py:1373 tryton/gui/main.py:1409
 msgid ""
 "Wrong Tryton Server Password.\n"
 "Please try again."
@@ -594,21 +599,21 @@ msgstr ""
 "Falsches Passwort für den Tryton Server\n"
 "Bitte geben Sie es noch einmal ein."
 
-#: tryton/gui/main.py:1365
+#: tryton/gui/main.py:1378
 msgid "Database restore failed with error message:\n"
 msgstr ""
 "Wiederherstellung der Datenbank ist fehlgeschlagen mit der Fehlermeldung:"
 "\n"
 
-#: tryton/gui/main.py:1367 tryton/gui/main.py:1372
+#: tryton/gui/main.py:1380 tryton/gui/main.py:1385
 msgid "Database restore failed!"
 msgstr "Wiederherstellung der Datenbank ist fehlgeschlagen!"
 
-#: tryton/gui/main.py:1370
+#: tryton/gui/main.py:1383
 msgid "Database restored successfully!"
-msgstr "Datenbank wurde erfolgreich wiederhergestellt!"
+msgstr "Datenbank wurde erfolgreich wiederhergestellt."
 
-#: tryton/gui/main.py:1391
+#: tryton/gui/main.py:1404
 msgid ""
 "It is not possible to dump a password protected Database.\n"
 "Backup and restore needed to be proceed manual."
@@ -617,75 +622,75 @@ msgstr ""
 "Backup und Wiederherstellung müssen in diesem Fall manuell durchgeführt "
 "werden."
 
-#: tryton/gui/main.py:1401
+#: tryton/gui/main.py:1414
 msgid "Database dump failed with error message:\n"
 msgstr "Die Datenbanksicherung ist fehlgeschlagen mit der Fehlermeldung:\n"
 
-#: tryton/gui/main.py:1403
+#: tryton/gui/main.py:1416
 msgid "Database dump failed!"
 msgstr "Datenbank konnte nicht gesichert werden!"
 
-#: tryton/gui/main.py:1414
+#: tryton/gui/main.py:1427
 msgid "Database backuped successfully!"
-msgstr "Datenbank erfolgreich gesichert!"
+msgstr "Datenbank erfolgreich gesichert."
 
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
 msgid "New"
 msgstr "Neu"
 
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
 msgid "Create a new record"
 msgstr "Neuen Datensatz erstellen"
 
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
 #: tryton/gui/window/win_export.py:142
 msgid "Save"
 msgstr "Speichern"
 
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
 msgid "Save this record"
 msgstr "Diesen Datensatz speichern"
 
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
-#: tryton/gui/window/win_form.py:228
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
+#: tryton/gui/window/win_form.py:232
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:154
 msgid "Switch"
 msgstr "Ansicht wechseln"
 
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
 msgid "Switch view"
 msgstr "Ansicht wechseln"
 
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
 msgid "_Reload"
 msgstr "_Neu laden"
 
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
 msgid "Reload"
 msgstr "Neu laden"
 
-#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:48
+#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:50
 msgid "_New"
 msgstr "_Neu"
 
-#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:49
-#: tryton/gui/window/win_form.py:66
+#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:51
+#: tryton/gui/window/win_form.py:67
 msgid "_Save"
 msgstr "_Speichern"
 
-#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:50
+#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:52
 msgid "_Switch View"
 msgstr "_Ansicht wechseln"
 
-#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:52
+#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:54
 msgid "_Reload/Undo"
 msgstr "Neu laden/_Rückgängig"
 
-#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:56
+#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:58
 msgid "_Delete..."
 msgstr "_Löschen..."
 
-#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:65
+#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:68
 msgid "_Close Tab"
 msgstr "Tab schließen"
 
@@ -723,28 +728,28 @@ msgstr ""
 "werden.\n"
 "Wählen Sie 'Bearbeiten', um die Adresse des Tryton-Servers anzupassen."
 
-#: tryton/gui/window/dbcreate.py:137
+#: tryton/gui/window/dbcreate.py:139
 msgid "Create new database"
 msgstr "Neue Datenbank erstellen"
 
-#: tryton/gui/window/dbcreate.py:147
+#: tryton/gui/window/dbcreate.py:149
 msgid "C_reate"
 msgstr "_Erstellen"
 
-#: tryton/gui/window/dbcreate.py:155
+#: tryton/gui/window/dbcreate.py:157
 msgid "Create the new database."
 msgstr "Neue Datenbank erstellen"
 
-#: tryton/gui/window/dbcreate.py:166
+#: tryton/gui/window/dbcreate.py:168
 msgid "Server Setup:"
 msgstr "Tryton Server Einstellungen:"
 
-#: tryton/gui/window/dbcreate.py:171
+#: tryton/gui/window/dbcreate.py:173
 msgid "Server connection:"
 msgstr "Serververbindung:"
 
-#: tryton/gui/window/dbcreate.py:180 tryton/gui/window/dbdumpdrop.py:140
-#: tryton/gui/window/dbrestore.py:86
+#: tryton/gui/window/dbcreate.py:182 tryton/gui/window/dbdumpdrop.py:140
+#: tryton/gui/window/dbrestore.py:88
 msgid ""
 "This is the URL of the server. Use server 'localhost' and port '8000' if "
 "the server is installed on this computer. Click on 'Change' to change the"
@@ -755,22 +760,22 @@ msgstr ""
 "Computer installiert ist. Klicken Sie auf 'Bearbeiten' um diese Adresse "
 "zu ändern."
 
-#: tryton/gui/window/dbcreate.py:183 tryton/gui/window/dbdumpdrop.py:147
-#: tryton/gui/window/dbrestore.py:91
+#: tryton/gui/window/dbcreate.py:185 tryton/gui/window/dbdumpdrop.py:147
+#: tryton/gui/window/dbrestore.py:93
 msgid "C_hange"
 msgstr "_Bearbeiten"
 
-#: tryton/gui/window/dbcreate.py:192 tryton/gui/window/dbrestore.py:97
+#: tryton/gui/window/dbcreate.py:194 tryton/gui/window/dbrestore.py:99
 msgid "Setup the server connection..."
 msgstr "Serververbindung konfigurieren..."
 
-#: tryton/gui/window/dbcreate.py:195 tryton/gui/window/dbdumpdrop.py:186
-#: tryton/gui/window/dbrestore.py:100
+#: tryton/gui/window/dbcreate.py:197 tryton/gui/window/dbdumpdrop.py:186
+#: tryton/gui/window/dbrestore.py:102
 msgid "Tryton Server Password:"
 msgstr "Tryton Server Passwort:"
 
-#: tryton/gui/window/dbcreate.py:205 tryton/gui/window/dbdumpdrop.py:196
-#: tryton/gui/window/dbrestore.py:109
+#: tryton/gui/window/dbcreate.py:207 tryton/gui/window/dbdumpdrop.py:196
+#: tryton/gui/window/dbrestore.py:111
 msgid ""
 "This is the password of the Tryton server. It doesn't belong to a real "
 "user. This password is usually defined in the trytond configuration."
@@ -779,15 +784,15 @@ msgstr ""
 "Dieses Passwort ist nicht das Passwort eines Tryton Benutzers, sondern "
 "wird üblicherweise in der Konfiguration des Tryton Servers angegeben."
 
-#: tryton/gui/window/dbcreate.py:216
+#: tryton/gui/window/dbcreate.py:218
 msgid "New database setup:"
 msgstr "Datenbank Einstellungen:"
 
-#: tryton/gui/window/dbcreate.py:222
+#: tryton/gui/window/dbcreate.py:224
 msgid "Database name:"
 msgstr "Name:"
 
-#: tryton/gui/window/dbcreate.py:234
+#: tryton/gui/window/dbcreate.py:236
 msgid ""
 "Choose the name of the new database.\n"
 "Allowed characters are alphanumerical or _ (underscore)\n"
@@ -800,11 +805,11 @@ msgstr ""
 "'ß'!\n"
 "Beispielname: tryton"
 
-#: tryton/gui/window/dbcreate.py:241
+#: tryton/gui/window/dbcreate.py:243
 msgid "Default language:"
 msgstr "Standard Sprache:"
 
-#: tryton/gui/window/dbcreate.py:251
+#: tryton/gui/window/dbcreate.py:253
 msgid ""
 "Choose the default language that will be installed for this database. You"
 " will be able to install new languages after installation through the "
@@ -814,11 +819,11 @@ msgstr ""
 "Installation ist es im Administrationsmenü möglich eine neue Sprache "
 "einzustellen."
 
-#: tryton/gui/window/dbcreate.py:255
+#: tryton/gui/window/dbcreate.py:257
 msgid "Admin password:"
 msgstr "Administrator Passwort:"
 
-#: tryton/gui/window/dbcreate.py:265
+#: tryton/gui/window/dbcreate.py:267
 msgid ""
 "Choose a password for the admin user of the new database. With these "
 "credentials you will be later able to login into the database:\n"
@@ -831,17 +836,17 @@ msgstr ""
 "Anmeldename: admin\n"
 "Passwort: <Das hier vergebene Passwort>"
 
-#: tryton/gui/window/dbcreate.py:273
+#: tryton/gui/window/dbcreate.py:275
 msgid "Confirm admin password:"
 msgstr "Passwort Wiederholung:"
 
-#: tryton/gui/window/dbcreate.py:282
+#: tryton/gui/window/dbcreate.py:284
 msgid "Type the Admin password again"
 msgstr ""
 "Wiederholen Sie die Eingabe des Administrator Passworts um sicher zu "
 "gehen, dass Sie sich beim ersten Mal nicht vertippt haben."
 
-#: tryton/gui/window/dbcreate.py:330
+#: tryton/gui/window/dbcreate.py:332
 msgid ""
 "The database name is restricted to alpha-nummerical characters and \"_\" "
 "(underscore). Avoid all accents, space and any other special characters."
@@ -851,31 +856,31 @@ msgstr ""
 "Spezialzeichen sollten nicht benutzt werden. Umlaute, Akzente und 'ß'  "
 "sind ebenfalls verboten."
 
-#: tryton/gui/window/dbcreate.py:335
+#: tryton/gui/window/dbcreate.py:337
 msgid "Wrong characters in database name!"
 msgstr "Unerlaubte Zeichen im Namen für die Datenbank!"
 
-#: tryton/gui/window/dbcreate.py:339
+#: tryton/gui/window/dbcreate.py:341
 msgid "The new admin password doesn't match the confirmation field.\n"
 msgstr ""
 "Die beiden Eingaben für das neue Administrator Passwort stimmen nicht "
 "überein.\n"
 
-#: tryton/gui/window/dbcreate.py:341
+#: tryton/gui/window/dbcreate.py:343
 msgid "Passwords doesn't match!"
 msgstr "Passwörter sind nicht identisch!"
 
-#: tryton/gui/window/dbcreate.py:344
+#: tryton/gui/window/dbcreate.py:346
 msgid "Admin password and confirmation are required to create a new database."
 msgstr ""
 "Das Administrator Passwort und dessen Wiederholung werden benötigt um "
 "eine neue Datenbank für Tryton anlegen zu können."
 
-#: tryton/gui/window/dbcreate.py:346
+#: tryton/gui/window/dbcreate.py:348
 msgid "Missing admin password!"
 msgstr "Administrator Passwort fehlt!"
 
-#: tryton/gui/window/dbcreate.py:361
+#: tryton/gui/window/dbcreate.py:363
 msgid ""
 "A database with the same name already exists.\n"
 "Try another database name."
@@ -883,17 +888,17 @@ msgstr ""
 "Eine Datenbank mit diesem Namen existiert bereits.\n"
 "Versuchen Sie einen anderen Datenbanknamen."
 
-#: tryton/gui/window/dbcreate.py:364
+#: tryton/gui/window/dbcreate.py:366
 msgid "This database name already exist!"
 msgstr "Eine Datenbank mit diesem Namen existiert bereits!"
 
-#: tryton/gui/window/dbcreate.py:379
+#: tryton/gui/window/dbcreate.py:381
 msgid "Sorry, wrong password for the Tryton server. Please try again."
 msgstr ""
 "Das für den Tryton Server eingegebene Passwort scheint falsch zu sein. "
 "Bitte nochmals eingeben."
 
-#: tryton/gui/window/dbcreate.py:387
+#: tryton/gui/window/dbcreate.py:389
 msgid ""
 "Can't create the database, caused by an unknown reason.\n"
 "If there is a database created, it could be broken. Maybe drop this "
@@ -903,12 +908,12 @@ msgstr ""
 "Kann wegen eines unbekannten Problems nicht mit dem Tryton-Server "
 "verbinden.\n"
 "Wenn eine Datenbank erstellt wurde, könnte diese unvollständig oder "
-"defekt sein. Es wird empfohlen die soeben erstellte Datenbank zu löschen!"
+"defekt sein. Es wird empfohlen die soeben erstellte Datenbank zu löschen."
 " Bitte beachten Sie die folgende Fehlermeldung für weitere Informationen "
 "zu diesem Fehler.\n"
 "Fehlermeldung:\n"
 
-#: tryton/gui/window/dbcreate.py:395
+#: tryton/gui/window/dbcreate.py:397
 msgid "Error creating database!"
 msgstr "Fehler bei der Datenbankerstellung!"
 
@@ -956,7 +961,7 @@ msgstr "Die ausgewählte Datenbank löschen"
 msgid "Choose a Tryton database to delete:"
 msgstr "Wählen Sie die Tryton Datenbank aus, die gelöscht werden soll:"
 
-#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:75
+#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:77
 msgid "Server Connection:"
 msgstr "Serververbindung:"
 
@@ -1005,7 +1010,7 @@ msgstr "Kann nicht zum Server verbinden!"
 
 #: tryton/gui/window/dblogin.py:310 tryton/gui/window/dblogin.py:631
 msgid "Incompatible version of the server"
-msgstr "Inkompatible Serverversion!"
+msgstr "Inkompatible Serverversion"
 
 #: tryton/gui/window/dblogin.py:370
 msgid "Login"
@@ -1047,15 +1052,15 @@ msgstr "Host:"
 msgid "User name:"
 msgstr "Anmeldename:"
 
-#: tryton/gui/window/dbrestore.py:64
+#: tryton/gui/window/dbrestore.py:66
 msgid "Restore Database"
 msgstr "Datenbank wiederherstellen"
 
-#: tryton/gui/window/dbrestore.py:117
+#: tryton/gui/window/dbrestore.py:119
 msgid "File to Restore:"
 msgstr "Datei zur Wiederherstellung:"
 
-#: tryton/gui/window/dbrestore.py:131
+#: tryton/gui/window/dbrestore.py:133
 msgid ""
 "Choose the name of the database to be restored.\n"
 "Allowed characters are alphanumerical or _ (underscore)\n"
@@ -1067,15 +1072,15 @@ msgstr ""
 "Nicht erlaubt sind Akzente, Leerzeichen oder spezielle Zeichen! \n"
 "Beispiel: tryton"
 
-#: tryton/gui/window/dbrestore.py:137
+#: tryton/gui/window/dbrestore.py:139
 msgid "New Database Name:"
 msgstr "Name für neue Datenbank:"
 
-#: tryton/gui/window/dbrestore.py:140
+#: tryton/gui/window/dbrestore.py:142
 msgid "Update Database:"
 msgstr "Datenbank aktualisieren:"
 
-#: tryton/gui/window/dbrestore.py:144
+#: tryton/gui/window/dbrestore.py:146
 msgid ""
 "Check for an automatic database update after restoring a database from a "
 "previous Tryton version."
@@ -1084,11 +1089,11 @@ msgstr ""
 "einer früheren Version von Tryton erstellt wurde, eine automatische "
 "Aktualisierung der Datenbank durchgeführt."
 
-#: tryton/gui/window/dbrestore.py:154
+#: tryton/gui/window/dbrestore.py:156
 msgid "Restore"
 msgstr "Wiederherstellen"
 
-#: tryton/gui/window/dbrestore.py:163
+#: tryton/gui/window/dbrestore.py:165
 msgid "Restore the database from file."
 msgstr "Datenbank aus Datei wiederherstellen"
 
@@ -1128,154 +1133,158 @@ msgstr "Textkörper:"
 msgid "Attachment:"
 msgstr "Anhang:"
 
-#: tryton/gui/window/form.py:39 tryton/gui/window/tips.py:74
-#: tryton/gui/window/win_form.py:201
-#: tryton/gui/window/view_form/view/screen_container.py:165
+#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:74
+#: tryton/gui/window/win_form.py:205
+#: tryton/gui/window/view_form/view/screen_container.py:163
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:128
 msgid "Previous"
 msgstr "Vorheriger"
 
-#: tryton/gui/window/form.py:40
+#: tryton/gui/window/form.py:42
 msgid "Previous Record"
 msgstr "Vorheriger Datensatz"
 
-#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:81
-#: tryton/gui/window/win_form.py:215
-#: tryton/gui/window/view_form/view/screen_container.py:177
+#: tryton/gui/window/form.py:43 tryton/gui/window/tips.py:81
+#: tryton/gui/window/win_form.py:219
+#: tryton/gui/window/view_form/view/screen_container.py:175
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:142
 msgid "Next"
 msgstr "Nächster"
 
-#: tryton/gui/window/form.py:41
+#: tryton/gui/window/form.py:43
 msgid "Next Record"
 msgstr "Nächster Datensatz"
 
-#: tryton/gui/window/form.py:44
+#: tryton/gui/window/form.py:46
 msgid "Attachment(0)"
 msgstr "Anhang(0)"
 
-#: tryton/gui/window/form.py:45
+#: tryton/gui/window/form.py:47
 msgid "Add an attachment to the record"
 msgstr "Einen Anhang zum Datensatz hinzufügen"
 
-#: tryton/gui/window/form.py:54
+#: tryton/gui/window/form.py:56
 msgid "_Duplicate"
 msgstr "_Duplizieren"
 
-#: tryton/gui/window/form.py:59
+#: tryton/gui/window/form.py:61
 msgid "_Previous"
 msgstr "_Vorheriger"
 
-#: tryton/gui/window/form.py:61
+#: tryton/gui/window/form.py:63
 msgid "_Next"
 msgstr "_Nächster"
 
-#: tryton/gui/window/form.py:62
+#: tryton/gui/window/form.py:64
 msgid "_Search"
 msgstr "_Suche"
 
-#: tryton/gui/window/form.py:63
+#: tryton/gui/window/form.py:65
 msgid "View _Logs..."
 msgstr "_Protokoll ansehen..."
 
-#: tryton/gui/window/form.py:68
+#: tryton/gui/window/form.py:66
+msgid "Show revisions..."
+msgstr "Bearbeitungen anzeigen..."
+
+#: tryton/gui/window/form.py:71
 msgid "A_ttachments..."
-msgstr "A_nhange..."
+msgstr "A_nhänge..."
 
-#: tryton/gui/window/form.py:70
+#: tryton/gui/window/form.py:73
 msgid "_Actions..."
 msgstr "_Aktion ausführen..."
 
-#: tryton/gui/window/form.py:72
+#: tryton/gui/window/form.py:75
 msgid "_Relate..."
 msgstr "_Beziehung öffnen..."
 
-#: tryton/gui/window/form.py:75
+#: tryton/gui/window/form.py:78
 msgid "_Report..."
 msgstr "_Bericht öffnen..."
 
-#: tryton/gui/window/form.py:77
+#: tryton/gui/window/form.py:80
 msgid "_E-Mail..."
 msgstr "_Bericht per E-Mail..."
 
-#: tryton/gui/window/form.py:79
+#: tryton/gui/window/form.py:82
 msgid "_Print..."
 msgstr "_Bericht drucken..."
 
-#: tryton/gui/window/form.py:82
+#: tryton/gui/window/form.py:85
 msgid "_Export Data..."
 msgstr "Daten _exportieren..."
 
-#: tryton/gui/window/form.py:84
+#: tryton/gui/window/form.py:87
 msgid "_Import Data..."
 msgstr "Daten _importieren..."
 
-#: tryton/gui/window/form.py:219
+#: tryton/gui/window/form.py:216
 #, python-format
 msgid "Attachment(%d)"
 msgstr "Anhänge(%d)"
 
-#: tryton/gui/window/form.py:237
+#: tryton/gui/window/form.py:234
 msgid "You have to select one record!"
 msgstr "Sie müssen mindestens einen Datensatz auswählen!"
 
-#: tryton/gui/window/form.py:241
+#: tryton/gui/window/form.py:238
 msgid "ID:"
 msgstr "ID:"
 
-#: tryton/gui/window/form.py:242
+#: tryton/gui/window/form.py:239
 msgid "Creation User:"
 msgstr "Erstellt von"
 
-#: tryton/gui/window/form.py:243
+#: tryton/gui/window/form.py:240
 msgid "Creation Date:"
 msgstr "Erstellt am"
 
-#: tryton/gui/window/form.py:244
+#: tryton/gui/window/form.py:241
 msgid "Latest Modification by:"
 msgstr "Zuletzt verändert von"
 
-#: tryton/gui/window/form.py:245
+#: tryton/gui/window/form.py:242
 msgid "Latest Modification Date:"
 msgstr "Zuletzt verändert am"
 
-#: tryton/gui/window/form.py:263
+#: tryton/gui/window/form.py:260
 msgid "Model:"
 msgstr "Modell:"
 
-#: tryton/gui/window/form.py:271
+#: tryton/gui/window/form.py:304
 msgid "Are you sure to remove this record?"
 msgstr "Möchten Sie diesen Datensatz wirklich löschen?"
 
-#: tryton/gui/window/form.py:273
+#: tryton/gui/window/form.py:306
 msgid "Are you sure to remove those records?"
 msgstr "Möchten Sie diese Datensätze wirklich löschen?"
 
-#: tryton/gui/window/form.py:276
+#: tryton/gui/window/form.py:309
 msgid "Records not removed!"
 msgstr "Datensätze nicht gelöscht!"
 
-#: tryton/gui/window/form.py:278
+#: tryton/gui/window/form.py:311
 msgid "Records removed!"
-msgstr "Datensätze gelöscht!"
+msgstr "Datensätze gelöscht"
 
-#: tryton/gui/window/form.py:318
+#: tryton/gui/window/form.py:345
 msgid "Working now on the duplicated record(s)!"
-msgstr "Sie arbeiten nun an dem duplizierten Datensatz!"
+msgstr "Sie arbeiten nun an dem duplizierten Datensatz"
 
-#: tryton/gui/window/form.py:325
+#: tryton/gui/window/form.py:352
 msgid "Record saved!"
-msgstr "Datensatz gespeichert!"
+msgstr "Datensatz gespeichert"
 
-#: tryton/gui/window/form.py:328
+#: tryton/gui/window/form.py:355
 msgid "Invalid form!"
 msgstr "Ungültiges Formular!"
 
-#: tryton/gui/window/form.py:436
+#: tryton/gui/window/form.py:462
 msgid " of "
 msgstr " von "
 
-#: tryton/gui/window/form.py:457
+#: tryton/gui/window/form.py:483
 msgid ""
 "This record has been modified\n"
 "do you want to save it ?"
@@ -1283,46 +1292,52 @@ msgstr ""
 "Datensatz geändert\n"
 "Soll der Datensatz gespeichert werden?"
 
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
 msgid "Action"
 msgstr "Aktion"
 
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
 msgid "Launch action"
 msgstr "Aktion ausführen"
 
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
 msgid "Relate"
 msgstr "Beziehung"
 
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
 msgid "Open related records"
 msgstr "Datensätze einer Beziehung öffnen"
 
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
 msgid "Report"
 msgstr "Bericht"
 
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
 msgid "Open report"
 msgstr "Bericht öffnen"
 
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
 msgid "E-Mail"
 msgstr "E-Mail"
 
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
 msgid "E-Mail report"
 msgstr "Bericht per E-Mail senden"
 
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
 msgid "Print"
 msgstr "Drucken"
 
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
 msgid "Print report"
 msgstr "Bericht drucken"
 
+#: tryton/gui/window/form.py:607
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:257
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:1050
+msgid "Unknown"
+msgstr "Unbekannt"
+
 #: tryton/gui/window/limit.py:17
 msgid "Limit"
 msgstr "Limitierung"
@@ -1351,6 +1366,18 @@ msgstr "Einstellung"
 msgid "Current Password:"
 msgstr "Aktuelles Passwort:"
 
+#: tryton/gui/window/revision.py:20
+msgid "Revision"
+msgstr "Bearbeitung"
+
+#: tryton/gui/window/revision.py:29
+msgid "Select a revision"
+msgstr "Bearbeitung auswählen"
+
+#: tryton/gui/window/revision.py:32
+msgid "Revision:"
+msgstr "Bearbeitung:"
+
 #: tryton/gui/window/shortcuts.py:17
 msgid "Keyboard Shortcuts"
 msgstr "Schnelltasten"
@@ -1530,21 +1557,21 @@ msgstr "Feldnamen _hinzufügen"
 msgid "Name"
 msgstr "Name"
 
-#: tryton/gui/window/win_export.py:306
+#: tryton/gui/window/win_export.py:309
 msgid "What is the name of this export?"
 msgstr "Wie soll der Name des Exports lauten?"
 
-#: tryton/gui/window/win_export.py:429
+#: tryton/gui/window/win_export.py:436
 #, python-format
 msgid "%d record saved!"
-msgstr "%d Datensatz gespeichert!"
+msgstr "%d Datensatz gespeichert"
 
-#: tryton/gui/window/win_export.py:431
+#: tryton/gui/window/win_export.py:438
 #, python-format
 msgid "%d records saved!"
-msgstr "%d Datensätze gespeichert!"
+msgstr "%d Datensätze gespeichert"
 
-#: tryton/gui/window/win_export.py:434
+#: tryton/gui/window/win_export.py:441
 #, python-format
 msgid ""
 "Operation failed!\n"
@@ -1559,26 +1586,26 @@ msgstr ""
 msgid "Link"
 msgstr "Verknüpfung"
 
-#: tryton/gui/window/win_form.py:134
+#: tryton/gui/window/win_form.py:136
 msgid "Add"
 msgstr "Hinzufügen"
 
-#: tryton/gui/window/win_form.py:147
+#: tryton/gui/window/win_form.py:149
 msgid "Remove <Del>"
 msgstr "Entfernen <Entf>"
 
-#: tryton/gui/window/win_form.py:162
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:73
+#: tryton/gui/window/win_form.py:164
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:75
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:86
 msgid "Create a new record <F3>"
 msgstr "Neuen Datensatz erstellen <F3>"
 
-#: tryton/gui/window/win_form.py:174
+#: tryton/gui/window/win_form.py:176
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:106
 msgid "Delete selected record <Del>"
 msgstr "Ausgewählte Datensätze löschen <Entf>"
 
-#: tryton/gui/window/win_form.py:188
+#: tryton/gui/window/win_form.py:190
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:116
 msgid "Undelete selected record <Ins>"
 msgstr "Löschung der ausgewählten Datensätze rückgängig machen <Einfg>"
@@ -1601,10 +1628,10 @@ msgstr "Importdatei:"
 
 #: tryton/gui/window/win_import.py:111
 #: tryton/gui/window/view_form/view/form_gtk/binary.py:57
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:111
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:118
 #: tryton/gui/window/view_form/view/form_gtk/image.py:62
 #: tryton/gui/window/view_form/view/form_gtk/image.py:131
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:624
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:650
 msgid "Open..."
 msgstr "Öffnen..."
 
@@ -1628,19 +1655,19 @@ msgstr "Kodierung:"
 msgid "Lines to Skip:"
 msgstr "Zu überspringende Zeilen:"
 
-#: tryton/gui/window/win_import.py:184 tryton/gui/window/win_import.py:189
+#: tryton/gui/window/win_import.py:185 tryton/gui/window/win_import.py:190
 msgid "Field name"
 msgstr "Feldname"
 
-#: tryton/gui/window/win_import.py:249
+#: tryton/gui/window/win_import.py:251
 msgid "You must select an import file first!"
 msgstr "Zuerst muss eine Importdatei ausgewählt werden!"
 
-#: tryton/gui/window/win_import.py:260
+#: tryton/gui/window/win_import.py:262
 msgid "Error opening CSV file"
 msgstr "Fehler beim öffnen der CSV-Datei"
 
-#: tryton/gui/window/win_import.py:287
+#: tryton/gui/window/win_import.py:289
 #, python-format
 msgid "Error processing the file at field %s."
 msgstr "Fehler bei der Verarbeitung der Datei in Feld %s."
@@ -1648,31 +1675,14 @@ msgstr "Fehler bei der Verarbeitung der Datei in Feld %s."
 #: tryton/gui/window/win_import.py:364
 #, python-format
 msgid "%d record imported!"
-msgstr "%d Datensatz importiert!"
+msgstr "%d Datensatz importiert"
 
 #: tryton/gui/window/win_import.py:366
 #, python-format
 msgid "%d records imported!"
-msgstr "%d Datensätze importiert!"
-
-#: tryton/gui/window/win_import.py:371
-msgid "Importation Error!"
-msgstr "Fehler beim Importieren!"
+msgstr "%d Datensätze importiert"
 
-#: tryton/gui/window/win_import.py:372
-#, python-format
-msgid ""
-"Error importing record %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-msgstr ""
-"Fehler bei Import des Datensatzes %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-
-#: tryton/gui/window/wizard.py:291
+#: tryton/gui/window/wizard.py:286
 msgid "Wizard"
 msgstr "Wizard"
 
@@ -1681,41 +1691,35 @@ msgstr "Wizard"
 msgid "No String Attr."
 msgstr "Kein Zeichen Attr."
 
-#: tryton/gui/window/view_form/screen/screen.py:135
+#: tryton/gui/window/view_form/screen/screen.py:129
 msgid "ID"
 msgstr "ID"
 
-#: tryton/gui/window/view_form/screen/screen.py:136
+#: tryton/gui/window/view_form/screen/screen.py:130
 msgid "Creation User"
 msgstr "Erstellt von"
 
-#: tryton/gui/window/view_form/screen/screen.py:137
+#: tryton/gui/window/view_form/screen/screen.py:131
 msgid "Creation Date"
 msgstr "Erstellt am"
 
-#: tryton/gui/window/view_form/screen/screen.py:138
+#: tryton/gui/window/view_form/screen/screen.py:132
 msgid "Modification User"
 msgstr "Zuletzt verändert von"
 
-#: tryton/gui/window/view_form/screen/screen.py:139
+#: tryton/gui/window/view_form/screen/screen.py:133
 msgid "Modification Date"
 msgstr "Zuletzt verändert am"
 
-#: tryton/gui/window/view_form/screen/screen.py:634
+#: tryton/gui/window/view_form/screen/screen.py:631
 msgid "Unable to get view tree state"
 msgstr "Kann Sicht für den Menübaum nicht finden"
 
-#: tryton/gui/window/view_form/screen/screen.py:671
+#: tryton/gui/window/view_form/screen/screen.py:668
 msgid "Unable to set view tree state"
 msgstr "Kann Sicht für den Menübaum nicht anwenden"
 
-#: tryton/gui/window/view_form/view/list.py:651
-msgid "You must select a record to use the relation!"
-msgstr ""
-"Sie müssen zuerst einen Datensatz auswählen, um die Beziehung anzeigen zu"
-" können!"
-
-#: tryton/gui/window/view_form/view/screen_container.py:25
+#: tryton/gui/window/view_form/view/screen_container.py:23
 msgid ".."
 msgstr ".."
 
@@ -1723,19 +1727,19 @@ msgstr ".."
 msgid "F_ilters"
 msgstr "F_ilter"
 
-#: tryton/gui/window/view_form/view/screen_container.py:149
+#: tryton/gui/window/view_form/view/screen_container.py:147
 msgid "Show bookmarks of filters"
 msgstr "Filterlesezeichen anzeigen"
 
-#: tryton/gui/window/view_form/view/screen_container.py:314
+#: tryton/gui/window/view_form/view/screen_container.py:312
 msgid "Remove this bookmark"
 msgstr "Dieses Lesezeichen entfernen"
 
-#: tryton/gui/window/view_form/view/screen_container.py:321
+#: tryton/gui/window/view_form/view/screen_container.py:319
 msgid "Bookmark this filter"
 msgstr "Diesen Filter als Lesezeichen hinzufügen"
 
-#: tryton/gui/window/view_form/view/screen_container.py:380
+#: tryton/gui/window/view_form/view/screen_container.py:384
 msgid "Bookmark Name:"
 msgstr "Lesezeichenname:"
 
@@ -1763,24 +1767,24 @@ msgstr "Woche"
 msgid "Select a File..."
 msgstr "Datei auswählen..."
 
-#: tryton/gui/window/view_form/view/form_gtk/char.py:157
+#: tryton/gui/window/view_form/view/form_gtk/char.py:161
 msgid "Show plain text"
 msgstr "Klartext anzeigen"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:349
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:348
 msgid "Add value"
 msgstr "Wert hinzufügen"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:459
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:461
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:199
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:201
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:458
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:460
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:202
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:204
 #: tryton/gui/window/view_form/view/form_gtk/parser.py:255
 #: tryton/gui/window/view_form/view/form_gtk/parser.py:259
 msgid ":"
 msgstr ":"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:471
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:470
 #, python-format
 msgid "Remove \"%s\""
 msgstr "\"%s\" entfernen"
@@ -1797,25 +1801,25 @@ msgstr "Alle Dateien"
 msgid "Images"
 msgstr "Bilder"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:175
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:178
 msgid "Translation"
 msgstr "Übersetzung"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:231
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:234
 msgid "Edit"
 msgstr "Bearbeiten"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:236
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:239
 msgid "Fuzzy"
 msgstr "Unscharf"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:305
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:308
 msgid "You need to save the record before adding translations!"
 msgstr ""
-"Datensatz muss gespeichert werden, bevor eine Übersetzung hinzugefügt "
-"werden kann!"
+"Der Datensatz muss gespeichert werden, bevor eine Übersetzung hinzugefügt"
+" werden kann!"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:316
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:319
 msgid "No other language available!"
 msgstr "Keine anderen Sprachen verfügbar!"
 
@@ -1828,12 +1832,12 @@ msgstr "Bestehenden Datensatz hinzufügen"
 msgid "Remove selected record <Del>"
 msgstr "Ausgewählten Datensatz löschen <Entf>"
 
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:74
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:351
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:76
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:356
 msgid "Open a record <F2>"
 msgstr "Datensatz öffnen <F2>"
 
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:354
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:359
 msgid "Search a record <F2>"
 msgstr "Datensatz suchen <F2>"
 
@@ -1925,15 +1929,10 @@ msgstr "PNG Bild (*.png)"
 msgid "Image size too large!"
 msgstr "Bild ist zu groß!"
 
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:245
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:244
 msgid ": "
 msgstr ": "
 
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:258
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:1023
-msgid "Unknown"
-msgstr "Unbekannt"
-
 #: tryton/plugins/translation/__init__.py:18
 msgid "Translate view"
 msgstr "Aktuelle Sicht übersetzen"
diff --git a/share/locale/es_AR/LC_MESSAGES/tryton.mo b/share/locale/es_AR/LC_MESSAGES/tryton.mo
index ad5d258..2b5f699 100644
Binary files a/share/locale/es_AR/LC_MESSAGES/tryton.mo and b/share/locale/es_AR/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/es_AR/LC_MESSAGES/tryton.po b/share/locale/es_AR/LC_MESSAGES/tryton.po
index 693f4d5..6e9c5b7 100644
--- a/share/locale/es_AR/LC_MESSAGES/tryton.po
+++ b/share/locale/es_AR/LC_MESSAGES/tryton.po
@@ -1,14 +1,14 @@
 # Spanish (Argentina) translations for tryton.
-# Copyright (C) 2012-2013 Thymbra Latinoamericana
+# Copyright (C) 2012-2014 Thymbra Latinoamericana
 # This file is distributed under the same license as the tryton project.
-# Bruno M. Villasanti <bvillasanti at thymbra.com>, 2012-2013.
+# Bruno M. Villasanti <bvillasanti at thymbra.com>, 2012-2014.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: tryton 3.0.0\n"
+"Project-Id-Version: tryton 3.2.0\n"
 "Report-Msgid-Bugs-To: issue_tracker at tryton.org\n"
-"POT-Creation-Date: 2013-10-20 16:34+0200\n"
-"PO-Revision-Date: 2013-10-18 01:20-0300\n"
+"POT-Creation-Date: 2014-04-18 22:49+0200\n"
+"PO-Revision-Date: 2014-04-17 16:35-0300\n"
 "Last-Translator: Bruno M. Villasanti <bvillasanti at thymbra.com>\n"
 "Language-Team: Argentina\n"
 "Plural-Forms: nplurals=2; plural=(n != 1)\n"
@@ -64,62 +64,62 @@ msgstr "¡No se ha podido escribir el archivo de configuración %s!"
 msgid "Unable to set locale %s"
 msgstr "No se ha podido establecer el idioma %s"
 
-#: tryton/action/main.py:163
+#: tryton/action/main.py:171
 msgid "Select your action"
 msgstr "Seleccione su acción"
 
-#: tryton/action/main.py:169
+#: tryton/action/main.py:177
 msgid "No action defined!"
 msgstr "¡No se ha definido ninguna acción!"
 
-#: tryton/common/common.py:270
+#: tryton/common/common.py:284
 msgid "Tryton Connection"
 msgstr "Conexión a Tryton"
 
-#: tryton/common/common.py:281
+#: tryton/common/common.py:295
 msgid "Server:"
 msgstr "Servidor:"
 
-#: tryton/common/common.py:299 tryton/gui/window/dblogin.py:79
+#: tryton/common/common.py:313 tryton/gui/window/dblogin.py:79
 msgid "Port:"
 msgstr "Puerto:"
 
-#: tryton/common/common.py:369
+#: tryton/common/common.py:383
 msgid "Selection"
 msgstr "Selección"
 
-#: tryton/common/common.py:378
+#: tryton/common/common.py:392
 msgid "Your selection:"
 msgstr "Su selección:"
 
-#: tryton/common/common.py:498 tryton/gui/main.py:1407
-#: tryton/gui/window/win_export.py:402
+#: tryton/common/common.py:528 tryton/gui/main.py:1420
+#: tryton/gui/window/win_export.py:409
 #: tryton/gui/window/view_form/view/form_gtk/binary.py:69
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:138
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:150
 #: tryton/gui/window/view_form/view/form_gtk/image.py:74
-#: tryton/gui/window/view_form/view/form_gtk/image.py:158
+#: tryton/gui/window/view_form/view/form_gtk/image.py:161
 #: tryton/gui/window/view_form/view/graph_gtk/parser.py:105
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:656
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:686
 msgid "Save As..."
 msgstr "Guardar como..."
 
-#: tryton/common/common.py:649
+#: tryton/common/common.py:675
 msgid "Always ignore this warning."
 msgstr "Ignorar siempre esta advertencia."
 
-#: tryton/common/common.py:654
+#: tryton/common/common.py:680
 msgid "Do you want to proceed?"
 msgstr "¿Desea continuar?"
 
-#: tryton/common/common.py:673
+#: tryton/common/common.py:699
 msgid "Confirmation"
 msgstr "Confirmación"
 
-#: tryton/common/common.py:779 tryton/common/common.py:1083
+#: tryton/common/common.py:805 tryton/common/common.py:1114
 msgid "Concurrency Exception"
 msgstr "Excepción de concurrencia"
 
-#: tryton/common/common.py:793
+#: tryton/common/common.py:819
 msgid ""
 "<b>Write Concurrency Warning:</b>\n"
 "\n"
@@ -137,50 +137,50 @@ msgstr ""
 "   - \"Comparar\" para ver la versión modificada:\n"
 "   - \"Guardar de todas formas\" para guardar sus cambios."
 
-#: tryton/common/common.py:802
+#: tryton/common/common.py:828
 msgid "Compare"
 msgstr "Comparar"
 
-#: tryton/common/common.py:807
+#: tryton/common/common.py:833
 msgid "Write Anyway"
 msgstr "Guardar de todas formas"
 
-#: tryton/common/common.py:833 tryton/gui/window/win_export.py:435
-#: tryton/gui/window/win_import.py:260 tryton/gui/window/win_import.py:288
+#: tryton/common/common.py:859 tryton/gui/window/win_export.py:442
+#: tryton/gui/window/win_import.py:262 tryton/gui/window/win_import.py:290
 msgid "Error"
 msgstr "Error"
 
-#: tryton/common/common.py:837
+#: tryton/common/common.py:863
 msgid "Report Bug"
 msgstr "Informar de un error"
 
-#: tryton/common/common.py:844
+#: tryton/common/common.py:870
 msgid "Application Error!"
 msgstr "¡Error de aplicación!"
 
-#: tryton/common/common.py:867
+#: tryton/common/common.py:893
 msgid "Error: "
 msgstr "Error: "
 
-#: tryton/common/common.py:887
+#: tryton/common/common.py:913
 #, python-format
 msgid "To report bugs you must have an account on <u>%s</u>"
 msgstr "Para informar de errores debe tener una cuenta en <u>%s</u>"
 
-#: tryton/common/common.py:917
+#: tryton/common/common.py:943
 msgid "Bug Tracker"
 msgstr "Seguimiento de errores"
 
-#: tryton/common/common.py:935
+#: tryton/common/common.py:961
 msgid "User:"
 msgstr "Usuario:"
 
-#: tryton/common/common.py:943 tryton/common/common.py:1101
+#: tryton/common/common.py:969 tryton/common/common.py:1132
 #: tryton/gui/window/dblogin.py:462
 msgid "Password:"
 msgstr "Contraseña:"
 
-#: tryton/common/common.py:993
+#: tryton/common/common.py:1024
 msgid ""
 "The same bug was already reported by another user.\n"
 "To keep you informed your username is added to the nosy-list of this issue"
@@ -189,11 +189,11 @@ msgstr ""
 "Para mantenerle informado añadiremos su usuario a la lista de interesados"
 " en este asunto."
 
-#: tryton/common/common.py:1004
+#: tryton/common/common.py:1035
 msgid "Created new bug with ID "
 msgstr "Se creó un nuevo error con ID "
 
-#: tryton/common/common.py:1012 tryton/gui/main.py:921
+#: tryton/common/common.py:1043 tryton/gui/main.py:928
 msgid ""
 "Connection error!\n"
 "Bad username or password!"
@@ -201,11 +201,11 @@ msgstr ""
 "¡Error de conexión!\n"
 "¡Nombre de usuario o contraseña incorrectos!"
 
-#: tryton/common/common.py:1017
+#: tryton/common/common.py:1048
 msgid "Exception:"
 msgstr "Excepción:"
 
-#: tryton/common/common.py:1034
+#: tryton/common/common.py:1065
 msgid ""
 "The server fingerprint has changed since last connection!\n"
 "The application will stop connecting to this server until its fingerprint"
@@ -216,12 +216,12 @@ msgstr ""
 "La aplicación no se podrá conectar a este servidor hasta que se corrija "
 "la huella de seguridad del servidor."
 
-#: tryton/common/common.py:1036
+#: tryton/common/common.py:1067
 msgid "Security risk!"
 msgstr "¡Riesgo de seguridad!"
 
-#: tryton/common/common.py:1042 tryton/common/common.py:1108
-#: tryton/gui/main.py:918
+#: tryton/common/common.py:1073 tryton/common/common.py:1139
+#: tryton/gui/main.py:925
 msgid ""
 "Connection error!\n"
 "Unable to connect to the server!"
@@ -229,39 +229,39 @@ msgstr ""
 "¡Error de conexión!\n"
 "¡No ha sido posible conectarse al servidor!"
 
-#: tryton/common/common.py:1123
+#: tryton/common/common.py:1154
 msgid "Network Error!"
 msgstr "¡Error de red!"
 
-#: tryton/common/common.py:1354
+#: tryton/common/common.py:1409
 msgid "Y"
 msgstr "A"
 
-#: tryton/common/common.py:1355
+#: tryton/common/common.py:1410
 msgid "M"
 msgstr "M"
 
-#: tryton/common/common.py:1356
+#: tryton/common/common.py:1411
 msgid "w"
 msgstr "s"
 
-#: tryton/common/common.py:1357
+#: tryton/common/common.py:1412
 msgid "d"
 msgstr "d"
 
-#: tryton/common/common.py:1358
+#: tryton/common/common.py:1413
 msgid "h"
 msgstr "h"
 
-#: tryton/common/common.py:1359
+#: tryton/common/common.py:1414
 msgid "m"
 msgstr "m"
 
-#: tryton/common/completion.py:22
+#: tryton/common/completion.py:21
 msgid "<i>Search...</i>"
 msgstr "<i>Buscar...</i>"
 
-#: tryton/common/completion.py:23
+#: tryton/common/completion.py:22
 msgid "<i>Create...</i>"
 msgstr "<i>Crear...</i>"
 
@@ -269,253 +269,257 @@ msgstr "<i>Crear...</i>"
 msgid "Open the calendar <F2>"
 msgstr "Abrir el calendario <F2>"
 
-#: tryton/common/date_widget.py:271
+#: tryton/common/date_widget.py:275
 msgid "Date Selection"
 msgstr "Selección de fecha"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "y"
 msgstr "a"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "yes"
 msgstr "sí"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "true"
 msgstr "verdadero"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "t"
 msgstr "v"
 
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
 msgid "True"
 msgstr "Verdadero"
 
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
 msgid "False"
 msgstr "Falso"
 
-#: tryton/common/popup_menu.py:71
+#: tryton/common/popup_menu.py:72
+msgid "Edit..."
+msgstr "Editar..."
+
+#: tryton/common/popup_menu.py:77
 msgid "Attachments..."
 msgstr "Adjuntos..."
 
-#: tryton/common/popup_menu.py:76
+#: tryton/common/popup_menu.py:87
 msgid "Actions..."
 msgstr "Acciones..."
 
-#: tryton/common/popup_menu.py:77
+#: tryton/common/popup_menu.py:88
 msgid "Relate..."
 msgstr "Relacionado..."
 
-#: tryton/common/popup_menu.py:78
+#: tryton/common/popup_menu.py:89
 msgid "Report..."
-msgstr "Informe..."
+msgstr "Informes..."
 
-#: tryton/common/popup_menu.py:79
+#: tryton/common/popup_menu.py:90
 msgid "E-Mail..."
 msgstr "Correo electrónico..."
 
-#: tryton/common/popup_menu.py:80
+#: tryton/common/popup_menu.py:91
 msgid "Print..."
 msgstr "Imprimir..."
 
-#: tryton/gui/main.py:217
+#: tryton/gui/main.py:218
 msgid "_File"
 msgstr "_Archivo"
 
-#: tryton/gui/main.py:225
+#: tryton/gui/main.py:226
 msgid "_User"
 msgstr "U_suario"
 
-#: tryton/gui/main.py:239
+#: tryton/gui/main.py:240
 msgid "_Options"
 msgstr "_Opciones"
 
-#: tryton/gui/main.py:247
+#: tryton/gui/main.py:248
 msgid "Fa_vorites"
 msgstr "Fa_voritos"
 
-#: tryton/gui/main.py:263
+#: tryton/gui/main.py:264
 msgid "_Help"
 msgstr "Ay_uda"
 
-#: tryton/gui/main.py:285 tryton/gui/window/win_search.py:26
+#: tryton/gui/main.py:286 tryton/gui/window/win_search.py:26
 #: tryton/gui/window/view_form/view/screen_container.py:100
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:333
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:332
 #: tryton/gui/window/view_form/view/form_gtk/many2many.py:40
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:45
 msgid "Search"
 msgstr "Buscar"
 
-#: tryton/gui/main.py:364
+#: tryton/gui/main.py:374
 msgid "No result found."
 msgstr "No se han encontrado resultados."
 
-#: tryton/gui/main.py:384
+#: tryton/gui/main.py:396
 msgid "_Connect..."
 msgstr "_Conectar..."
 
-#: tryton/gui/main.py:393
+#: tryton/gui/main.py:405
 msgid "_Disconnect"
 msgstr "_Desconectar"
 
-#: tryton/gui/main.py:403
+#: tryton/gui/main.py:415
 msgid "Data_base"
 msgstr "_Base de datos"
 
-#: tryton/gui/main.py:414
+#: tryton/gui/main.py:426
 msgid "_New Database..."
 msgstr "_Nueva base de datos..."
 
-#: tryton/gui/main.py:423
+#: tryton/gui/main.py:435
 msgid "_Restore Database..."
 msgstr "_Restaurar base de datos..."
 
-#: tryton/gui/main.py:432
+#: tryton/gui/main.py:444
 msgid "_Backup Database..."
 msgstr "Hacer _copia de seguridad de la base de datos..."
 
-#: tryton/gui/main.py:441
+#: tryton/gui/main.py:453
 msgid "Dro_p Database..."
 msgstr "_Eliminar base de datos..."
 
-#: tryton/gui/main.py:450
+#: tryton/gui/main.py:462
 msgid "_Quit..."
 msgstr "_Salir..."
 
-#: tryton/gui/main.py:465
+#: tryton/gui/main.py:477
 msgid "_Preferences..."
 msgstr "_Preferencias..."
 
-#: tryton/gui/main.py:476
+#: tryton/gui/main.py:488
 msgid "_Menu Reload"
 msgstr "_Recargar menú"
 
-#: tryton/gui/main.py:485
+#: tryton/gui/main.py:497
 msgid "_Menu Toggle"
 msgstr "Conmutar _menú"
 
-#: tryton/gui/main.py:492
+#: tryton/gui/main.py:504
 msgid "_Global Search"
-msgstr "Búsqueda _Global"
+msgstr "Búsqueda _global"
 
-#: tryton/gui/main.py:507
+#: tryton/gui/main.py:519
 msgid "_Toolbar"
 msgstr "Barra de herramien_tas"
 
-#: tryton/gui/main.py:515
+#: tryton/gui/main.py:527
 msgid "_Default"
 msgstr "Por _defecto"
 
-#: tryton/gui/main.py:525
+#: tryton/gui/main.py:537
 msgid "_Text and Icons"
 msgstr "Texto _e iconos"
 
-#: tryton/gui/main.py:535
+#: tryton/gui/main.py:547
 msgid "_Icons"
 msgstr "_Iconos"
 
-#: tryton/gui/main.py:544
+#: tryton/gui/main.py:556
 msgid "_Text"
 msgstr "_Texto"
 
-#: tryton/gui/main.py:553
+#: tryton/gui/main.py:565
 msgid "_Menubar"
 msgstr "Barra de _menú"
 
-#: tryton/gui/main.py:561
+#: tryton/gui/main.py:573
 msgid "Change Accelerators"
 msgstr "Cambiar teclas rápidas"
 
-#: tryton/gui/main.py:569
+#: tryton/gui/main.py:581
 msgid "_Mode"
 msgstr "_Modo"
 
-#: tryton/gui/main.py:577
+#: tryton/gui/main.py:589
 msgid "_Normal"
 msgstr "_Normal"
 
-#: tryton/gui/main.py:585
+#: tryton/gui/main.py:597
 msgid "_PDA"
 msgstr "_PDA"
 
-#: tryton/gui/main.py:592
+#: tryton/gui/main.py:604
 msgid "_Form"
 msgstr "_Formulario"
 
-#: tryton/gui/main.py:601
+#: tryton/gui/main.py:613
 msgid "Save Width/Height"
 msgstr "Guardar ancho/alto"
 
-#: tryton/gui/main.py:612
+#: tryton/gui/main.py:624
 msgid "Save Tree State"
 msgstr "Guardar estado del árbol"
 
-#: tryton/gui/main.py:624
+#: tryton/gui/main.py:636
 msgid "Spell Checking"
 msgstr "Corrección ortográfica"
 
-#: tryton/gui/main.py:634
+#: tryton/gui/main.py:646
 msgid "Tabs Position"
 msgstr "Posición de las pestañas"
 
-#: tryton/gui/main.py:642
+#: tryton/gui/main.py:654
 msgid "Top"
 msgstr "Superior"
 
-#: tryton/gui/main.py:651
+#: tryton/gui/main.py:663
 msgid "Left"
 msgstr "Izquierda"
 
-#: tryton/gui/main.py:661
+#: tryton/gui/main.py:673
 msgid "Right"
 msgstr "Derecha"
 
-#: tryton/gui/main.py:671
+#: tryton/gui/main.py:683
 msgid "Bottom"
 msgstr "Inferior"
 
-#: tryton/gui/main.py:680
+#: tryton/gui/main.py:692
 msgid "_Previous Tab"
-msgstr "_Anterior"
+msgstr "_Anterior pestaña"
 
-#: tryton/gui/main.py:686
+#: tryton/gui/main.py:698
 msgid "_Next Tab"
-msgstr "Siguiente"
+msgstr "_Siguiente pestaña"
 
-#: tryton/gui/main.py:692
+#: tryton/gui/main.py:704
 msgid "Search Limit..."
-msgstr "_Límite de búsqueda..."
+msgstr "Límite de búsqueda..."
 
-#: tryton/gui/main.py:698
+#: tryton/gui/main.py:710
 msgid "_Email..."
 msgstr "_Correo electrónico..."
 
-#: tryton/gui/main.py:706
+#: tryton/gui/main.py:718
 msgid "_Save Options"
 msgstr "_Guardar opciones"
 
-#: tryton/gui/main.py:718
+#: tryton/gui/main.py:730
 msgid "_Tips..."
 msgstr "Conse_jos..."
 
-#: tryton/gui/main.py:727
+#: tryton/gui/main.py:739
 msgid "_Keyboard Shortcuts..."
 msgstr "Com_binaciones de teclas..."
 
-#: tryton/gui/main.py:736
+#: tryton/gui/main.py:748
 msgid "_About..."
 msgstr "_Acerca de..."
 
-#: tryton/gui/main.py:787
+#: tryton/gui/main.py:799
 msgid "Manage Favorites"
 msgstr "_Administrar favoritos"
 
-#: tryton/gui/main.py:935
+#: tryton/gui/main.py:942
 msgid ""
 "The following action requires to close all tabs.\n"
 "Do you want to continue?"
@@ -523,11 +527,11 @@ msgstr ""
 "La acción seleccionada requiere cerrar todas las pestañas. \n"
 "¿Desea continuar?"
 
-#: tryton/gui/main.py:1196
+#: tryton/gui/main.py:1206
 msgid "Close Tab"
 msgstr "Cerrar pestaña"
 
-#: tryton/gui/main.py:1314
+#: tryton/gui/main.py:1327
 msgid ""
 "You are going to delete a Tryton database.\n"
 "Are you really sure to proceed?"
@@ -535,7 +539,7 @@ msgstr ""
 "Va a eliminar una base de datos de Tryton.\n"
 "¿Está seguro que quiere continuar?"
 
-#: tryton/gui/main.py:1324
+#: tryton/gui/main.py:1337
 msgid ""
 "Wrong Tryton Server Password\n"
 "Please try again."
@@ -543,28 +547,28 @@ msgstr ""
 "La contraseña del servidor Tryton es incorrecta.\n"
 "Inténtelo de nuevo."
 
-#: tryton/gui/main.py:1326 tryton/gui/main.py:1362 tryton/gui/main.py:1398
-#: tryton/gui/window/dbcreate.py:382
+#: tryton/gui/main.py:1339 tryton/gui/main.py:1375 tryton/gui/main.py:1411
+#: tryton/gui/window/dbcreate.py:384
 msgid "Access denied!"
 msgstr "¡Acceso denegado!"
 
-#: tryton/gui/main.py:1329
+#: tryton/gui/main.py:1342
 msgid "Database drop failed with error message:\n"
 msgstr "La eliminación de la base de datos ha fallado con el mensaje de error:\n"
 
-#: tryton/gui/main.py:1330
+#: tryton/gui/main.py:1343
 msgid "Database drop failed!"
 msgstr "¡Falló la eliminación de la base de datos!"
 
-#: tryton/gui/main.py:1332
+#: tryton/gui/main.py:1345
 msgid "Database dropped successfully!"
-msgstr "¡La base de datos se ha eliminado correctamente!"
+msgstr "¡La base de datos se ha eliminado satisfactoriamente!"
 
-#: tryton/gui/main.py:1337
+#: tryton/gui/main.py:1350
 msgid "Open Backup File to Restore..."
 msgstr "Abrir una copia de seguridad para restaurar..."
 
-#: tryton/gui/main.py:1354
+#: tryton/gui/main.py:1367
 msgid ""
 "It is not possible to restore a password protected database.\n"
 "Backup and restore needed to be proceed manual."
@@ -572,11 +576,11 @@ msgstr ""
 "No es posible restaurar una base de datos protegida con contraseña.\n"
 "La copia de seguridad y su restauración tiene que ser manual."
 
-#: tryton/gui/main.py:1358 tryton/gui/main.py:1394
+#: tryton/gui/main.py:1371 tryton/gui/main.py:1407
 msgid "Database is password protected!"
 msgstr "¡La base de datos está protegida por contraseña!"
 
-#: tryton/gui/main.py:1360 tryton/gui/main.py:1396
+#: tryton/gui/main.py:1373 tryton/gui/main.py:1409
 msgid ""
 "Wrong Tryton Server Password.\n"
 "Please try again."
@@ -584,19 +588,19 @@ msgstr ""
 "La contraseña del servidor Tryton es incorrecta.\n"
 "Inténtelo de nuevo."
 
-#: tryton/gui/main.py:1365
+#: tryton/gui/main.py:1378
 msgid "Database restore failed with error message:\n"
 msgstr "La restauración de la base de datos ha fallado con el error:\n"
 
-#: tryton/gui/main.py:1367 tryton/gui/main.py:1372
+#: tryton/gui/main.py:1380 tryton/gui/main.py:1385
 msgid "Database restore failed!"
 msgstr "¡La restauración de la base de datos ha fallado!"
 
-#: tryton/gui/main.py:1370
+#: tryton/gui/main.py:1383
 msgid "Database restored successfully!"
 msgstr "¡La base de datos se ha restaurado correctamente!"
 
-#: tryton/gui/main.py:1391
+#: tryton/gui/main.py:1404
 msgid ""
 "It is not possible to dump a password protected Database.\n"
 "Backup and restore needed to be proceed manual."
@@ -604,75 +608,75 @@ msgstr ""
 "No es posible hacer copia de una base de datos protegida por contraseña.\n"
 "La copia de seguridad y su restauración tiene que ser manual."
 
-#: tryton/gui/main.py:1401
+#: tryton/gui/main.py:1414
 msgid "Database dump failed with error message:\n"
 msgstr "La extracción de la base de datos ha fallado con el mensaje de error:\n"
 
-#: tryton/gui/main.py:1403
+#: tryton/gui/main.py:1416
 msgid "Database dump failed!"
 msgstr "¡La extracción de la base de datos ha fallado!"
 
-#: tryton/gui/main.py:1414
+#: tryton/gui/main.py:1427
 msgid "Database backuped successfully!"
 msgstr "¡La copia de seguridad de la base de datos ha finalizado correctamente!"
 
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
 msgid "New"
 msgstr "Nuevo"
 
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
 msgid "Create a new record"
 msgstr "Crear un nuevo registro"
 
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
 #: tryton/gui/window/win_export.py:142
 msgid "Save"
 msgstr "Guardar"
 
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
 msgid "Save this record"
 msgstr "Guardar este registro"
 
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
-#: tryton/gui/window/win_form.py:228
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
+#: tryton/gui/window/win_form.py:232
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:154
 msgid "Switch"
 msgstr "Cambiar vista"
 
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
 msgid "Switch view"
 msgstr "Cambiar vista"
 
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
 msgid "_Reload"
 msgstr "_Recargar"
 
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
 msgid "Reload"
 msgstr "Recargar"
 
-#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:48
+#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:50
 msgid "_New"
 msgstr "_Nuevo"
 
-#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:49
-#: tryton/gui/window/win_form.py:66
+#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:51
+#: tryton/gui/window/win_form.py:67
 msgid "_Save"
 msgstr "_Guardar"
 
-#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:50
+#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:52
 msgid "_Switch View"
 msgstr "Cambiar vi_sta"
 
-#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:52
+#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:54
 msgid "_Reload/Undo"
 msgstr "_Recargar/Deshacer"
 
-#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:56
+#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:58
 msgid "_Delete..."
 msgstr "_Eliminar..."
 
-#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:65
+#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:68
 msgid "_Close Tab"
 msgstr "_Cerrar pestaña"
 
@@ -707,28 +711,28 @@ msgstr ""
 "bloqueados.\n"
 "Pulse en «Cambiar» para cambiar la dirección."
 
-#: tryton/gui/window/dbcreate.py:137
+#: tryton/gui/window/dbcreate.py:139
 msgid "Create new database"
 msgstr "Crear nueva base de datos"
 
-#: tryton/gui/window/dbcreate.py:147
+#: tryton/gui/window/dbcreate.py:149
 msgid "C_reate"
 msgstr "C_rear"
 
-#: tryton/gui/window/dbcreate.py:155
+#: tryton/gui/window/dbcreate.py:157
 msgid "Create the new database."
 msgstr "Crear la nueva base de datos."
 
-#: tryton/gui/window/dbcreate.py:166
+#: tryton/gui/window/dbcreate.py:168
 msgid "Server Setup:"
 msgstr "Configuración del servidor:"
 
-#: tryton/gui/window/dbcreate.py:171
+#: tryton/gui/window/dbcreate.py:173
 msgid "Server connection:"
 msgstr "Conexión con el servidor:"
 
-#: tryton/gui/window/dbcreate.py:180 tryton/gui/window/dbdumpdrop.py:140
-#: tryton/gui/window/dbrestore.py:86
+#: tryton/gui/window/dbcreate.py:182 tryton/gui/window/dbdumpdrop.py:140
+#: tryton/gui/window/dbrestore.py:88
 msgid ""
 "This is the URL of the server. Use server 'localhost' and port '8000' if "
 "the server is installed on this computer. Click on 'Change' to change the"
@@ -738,22 +742,22 @@ msgstr ""
 "«8000» si el servidor está instalado en este ordenador. Pulse en "
 "«Cambiar» para cambiar la dirección."
 
-#: tryton/gui/window/dbcreate.py:183 tryton/gui/window/dbdumpdrop.py:147
-#: tryton/gui/window/dbrestore.py:91
+#: tryton/gui/window/dbcreate.py:185 tryton/gui/window/dbdumpdrop.py:147
+#: tryton/gui/window/dbrestore.py:93
 msgid "C_hange"
 msgstr "C_ambiar"
 
-#: tryton/gui/window/dbcreate.py:192 tryton/gui/window/dbrestore.py:97
+#: tryton/gui/window/dbcreate.py:194 tryton/gui/window/dbrestore.py:99
 msgid "Setup the server connection..."
 msgstr "Configurar la conexión con el servidor..."
 
-#: tryton/gui/window/dbcreate.py:195 tryton/gui/window/dbdumpdrop.py:186
-#: tryton/gui/window/dbrestore.py:100
+#: tryton/gui/window/dbcreate.py:197 tryton/gui/window/dbdumpdrop.py:186
+#: tryton/gui/window/dbrestore.py:102
 msgid "Tryton Server Password:"
 msgstr "Contraseña del servidor Tryton:"
 
-#: tryton/gui/window/dbcreate.py:205 tryton/gui/window/dbdumpdrop.py:196
-#: tryton/gui/window/dbrestore.py:109
+#: tryton/gui/window/dbcreate.py:207 tryton/gui/window/dbdumpdrop.py:196
+#: tryton/gui/window/dbrestore.py:111
 msgid ""
 "This is the password of the Tryton server. It doesn't belong to a real "
 "user. This password is usually defined in the trytond configuration."
@@ -761,15 +765,15 @@ msgstr ""
 "Esta es la contraseña del servidor Tryton. No corresponde a un usuario "
 "real. Esta contraseña se suele definir en la configuración de trytond."
 
-#: tryton/gui/window/dbcreate.py:216
+#: tryton/gui/window/dbcreate.py:218
 msgid "New database setup:"
 msgstr "Nueva configuración de la base de datos:"
 
-#: tryton/gui/window/dbcreate.py:222
+#: tryton/gui/window/dbcreate.py:224
 msgid "Database name:"
 msgstr "Nombre de la base de datos:"
 
-#: tryton/gui/window/dbcreate.py:234
+#: tryton/gui/window/dbcreate.py:236
 msgid ""
 "Choose the name of the new database.\n"
 "Allowed characters are alphanumerical or _ (underscore)\n"
@@ -780,11 +784,11 @@ msgstr ""
 "Puede utilizar caracteres alfanuméricos o _ (subrayado)\n"
 "¡Evite cualquier acento, espacio o caracteres especiales! Ejemplo: tryton"
 
-#: tryton/gui/window/dbcreate.py:241
+#: tryton/gui/window/dbcreate.py:243
 msgid "Default language:"
 msgstr "Idioma por defecto:"
 
-#: tryton/gui/window/dbcreate.py:251
+#: tryton/gui/window/dbcreate.py:253
 msgid ""
 "Choose the default language that will be installed for this database. You"
 " will be able to install new languages after installation through the "
@@ -794,11 +798,11 @@ msgstr ""
 "Podrá instalar nuevos idiomas después de la instalación, a través del "
 "menú de administración."
 
-#: tryton/gui/window/dbcreate.py:255
+#: tryton/gui/window/dbcreate.py:257
 msgid "Admin password:"
 msgstr "Contraseña del administrador:"
 
-#: tryton/gui/window/dbcreate.py:265
+#: tryton/gui/window/dbcreate.py:267
 msgid ""
 "Choose a password for the admin user of the new database. With these "
 "credentials you will be later able to login into the database:\n"
@@ -810,15 +814,15 @@ msgstr ""
 "Nombre de usuario: admin\n"
 "Contraseña: <La contraseña que introduzca aquí>"
 
-#: tryton/gui/window/dbcreate.py:273
+#: tryton/gui/window/dbcreate.py:275
 msgid "Confirm admin password:"
-msgstr "Confirme la contraseña del administrador:"
+msgstr "Confirme la contraseña del Administrador:"
 
-#: tryton/gui/window/dbcreate.py:282
+#: tryton/gui/window/dbcreate.py:284
 msgid "Type the Admin password again"
-msgstr "Teclee la contraseña del administrador de nuevo"
+msgstr "Teclee la contraseña del Administrador de nuevo"
 
-#: tryton/gui/window/dbcreate.py:330
+#: tryton/gui/window/dbcreate.py:332
 msgid ""
 "The database name is restricted to alpha-nummerical characters and \"_\" "
 "(underscore). Avoid all accents, space and any other special characters."
@@ -827,31 +831,31 @@ msgstr ""
 " y \"_\" (subrayado). Evite todos los acentos, espacios y cualquier otro "
 "carácter especial."
 
-#: tryton/gui/window/dbcreate.py:335
+#: tryton/gui/window/dbcreate.py:337
 msgid "Wrong characters in database name!"
 msgstr "¡Ha introducido caracteres incorrectos en el nombre de la base de datos!"
 
-#: tryton/gui/window/dbcreate.py:339
+#: tryton/gui/window/dbcreate.py:341
 msgid "The new admin password doesn't match the confirmation field.\n"
 msgstr ""
-"La nueva contraseña del administrador no coincide con el campo de "
+"La nueva contraseña del Administrador no coincide con el campo de "
 "confirmación.\n"
 
-#: tryton/gui/window/dbcreate.py:341
+#: tryton/gui/window/dbcreate.py:343
 msgid "Passwords doesn't match!"
 msgstr "¡Las contraseñas no coinciden!"
 
-#: tryton/gui/window/dbcreate.py:344
+#: tryton/gui/window/dbcreate.py:346
 msgid "Admin password and confirmation are required to create a new database."
 msgstr ""
-"La contraseña del administrador y su confirmación son necesarias para "
+"La contraseña del Administrador y su confirmación son necesarias para "
 "crear una nueva base de datos."
 
-#: tryton/gui/window/dbcreate.py:346
+#: tryton/gui/window/dbcreate.py:348
 msgid "Missing admin password!"
-msgstr "¡Falta la contraseña del administrador!"
+msgstr "¡Falta la contraseña del Administrador!"
 
-#: tryton/gui/window/dbcreate.py:361
+#: tryton/gui/window/dbcreate.py:363
 msgid ""
 "A database with the same name already exists.\n"
 "Try another database name."
@@ -859,15 +863,15 @@ msgstr ""
 "Ya existe una base de datos con el mismo nombre.\n"
 "Inténtelo con otro nombre de base de datos."
 
-#: tryton/gui/window/dbcreate.py:364
+#: tryton/gui/window/dbcreate.py:366
 msgid "This database name already exist!"
 msgstr "¡Ya existe una base de datos con este nombre!"
 
-#: tryton/gui/window/dbcreate.py:379
+#: tryton/gui/window/dbcreate.py:381
 msgid "Sorry, wrong password for the Tryton server. Please try again."
 msgstr "La contraseña del servidor Tryton no es correcta. Inténtelo de nuevo."
 
-#: tryton/gui/window/dbcreate.py:387
+#: tryton/gui/window/dbcreate.py:389
 msgid ""
 "Can't create the database, caused by an unknown reason.\n"
 "If there is a database created, it could be broken. Maybe drop this "
@@ -880,7 +884,7 @@ msgstr ""
 "adicional.\n"
 "Mensaje de error:\n"
 
-#: tryton/gui/window/dbcreate.py:395
+#: tryton/gui/window/dbcreate.py:397
 msgid "Error creating database!"
 msgstr "¡Se ha producido un error al crear la base de datos!"
 
@@ -928,7 +932,7 @@ msgstr "Eliminar la base de datos elegida."
 msgid "Choose a Tryton database to delete:"
 msgstr "Elija la base de datos Tryton a eliminar:"
 
-#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:75
+#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:77
 msgid "Server Connection:"
 msgstr "Conexión al servidor:"
 
@@ -1019,15 +1023,15 @@ msgstr "Servidor:"
 msgid "User name:"
 msgstr "Nombre de usuario:"
 
-#: tryton/gui/window/dbrestore.py:64
+#: tryton/gui/window/dbrestore.py:66
 msgid "Restore Database"
 msgstr "Restaurar base de datos"
 
-#: tryton/gui/window/dbrestore.py:117
+#: tryton/gui/window/dbrestore.py:119
 msgid "File to Restore:"
 msgstr "Archivo a restaurar:"
 
-#: tryton/gui/window/dbrestore.py:131
+#: tryton/gui/window/dbrestore.py:133
 msgid ""
 "Choose the name of the database to be restored.\n"
 "Allowed characters are alphanumerical or _ (underscore)\n"
@@ -1039,15 +1043,15 @@ msgstr ""
 "¡Evite todos los acentos, espacios, o caracteres especiales! \n"
 "Ejemplo: tryton"
 
-#: tryton/gui/window/dbrestore.py:137
+#: tryton/gui/window/dbrestore.py:139
 msgid "New Database Name:"
 msgstr "Nombre de la nueva base de datos:"
 
-#: tryton/gui/window/dbrestore.py:140
+#: tryton/gui/window/dbrestore.py:142
 msgid "Update Database:"
 msgstr "Actualizar base de datos:"
 
-#: tryton/gui/window/dbrestore.py:144
+#: tryton/gui/window/dbrestore.py:146
 msgid ""
 "Check for an automatic database update after restoring a database from a "
 "previous Tryton version."
@@ -1055,11 +1059,11 @@ msgstr ""
 "Márquelo para que se realice una actualización automática de la base de "
 "datos desde una versión anterior de Tryton, después de restaurarla."
 
-#: tryton/gui/window/dbrestore.py:154
+#: tryton/gui/window/dbrestore.py:156
 msgid "Restore"
 msgstr "Restaurar"
 
-#: tryton/gui/window/dbrestore.py:163
+#: tryton/gui/window/dbrestore.py:165
 msgid "Restore the database from file."
 msgstr "Restaurar la base de datos desde un archivo."
 
@@ -1099,154 +1103,158 @@ msgstr "Mensaje:"
 msgid "Attachment:"
 msgstr "Adjunto:"
 
-#: tryton/gui/window/form.py:39 tryton/gui/window/tips.py:74
-#: tryton/gui/window/win_form.py:201
-#: tryton/gui/window/view_form/view/screen_container.py:165
+#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:74
+#: tryton/gui/window/win_form.py:205
+#: tryton/gui/window/view_form/view/screen_container.py:163
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:128
 msgid "Previous"
 msgstr "Anterior"
 
-#: tryton/gui/window/form.py:40
+#: tryton/gui/window/form.py:42
 msgid "Previous Record"
 msgstr "Registro anterior"
 
-#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:81
-#: tryton/gui/window/win_form.py:215
-#: tryton/gui/window/view_form/view/screen_container.py:177
+#: tryton/gui/window/form.py:43 tryton/gui/window/tips.py:81
+#: tryton/gui/window/win_form.py:219
+#: tryton/gui/window/view_form/view/screen_container.py:175
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:142
 msgid "Next"
 msgstr "Siguiente"
 
-#: tryton/gui/window/form.py:41
+#: tryton/gui/window/form.py:43
 msgid "Next Record"
 msgstr "Registro siguiente"
 
-#: tryton/gui/window/form.py:44
+#: tryton/gui/window/form.py:46
 msgid "Attachment(0)"
 msgstr "Adjunto(0)"
 
-#: tryton/gui/window/form.py:45
+#: tryton/gui/window/form.py:47
 msgid "Add an attachment to the record"
 msgstr "Añadir un adjunto al registro"
 
-#: tryton/gui/window/form.py:54
+#: tryton/gui/window/form.py:56
 msgid "_Duplicate"
 msgstr "_Duplicar"
 
-#: tryton/gui/window/form.py:59
+#: tryton/gui/window/form.py:61
 msgid "_Previous"
 msgstr "_Anterior"
 
-#: tryton/gui/window/form.py:61
+#: tryton/gui/window/form.py:63
 msgid "_Next"
 msgstr "Sig_uiente"
 
-#: tryton/gui/window/form.py:62
+#: tryton/gui/window/form.py:64
 msgid "_Search"
 msgstr "_Buscar"
 
-#: tryton/gui/window/form.py:63
+#: tryton/gui/window/form.py:65
 msgid "View _Logs..."
 msgstr "Ver _Registro..."
 
-#: tryton/gui/window/form.py:68
+#: tryton/gui/window/form.py:66
+msgid "Show revisions..."
+msgstr "Mostrar versiones..."
+
+#: tryton/gui/window/form.py:71
 msgid "A_ttachments..."
 msgstr "Adjun_tos..."
 
-#: tryton/gui/window/form.py:70
+#: tryton/gui/window/form.py:73
 msgid "_Actions..."
 msgstr "_Acciones..."
 
-#: tryton/gui/window/form.py:72
+#: tryton/gui/window/form.py:75
 msgid "_Relate..."
 msgstr "_Relacionado..."
 
-#: tryton/gui/window/form.py:75
+#: tryton/gui/window/form.py:78
 msgid "_Report..."
 msgstr "_Informes..."
 
-#: tryton/gui/window/form.py:77
+#: tryton/gui/window/form.py:80
 msgid "_E-Mail..."
 msgstr "_Correo electrónico..."
 
-#: tryton/gui/window/form.py:79
+#: tryton/gui/window/form.py:82
 msgid "_Print..."
 msgstr "Im_primir..."
 
-#: tryton/gui/window/form.py:82
+#: tryton/gui/window/form.py:85
 msgid "_Export Data..."
 msgstr "_Exportar datos..."
 
-#: tryton/gui/window/form.py:84
+#: tryton/gui/window/form.py:87
 msgid "_Import Data..."
 msgstr "_Importar datos..."
 
-#: tryton/gui/window/form.py:219
+#: tryton/gui/window/form.py:216
 #, python-format
 msgid "Attachment(%d)"
 msgstr "Adjunto(%d)"
 
-#: tryton/gui/window/form.py:237
+#: tryton/gui/window/form.py:234
 msgid "You have to select one record!"
-msgstr "¡Debe elegir un registro!"
+msgstr "¡Debe seleccionar un registro!"
 
-#: tryton/gui/window/form.py:241
+#: tryton/gui/window/form.py:238
 msgid "ID:"
 msgstr "ID:"
 
-#: tryton/gui/window/form.py:242
+#: tryton/gui/window/form.py:239
 msgid "Creation User:"
 msgstr "Creado por:"
 
-#: tryton/gui/window/form.py:243
+#: tryton/gui/window/form.py:240
 msgid "Creation Date:"
 msgstr "Fecha de creación:"
 
-#: tryton/gui/window/form.py:244
+#: tryton/gui/window/form.py:241
 msgid "Latest Modification by:"
 msgstr "Última modificación por:"
 
-#: tryton/gui/window/form.py:245
+#: tryton/gui/window/form.py:242
 msgid "Latest Modification Date:"
 msgstr "Última fecha de modificación:"
 
-#: tryton/gui/window/form.py:263
+#: tryton/gui/window/form.py:260
 msgid "Model:"
 msgstr "Modelo:"
 
-#: tryton/gui/window/form.py:271
+#: tryton/gui/window/form.py:304
 msgid "Are you sure to remove this record?"
 msgstr "¿Está seguro que quiere eliminar este registro?"
 
-#: tryton/gui/window/form.py:273
+#: tryton/gui/window/form.py:306
 msgid "Are you sure to remove those records?"
 msgstr "¿Está seguro que quiere eliminar estos registros?"
 
-#: tryton/gui/window/form.py:276
+#: tryton/gui/window/form.py:309
 msgid "Records not removed!"
 msgstr "¡Los registros no se han eliminado!"
 
-#: tryton/gui/window/form.py:278
+#: tryton/gui/window/form.py:311
 msgid "Records removed!"
 msgstr "¡Registros eliminados!"
 
-#: tryton/gui/window/form.py:318
+#: tryton/gui/window/form.py:345
 msgid "Working now on the duplicated record(s)!"
 msgstr "¡Ahora está trabajando en el registro duplicado!"
 
-#: tryton/gui/window/form.py:325
+#: tryton/gui/window/form.py:352
 msgid "Record saved!"
 msgstr "¡Registro guardado!"
 
-#: tryton/gui/window/form.py:328
+#: tryton/gui/window/form.py:355
 msgid "Invalid form!"
-msgstr "¡Formulario incorrecto!"
+msgstr "¡Formulario no válido!"
 
-#: tryton/gui/window/form.py:436
+#: tryton/gui/window/form.py:462
 msgid " of "
 msgstr " de "
 
-#: tryton/gui/window/form.py:457
+#: tryton/gui/window/form.py:483
 msgid ""
 "This record has been modified\n"
 "do you want to save it ?"
@@ -1254,46 +1262,52 @@ msgstr ""
 "Este registro ha sido modificado.\n"
 "¿Desea guardarlo?"
 
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
 msgid "Action"
 msgstr "Acción"
 
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
 msgid "Launch action"
 msgstr "Ejecutar acción"
 
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
 msgid "Relate"
-msgstr "_Relacionado"
+msgstr "Relacionado"
 
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
 msgid "Open related records"
 msgstr "Abrir registros relacionados"
 
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
 msgid "Report"
 msgstr "Informes"
 
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
 msgid "Open report"
 msgstr "Abrir informe"
 
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
 msgid "E-Mail"
 msgstr "Email"
 
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
 msgid "E-Mail report"
 msgstr "Informe por email"
 
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
 msgid "Print"
 msgstr "Imprimir"
 
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
 msgid "Print report"
 msgstr "Imprimir informe"
 
+#: tryton/gui/window/form.py:607
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:257
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:1050
+msgid "Unknown"
+msgstr "Desconocido"
+
 #: tryton/gui/window/limit.py:17
 msgid "Limit"
 msgstr "Límite"
@@ -1322,6 +1336,18 @@ msgstr "Preferencias"
 msgid "Current Password:"
 msgstr "Contraseña actual:"
 
+#: tryton/gui/window/revision.py:20
+msgid "Revision"
+msgstr "Versión"
+
+#: tryton/gui/window/revision.py:29
+msgid "Select a revision"
+msgstr "Selecione una versión"
+
+#: tryton/gui/window/revision.py:32
+msgid "Revision:"
+msgstr "Versión:"
+
 #: tryton/gui/window/shortcuts.py:17
 msgid "Keyboard Shortcuts"
 msgstr "Combinaciones de teclas"
@@ -1352,7 +1378,7 @@ msgstr "Campo anterior"
 
 #: tryton/gui/window/shortcuts.py:34
 msgid "Relation Entries Shortcuts"
-msgstr "Atajos en relaciones"
+msgstr "Atajos en campos de relación"
 
 #: tryton/gui/window/shortcuts.py:35
 msgid "Create new relation"
@@ -1376,11 +1402,11 @@ msgstr "Abrir relación"
 
 #: tryton/gui/window/shortcuts.py:40
 msgid "Mark line for deletion"
-msgstr "Marcar para eliminación"
+msgstr "Marcar línea para eliminación"
 
 #: tryton/gui/window/shortcuts.py:41
 msgid "Unmark line for deletion"
-msgstr "Desmarcar para eliminación"
+msgstr "Desmarcar línea para eliminación"
 
 #: tryton/gui/window/shortcuts.py:44
 msgid "Edition Widgets"
@@ -1501,21 +1527,21 @@ msgstr "Añadir nombres de _campo"
 msgid "Name"
 msgstr "Nombre"
 
-#: tryton/gui/window/win_export.py:306
+#: tryton/gui/window/win_export.py:309
 msgid "What is the name of this export?"
 msgstr "¿Cuál es el nombre de esta exportación?"
 
-#: tryton/gui/window/win_export.py:429
+#: tryton/gui/window/win_export.py:436
 #, python-format
 msgid "%d record saved!"
 msgstr "¡Se ha guardado %d registro!"
 
-#: tryton/gui/window/win_export.py:431
+#: tryton/gui/window/win_export.py:438
 #, python-format
 msgid "%d records saved!"
 msgstr "¡Se han guardado %d registros!"
 
-#: tryton/gui/window/win_export.py:434
+#: tryton/gui/window/win_export.py:441
 #, python-format
 msgid ""
 "Operation failed!\n"
@@ -1530,26 +1556,26 @@ msgstr ""
 msgid "Link"
 msgstr "Enlace"
 
-#: tryton/gui/window/win_form.py:134
+#: tryton/gui/window/win_form.py:136
 msgid "Add"
 msgstr "Añadir"
 
-#: tryton/gui/window/win_form.py:147
+#: tryton/gui/window/win_form.py:149
 msgid "Remove <Del>"
 msgstr "Eliminar <Supr>"
 
-#: tryton/gui/window/win_form.py:162
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:73
+#: tryton/gui/window/win_form.py:164
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:75
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:86
 msgid "Create a new record <F3>"
 msgstr "Crear un nuevo registro <F3>"
 
-#: tryton/gui/window/win_form.py:174
+#: tryton/gui/window/win_form.py:176
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:106
 msgid "Delete selected record <Del>"
 msgstr "Eliminar registro seleccionado <Supr>"
 
-#: tryton/gui/window/win_form.py:188
+#: tryton/gui/window/win_form.py:190
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:116
 msgid "Undelete selected record <Ins>"
 msgstr "Recuperar registro seleccionado <Ins>"
@@ -1572,10 +1598,10 @@ msgstr "Archivo a importar:"
 
 #: tryton/gui/window/win_import.py:111
 #: tryton/gui/window/view_form/view/form_gtk/binary.py:57
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:111
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:118
 #: tryton/gui/window/view_form/view/form_gtk/image.py:62
 #: tryton/gui/window/view_form/view/form_gtk/image.py:131
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:624
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:650
 msgid "Open..."
 msgstr "Abrir..."
 
@@ -1599,19 +1625,19 @@ msgstr "Codificación:"
 msgid "Lines to Skip:"
 msgstr "Líneas a omitir:"
 
-#: tryton/gui/window/win_import.py:184 tryton/gui/window/win_import.py:189
+#: tryton/gui/window/win_import.py:185 tryton/gui/window/win_import.py:190
 msgid "Field name"
 msgstr "Nombre del campo"
 
-#: tryton/gui/window/win_import.py:249
+#: tryton/gui/window/win_import.py:251
 msgid "You must select an import file first!"
 msgstr "¡Primero debe elegir un archivo a importar!"
 
-#: tryton/gui/window/win_import.py:260
+#: tryton/gui/window/win_import.py:262
 msgid "Error opening CSV file"
 msgstr "Error al abrir el archivo CSV"
 
-#: tryton/gui/window/win_import.py:287
+#: tryton/gui/window/win_import.py:289
 #, python-format
 msgid "Error processing the file at field %s."
 msgstr "Se ha producido un error al procesar el archivo en el campo %s."
@@ -1626,24 +1652,7 @@ msgstr "¡Se ha importado %d registro!"
 msgid "%d records imported!"
 msgstr "¡Se han importado %d registros!"
 
-#: tryton/gui/window/win_import.py:371
-msgid "Importation Error!"
-msgstr "¡Error de importación!"
-
-#: tryton/gui/window/win_import.py:372
-#, python-format
-msgid ""
-"Error importing record %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-msgstr ""
-"Error importando registro %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-
-#: tryton/gui/window/wizard.py:291
+#: tryton/gui/window/wizard.py:286
 msgid "Wizard"
 msgstr "Asistente"
 
@@ -1652,39 +1661,35 @@ msgstr "Asistente"
 msgid "No String Attr."
 msgstr "No tiene una cadena como atributo."
 
-#: tryton/gui/window/view_form/screen/screen.py:135
+#: tryton/gui/window/view_form/screen/screen.py:129
 msgid "ID"
 msgstr "ID"
 
-#: tryton/gui/window/view_form/screen/screen.py:136
+#: tryton/gui/window/view_form/screen/screen.py:130
 msgid "Creation User"
 msgstr "Creado por:"
 
-#: tryton/gui/window/view_form/screen/screen.py:137
+#: tryton/gui/window/view_form/screen/screen.py:131
 msgid "Creation Date"
 msgstr "Fecha de creación:"
 
-#: tryton/gui/window/view_form/screen/screen.py:138
+#: tryton/gui/window/view_form/screen/screen.py:132
 msgid "Modification User"
 msgstr "Última modificación por:"
 
-#: tryton/gui/window/view_form/screen/screen.py:139
+#: tryton/gui/window/view_form/screen/screen.py:133
 msgid "Modification Date"
 msgstr "Última fecha de modificación:"
 
-#: tryton/gui/window/view_form/screen/screen.py:634
+#: tryton/gui/window/view_form/screen/screen.py:631
 msgid "Unable to get view tree state"
 msgstr "No se ha podido obtener el estado del árbol"
 
-#: tryton/gui/window/view_form/screen/screen.py:671
+#: tryton/gui/window/view_form/screen/screen.py:668
 msgid "Unable to set view tree state"
 msgstr "No se ha podido establecer el estado del árbol"
 
-#: tryton/gui/window/view_form/view/list.py:651
-msgid "You must select a record to use the relation!"
-msgstr "¡Debe seleccionar un registro para usar la relación!"
-
-#: tryton/gui/window/view_form/view/screen_container.py:25
+#: tryton/gui/window/view_form/view/screen_container.py:23
 msgid ".."
 msgstr ".."
 
@@ -1692,19 +1697,19 @@ msgstr ".."
 msgid "F_ilters"
 msgstr "F_iltros"
 
-#: tryton/gui/window/view_form/view/screen_container.py:149
+#: tryton/gui/window/view_form/view/screen_container.py:147
 msgid "Show bookmarks of filters"
 msgstr "Muestra las búsquedas favoritas"
 
-#: tryton/gui/window/view_form/view/screen_container.py:314
+#: tryton/gui/window/view_form/view/screen_container.py:312
 msgid "Remove this bookmark"
 msgstr "Eliminar de las búsquedas favoritas"
 
-#: tryton/gui/window/view_form/view/screen_container.py:321
+#: tryton/gui/window/view_form/view/screen_container.py:319
 msgid "Bookmark this filter"
 msgstr "Guardar como búsqueda favorita"
 
-#: tryton/gui/window/view_form/view/screen_container.py:380
+#: tryton/gui/window/view_form/view/screen_container.py:384
 msgid "Bookmark Name:"
 msgstr "Nombre de la búsqueda favorita:"
 
@@ -1732,24 +1737,24 @@ msgstr "Semana"
 msgid "Select a File..."
 msgstr "Seleccione un archivo..."
 
-#: tryton/gui/window/view_form/view/form_gtk/char.py:157
+#: tryton/gui/window/view_form/view/form_gtk/char.py:161
 msgid "Show plain text"
 msgstr "Mostrar como texto plano"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:349
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:348
 msgid "Add value"
 msgstr "Añadir un valor"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:459
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:461
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:199
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:201
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:458
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:460
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:202
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:204
 #: tryton/gui/window/view_form/view/form_gtk/parser.py:255
 #: tryton/gui/window/view_form/view/form_gtk/parser.py:259
 msgid ":"
 msgstr ":"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:471
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:470
 #, python-format
 msgid "Remove \"%s\""
 msgstr "Eliminar \"%s\""
@@ -1766,23 +1771,23 @@ msgstr "Todos los archivos"
 msgid "Images"
 msgstr "Imágenes"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:175
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:178
 msgid "Translation"
 msgstr "Traducción"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:231
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:234
 msgid "Edit"
 msgstr "Editar"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:236
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:239
 msgid "Fuzzy"
 msgstr "Confuso"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:305
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:308
 msgid "You need to save the record before adding translations!"
 msgstr "¡Debe guardar el registro antes de añadir traducciones!"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:316
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:319
 msgid "No other language available!"
 msgstr "¡No hay otro idioma disponible!"
 
@@ -1795,12 +1800,12 @@ msgstr "Añadir un registro existente"
 msgid "Remove selected record <Del>"
 msgstr "Eliminar registro seleccionado <Supr>"
 
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:74
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:351
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:76
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:356
 msgid "Open a record <F2>"
 msgstr "Abrir registro <F2>"
 
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:354
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:359
 msgid "Search a record <F2>"
 msgstr "Buscar registro <F2>"
 
@@ -1892,15 +1897,10 @@ msgstr "Imagen PNG (*.png)"
 msgid "Image size too large!"
 msgstr "¡El tamaño de la imagen es muy grande!"
 
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:245
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:244
 msgid ": "
 msgstr ": "
 
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:258
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:1023
-msgid "Unknown"
-msgstr "Desconocido"
-
 #: tryton/plugins/translation/__init__.py:18
 msgid "Translate view"
 msgstr "Traducir vista"
diff --git a/share/locale/es_CO/LC_MESSAGES/tryton.mo b/share/locale/es_CO/LC_MESSAGES/tryton.mo
index 4b0d511..00ba0f5 100644
Binary files a/share/locale/es_CO/LC_MESSAGES/tryton.mo and b/share/locale/es_CO/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/es_CO/LC_MESSAGES/tryton.po b/share/locale/es_CO/LC_MESSAGES/tryton.po
index 3199327..0a847b3 100644
--- a/share/locale/es_CO/LC_MESSAGES/tryton.po
+++ b/share/locale/es_CO/LC_MESSAGES/tryton.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: tryton 2.4.0\n"
 "Report-Msgid-Bugs-To: issue_tracker at tryton.org\n"
-"POT-Creation-Date: 2013-10-20 16:34+0200\n"
-"PO-Revision-Date: 2013-10-17 14:37-0500\n"
+"POT-Creation-Date: 2014-04-18 22:49+0200\n"
+"PO-Revision-Date: 2014-04-02 22:45-0500\n"
 "Last-Translator: Oscar Alvarez <oscar.alvarez.montero at gmail.com>\n"
 "Language-Team: Colombia\n"
 "Plural-Forms: nplurals=2; plural=(n != 1)\n"
@@ -32,19 +32,19 @@ msgstr "Registra toda la información con nivel INFO"
 
 #: tryton/config.py:91
 msgid "specify the log level: DEBUG, INFO, WARNING, ERROR, CRITICAL"
-msgstr "Especifica the nivel log: DEBUG, INFO, WARNING, ERROR, CRITICAL"
+msgstr "especifique el nivel log: DEBUG, INFO, WARNING, ERROR, CRITICAL"
 
 #: tryton/config.py:94
 msgid "specify the login user"
-msgstr "Especifique el usuario"
+msgstr "especifique el usuario"
 
 #: tryton/config.py:96
 msgid "specify the server port"
-msgstr "Especifique el puerto del servidor"
+msgstr "especifique el puerto del servidor"
 
 #: tryton/config.py:98
 msgid "specify the server hostname"
-msgstr "Especifique el nombre del servidor"
+msgstr "especifique el nombre del servidor"
 
 #: tryton/config.py:102
 msgid "Too much arguments"
@@ -53,74 +53,74 @@ msgstr "Demasiados argumentos"
 #: tryton/config.py:105
 #, python-format
 msgid "File \"%s\" not found"
-msgstr "El archivo «%s» no se ha encontrado"
+msgstr "No se ha encontró el archivo \"%s\""
 
 #: tryton/config.py:143
 #, python-format
 msgid "Unable to write config file %s!"
-msgstr "¡No se ha podido escribir el archivo de configuración %s!"
+msgstr "No es posible modificar el archivo de configuración %s!"
 
 #: tryton/translate.py:184
 #, python-format
 msgid "Unable to set locale %s"
 msgstr "No se ha podido establecer el idioma %s"
 
-#: tryton/action/main.py:163
+#: tryton/action/main.py:171
 msgid "Select your action"
 msgstr "Seleccione su acción"
 
-#: tryton/action/main.py:169
+#: tryton/action/main.py:177
 msgid "No action defined!"
-msgstr "¡No se ha definido ninguna acción!"
+msgstr "No hay acción definida!"
 
-#: tryton/common/common.py:270
+#: tryton/common/common.py:284
 msgid "Tryton Connection"
 msgstr "Conexión a Tryton"
 
-#: tryton/common/common.py:281
+#: tryton/common/common.py:295
 msgid "Server:"
 msgstr "Servidor:"
 
-#: tryton/common/common.py:299 tryton/gui/window/dblogin.py:79
+#: tryton/common/common.py:313 tryton/gui/window/dblogin.py:79
 msgid "Port:"
 msgstr "Puerto:"
 
-#: tryton/common/common.py:369
+#: tryton/common/common.py:383
 msgid "Selection"
 msgstr "Selección"
 
-#: tryton/common/common.py:378
+#: tryton/common/common.py:392
 msgid "Your selection:"
 msgstr "Su selección:"
 
-#: tryton/common/common.py:498 tryton/gui/main.py:1407
-#: tryton/gui/window/win_export.py:402
+#: tryton/common/common.py:528 tryton/gui/main.py:1420
+#: tryton/gui/window/win_export.py:409
 #: tryton/gui/window/view_form/view/form_gtk/binary.py:69
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:138
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:150
 #: tryton/gui/window/view_form/view/form_gtk/image.py:74
-#: tryton/gui/window/view_form/view/form_gtk/image.py:158
+#: tryton/gui/window/view_form/view/form_gtk/image.py:161
 #: tryton/gui/window/view_form/view/graph_gtk/parser.py:105
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:656
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:686
 msgid "Save As..."
 msgstr "Guardar como..."
 
-#: tryton/common/common.py:649
+#: tryton/common/common.py:675
 msgid "Always ignore this warning."
 msgstr "Ignorar siempre esta advertencia."
 
-#: tryton/common/common.py:654
+#: tryton/common/common.py:680
 msgid "Do you want to proceed?"
-msgstr "¿Desea continuar?"
+msgstr "Desea continuar?"
 
-#: tryton/common/common.py:673
+#: tryton/common/common.py:699
 msgid "Confirmation"
 msgstr "Confirmación"
 
-#: tryton/common/common.py:779 tryton/common/common.py:1083
+#: tryton/common/common.py:805 tryton/common/common.py:1114
 msgid "Concurrency Exception"
-msgstr "Excepción de concurrencia"
+msgstr "Excepción de Concurrencia"
 
-#: tryton/common/common.py:793
+#: tryton/common/common.py:819
 msgid ""
 "<b>Write Concurrency Warning:</b>\n"
 "\n"
@@ -138,50 +138,50 @@ msgstr ""
 "   - \"Comparar\" para ver la versión modificada:\n"
 "   - \"Guardar de todas formas\" para guardar sus cambios."
 
-#: tryton/common/common.py:802
+#: tryton/common/common.py:828
 msgid "Compare"
 msgstr "Comparar"
 
-#: tryton/common/common.py:807
+#: tryton/common/common.py:833
 msgid "Write Anyway"
 msgstr "Guardar de todas formas"
 
-#: tryton/common/common.py:833 tryton/gui/window/win_export.py:435
-#: tryton/gui/window/win_import.py:260 tryton/gui/window/win_import.py:288
+#: tryton/common/common.py:859 tryton/gui/window/win_export.py:442
+#: tryton/gui/window/win_import.py:262 tryton/gui/window/win_import.py:290
 msgid "Error"
 msgstr "Error"
 
-#: tryton/common/common.py:837
+#: tryton/common/common.py:863
 msgid "Report Bug"
-msgstr "Informar de un fallo"
+msgstr "Reportar Fallo"
 
-#: tryton/common/common.py:844
+#: tryton/common/common.py:870
 msgid "Application Error!"
-msgstr "¡Error de aplicación!"
+msgstr "Error de Aplicación!"
 
-#: tryton/common/common.py:867
+#: tryton/common/common.py:893
 msgid "Error: "
 msgstr "Error: "
 
-#: tryton/common/common.py:887
+#: tryton/common/common.py:913
 #, python-format
 msgid "To report bugs you must have an account on <u>%s</u>"
-msgstr "Para informar de fallos debe tener una cuenta en <u>%s</u>"
+msgstr "Para reportar fallos debe tener una cuenta en <u>%s</u>"
 
-#: tryton/common/common.py:917
+#: tryton/common/common.py:943
 msgid "Bug Tracker"
-msgstr "Seguimiento de fallos"
+msgstr "Seguimiento de Fallos"
 
-#: tryton/common/common.py:935
+#: tryton/common/common.py:961
 msgid "User:"
 msgstr "Usuario:"
 
-#: tryton/common/common.py:943 tryton/common/common.py:1101
+#: tryton/common/common.py:969 tryton/common/common.py:1132
 #: tryton/gui/window/dblogin.py:462
 msgid "Password:"
 msgstr "Contraseña:"
 
-#: tryton/common/common.py:993
+#: tryton/common/common.py:1024
 msgid ""
 "The same bug was already reported by another user.\n"
 "To keep you informed your username is added to the nosy-list of this issue"
@@ -190,79 +190,79 @@ msgstr ""
 "Para mantenerle informado añadiremos su usuario a la lista de interesados"
 " en este asunto."
 
-#: tryton/common/common.py:1004
+#: tryton/common/common.py:1035
 msgid "Created new bug with ID "
 msgstr "Se creó un nuevo fallo con ID "
 
-#: tryton/common/common.py:1012 tryton/gui/main.py:921
+#: tryton/common/common.py:1043 tryton/gui/main.py:928
 msgid ""
 "Connection error!\n"
 "Bad username or password!"
 msgstr ""
-"¡Error de conexión!\n"
-"¡Nombre de usuario o contraseña incorrectos!"
+"Error de conexión!\n"
+"Nombre de usuario o contraseña incorrectos!"
 
-#: tryton/common/common.py:1017
+#: tryton/common/common.py:1048
 msgid "Exception:"
 msgstr "Excepción:"
 
-#: tryton/common/common.py:1034
+#: tryton/common/common.py:1065
 msgid ""
 "The server fingerprint has changed since last connection!\n"
 "The application will stop connecting to this server until its fingerprint"
 " is fixed."
 msgstr ""
-"¡La huella de seguridad del servidor ha cambiado desde la última "
-"conexión!\n"
-"La aplicación no se podrá conectar a este servidor hasta que se corrija "
-"la huella de seguridad del servidor."
+"La huella de seguridad del servidor ha cambiado desde la última conexión!"
+"\n"
+"La aplicación detendrá la conexión al servidor hasta que se corrija la "
+"huella de seguridad."
 
-#: tryton/common/common.py:1036
+#: tryton/common/common.py:1067
 msgid "Security risk!"
-msgstr "¡Riesgo de seguridad!"
+msgstr "Riesgo de Seguridad!"
 
-#: tryton/common/common.py:1042 tryton/common/common.py:1108
-#: tryton/gui/main.py:918
+#: tryton/common/common.py:1073 tryton/common/common.py:1139
+#: tryton/gui/main.py:925
 msgid ""
 "Connection error!\n"
 "Unable to connect to the server!"
 msgstr ""
-"¡Error de conexión!\n"
-"¡No ha sido posible conectarse al servidor!"
+"Error de conexión!\n"
+"No ha sido posible conectarse al servidor!"
 
-#: tryton/common/common.py:1123
+#: tryton/common/common.py:1154
 msgid "Network Error!"
 msgstr "¡Error de Red!"
 
-#: tryton/common/common.py:1354
+#: tryton/common/common.py:1409
 msgid "Y"
 msgstr "A"
 
-#: tryton/common/common.py:1355
+#: tryton/common/common.py:1410
 msgid "M"
 msgstr "M"
 
-#: tryton/common/common.py:1356
+#: tryton/common/common.py:1411
 msgid "w"
 msgstr "s"
 
-#: tryton/common/common.py:1357
+#: tryton/common/common.py:1412
 msgid "d"
 msgstr "d"
 
-#: tryton/common/common.py:1358
+#: tryton/common/common.py:1413
 msgid "h"
 msgstr "h"
 
-#: tryton/common/common.py:1359
+#: tryton/common/common.py:1414
 msgid "m"
 msgstr "m"
 
-#: tryton/common/completion.py:22
+#: tryton/common/completion.py:21
 msgid "<i>Search...</i>"
 msgstr "<i>Buscar...</i>"
 
-#: tryton/common/completion.py:23
+#: tryton/common/completion.py:22
 msgid "<i>Create...</i>"
 msgstr "<i>Crear...</i>"
 
@@ -270,253 +270,258 @@ msgstr "<i>Crear...</i>"
 msgid "Open the calendar <F2>"
 msgstr "Abrir el calendario <F2>"
 
-#: tryton/common/date_widget.py:271
+#: tryton/common/date_widget.py:275
 msgid "Date Selection"
-msgstr "Selección de fecha"
+msgstr "Selección de Fecha"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "y"
 msgstr "s"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "yes"
 msgstr "sí"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "true"
 msgstr "verdadero"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "t"
 msgstr "v"
 
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
 msgid "True"
 msgstr "Verdadero"
 
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
 msgid "False"
 msgstr "Falso"
 
-#: tryton/common/popup_menu.py:71
+#: tryton/common/popup_menu.py:72
+#, fuzzy
+msgid "Edit..."
+msgstr "_Salir..."
+
+#: tryton/common/popup_menu.py:77
 msgid "Attachments..."
 msgstr "Adjuntos..."
 
-#: tryton/common/popup_menu.py:76
+#: tryton/common/popup_menu.py:87
 msgid "Actions..."
 msgstr "Acciones..."
 
-#: tryton/common/popup_menu.py:77
+#: tryton/common/popup_menu.py:88
 msgid "Relate..."
 msgstr "Relacionado..."
 
-#: tryton/common/popup_menu.py:78
+#: tryton/common/popup_menu.py:89
 msgid "Report..."
 msgstr "Informes..."
 
-#: tryton/common/popup_menu.py:79
+#: tryton/common/popup_menu.py:90
 msgid "E-Mail..."
-msgstr "Correo electrónico..."
+msgstr "Correo Electrónico..."
 
-#: tryton/common/popup_menu.py:80
+#: tryton/common/popup_menu.py:91
 msgid "Print..."
 msgstr "Imprimir..."
 
-#: tryton/gui/main.py:217
+#: tryton/gui/main.py:218
 msgid "_File"
 msgstr "_Archivo"
 
-#: tryton/gui/main.py:225
+#: tryton/gui/main.py:226
 msgid "_User"
 msgstr "U_suario"
 
-#: tryton/gui/main.py:239
+#: tryton/gui/main.py:240
 msgid "_Options"
 msgstr "_Opciones"
 
-#: tryton/gui/main.py:247
+#: tryton/gui/main.py:248
 msgid "Fa_vorites"
 msgstr "Fa_voritos"
 
-#: tryton/gui/main.py:263
+#: tryton/gui/main.py:264
 msgid "_Help"
 msgstr "Ay_uda"
 
-#: tryton/gui/main.py:285 tryton/gui/window/win_search.py:26
+#: tryton/gui/main.py:286 tryton/gui/window/win_search.py:26
 #: tryton/gui/window/view_form/view/screen_container.py:100
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:333
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:332
 #: tryton/gui/window/view_form/view/form_gtk/many2many.py:40
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:45
 msgid "Search"
 msgstr "Buscar"
 
-#: tryton/gui/main.py:364
+#: tryton/gui/main.py:374
 msgid "No result found."
 msgstr "No hay resultados."
 
-#: tryton/gui/main.py:384
+#: tryton/gui/main.py:396
 msgid "_Connect..."
 msgstr "_Conectar..."
 
-#: tryton/gui/main.py:393
+#: tryton/gui/main.py:405
 msgid "_Disconnect"
 msgstr "_Desconectar"
 
-#: tryton/gui/main.py:403
+#: tryton/gui/main.py:415
 msgid "Data_base"
 msgstr "_Base de datos"
 
-#: tryton/gui/main.py:414
+#: tryton/gui/main.py:426
 msgid "_New Database..."
-msgstr "_Nueva base de datos..."
+msgstr "_Nueva Base de Datos..."
 
-#: tryton/gui/main.py:423
+#: tryton/gui/main.py:435
 msgid "_Restore Database..."
-msgstr "_Restaurar base de datos..."
+msgstr "_Restaurar Base de Datos..."
 
-#: tryton/gui/main.py:432
+#: tryton/gui/main.py:444
 msgid "_Backup Database..."
-msgstr "Hacer _copia de seguridad de la base de datos..."
+msgstr "_Copia de Seguridad de la Base de Datos..."
 
-#: tryton/gui/main.py:441
+#: tryton/gui/main.py:453
 msgid "Dro_p Database..."
-msgstr "_Eliminar base de datos..."
+msgstr "_Eliminar Base de Datos..."
 
-#: tryton/gui/main.py:450
+#: tryton/gui/main.py:462
 msgid "_Quit..."
 msgstr "_Salir..."
 
-#: tryton/gui/main.py:465
+#: tryton/gui/main.py:477
 msgid "_Preferences..."
 msgstr "_Preferencias..."
 
-#: tryton/gui/main.py:476
+#: tryton/gui/main.py:488
 msgid "_Menu Reload"
 msgstr "_Recargar Menú"
 
-#: tryton/gui/main.py:485
+#: tryton/gui/main.py:497
 msgid "_Menu Toggle"
 msgstr "Conmutar _Menú"
 
-#: tryton/gui/main.py:492
+#: tryton/gui/main.py:504
 msgid "_Global Search"
 msgstr "_Busqueda Global"
 
-#: tryton/gui/main.py:507
+#: tryton/gui/main.py:519
 msgid "_Toolbar"
 msgstr "Barra de herramien_tas"
 
-#: tryton/gui/main.py:515
+#: tryton/gui/main.py:527
 msgid "_Default"
-msgstr "Por _defecto"
+msgstr "Por _Defecto"
 
-#: tryton/gui/main.py:525
+#: tryton/gui/main.py:537
 msgid "_Text and Icons"
 msgstr "_Texto e Iconos"
 
-#: tryton/gui/main.py:535
+#: tryton/gui/main.py:547
 msgid "_Icons"
 msgstr "_Iconos"
 
-#: tryton/gui/main.py:544
+#: tryton/gui/main.py:556
 msgid "_Text"
 msgstr "_Texto"
 
-#: tryton/gui/main.py:553
+#: tryton/gui/main.py:565
 msgid "_Menubar"
-msgstr "Barra de _menú"
+msgstr "Barra de _Menú"
 
-#: tryton/gui/main.py:561
+#: tryton/gui/main.py:573
 msgid "Change Accelerators"
 msgstr "Cambiar Teclas Rápidas"
 
-#: tryton/gui/main.py:569
+#: tryton/gui/main.py:581
 msgid "_Mode"
 msgstr "_Modo"
 
-#: tryton/gui/main.py:577
+#: tryton/gui/main.py:589
 msgid "_Normal"
 msgstr "_Normal"
 
-#: tryton/gui/main.py:585
+#: tryton/gui/main.py:597
 msgid "_PDA"
-msgstr "_PDA"
+msgstr "_Celular"
 
-#: tryton/gui/main.py:592
+#: tryton/gui/main.py:604
 msgid "_Form"
 msgstr "_Formulario"
 
-#: tryton/gui/main.py:601
+#: tryton/gui/main.py:613
 msgid "Save Width/Height"
 msgstr "Guardar ancho/alto"
 
-#: tryton/gui/main.py:612
+#: tryton/gui/main.py:624
 msgid "Save Tree State"
 msgstr "Guardar Estado de Árbol"
 
-#: tryton/gui/main.py:624
+#: tryton/gui/main.py:636
 msgid "Spell Checking"
-msgstr "Corrección ortográfica"
+msgstr "Corrección Ortográfica"
 
-#: tryton/gui/main.py:634
+#: tryton/gui/main.py:646
 msgid "Tabs Position"
-msgstr "Posición de las pestañas"
+msgstr "Posición de Pestañas"
 
-#: tryton/gui/main.py:642
+#: tryton/gui/main.py:654
 msgid "Top"
 msgstr "Superior"
 
-#: tryton/gui/main.py:651
+#: tryton/gui/main.py:663
 msgid "Left"
 msgstr "Izquierda"
 
-#: tryton/gui/main.py:661
+#: tryton/gui/main.py:673
 msgid "Right"
 msgstr "Derecha"
 
-#: tryton/gui/main.py:671
+#: tryton/gui/main.py:683
 msgid "Bottom"
 msgstr "Inferior"
 
-#: tryton/gui/main.py:680
+#: tryton/gui/main.py:692
 msgid "_Previous Tab"
 msgstr "_Anterior Pestaña"
 
-#: tryton/gui/main.py:686
+#: tryton/gui/main.py:698
 msgid "_Next Tab"
 msgstr "_Siguiente Pestaña"
 
-#: tryton/gui/main.py:692
+#: tryton/gui/main.py:704
 msgid "Search Limit..."
-msgstr "Límite de búsqueda..."
+msgstr "Límite de Búsqueda..."
 
-#: tryton/gui/main.py:698
+#: tryton/gui/main.py:710
 msgid "_Email..."
 msgstr "_Correo Electrónico..."
 
-#: tryton/gui/main.py:706
+#: tryton/gui/main.py:718
 msgid "_Save Options"
 msgstr "_Guardar Opciones"
 
-#: tryton/gui/main.py:718
+#: tryton/gui/main.py:730
 msgid "_Tips..."
 msgstr "Conse_jos..."
 
-#: tryton/gui/main.py:727
+#: tryton/gui/main.py:739
 msgid "_Keyboard Shortcuts..."
 msgstr "Com_binaciones de teclas..."
 
-#: tryton/gui/main.py:736
+#: tryton/gui/main.py:748
 msgid "_About..."
 msgstr "_Acerca de..."
 
-#: tryton/gui/main.py:787
+#: tryton/gui/main.py:799
 msgid "Manage Favorites"
 msgstr "_Administrar Favoritos"
 
-#: tryton/gui/main.py:935
+#: tryton/gui/main.py:942
 msgid ""
 "The following action requires to close all tabs.\n"
 "Do you want to continue?"
@@ -524,48 +529,48 @@ msgstr ""
 "La acción seleccionada requiere cerrar todas las pestañas. \n"
 "¿Desea continuar?"
 
-#: tryton/gui/main.py:1196
+#: tryton/gui/main.py:1206
 msgid "Close Tab"
 msgstr "Cerrar pestaña"
 
-#: tryton/gui/main.py:1314
+#: tryton/gui/main.py:1327
 msgid ""
 "You are going to delete a Tryton database.\n"
 "Are you really sure to proceed?"
 msgstr ""
 "Va a eliminar una base de datos de Tryton.\n"
-"¿Está seguro que quiere continuar?"
+"Está seguro que quiere continuar?"
 
-#: tryton/gui/main.py:1324
+#: tryton/gui/main.py:1337
 msgid ""
 "Wrong Tryton Server Password\n"
 "Please try again."
 msgstr ""
-"La contraseña del servidor Tryton es incorrecta.\n"
+"La contraseña del Servidor Tryton es incorrecta.\n"
 "Inténtelo de nuevo."
 
-#: tryton/gui/main.py:1326 tryton/gui/main.py:1362 tryton/gui/main.py:1398
-#: tryton/gui/window/dbcreate.py:382
+#: tryton/gui/main.py:1339 tryton/gui/main.py:1375 tryton/gui/main.py:1411
+#: tryton/gui/window/dbcreate.py:384
 msgid "Access denied!"
 msgstr "¡Acceso denegado!"
 
-#: tryton/gui/main.py:1329
+#: tryton/gui/main.py:1342
 msgid "Database drop failed with error message:\n"
 msgstr "La eliminación de la base de datos ha fallado con el mensaje de error:\n"
 
-#: tryton/gui/main.py:1330
+#: tryton/gui/main.py:1343
 msgid "Database drop failed!"
-msgstr "¡Falló la eliminación de la base de datos!"
+msgstr "Falló la eliminación de la base de datos!"
 
-#: tryton/gui/main.py:1332
+#: tryton/gui/main.py:1345
 msgid "Database dropped successfully!"
-msgstr "¡La base de datos se ha eliminado correctamente!"
+msgstr "La base de datos se ha eliminado satisfactoriamente!"
 
-#: tryton/gui/main.py:1337
+#: tryton/gui/main.py:1350
 msgid "Open Backup File to Restore..."
-msgstr "Abrir una copia de seguridad para restaurar..."
+msgstr "Abrir una Copia de Seguridad a Restaurar..."
 
-#: tryton/gui/main.py:1354
+#: tryton/gui/main.py:1367
 msgid ""
 "It is not possible to restore a password protected database.\n"
 "Backup and restore needed to be proceed manual."
@@ -573,11 +578,11 @@ msgstr ""
 "No es posible restaurar una base de datos protegida con contraseña.\n"
 "La copia de seguridad y su restauración tiene que ser manual."
 
-#: tryton/gui/main.py:1358 tryton/gui/main.py:1394
+#: tryton/gui/main.py:1371 tryton/gui/main.py:1407
 msgid "Database is password protected!"
-msgstr "¡La base de datos está protegida por contraseña!"
+msgstr "La base de datos está protegida por contraseña!"
 
-#: tryton/gui/main.py:1360 tryton/gui/main.py:1396
+#: tryton/gui/main.py:1373 tryton/gui/main.py:1409
 msgid ""
 "Wrong Tryton Server Password.\n"
 "Please try again."
@@ -585,19 +590,19 @@ msgstr ""
 "La contraseña del servidor Tryton es incorrecta.\n"
 "Inténtelo de nuevo."
 
-#: tryton/gui/main.py:1365
+#: tryton/gui/main.py:1378
 msgid "Database restore failed with error message:\n"
 msgstr "La restauración de la base de datos ha fallado con el error:\n"
 
-#: tryton/gui/main.py:1367 tryton/gui/main.py:1372
+#: tryton/gui/main.py:1380 tryton/gui/main.py:1385
 msgid "Database restore failed!"
 msgstr "¡La restauración de la base de datos ha fallado!"
 
-#: tryton/gui/main.py:1370
+#: tryton/gui/main.py:1383
 msgid "Database restored successfully!"
 msgstr "¡La base de datos se ha restaurado correctamente!"
 
-#: tryton/gui/main.py:1391
+#: tryton/gui/main.py:1404
 msgid ""
 "It is not possible to dump a password protected Database.\n"
 "Backup and restore needed to be proceed manual."
@@ -605,75 +610,75 @@ msgstr ""
 "No es posible hacer copia de una base de datos protegida por contraseña.\n"
 "La copia de seguridad y su restauración tiene que ser manual."
 
-#: tryton/gui/main.py:1401
+#: tryton/gui/main.py:1414
 msgid "Database dump failed with error message:\n"
 msgstr "La extracción de la base de datos ha fallado con el mensaje de error:\n"
 
-#: tryton/gui/main.py:1403
+#: tryton/gui/main.py:1416
 msgid "Database dump failed!"
-msgstr "¡La extracción de la base de datos ha fallado!"
+msgstr "La extracción de la base de datos ha fallado!"
 
-#: tryton/gui/main.py:1414
+#: tryton/gui/main.py:1427
 msgid "Database backuped successfully!"
 msgstr "¡La copia de seguridad de la base de datos ha finalizado correctamente!"
 
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
 msgid "New"
 msgstr "Nuevo"
 
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
 msgid "Create a new record"
 msgstr "Crear un nuevo registro"
 
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
 #: tryton/gui/window/win_export.py:142
 msgid "Save"
 msgstr "Guardar"
 
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
 msgid "Save this record"
 msgstr "Guardar este registro"
 
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
-#: tryton/gui/window/win_form.py:228
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
+#: tryton/gui/window/win_form.py:232
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:154
 msgid "Switch"
 msgstr "Cambiar vista"
 
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
 msgid "Switch view"
 msgstr "Cambiar vista"
 
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
 msgid "_Reload"
 msgstr "_Recargar"
 
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
 msgid "Reload"
 msgstr "Recargar"
 
-#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:48
+#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:50
 msgid "_New"
 msgstr "_Nuevo"
 
-#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:49
-#: tryton/gui/window/win_form.py:66
+#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:51
+#: tryton/gui/window/win_form.py:67
 msgid "_Save"
 msgstr "_Guardar"
 
-#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:50
+#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:52
 msgid "_Switch View"
 msgstr "Cambiar Vi_sta"
 
-#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:52
+#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:54
 msgid "_Reload/Undo"
 msgstr "_Recargar/Deshacer"
 
-#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:56
+#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:58
 msgid "_Delete..."
 msgstr "_Eliminar..."
 
-#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:65
+#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:68
 msgid "_Close Tab"
 msgstr "_Cerrar pestaña"
 
@@ -684,12 +689,12 @@ msgid ""
 "change the address."
 msgstr ""
 "Esta es la URL del servidor Tryton. Use el servidor «localhost» y el "
-"puerto «8000» si el servidor está instalado en este ordenador. Pulse en "
+"puerto «8000» si el servidor está instalado en este ordenador. Pulse "
 "«Cambiar» para cambiar la dirección."
 
 #: tryton/gui/window/dbcreate.py:45
 msgid "No connection!"
-msgstr "¡No hay conexión!"
+msgstr "No hay conexión!"
 
 #: tryton/gui/window/dbcreate.py:48
 msgid ""
@@ -700,7 +705,7 @@ msgid ""
 "that the server address and port (usually 8000) are not blocked.\n"
 "Click on 'Change' to change the address."
 msgstr ""
-"¡No se ha podido conectar al servidor!\n"
+"No se ha podido conectar al servidor!\n"
 "1. Revise si el servidor se está ejecutando.\n"
 "2. Averigüe en qué dirección y puerto está escuchando.\n"
 "3. Si hay un cortafuegos entre el servidor y este cliente, asegúrese que "
@@ -708,28 +713,28 @@ msgstr ""
 "bloqueados.\n"
 "Pulse en «Cambiar» para cambiar la dirección."
 
-#: tryton/gui/window/dbcreate.py:137
+#: tryton/gui/window/dbcreate.py:139
 msgid "Create new database"
 msgstr "Crear nueva base de datos"
 
-#: tryton/gui/window/dbcreate.py:147
+#: tryton/gui/window/dbcreate.py:149
 msgid "C_reate"
 msgstr "C_rear"
 
-#: tryton/gui/window/dbcreate.py:155
+#: tryton/gui/window/dbcreate.py:157
 msgid "Create the new database."
 msgstr "Crear la nueva base de datos."
 
-#: tryton/gui/window/dbcreate.py:166
+#: tryton/gui/window/dbcreate.py:168
 msgid "Server Setup:"
 msgstr "Configuración del Servidor:"
 
-#: tryton/gui/window/dbcreate.py:171
+#: tryton/gui/window/dbcreate.py:173
 msgid "Server connection:"
 msgstr "Conexión con el servidor:"
 
-#: tryton/gui/window/dbcreate.py:180 tryton/gui/window/dbdumpdrop.py:140
-#: tryton/gui/window/dbrestore.py:86
+#: tryton/gui/window/dbcreate.py:182 tryton/gui/window/dbdumpdrop.py:140
+#: tryton/gui/window/dbrestore.py:88
 msgid ""
 "This is the URL of the server. Use server 'localhost' and port '8000' if "
 "the server is installed on this computer. Click on 'Change' to change the"
@@ -739,22 +744,22 @@ msgstr ""
 "«8000» si el servidor está instalado en este ordenador. Pulse en "
 "«Cambiar» para cambiar la dirección."
 
-#: tryton/gui/window/dbcreate.py:183 tryton/gui/window/dbdumpdrop.py:147
-#: tryton/gui/window/dbrestore.py:91
+#: tryton/gui/window/dbcreate.py:185 tryton/gui/window/dbdumpdrop.py:147
+#: tryton/gui/window/dbrestore.py:93
 msgid "C_hange"
 msgstr "C_ambiar"
 
-#: tryton/gui/window/dbcreate.py:192 tryton/gui/window/dbrestore.py:97
+#: tryton/gui/window/dbcreate.py:194 tryton/gui/window/dbrestore.py:99
 msgid "Setup the server connection..."
 msgstr "Configurar la conexión con el servidor..."
 
-#: tryton/gui/window/dbcreate.py:195 tryton/gui/window/dbdumpdrop.py:186
-#: tryton/gui/window/dbrestore.py:100
+#: tryton/gui/window/dbcreate.py:197 tryton/gui/window/dbdumpdrop.py:186
+#: tryton/gui/window/dbrestore.py:102
 msgid "Tryton Server Password:"
-msgstr "Contraseña del servidor Tryton:"
+msgstr "Contraseña del Servidor Tryton:"
 
-#: tryton/gui/window/dbcreate.py:205 tryton/gui/window/dbdumpdrop.py:196
-#: tryton/gui/window/dbrestore.py:109
+#: tryton/gui/window/dbcreate.py:207 tryton/gui/window/dbdumpdrop.py:196
+#: tryton/gui/window/dbrestore.py:111
 msgid ""
 "This is the password of the Tryton server. It doesn't belong to a real "
 "user. This password is usually defined in the trytond configuration."
@@ -762,15 +767,15 @@ msgstr ""
 "Esta es la contraseña del servidor Tryton. No corresponde a un usuario "
 "real. Esta contraseña se suele definir en la configuración de trytond."
 
-#: tryton/gui/window/dbcreate.py:216
+#: tryton/gui/window/dbcreate.py:218
 msgid "New database setup:"
 msgstr "Nueva configuración de la base de datos:"
 
-#: tryton/gui/window/dbcreate.py:222
+#: tryton/gui/window/dbcreate.py:224
 msgid "Database name:"
 msgstr "Nombre de la base de datos:"
 
-#: tryton/gui/window/dbcreate.py:234
+#: tryton/gui/window/dbcreate.py:236
 msgid ""
 "Choose the name of the new database.\n"
 "Allowed characters are alphanumerical or _ (underscore)\n"
@@ -781,11 +786,11 @@ msgstr ""
 "Puede utilizar caracteres alfanuméricos o _ (subrayado)\n"
 "¡Evite cualquier acento, espacio o caracteres especiales! Ejemplo: tryton"
 
-#: tryton/gui/window/dbcreate.py:241
+#: tryton/gui/window/dbcreate.py:243
 msgid "Default language:"
 msgstr "Idioma por defecto:"
 
-#: tryton/gui/window/dbcreate.py:251
+#: tryton/gui/window/dbcreate.py:253
 msgid ""
 "Choose the default language that will be installed for this database. You"
 " will be able to install new languages after installation through the "
@@ -795,11 +800,11 @@ msgstr ""
 "Podrá instalar nuevos idiomas después de la instalación, a través del "
 "menú de administración."
 
-#: tryton/gui/window/dbcreate.py:255
+#: tryton/gui/window/dbcreate.py:257
 msgid "Admin password:"
 msgstr "Contraseña del administrador:"
 
-#: tryton/gui/window/dbcreate.py:265
+#: tryton/gui/window/dbcreate.py:267
 msgid ""
 "Choose a password for the admin user of the new database. With these "
 "credentials you will be later able to login into the database:\n"
@@ -811,15 +816,15 @@ msgstr ""
 "Nombre de usuario: admin\n"
 "Contraseña: <La contraseña que introduzca aquí>"
 
-#: tryton/gui/window/dbcreate.py:273
+#: tryton/gui/window/dbcreate.py:275
 msgid "Confirm admin password:"
-msgstr "Confirme la contraseña del administrador:"
+msgstr "Confirme la contraseña del Administrador:"
 
-#: tryton/gui/window/dbcreate.py:282
+#: tryton/gui/window/dbcreate.py:284
 msgid "Type the Admin password again"
-msgstr "Teclee la contraseña del administrador de nuevo"
+msgstr "Teclee la contraseña del Administrador de nuevo"
 
-#: tryton/gui/window/dbcreate.py:330
+#: tryton/gui/window/dbcreate.py:332
 msgid ""
 "The database name is restricted to alpha-nummerical characters and \"_\" "
 "(underscore). Avoid all accents, space and any other special characters."
@@ -828,31 +833,31 @@ msgstr ""
 " y \"_\" (subrayado). Evite todos los acentos, espacios y cualquier otro "
 "carácter especial."
 
-#: tryton/gui/window/dbcreate.py:335
+#: tryton/gui/window/dbcreate.py:337
 msgid "Wrong characters in database name!"
 msgstr "¡Ha introducido caracteres incorrectos en el nombre de la base de datos!"
 
-#: tryton/gui/window/dbcreate.py:339
+#: tryton/gui/window/dbcreate.py:341
 msgid "The new admin password doesn't match the confirmation field.\n"
 msgstr ""
-"La nueva contraseña del administrador no coincide con el campo de "
+"La nueva contraseña del Administrador no coincide con el campo de "
 "confirmación.\n"
 
-#: tryton/gui/window/dbcreate.py:341
+#: tryton/gui/window/dbcreate.py:343
 msgid "Passwords doesn't match!"
 msgstr "¡Las contraseñas no coinciden!"
 
-#: tryton/gui/window/dbcreate.py:344
+#: tryton/gui/window/dbcreate.py:346
 msgid "Admin password and confirmation are required to create a new database."
 msgstr ""
-"La contraseña del administrador y su confirmación son necesarias para "
+"La contraseña del Administrador y su confirmación son necesarias para "
 "crear una nueva base de datos."
 
-#: tryton/gui/window/dbcreate.py:346
+#: tryton/gui/window/dbcreate.py:348
 msgid "Missing admin password!"
-msgstr "¡Falta la contraseña del administrador!"
+msgstr "¡Falta la contraseña del Administrador!"
 
-#: tryton/gui/window/dbcreate.py:361
+#: tryton/gui/window/dbcreate.py:363
 msgid ""
 "A database with the same name already exists.\n"
 "Try another database name."
@@ -860,15 +865,15 @@ msgstr ""
 "Ya existe una base de datos con el mismo nombre.\n"
 "Inténtelo con otro nombre de base de datos."
 
-#: tryton/gui/window/dbcreate.py:364
+#: tryton/gui/window/dbcreate.py:366
 msgid "This database name already exist!"
-msgstr "¡Ya existe una base de datos con este nombre!"
+msgstr "Ya existe una base de datos con este nombre!"
 
-#: tryton/gui/window/dbcreate.py:379
+#: tryton/gui/window/dbcreate.py:381
 msgid "Sorry, wrong password for the Tryton server. Please try again."
 msgstr "La contraseña del servidor Tryton no es correcta. Inténtelo de nuevo."
 
-#: tryton/gui/window/dbcreate.py:387
+#: tryton/gui/window/dbcreate.py:389
 msgid ""
 "Can't create the database, caused by an unknown reason.\n"
 "If there is a database created, it could be broken. Maybe drop this "
@@ -881,21 +886,21 @@ msgstr ""
 "adicional.\n"
 "Mensaje de error:\n"
 
-#: tryton/gui/window/dbcreate.py:395
+#: tryton/gui/window/dbcreate.py:397
 msgid "Error creating database!"
-msgstr "¡Se ha producido un error al crear la base de datos!"
+msgstr "Se ha producido un error al crear la base de datos!"
 
 #: tryton/gui/window/dbdumpdrop.py:26
 msgid "Could not connect to server!"
-msgstr "¡No se ha podido conectar al servidor!"
+msgstr "No se ha podido conectar al servidor!"
 
 #: tryton/gui/window/dbdumpdrop.py:30
 msgid "This client version is not compatible with the server!"
-msgstr "¡Esta versión del cliente no es compatible con el servidor!"
+msgstr "Esta versión del cliente no es compatible con el servidor!"
 
 #: tryton/gui/window/dbdumpdrop.py:39
 msgid "No database found, you must create one!"
-msgstr "¡No se ha encontrado ninguna base de datos, debe crear una!"
+msgstr "No se ha encontrado ninguna base de datos, debe crear una!"
 
 #: tryton/gui/window/dbdumpdrop.py:77
 msgid "Backup a database"
@@ -929,18 +934,18 @@ msgstr "Eliminar la base de datos elegida."
 msgid "Choose a Tryton database to delete:"
 msgstr "Elija la base de datos Tryton a eliminar:"
 
-#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:75
+#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:77
 msgid "Server Connection:"
 msgstr "Conexión al servidor:"
 
 #: tryton/gui/window/dbdumpdrop.py:156 tryton/gui/window/dblogin.py:89
 #: tryton/gui/window/dblogin.py:444
 msgid "Database:"
-msgstr "Base de datos:"
+msgstr "Base de Datos:"
 
 #: tryton/gui/window/dblogin.py:31
 msgid "Profile Editor"
-msgstr "Editor de perfiles"
+msgstr "Perfiles"
 
 #: tryton/gui/window/dblogin.py:46
 msgid "Profile"
@@ -1020,15 +1025,15 @@ msgstr "Servidor:"
 msgid "User name:"
 msgstr "Nombre de usuario:"
 
-#: tryton/gui/window/dbrestore.py:64
+#: tryton/gui/window/dbrestore.py:66
 msgid "Restore Database"
 msgstr "Restaurar base de datos"
 
-#: tryton/gui/window/dbrestore.py:117
+#: tryton/gui/window/dbrestore.py:119
 msgid "File to Restore:"
 msgstr "Archivo a restaurar:"
 
-#: tryton/gui/window/dbrestore.py:131
+#: tryton/gui/window/dbrestore.py:133
 msgid ""
 "Choose the name of the database to be restored.\n"
 "Allowed characters are alphanumerical or _ (underscore)\n"
@@ -1040,27 +1045,27 @@ msgstr ""
 "¡Evite todos los acentos, espacios, o caracteres especiales! \n"
 "Ejemplo: tryton"
 
-#: tryton/gui/window/dbrestore.py:137
+#: tryton/gui/window/dbrestore.py:139
 msgid "New Database Name:"
 msgstr "Nombre de la nueva base de datos:"
 
-#: tryton/gui/window/dbrestore.py:140
+#: tryton/gui/window/dbrestore.py:142
 msgid "Update Database:"
 msgstr "Actualizar base de datos:"
 
-#: tryton/gui/window/dbrestore.py:144
+#: tryton/gui/window/dbrestore.py:146
 msgid ""
 "Check for an automatic database update after restoring a database from a "
 "previous Tryton version."
 msgstr ""
-"Seleccionar para realizar una actualización automática de la base de "
+"Confirme si desea realizar una actualización automática de la base de "
 "datos desde una versión anterior de Tryton, después de restaurarla."
 
-#: tryton/gui/window/dbrestore.py:154
+#: tryton/gui/window/dbrestore.py:156
 msgid "Restore"
 msgstr "Restaurar"
 
-#: tryton/gui/window/dbrestore.py:163
+#: tryton/gui/window/dbrestore.py:165
 msgid "Restore the database from file."
 msgstr "Restaurar la base de datos desde un archivo."
 
@@ -1100,154 +1105,158 @@ msgstr "Mensaje:"
 msgid "Attachment:"
 msgstr "Adjunto:"
 
-#: tryton/gui/window/form.py:39 tryton/gui/window/tips.py:74
-#: tryton/gui/window/win_form.py:201
-#: tryton/gui/window/view_form/view/screen_container.py:165
+#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:74
+#: tryton/gui/window/win_form.py:205
+#: tryton/gui/window/view_form/view/screen_container.py:163
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:128
 msgid "Previous"
 msgstr "Anterior"
 
-#: tryton/gui/window/form.py:40
+#: tryton/gui/window/form.py:42
 msgid "Previous Record"
 msgstr "Registro Anterior"
 
-#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:81
-#: tryton/gui/window/win_form.py:215
-#: tryton/gui/window/view_form/view/screen_container.py:177
+#: tryton/gui/window/form.py:43 tryton/gui/window/tips.py:81
+#: tryton/gui/window/win_form.py:219
+#: tryton/gui/window/view_form/view/screen_container.py:175
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:142
 msgid "Next"
 msgstr "Siguiente"
 
-#: tryton/gui/window/form.py:41
+#: tryton/gui/window/form.py:43
 msgid "Next Record"
 msgstr "Registro Siguiente"
 
-#: tryton/gui/window/form.py:44
+#: tryton/gui/window/form.py:46
 msgid "Attachment(0)"
 msgstr "Adjunto(0)"
 
-#: tryton/gui/window/form.py:45
+#: tryton/gui/window/form.py:47
 msgid "Add an attachment to the record"
 msgstr "Agregar un adjunto al registro"
 
-#: tryton/gui/window/form.py:54
+#: tryton/gui/window/form.py:56
 msgid "_Duplicate"
 msgstr "_Duplicar"
 
-#: tryton/gui/window/form.py:59
+#: tryton/gui/window/form.py:61
 msgid "_Previous"
 msgstr "_Anterior"
 
-#: tryton/gui/window/form.py:61
+#: tryton/gui/window/form.py:63
 msgid "_Next"
 msgstr "Sig_uiente"
 
-#: tryton/gui/window/form.py:62
+#: tryton/gui/window/form.py:64
 msgid "_Search"
 msgstr "_Buscar"
 
-#: tryton/gui/window/form.py:63
+#: tryton/gui/window/form.py:65
 msgid "View _Logs..."
 msgstr "Ver _Registro..."
 
-#: tryton/gui/window/form.py:68
+#: tryton/gui/window/form.py:66
+msgid "Show revisions..."
+msgstr ""
+
+#: tryton/gui/window/form.py:71
 msgid "A_ttachments..."
 msgstr "Adjun_tos..."
 
-#: tryton/gui/window/form.py:70
+#: tryton/gui/window/form.py:73
 msgid "_Actions..."
 msgstr "_Acciones..."
 
-#: tryton/gui/window/form.py:72
+#: tryton/gui/window/form.py:75
 msgid "_Relate..."
 msgstr "_Relacionado..."
 
-#: tryton/gui/window/form.py:75
+#: tryton/gui/window/form.py:78
 msgid "_Report..."
 msgstr "_Informes..."
 
-#: tryton/gui/window/form.py:77
+#: tryton/gui/window/form.py:80
 msgid "_E-Mail..."
 msgstr "_Correo Electrónico..."
 
-#: tryton/gui/window/form.py:79
+#: tryton/gui/window/form.py:82
 msgid "_Print..."
 msgstr "Im_primir..."
 
-#: tryton/gui/window/form.py:82
+#: tryton/gui/window/form.py:85
 msgid "_Export Data..."
 msgstr "_Exportar datos..."
 
-#: tryton/gui/window/form.py:84
+#: tryton/gui/window/form.py:87
 msgid "_Import Data..."
 msgstr "_Importar datos..."
 
-#: tryton/gui/window/form.py:219
+#: tryton/gui/window/form.py:216
 #, python-format
 msgid "Attachment(%d)"
 msgstr "Adjunto(%d)"
 
-#: tryton/gui/window/form.py:237
+#: tryton/gui/window/form.py:234
 msgid "You have to select one record!"
-msgstr "¡Debe elegir un registro!"
+msgstr "Debe seleccionar un registro!"
 
-#: tryton/gui/window/form.py:241
+#: tryton/gui/window/form.py:238
 msgid "ID:"
 msgstr "ID:"
 
-#: tryton/gui/window/form.py:242
+#: tryton/gui/window/form.py:239
 msgid "Creation User:"
 msgstr "Creado por Usuario:"
 
-#: tryton/gui/window/form.py:243
+#: tryton/gui/window/form.py:240
 msgid "Creation Date:"
 msgstr "Fecha de Creación:"
 
-#: tryton/gui/window/form.py:244
+#: tryton/gui/window/form.py:241
 msgid "Latest Modification by:"
 msgstr "Última Modificación por:"
 
-#: tryton/gui/window/form.py:245
+#: tryton/gui/window/form.py:242
 msgid "Latest Modification Date:"
-msgstr "Última Fecha de Modificación:"
+msgstr "Fecha de Última Modificación:"
 
-#: tryton/gui/window/form.py:263
+#: tryton/gui/window/form.py:260
 msgid "Model:"
 msgstr "Modelo:"
 
-#: tryton/gui/window/form.py:271
+#: tryton/gui/window/form.py:304
 msgid "Are you sure to remove this record?"
-msgstr "¿Está seguro que quiere eliminar este registro?"
+msgstr "Está seguro que quiere eliminar este registro?"
 
-#: tryton/gui/window/form.py:273
+#: tryton/gui/window/form.py:306
 msgid "Are you sure to remove those records?"
-msgstr "¿Está seguro que quiere eliminar estos registros?"
+msgstr "Está seguro que quiere eliminar estos registros?"
 
-#: tryton/gui/window/form.py:276
+#: tryton/gui/window/form.py:309
 msgid "Records not removed!"
-msgstr "¡Los registros no se han eliminado!"
+msgstr "Los registros no se han eliminado!"
 
-#: tryton/gui/window/form.py:278
+#: tryton/gui/window/form.py:311
 msgid "Records removed!"
-msgstr "¡Registros eliminados!"
+msgstr "Registros eliminados!"
 
-#: tryton/gui/window/form.py:318
+#: tryton/gui/window/form.py:345
 msgid "Working now on the duplicated record(s)!"
-msgstr "¡Está trabajando ahora en el registro duplicado!"
+msgstr "Está trabajando ahora registro(s) duplicado(s)!"
 
-#: tryton/gui/window/form.py:325
+#: tryton/gui/window/form.py:352
 msgid "Record saved!"
 msgstr "¡Registro guardado!"
 
-#: tryton/gui/window/form.py:328
+#: tryton/gui/window/form.py:355
 msgid "Invalid form!"
 msgstr "¡Formulario no válido!"
 
-#: tryton/gui/window/form.py:436
+#: tryton/gui/window/form.py:462
 msgid " of "
 msgstr " de "
 
-#: tryton/gui/window/form.py:457
+#: tryton/gui/window/form.py:483
 msgid ""
 "This record has been modified\n"
 "do you want to save it ?"
@@ -1255,53 +1264,59 @@ msgstr ""
 "Este registro ha sido modificado.\n"
 "¿Desea guardarlo?"
 
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
 msgid "Action"
 msgstr "Acción"
 
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
 msgid "Launch action"
 msgstr "Lanzar acción"
 
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
 msgid "Relate"
-msgstr "_Relacionado"
+msgstr "Relacionado"
 
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
 msgid "Open related records"
 msgstr "Abrir registros relacionados"
 
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
 msgid "Report"
 msgstr "Informes"
 
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
 msgid "Open report"
 msgstr "Abrir informe"
 
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
 msgid "E-Mail"
 msgstr "Email"
 
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
 msgid "E-Mail report"
 msgstr "Informe por email"
 
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
 msgid "Print"
 msgstr "Imprimir"
 
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
 msgid "Print report"
 msgstr "Imprimir informe"
 
+#: tryton/gui/window/form.py:607
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:257
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:1050
+msgid "Unknown"
+msgstr "Desconocido"
+
 #: tryton/gui/window/limit.py:17
 msgid "Limit"
 msgstr "Límite"
 
 #: tryton/gui/window/limit.py:26
 msgid "Search Limit Settings"
-msgstr "Preferencias del límite de búsqueda"
+msgstr "Preferencias de Límite de Búsqueda"
 
 #: tryton/gui/window/limit.py:29
 msgid "Limit:"
@@ -1313,7 +1328,7 @@ msgstr "Preferencias"
 
 #: tryton/gui/window/preference.py:49
 msgid "Edit User Preferences"
-msgstr "Editar preferencias de usuario"
+msgstr "Editar Preferencias de Usuario"
 
 #: tryton/gui/window/preference.py:75
 msgid "Preference"
@@ -1321,7 +1336,21 @@ msgstr "Preferencias"
 
 #: tryton/gui/window/preference.py:88
 msgid "Current Password:"
-msgstr "Contraseña actual:"
+msgstr "Contraseña Actual:"
+
+#: tryton/gui/window/revision.py:20
+#, fuzzy
+msgid "Revision"
+msgstr "Anterior"
+
+#: tryton/gui/window/revision.py:29
+#, fuzzy
+msgid "Select a revision"
+msgstr "Selección"
+
+#: tryton/gui/window/revision.py:32
+msgid "Revision:"
+msgstr ""
 
 #: tryton/gui/window/shortcuts.py:17
 msgid "Keyboard Shortcuts"
@@ -1365,7 +1394,7 @@ msgstr "Abrir/Buscar relación"
 
 #: tryton/gui/window/shortcuts.py:37
 msgid "List Entries Shortcuts"
-msgstr "Atajos en listas"
+msgstr "Atajos en Listas"
 
 #: tryton/gui/window/shortcuts.py:38
 msgid "Create new line"
@@ -1377,15 +1406,15 @@ msgstr "Abrir relación"
 
 #: tryton/gui/window/shortcuts.py:40
 msgid "Mark line for deletion"
-msgstr "Marcar para eliminación"
+msgstr "Marcar línea para eliminación"
 
 #: tryton/gui/window/shortcuts.py:41
 msgid "Unmark line for deletion"
-msgstr "Desmarcar para eliminación"
+msgstr "Desmarcar línea para eliminación"
 
 #: tryton/gui/window/shortcuts.py:44
 msgid "Edition Widgets"
-msgstr "Controles de edición"
+msgstr "Controles de Edición"
 
 #: tryton/gui/window/tips.py:17
 msgid ""
@@ -1476,11 +1505,11 @@ msgstr "Limpiar"
 
 #: tryton/gui/window/win_export.py:94
 msgid "Save Export"
-msgstr "Guardar exportación"
+msgstr "Guardar Exportación"
 
 #: tryton/gui/window/win_export.py:103
 msgid "Delete Export"
-msgstr "Eliminar exportación"
+msgstr "Eliminar Exportación"
 
 #: tryton/gui/window/win_export.py:114
 msgid "<b>Fields to export</b>"
@@ -1502,21 +1531,21 @@ msgstr "Añadir nombres de _campo"
 msgid "Name"
 msgstr "Nombre"
 
-#: tryton/gui/window/win_export.py:306
+#: tryton/gui/window/win_export.py:309
 msgid "What is the name of this export?"
 msgstr "¿Cuál es el nombre de esta exportación?"
 
-#: tryton/gui/window/win_export.py:429
+#: tryton/gui/window/win_export.py:436
 #, python-format
 msgid "%d record saved!"
-msgstr "¡Se ha guardado %d registro!"
+msgstr "%d registro guardado!"
 
-#: tryton/gui/window/win_export.py:431
+#: tryton/gui/window/win_export.py:438
 #, python-format
 msgid "%d records saved!"
-msgstr "¡Se han guardado %d registros!"
+msgstr "%d registros guardados!"
 
-#: tryton/gui/window/win_export.py:434
+#: tryton/gui/window/win_export.py:441
 #, python-format
 msgid ""
 "Operation failed!\n"
@@ -1531,26 +1560,26 @@ msgstr ""
 msgid "Link"
 msgstr "Enlace"
 
-#: tryton/gui/window/win_form.py:134
+#: tryton/gui/window/win_form.py:136
 msgid "Add"
 msgstr "Añadir"
 
-#: tryton/gui/window/win_form.py:147
+#: tryton/gui/window/win_form.py:149
 msgid "Remove <Del>"
 msgstr "Eliminar <Supr>"
 
-#: tryton/gui/window/win_form.py:162
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:73
+#: tryton/gui/window/win_form.py:164
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:75
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:86
 msgid "Create a new record <F3>"
 msgstr "Crear un nuevo registro <F3>"
 
-#: tryton/gui/window/win_form.py:174
+#: tryton/gui/window/win_form.py:176
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:106
 msgid "Delete selected record <Del>"
 msgstr "Eliminar registro seleccionado <Supr>"
 
-#: tryton/gui/window/win_form.py:188
+#: tryton/gui/window/win_form.py:190
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:116
 msgid "Undelete selected record <Ins>"
 msgstr "Recuperar registro seleccionado <Ins>"
@@ -1561,7 +1590,7 @@ msgstr "Importar desde CSV"
 
 #: tryton/gui/window/win_import.py:76
 msgid "Auto-Detect"
-msgstr "Auto-detectar"
+msgstr "Auto-Detectar"
 
 #: tryton/gui/window/win_import.py:93
 msgid "<b>Fields to import</b>"
@@ -1573,10 +1602,10 @@ msgstr "Archivo a importar:"
 
 #: tryton/gui/window/win_import.py:111
 #: tryton/gui/window/view_form/view/form_gtk/binary.py:57
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:111
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:118
 #: tryton/gui/window/view_form/view/form_gtk/image.py:62
 #: tryton/gui/window/view_form/view/form_gtk/image.py:131
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:624
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:650
 msgid "Open..."
 msgstr "Abrir..."
 
@@ -1586,7 +1615,7 @@ msgstr "Parámetros CSV"
 
 #: tryton/gui/window/win_import.py:124
 msgid "Field Separator:"
-msgstr "Separador de campo:"
+msgstr "Separador de Campo:"
 
 #: tryton/gui/window/win_import.py:133
 msgid "Text Delimiter:"
@@ -1598,21 +1627,21 @@ msgstr "Codificación:"
 
 #: tryton/gui/window/win_import.py:150
 msgid "Lines to Skip:"
-msgstr "Líneas a omitir:"
+msgstr "Líneas a Omitir:"
 
-#: tryton/gui/window/win_import.py:184 tryton/gui/window/win_import.py:189
+#: tryton/gui/window/win_import.py:185 tryton/gui/window/win_import.py:190
 msgid "Field name"
 msgstr "Nombre del campo"
 
-#: tryton/gui/window/win_import.py:249
+#: tryton/gui/window/win_import.py:251
 msgid "You must select an import file first!"
-msgstr "¡Primero debe elegir un archivo a importar!"
+msgstr "Primero debe elegir un archivo a importar!"
 
-#: tryton/gui/window/win_import.py:260
+#: tryton/gui/window/win_import.py:262
 msgid "Error opening CSV file"
 msgstr "Error al abrir el archivo CSV"
 
-#: tryton/gui/window/win_import.py:287
+#: tryton/gui/window/win_import.py:289
 #, python-format
 msgid "Error processing the file at field %s."
 msgstr "Se ha producido un error al procesar el archivo en el campo %s."
@@ -1620,31 +1649,14 @@ msgstr "Se ha producido un error al procesar el archivo en el campo %s."
 #: tryton/gui/window/win_import.py:364
 #, python-format
 msgid "%d record imported!"
-msgstr "¡%d registro importado!"
+msgstr "%d registro importado!"
 
 #: tryton/gui/window/win_import.py:366
 #, python-format
 msgid "%d records imported!"
-msgstr "¡Se han importado %d registros!"
+msgstr "%d registros importados!"
 
-#: tryton/gui/window/win_import.py:371
-msgid "Importation Error!"
-msgstr "¡Error de importación!"
-
-#: tryton/gui/window/win_import.py:372
-#, python-format
-msgid ""
-"Error importing record %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-msgstr ""
-"Error importando registro %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-
-#: tryton/gui/window/wizard.py:291
+#: tryton/gui/window/wizard.py:286
 msgid "Wizard"
 msgstr "Asistente"
 
@@ -1653,39 +1665,35 @@ msgstr "Asistente"
 msgid "No String Attr."
 msgstr "No tiene una cadena como atributo."
 
-#: tryton/gui/window/view_form/screen/screen.py:135
+#: tryton/gui/window/view_form/screen/screen.py:129
 msgid "ID"
 msgstr "ID"
 
-#: tryton/gui/window/view_form/screen/screen.py:136
+#: tryton/gui/window/view_form/screen/screen.py:130
 msgid "Creation User"
 msgstr "Creado por Usuario"
 
-#: tryton/gui/window/view_form/screen/screen.py:137
+#: tryton/gui/window/view_form/screen/screen.py:131
 msgid "Creation Date"
 msgstr "Fecha de Creación"
 
-#: tryton/gui/window/view_form/screen/screen.py:138
+#: tryton/gui/window/view_form/screen/screen.py:132
 msgid "Modification User"
 msgstr "Modificado por Usuario"
 
-#: tryton/gui/window/view_form/screen/screen.py:139
+#: tryton/gui/window/view_form/screen/screen.py:133
 msgid "Modification Date"
 msgstr "Fecha de Modificación"
 
-#: tryton/gui/window/view_form/screen/screen.py:634
+#: tryton/gui/window/view_form/screen/screen.py:631
 msgid "Unable to get view tree state"
-msgstr ""
+msgstr "No es posible encontrar el estado de la vista de árbol"
 
-#: tryton/gui/window/view_form/screen/screen.py:671
+#: tryton/gui/window/view_form/screen/screen.py:668
 msgid "Unable to set view tree state"
 msgstr "No se puede fijar la vista de estado del árbol"
 
-#: tryton/gui/window/view_form/view/list.py:651
-msgid "You must select a record to use the relation!"
-msgstr "¡Debe seleccionar un registro para usar la relación!"
-
-#: tryton/gui/window/view_form/view/screen_container.py:25
+#: tryton/gui/window/view_form/view/screen_container.py:23
 msgid ".."
 msgstr ".."
 
@@ -1693,19 +1701,19 @@ msgstr ".."
 msgid "F_ilters"
 msgstr "F_iltros"
 
-#: tryton/gui/window/view_form/view/screen_container.py:149
+#: tryton/gui/window/view_form/view/screen_container.py:147
 msgid "Show bookmarks of filters"
 msgstr "Mostrar marcadores de filtros"
 
-#: tryton/gui/window/view_form/view/screen_container.py:314
+#: tryton/gui/window/view_form/view/screen_container.py:312
 msgid "Remove this bookmark"
 msgstr "Eliminar este marcador"
 
-#: tryton/gui/window/view_form/view/screen_container.py:321
+#: tryton/gui/window/view_form/view/screen_container.py:319
 msgid "Bookmark this filter"
 msgstr "Marcar este filtro"
 
-#: tryton/gui/window/view_form/view/screen_container.py:380
+#: tryton/gui/window/view_form/view/screen_container.py:384
 msgid "Bookmark Name:"
 msgstr "Nombre del Marcador:"
 
@@ -1727,37 +1735,37 @@ msgstr "Vista Mensual"
 
 #: tryton/gui/window/view_form/view/calendar_gtk/toolbar.py:115
 msgid "Week"
-msgstr ""
+msgstr "Semana"
 
 #: tryton/gui/window/view_form/view/form_gtk/binary.py:47
 msgid "Select a File..."
 msgstr "Seleccione un archivo..."
 
-#: tryton/gui/window/view_form/view/form_gtk/char.py:157
+#: tryton/gui/window/view_form/view/form_gtk/char.py:161
 msgid "Show plain text"
 msgstr "Mostrar como texto plano"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:349
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:348
 msgid "Add value"
 msgstr "Agregar valor"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:459
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:461
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:199
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:201
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:458
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:460
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:202
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:204
 #: tryton/gui/window/view_form/view/form_gtk/parser.py:255
 #: tryton/gui/window/view_form/view/form_gtk/parser.py:259
 msgid ":"
 msgstr ":"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:471
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:470
 #, python-format
 msgid "Remove \"%s\""
 msgstr "Remover \"%s\""
 
 #: tryton/gui/window/view_form/view/form_gtk/image.py:51
 msgid "Select an Image..."
-msgstr "Seleccione una imagen..."
+msgstr "Seleccione una Imagen..."
 
 #: tryton/gui/window/view_form/view/form_gtk/image.py:121
 msgid "All files"
@@ -1767,25 +1775,25 @@ msgstr "Todos los archivos"
 msgid "Images"
 msgstr "Imágenes"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:175
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:178
 msgid "Translation"
 msgstr "Traducción"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:231
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:234
 msgid "Edit"
 msgstr "Editar"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:236
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:239
 msgid "Fuzzy"
 msgstr "Confuso"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:305
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:308
 msgid "You need to save the record before adding translations!"
-msgstr "¡Debe guardar el registro antes de añadir traducciones!"
+msgstr "Debe guardar el registro antes de añadir traducciones!"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:316
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:319
 msgid "No other language available!"
-msgstr "¡No hay otro idioma disponible!"
+msgstr "No hay otro idioma disponible!"
 
 #: tryton/gui/window/view_form/view/form_gtk/many2many.py:58
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:61
@@ -1796,12 +1804,12 @@ msgstr "Agregar registro existente"
 msgid "Remove selected record <Del>"
 msgstr "Eliminar registro seleccionado <Supr>"
 
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:74
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:351
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:76
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:356
 msgid "Open a record <F2>"
 msgstr "Abrir registro <F2>"
 
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:354
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:359
 msgid "Search a record <F2>"
 msgstr "Buscar registro <F2>"
 
@@ -1891,17 +1899,12 @@ msgstr "Imagen PNG (*.png)"
 
 #: tryton/gui/window/view_form/view/graph_gtk/parser.py:93
 msgid "Image size too large!"
-msgstr "¡El tamaño de la imagen es muy grande!"
+msgstr "La imagen es muy grande!"
 
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:245
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:244
 msgid ": "
 msgstr ":"
 
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:258
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:1023
-msgid "Unknown"
-msgstr "Desconocido"
-
 #: tryton/plugins/translation/__init__.py:18
 msgid "Translate view"
 msgstr "Traducir vista"
diff --git a/share/locale/es_ES/LC_MESSAGES/tryton.mo b/share/locale/es_ES/LC_MESSAGES/tryton.mo
index 338eddc..6342c42 100644
Binary files a/share/locale/es_ES/LC_MESSAGES/tryton.mo and b/share/locale/es_ES/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/es_ES/LC_MESSAGES/tryton.po b/share/locale/es_ES/LC_MESSAGES/tryton.po
index b2ab627..ab03387 100644
--- a/share/locale/es_ES/LC_MESSAGES/tryton.po
+++ b/share/locale/es_ES/LC_MESSAGES/tryton.po
@@ -12,9 +12,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: tryton 2.4.0\n"
 "Report-Msgid-Bugs-To: issue_tracker at tryton.org\n"
-"POT-Creation-Date: 2013-10-20 16:34+0200\n"
-"PO-Revision-Date: 2013-10-18 23:43+0100\n"
-"Last-Translator: Jordi Esteve (Zikzakmedia) <jesteve at zikzakmedia.com>\n"
+"POT-Creation-Date: 2014-04-18 22:49+0200\n"
+"PO-Revision-Date: 2014-04-18 00:04+0100\n"
+"Last-Translator: Jordi Esteve <jesteve at zikzakmedia.com>\n"
 "Language-Team: <tryton-es at googlegroups.com>\n"
 "Plural-Forms: nplurals=2; plural=(n != 1)\n"
 "MIME-Version: 1.0\n"
@@ -69,62 +69,62 @@ msgstr "No se ha podido escribir el archivo de configuración %s."
 msgid "Unable to set locale %s"
 msgstr "No se ha podido establecer el idioma %s"
 
-#: tryton/action/main.py:163
+#: tryton/action/main.py:171
 msgid "Select your action"
 msgstr "Seleccione su acción"
 
-#: tryton/action/main.py:169
+#: tryton/action/main.py:177
 msgid "No action defined!"
 msgstr "No se ha definido ninguna acción."
 
-#: tryton/common/common.py:270
+#: tryton/common/common.py:284
 msgid "Tryton Connection"
 msgstr "Conexión a Tryton"
 
-#: tryton/common/common.py:281
+#: tryton/common/common.py:295
 msgid "Server:"
 msgstr "Servidor:"
 
-#: tryton/common/common.py:299 tryton/gui/window/dblogin.py:79
+#: tryton/common/common.py:313 tryton/gui/window/dblogin.py:79
 msgid "Port:"
 msgstr "Puerto:"
 
-#: tryton/common/common.py:369
+#: tryton/common/common.py:383
 msgid "Selection"
 msgstr "Selección"
 
-#: tryton/common/common.py:378
+#: tryton/common/common.py:392
 msgid "Your selection:"
 msgstr "Su selección:"
 
-#: tryton/common/common.py:498 tryton/gui/main.py:1407
-#: tryton/gui/window/win_export.py:402
+#: tryton/common/common.py:528 tryton/gui/main.py:1420
+#: tryton/gui/window/win_export.py:409
 #: tryton/gui/window/view_form/view/form_gtk/binary.py:69
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:138
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:150
 #: tryton/gui/window/view_form/view/form_gtk/image.py:74
-#: tryton/gui/window/view_form/view/form_gtk/image.py:158
+#: tryton/gui/window/view_form/view/form_gtk/image.py:161
 #: tryton/gui/window/view_form/view/graph_gtk/parser.py:105
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:656
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:686
 msgid "Save As..."
 msgstr "Guardar como..."
 
-#: tryton/common/common.py:649
+#: tryton/common/common.py:675
 msgid "Always ignore this warning."
 msgstr "Ignorar siempre esta advertencia."
 
-#: tryton/common/common.py:654
+#: tryton/common/common.py:680
 msgid "Do you want to proceed?"
 msgstr "¿Desea continuar?"
 
-#: tryton/common/common.py:673
+#: tryton/common/common.py:699
 msgid "Confirmation"
 msgstr "Confirmación"
 
-#: tryton/common/common.py:779 tryton/common/common.py:1083
+#: tryton/common/common.py:805 tryton/common/common.py:1114
 msgid "Concurrency Exception"
 msgstr "Excepción de concurrencia"
 
-#: tryton/common/common.py:793
+#: tryton/common/common.py:819
 msgid ""
 "<b>Write Concurrency Warning:</b>\n"
 "\n"
@@ -142,50 +142,50 @@ msgstr ""
 "   - \"Comparar\" para ver la versión modificada:\n"
 "   - \"Guardar de todas formas\" para guardar sus cambios."
 
-#: tryton/common/common.py:802
+#: tryton/common/common.py:828
 msgid "Compare"
 msgstr "Comparar"
 
-#: tryton/common/common.py:807
+#: tryton/common/common.py:833
 msgid "Write Anyway"
 msgstr "Guardar de todas formas"
 
-#: tryton/common/common.py:833 tryton/gui/window/win_export.py:435
-#: tryton/gui/window/win_import.py:260 tryton/gui/window/win_import.py:288
+#: tryton/common/common.py:859 tryton/gui/window/win_export.py:442
+#: tryton/gui/window/win_import.py:262 tryton/gui/window/win_import.py:290
 msgid "Error"
 msgstr "Error"
 
-#: tryton/common/common.py:837
+#: tryton/common/common.py:863
 msgid "Report Bug"
 msgstr "Informar de un error"
 
-#: tryton/common/common.py:844
+#: tryton/common/common.py:870
 msgid "Application Error!"
 msgstr "Error de aplicación."
 
-#: tryton/common/common.py:867
+#: tryton/common/common.py:893
 msgid "Error: "
 msgstr "Error: "
 
-#: tryton/common/common.py:887
+#: tryton/common/common.py:913
 #, python-format
 msgid "To report bugs you must have an account on <u>%s</u>"
 msgstr "Para informar de errores debe tener una cuenta en <u>%s</u>"
 
-#: tryton/common/common.py:917
+#: tryton/common/common.py:943
 msgid "Bug Tracker"
 msgstr "Seguimiento de errores"
 
-#: tryton/common/common.py:935
+#: tryton/common/common.py:961
 msgid "User:"
 msgstr "Usuario:"
 
-#: tryton/common/common.py:943 tryton/common/common.py:1101
+#: tryton/common/common.py:969 tryton/common/common.py:1132
 #: tryton/gui/window/dblogin.py:462
 msgid "Password:"
 msgstr "Contraseña:"
 
-#: tryton/common/common.py:993
+#: tryton/common/common.py:1024
 msgid ""
 "The same bug was already reported by another user.\n"
 "To keep you informed your username is added to the nosy-list of this issue"
@@ -194,11 +194,11 @@ msgstr ""
 "Para mantenerle informado añadiremos su usuario a la lista de interesados"
 " en esta incidencia."
 
-#: tryton/common/common.py:1004
+#: tryton/common/common.py:1035
 msgid "Created new bug with ID "
 msgstr "Se creó un nuevo error con identificador"
 
-#: tryton/common/common.py:1012 tryton/gui/main.py:921
+#: tryton/common/common.py:1043 tryton/gui/main.py:928
 msgid ""
 "Connection error!\n"
 "Bad username or password!"
@@ -206,11 +206,11 @@ msgstr ""
 "Error de conexión.\n"
 "Nombre de usuario o contraseña incorrectos."
 
-#: tryton/common/common.py:1017
+#: tryton/common/common.py:1048
 msgid "Exception:"
 msgstr "Excepción:"
 
-#: tryton/common/common.py:1034
+#: tryton/common/common.py:1065
 msgid ""
 "The server fingerprint has changed since last connection!\n"
 "The application will stop connecting to this server until its fingerprint"
@@ -221,12 +221,12 @@ msgstr ""
 "La aplicación no se podrá conectar a este servidor hasta que se corrija "
 "la huella de seguridad del servidor."
 
-#: tryton/common/common.py:1036
+#: tryton/common/common.py:1067
 msgid "Security risk!"
 msgstr "Riesgo de seguridad."
 
-#: tryton/common/common.py:1042 tryton/common/common.py:1108
-#: tryton/gui/main.py:918
+#: tryton/common/common.py:1073 tryton/common/common.py:1139
+#: tryton/gui/main.py:925
 msgid ""
 "Connection error!\n"
 "Unable to connect to the server!"
@@ -234,39 +234,39 @@ msgstr ""
 "Error de conexión.\n"
 "No ha sido posible conectarse al servidor."
 
-#: tryton/common/common.py:1123
+#: tryton/common/common.py:1154
 msgid "Network Error!"
 msgstr "Error de red."
 
-#: tryton/common/common.py:1354
+#: tryton/common/common.py:1409
 msgid "Y"
 msgstr "A"
 
-#: tryton/common/common.py:1355
+#: tryton/common/common.py:1410
 msgid "M"
 msgstr "M"
 
-#: tryton/common/common.py:1356
+#: tryton/common/common.py:1411
 msgid "w"
 msgstr "s"
 
-#: tryton/common/common.py:1357
+#: tryton/common/common.py:1412
 msgid "d"
 msgstr "d"
 
-#: tryton/common/common.py:1358
+#: tryton/common/common.py:1413
 msgid "h"
 msgstr "h"
 
-#: tryton/common/common.py:1359
+#: tryton/common/common.py:1414
 msgid "m"
 msgstr "m"
 
-#: tryton/common/completion.py:22
+#: tryton/common/completion.py:21
 msgid "<i>Search...</i>"
 msgstr "<i>Buscar...</i>"
 
-#: tryton/common/completion.py:23
+#: tryton/common/completion.py:22
 msgid "<i>Create...</i>"
 msgstr "<i>Crear...</i>"
 
@@ -274,253 +274,257 @@ msgstr "<i>Crear...</i>"
 msgid "Open the calendar <F2>"
 msgstr "Abrir el calendario <F2>"
 
-#: tryton/common/date_widget.py:271
+#: tryton/common/date_widget.py:275
 msgid "Date Selection"
 msgstr "Selección de fecha"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "y"
 msgstr "a"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "yes"
 msgstr "sí"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "true"
 msgstr "verdadero"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "t"
 msgstr "v"
 
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
 msgid "True"
 msgstr "Verdadero"
 
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
 msgid "False"
 msgstr "Falso"
 
-#: tryton/common/popup_menu.py:71
+#: tryton/common/popup_menu.py:72
+msgid "Edit..."
+msgstr "Editar..."
+
+#: tryton/common/popup_menu.py:77
 msgid "Attachments..."
 msgstr "Adjuntos..."
 
-#: tryton/common/popup_menu.py:76
+#: tryton/common/popup_menu.py:87
 msgid "Actions..."
 msgstr "Acciones..."
 
-#: tryton/common/popup_menu.py:77
+#: tryton/common/popup_menu.py:88
 msgid "Relate..."
 msgstr "Relacionado..."
 
-#: tryton/common/popup_menu.py:78
+#: tryton/common/popup_menu.py:89
 msgid "Report..."
 msgstr "Informe..."
 
-#: tryton/common/popup_menu.py:79
+#: tryton/common/popup_menu.py:90
 msgid "E-Mail..."
 msgstr "Correo electrónico..."
 
-#: tryton/common/popup_menu.py:80
+#: tryton/common/popup_menu.py:91
 msgid "Print..."
 msgstr "Imprimir..."
 
-#: tryton/gui/main.py:217
+#: tryton/gui/main.py:218
 msgid "_File"
 msgstr "_Archivo"
 
-#: tryton/gui/main.py:225
+#: tryton/gui/main.py:226
 msgid "_User"
 msgstr "U_suario"
 
-#: tryton/gui/main.py:239
+#: tryton/gui/main.py:240
 msgid "_Options"
 msgstr "_Opciones"
 
-#: tryton/gui/main.py:247
+#: tryton/gui/main.py:248
 msgid "Fa_vorites"
 msgstr "Fa_voritos"
 
-#: tryton/gui/main.py:263
+#: tryton/gui/main.py:264
 msgid "_Help"
 msgstr "Ay_uda"
 
-#: tryton/gui/main.py:285 tryton/gui/window/win_search.py:26
+#: tryton/gui/main.py:286 tryton/gui/window/win_search.py:26
 #: tryton/gui/window/view_form/view/screen_container.py:100
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:333
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:332
 #: tryton/gui/window/view_form/view/form_gtk/many2many.py:40
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:45
 msgid "Search"
 msgstr "Buscar"
 
-#: tryton/gui/main.py:364
+#: tryton/gui/main.py:374
 msgid "No result found."
 msgstr "No se han encontrado resultados."
 
-#: tryton/gui/main.py:384
+#: tryton/gui/main.py:396
 msgid "_Connect..."
 msgstr "_Conectar..."
 
-#: tryton/gui/main.py:393
+#: tryton/gui/main.py:405
 msgid "_Disconnect"
 msgstr "_Desconectar"
 
-#: tryton/gui/main.py:403
+#: tryton/gui/main.py:415
 msgid "Data_base"
 msgstr "_Base de datos"
 
-#: tryton/gui/main.py:414
+#: tryton/gui/main.py:426
 msgid "_New Database..."
 msgstr "_Nueva base de datos..."
 
-#: tryton/gui/main.py:423
+#: tryton/gui/main.py:435
 msgid "_Restore Database..."
 msgstr "_Restaurar base de datos..."
 
-#: tryton/gui/main.py:432
+#: tryton/gui/main.py:444
 msgid "_Backup Database..."
 msgstr "Hacer _copia de seguridad de la base de datos..."
 
-#: tryton/gui/main.py:441
+#: tryton/gui/main.py:453
 msgid "Dro_p Database..."
 msgstr "_Eliminar base de datos..."
 
-#: tryton/gui/main.py:450
+#: tryton/gui/main.py:462
 msgid "_Quit..."
 msgstr "_Salir..."
 
-#: tryton/gui/main.py:465
+#: tryton/gui/main.py:477
 msgid "_Preferences..."
 msgstr "_Preferencias..."
 
-#: tryton/gui/main.py:476
+#: tryton/gui/main.py:488
 msgid "_Menu Reload"
 msgstr "_Recargar menú"
 
-#: tryton/gui/main.py:485
+#: tryton/gui/main.py:497
 msgid "_Menu Toggle"
 msgstr "Conmutar _menú"
 
-#: tryton/gui/main.py:492
+#: tryton/gui/main.py:504
 msgid "_Global Search"
 msgstr "Búsqueda _global"
 
-#: tryton/gui/main.py:507
+#: tryton/gui/main.py:519
 msgid "_Toolbar"
 msgstr "Barra de herramien_tas"
 
-#: tryton/gui/main.py:515
+#: tryton/gui/main.py:527
 msgid "_Default"
 msgstr "Por _defecto"
 
-#: tryton/gui/main.py:525
+#: tryton/gui/main.py:537
 msgid "_Text and Icons"
 msgstr "Texto _e iconos"
 
-#: tryton/gui/main.py:535
+#: tryton/gui/main.py:547
 msgid "_Icons"
 msgstr "_Iconos"
 
-#: tryton/gui/main.py:544
+#: tryton/gui/main.py:556
 msgid "_Text"
 msgstr "_Texto"
 
-#: tryton/gui/main.py:553
+#: tryton/gui/main.py:565
 msgid "_Menubar"
 msgstr "Barra de _menú"
 
-#: tryton/gui/main.py:561
+#: tryton/gui/main.py:573
 msgid "Change Accelerators"
 msgstr "Cambiar teclas rápidas"
 
-#: tryton/gui/main.py:569
+#: tryton/gui/main.py:581
 msgid "_Mode"
 msgstr "_Modo"
 
-#: tryton/gui/main.py:577
+#: tryton/gui/main.py:589
 msgid "_Normal"
 msgstr "_Normal"
 
-#: tryton/gui/main.py:585
+#: tryton/gui/main.py:597
 msgid "_PDA"
 msgstr "_PDA"
 
-#: tryton/gui/main.py:592
+#: tryton/gui/main.py:604
 msgid "_Form"
 msgstr "_Formulario"
 
-#: tryton/gui/main.py:601
+#: tryton/gui/main.py:613
 msgid "Save Width/Height"
 msgstr "Guardar ancho/alto"
 
-#: tryton/gui/main.py:612
+#: tryton/gui/main.py:624
 msgid "Save Tree State"
 msgstr "Guardar estado de expansión del árbol"
 
-#: tryton/gui/main.py:624
+#: tryton/gui/main.py:636
 msgid "Spell Checking"
 msgstr "Corrección ortográfica"
 
-#: tryton/gui/main.py:634
+#: tryton/gui/main.py:646
 msgid "Tabs Position"
 msgstr "Posición de las pestañas"
 
-#: tryton/gui/main.py:642
+#: tryton/gui/main.py:654
 msgid "Top"
 msgstr "Superior"
 
-#: tryton/gui/main.py:651
+#: tryton/gui/main.py:663
 msgid "Left"
 msgstr "Izquierda"
 
-#: tryton/gui/main.py:661
+#: tryton/gui/main.py:673
 msgid "Right"
 msgstr "Derecha"
 
-#: tryton/gui/main.py:671
+#: tryton/gui/main.py:683
 msgid "Bottom"
 msgstr "Inferior"
 
-#: tryton/gui/main.py:680
+#: tryton/gui/main.py:692
 msgid "_Previous Tab"
 msgstr "_Anterior"
 
-#: tryton/gui/main.py:686
+#: tryton/gui/main.py:698
 msgid "_Next Tab"
 msgstr "Siguiente"
 
-#: tryton/gui/main.py:692
+#: tryton/gui/main.py:704
 msgid "Search Limit..."
 msgstr "_Límite de búsqueda..."
 
-#: tryton/gui/main.py:698
+#: tryton/gui/main.py:710
 msgid "_Email..."
 msgstr "_Correo electrónico..."
 
-#: tryton/gui/main.py:706
+#: tryton/gui/main.py:718
 msgid "_Save Options"
 msgstr "_Guardar opciones"
 
-#: tryton/gui/main.py:718
+#: tryton/gui/main.py:730
 msgid "_Tips..."
 msgstr "Conse_jos..."
 
-#: tryton/gui/main.py:727
+#: tryton/gui/main.py:739
 msgid "_Keyboard Shortcuts..."
 msgstr "Com_binaciones de teclas..."
 
-#: tryton/gui/main.py:736
+#: tryton/gui/main.py:748
 msgid "_About..."
 msgstr "_Acerca de..."
 
-#: tryton/gui/main.py:787
+#: tryton/gui/main.py:799
 msgid "Manage Favorites"
 msgstr "_Administrar menús favoritos"
 
-#: tryton/gui/main.py:935
+#: tryton/gui/main.py:942
 msgid ""
 "The following action requires to close all tabs.\n"
 "Do you want to continue?"
@@ -528,11 +532,11 @@ msgstr ""
 "La acción seleccionada requiere cerrar todas las pestañas. \n"
 "¿Desea continuar?"
 
-#: tryton/gui/main.py:1196
+#: tryton/gui/main.py:1206
 msgid "Close Tab"
 msgstr "Cerrar pestaña"
 
-#: tryton/gui/main.py:1314
+#: tryton/gui/main.py:1327
 msgid ""
 "You are going to delete a Tryton database.\n"
 "Are you really sure to proceed?"
@@ -540,7 +544,7 @@ msgstr ""
 "Va a eliminar una base de datos de Tryton.\n"
 "¿Está seguro que quiere continuar?"
 
-#: tryton/gui/main.py:1324
+#: tryton/gui/main.py:1337
 msgid ""
 "Wrong Tryton Server Password\n"
 "Please try again."
@@ -548,28 +552,28 @@ msgstr ""
 "La contraseña del servidor Tryton es incorrecta.\n"
 "Inténtelo de nuevo."
 
-#: tryton/gui/main.py:1326 tryton/gui/main.py:1362 tryton/gui/main.py:1398
-#: tryton/gui/window/dbcreate.py:382
+#: tryton/gui/main.py:1339 tryton/gui/main.py:1375 tryton/gui/main.py:1411
+#: tryton/gui/window/dbcreate.py:384
 msgid "Access denied!"
 msgstr "Acceso denegado."
 
-#: tryton/gui/main.py:1329
+#: tryton/gui/main.py:1342
 msgid "Database drop failed with error message:\n"
 msgstr "La eliminación de la base de datos ha fallado con el mensaje de error:\n"
 
-#: tryton/gui/main.py:1330
+#: tryton/gui/main.py:1343
 msgid "Database drop failed!"
 msgstr "Falló la eliminación de la base de datos."
 
-#: tryton/gui/main.py:1332
+#: tryton/gui/main.py:1345
 msgid "Database dropped successfully!"
 msgstr "La base de datos se ha eliminado correctamente."
 
-#: tryton/gui/main.py:1337
+#: tryton/gui/main.py:1350
 msgid "Open Backup File to Restore..."
 msgstr "Abrir una copia de seguridad para restaurar..."
 
-#: tryton/gui/main.py:1354
+#: tryton/gui/main.py:1367
 msgid ""
 "It is not possible to restore a password protected database.\n"
 "Backup and restore needed to be proceed manual."
@@ -577,11 +581,11 @@ msgstr ""
 "No es posible restaurar una base de datos protegida con contraseña.\n"
 "La copia de seguridad y su restauración tiene que ser manual."
 
-#: tryton/gui/main.py:1358 tryton/gui/main.py:1394
+#: tryton/gui/main.py:1371 tryton/gui/main.py:1407
 msgid "Database is password protected!"
 msgstr "La base de datos está protegida con contraseña."
 
-#: tryton/gui/main.py:1360 tryton/gui/main.py:1396
+#: tryton/gui/main.py:1373 tryton/gui/main.py:1409
 msgid ""
 "Wrong Tryton Server Password.\n"
 "Please try again."
@@ -589,19 +593,19 @@ msgstr ""
 "La contraseña del servidor Tryton es incorrecta.\n"
 "Inténtelo de nuevo."
 
-#: tryton/gui/main.py:1365
+#: tryton/gui/main.py:1378
 msgid "Database restore failed with error message:\n"
 msgstr "La restauración de la base de datos ha fallado con el error:\n"
 
-#: tryton/gui/main.py:1367 tryton/gui/main.py:1372
+#: tryton/gui/main.py:1380 tryton/gui/main.py:1385
 msgid "Database restore failed!"
 msgstr "La restauración de la base de datos ha fallado."
 
-#: tryton/gui/main.py:1370
+#: tryton/gui/main.py:1383
 msgid "Database restored successfully!"
 msgstr "La base de datos se ha restaurado correctamente."
 
-#: tryton/gui/main.py:1391
+#: tryton/gui/main.py:1404
 msgid ""
 "It is not possible to dump a password protected Database.\n"
 "Backup and restore needed to be proceed manual."
@@ -609,75 +613,75 @@ msgstr ""
 "No es posible hacer copia de una base de datos protegida con contraseña.\n"
 "La copia de seguridad y su restauración tiene que ser manual."
 
-#: tryton/gui/main.py:1401
+#: tryton/gui/main.py:1414
 msgid "Database dump failed with error message:\n"
 msgstr "La extracción de la base de datos ha fallado con el mensaje de error:\n"
 
-#: tryton/gui/main.py:1403
+#: tryton/gui/main.py:1416
 msgid "Database dump failed!"
 msgstr "La extracción de la base de datos ha fallado."
 
-#: tryton/gui/main.py:1414
+#: tryton/gui/main.py:1427
 msgid "Database backuped successfully!"
 msgstr "La copia de seguridad de la base de datos ha finalizado correctamente."
 
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
 msgid "New"
 msgstr "Nuevo"
 
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
 msgid "Create a new record"
 msgstr "Crear un nuevo registro"
 
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
 #: tryton/gui/window/win_export.py:142
 msgid "Save"
 msgstr "Guardar"
 
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
 msgid "Save this record"
 msgstr "Guardar este registro"
 
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
-#: tryton/gui/window/win_form.py:228
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
+#: tryton/gui/window/win_form.py:232
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:154
 msgid "Switch"
 msgstr "Cambiar vista"
 
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
 msgid "Switch view"
 msgstr "Cambiar vista"
 
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
 msgid "_Reload"
 msgstr "_Recargar"
 
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
 msgid "Reload"
 msgstr "Recargar"
 
-#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:48
+#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:50
 msgid "_New"
 msgstr "_Nuevo"
 
-#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:49
-#: tryton/gui/window/win_form.py:66
+#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:51
+#: tryton/gui/window/win_form.py:67
 msgid "_Save"
 msgstr "_Guardar"
 
-#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:50
+#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:52
 msgid "_Switch View"
 msgstr "Cambiar vi_sta"
 
-#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:52
+#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:54
 msgid "_Reload/Undo"
 msgstr "_Recargar/Deshacer"
 
-#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:56
+#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:58
 msgid "_Delete..."
 msgstr "_Eliminar..."
 
-#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:65
+#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:68
 msgid "_Close Tab"
 msgstr "_Cerrar pestaña"
 
@@ -712,28 +716,28 @@ msgstr ""
 "bloqueados.\n"
 "Pulse en «Cambiar» para cambiar la dirección."
 
-#: tryton/gui/window/dbcreate.py:137
+#: tryton/gui/window/dbcreate.py:139
 msgid "Create new database"
 msgstr "Crear nueva base de datos"
 
-#: tryton/gui/window/dbcreate.py:147
+#: tryton/gui/window/dbcreate.py:149
 msgid "C_reate"
 msgstr "C_rear"
 
-#: tryton/gui/window/dbcreate.py:155
+#: tryton/gui/window/dbcreate.py:157
 msgid "Create the new database."
 msgstr "Crear la nueva base de datos."
 
-#: tryton/gui/window/dbcreate.py:166
+#: tryton/gui/window/dbcreate.py:168
 msgid "Server Setup:"
 msgstr "Configuración del servidor:"
 
-#: tryton/gui/window/dbcreate.py:171
+#: tryton/gui/window/dbcreate.py:173
 msgid "Server connection:"
 msgstr "Conexión con el servidor:"
 
-#: tryton/gui/window/dbcreate.py:180 tryton/gui/window/dbdumpdrop.py:140
-#: tryton/gui/window/dbrestore.py:86
+#: tryton/gui/window/dbcreate.py:182 tryton/gui/window/dbdumpdrop.py:140
+#: tryton/gui/window/dbrestore.py:88
 msgid ""
 "This is the URL of the server. Use server 'localhost' and port '8000' if "
 "the server is installed on this computer. Click on 'Change' to change the"
@@ -743,22 +747,22 @@ msgstr ""
 "«8000» si el servidor está instalado en este ordenador. Pulse en "
 "«Cambiar» para cambiar la dirección."
 
-#: tryton/gui/window/dbcreate.py:183 tryton/gui/window/dbdumpdrop.py:147
-#: tryton/gui/window/dbrestore.py:91
+#: tryton/gui/window/dbcreate.py:185 tryton/gui/window/dbdumpdrop.py:147
+#: tryton/gui/window/dbrestore.py:93
 msgid "C_hange"
 msgstr "C_ambiar"
 
-#: tryton/gui/window/dbcreate.py:192 tryton/gui/window/dbrestore.py:97
+#: tryton/gui/window/dbcreate.py:194 tryton/gui/window/dbrestore.py:99
 msgid "Setup the server connection..."
 msgstr "Configurar la conexión con el servidor..."
 
-#: tryton/gui/window/dbcreate.py:195 tryton/gui/window/dbdumpdrop.py:186
-#: tryton/gui/window/dbrestore.py:100
+#: tryton/gui/window/dbcreate.py:197 tryton/gui/window/dbdumpdrop.py:186
+#: tryton/gui/window/dbrestore.py:102
 msgid "Tryton Server Password:"
 msgstr "Contraseña del servidor Tryton:"
 
-#: tryton/gui/window/dbcreate.py:205 tryton/gui/window/dbdumpdrop.py:196
-#: tryton/gui/window/dbrestore.py:109
+#: tryton/gui/window/dbcreate.py:207 tryton/gui/window/dbdumpdrop.py:196
+#: tryton/gui/window/dbrestore.py:111
 msgid ""
 "This is the password of the Tryton server. It doesn't belong to a real "
 "user. This password is usually defined in the trytond configuration."
@@ -766,15 +770,15 @@ msgstr ""
 "Esta es la contraseña del servidor Tryton. No corresponde a un usuario "
 "real. Esta contraseña se define en la configuración de trytond."
 
-#: tryton/gui/window/dbcreate.py:216
+#: tryton/gui/window/dbcreate.py:218
 msgid "New database setup:"
 msgstr "Nueva configuración de la base de datos:"
 
-#: tryton/gui/window/dbcreate.py:222
+#: tryton/gui/window/dbcreate.py:224
 msgid "Database name:"
 msgstr "Nombre de la base de datos:"
 
-#: tryton/gui/window/dbcreate.py:234
+#: tryton/gui/window/dbcreate.py:236
 msgid ""
 "Choose the name of the new database.\n"
 "Allowed characters are alphanumerical or _ (underscore)\n"
@@ -785,11 +789,11 @@ msgstr ""
 "Puede utilizar caracteres alfanuméricos o _ (subrayado)\n"
 "Evite cualquier acento, espacio o caracteres especiales. Ejemplo: tryton"
 
-#: tryton/gui/window/dbcreate.py:241
+#: tryton/gui/window/dbcreate.py:243
 msgid "Default language:"
 msgstr "Idioma por defecto:"
 
-#: tryton/gui/window/dbcreate.py:251
+#: tryton/gui/window/dbcreate.py:253
 msgid ""
 "Choose the default language that will be installed for this database. You"
 " will be able to install new languages after installation through the "
@@ -799,11 +803,11 @@ msgstr ""
 "Podrá instalar nuevos idiomas después de la instalación, a través del "
 "menú de administración."
 
-#: tryton/gui/window/dbcreate.py:255
+#: tryton/gui/window/dbcreate.py:257
 msgid "Admin password:"
 msgstr "Contraseña del administrador:"
 
-#: tryton/gui/window/dbcreate.py:265
+#: tryton/gui/window/dbcreate.py:267
 msgid ""
 "Choose a password for the admin user of the new database. With these "
 "credentials you will be later able to login into the database:\n"
@@ -815,15 +819,15 @@ msgstr ""
 "Nombre de usuario: admin\n"
 "Contraseña: <La contraseña que introduzca aquí>"
 
-#: tryton/gui/window/dbcreate.py:273
+#: tryton/gui/window/dbcreate.py:275
 msgid "Confirm admin password:"
 msgstr "Confirme la contraseña del administrador:"
 
-#: tryton/gui/window/dbcreate.py:282
+#: tryton/gui/window/dbcreate.py:284
 msgid "Type the Admin password again"
 msgstr "Teclee la contraseña del administrador de nuevo"
 
-#: tryton/gui/window/dbcreate.py:330
+#: tryton/gui/window/dbcreate.py:332
 msgid ""
 "The database name is restricted to alpha-nummerical characters and \"_\" "
 "(underscore). Avoid all accents, space and any other special characters."
@@ -832,31 +836,31 @@ msgstr ""
 " y \"_\" (subrayado). Evite todos los acentos, espacios y cualquier otro "
 "carácter especial."
 
-#: tryton/gui/window/dbcreate.py:335
+#: tryton/gui/window/dbcreate.py:337
 msgid "Wrong characters in database name!"
 msgstr "Ha introducido caracteres incorrectos en el nombre de la base de datos."
 
-#: tryton/gui/window/dbcreate.py:339
+#: tryton/gui/window/dbcreate.py:341
 msgid "The new admin password doesn't match the confirmation field.\n"
 msgstr ""
 "La nueva contraseña del administrador no coincide con el campo de "
 "confirmación.\n"
 
-#: tryton/gui/window/dbcreate.py:341
+#: tryton/gui/window/dbcreate.py:343
 msgid "Passwords doesn't match!"
 msgstr "Las contraseñas no coinciden."
 
-#: tryton/gui/window/dbcreate.py:344
+#: tryton/gui/window/dbcreate.py:346
 msgid "Admin password and confirmation are required to create a new database."
 msgstr ""
 "La contraseña del administrador y su confirmación son necesarias para "
 "crear una nueva base de datos."
 
-#: tryton/gui/window/dbcreate.py:346
+#: tryton/gui/window/dbcreate.py:348
 msgid "Missing admin password!"
 msgstr "Falta la contraseña del administrador."
 
-#: tryton/gui/window/dbcreate.py:361
+#: tryton/gui/window/dbcreate.py:363
 msgid ""
 "A database with the same name already exists.\n"
 "Try another database name."
@@ -864,15 +868,15 @@ msgstr ""
 "Ya existe una base de datos con el mismo nombre.\n"
 "Inténtelo con otro nombre de base de datos."
 
-#: tryton/gui/window/dbcreate.py:364
+#: tryton/gui/window/dbcreate.py:366
 msgid "This database name already exist!"
 msgstr "Ya existe una base de datos con este nombre."
 
-#: tryton/gui/window/dbcreate.py:379
+#: tryton/gui/window/dbcreate.py:381
 msgid "Sorry, wrong password for the Tryton server. Please try again."
 msgstr "La contraseña del servidor Tryton no es correcta. Inténtelo de nuevo."
 
-#: tryton/gui/window/dbcreate.py:387
+#: tryton/gui/window/dbcreate.py:389
 msgid ""
 "Can't create the database, caused by an unknown reason.\n"
 "If there is a database created, it could be broken. Maybe drop this "
@@ -885,7 +889,7 @@ msgstr ""
 "adicional.\n"
 "Mensaje de error:\n"
 
-#: tryton/gui/window/dbcreate.py:395
+#: tryton/gui/window/dbcreate.py:397
 msgid "Error creating database!"
 msgstr "Se ha producido un error al crear la base de datos."
 
@@ -933,7 +937,7 @@ msgstr "Eliminar la base de datos elegida."
 msgid "Choose a Tryton database to delete:"
 msgstr "Elija la base de datos Tryton a eliminar:"
 
-#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:75
+#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:77
 msgid "Server Connection:"
 msgstr "Conexión al servidor:"
 
@@ -1024,15 +1028,15 @@ msgstr "Servidor:"
 msgid "User name:"
 msgstr "Nombre de usuario:"
 
-#: tryton/gui/window/dbrestore.py:64
+#: tryton/gui/window/dbrestore.py:66
 msgid "Restore Database"
 msgstr "Restaurar base de datos"
 
-#: tryton/gui/window/dbrestore.py:117
+#: tryton/gui/window/dbrestore.py:119
 msgid "File to Restore:"
 msgstr "Archivo a restaurar:"
 
-#: tryton/gui/window/dbrestore.py:131
+#: tryton/gui/window/dbrestore.py:133
 msgid ""
 "Choose the name of the database to be restored.\n"
 "Allowed characters are alphanumerical or _ (underscore)\n"
@@ -1044,15 +1048,15 @@ msgstr ""
 "Evite todos los acentos, espacios, o caracteres especiales. \n"
 "Ejemplo: tryton"
 
-#: tryton/gui/window/dbrestore.py:137
+#: tryton/gui/window/dbrestore.py:139
 msgid "New Database Name:"
 msgstr "Nombre de la base de datos nueva:"
 
-#: tryton/gui/window/dbrestore.py:140
+#: tryton/gui/window/dbrestore.py:142
 msgid "Update Database:"
 msgstr "Actualizar base de datos:"
 
-#: tryton/gui/window/dbrestore.py:144
+#: tryton/gui/window/dbrestore.py:146
 msgid ""
 "Check for an automatic database update after restoring a database from a "
 "previous Tryton version."
@@ -1060,11 +1064,11 @@ msgstr ""
 "Márquelo para que se realice una actualización automática de la base de "
 "datos desde una versión anterior de Tryton, después de restaurarla."
 
-#: tryton/gui/window/dbrestore.py:154
+#: tryton/gui/window/dbrestore.py:156
 msgid "Restore"
 msgstr "Restaurar"
 
-#: tryton/gui/window/dbrestore.py:163
+#: tryton/gui/window/dbrestore.py:165
 msgid "Restore the database from file."
 msgstr "Restaurar la base de datos desde un archivo."
 
@@ -1104,154 +1108,158 @@ msgstr "Mensaje:"
 msgid "Attachment:"
 msgstr "Adjunto:"
 
-#: tryton/gui/window/form.py:39 tryton/gui/window/tips.py:74
-#: tryton/gui/window/win_form.py:201
-#: tryton/gui/window/view_form/view/screen_container.py:165
+#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:74
+#: tryton/gui/window/win_form.py:205
+#: tryton/gui/window/view_form/view/screen_container.py:163
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:128
 msgid "Previous"
 msgstr "Anterior"
 
-#: tryton/gui/window/form.py:40
+#: tryton/gui/window/form.py:42
 msgid "Previous Record"
 msgstr "Registro anterior"
 
-#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:81
-#: tryton/gui/window/win_form.py:215
-#: tryton/gui/window/view_form/view/screen_container.py:177
+#: tryton/gui/window/form.py:43 tryton/gui/window/tips.py:81
+#: tryton/gui/window/win_form.py:219
+#: tryton/gui/window/view_form/view/screen_container.py:175
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:142
 msgid "Next"
 msgstr "Siguiente"
 
-#: tryton/gui/window/form.py:41
+#: tryton/gui/window/form.py:43
 msgid "Next Record"
 msgstr "Registro siguiente"
 
-#: tryton/gui/window/form.py:44
+#: tryton/gui/window/form.py:46
 msgid "Attachment(0)"
 msgstr "Adjunto(0)"
 
-#: tryton/gui/window/form.py:45
+#: tryton/gui/window/form.py:47
 msgid "Add an attachment to the record"
 msgstr "Añadir un adjunto al registro"
 
-#: tryton/gui/window/form.py:54
+#: tryton/gui/window/form.py:56
 msgid "_Duplicate"
 msgstr "_Duplicar"
 
-#: tryton/gui/window/form.py:59
+#: tryton/gui/window/form.py:61
 msgid "_Previous"
 msgstr "_Anterior"
 
-#: tryton/gui/window/form.py:61
+#: tryton/gui/window/form.py:63
 msgid "_Next"
 msgstr "Sig_uiente"
 
-#: tryton/gui/window/form.py:62
+#: tryton/gui/window/form.py:64
 msgid "_Search"
 msgstr "_Buscar"
 
-#: tryton/gui/window/form.py:63
+#: tryton/gui/window/form.py:65
 msgid "View _Logs..."
 msgstr "Ver _registro..."
 
-#: tryton/gui/window/form.py:68
+#: tryton/gui/window/form.py:66
+msgid "Show revisions..."
+msgstr "Mostrar versiones..."
+
+#: tryton/gui/window/form.py:71
 msgid "A_ttachments..."
 msgstr "Adjun_tos..."
 
-#: tryton/gui/window/form.py:70
+#: tryton/gui/window/form.py:73
 msgid "_Actions..."
 msgstr "_Acciones..."
 
-#: tryton/gui/window/form.py:72
+#: tryton/gui/window/form.py:75
 msgid "_Relate..."
 msgstr "_Relacionado..."
 
-#: tryton/gui/window/form.py:75
+#: tryton/gui/window/form.py:78
 msgid "_Report..."
 msgstr "_Informes..."
 
-#: tryton/gui/window/form.py:77
+#: tryton/gui/window/form.py:80
 msgid "_E-Mail..."
 msgstr "_Correo electrónico..."
 
-#: tryton/gui/window/form.py:79
+#: tryton/gui/window/form.py:82
 msgid "_Print..."
 msgstr "Im_primir..."
 
-#: tryton/gui/window/form.py:82
+#: tryton/gui/window/form.py:85
 msgid "_Export Data..."
 msgstr "_Exportar datos..."
 
-#: tryton/gui/window/form.py:84
+#: tryton/gui/window/form.py:87
 msgid "_Import Data..."
 msgstr "_Importar datos..."
 
-#: tryton/gui/window/form.py:219
+#: tryton/gui/window/form.py:216
 #, python-format
 msgid "Attachment(%d)"
 msgstr "Adjunto(%d)"
 
-#: tryton/gui/window/form.py:237
+#: tryton/gui/window/form.py:234
 msgid "You have to select one record!"
 msgstr "Debe elegir un registro."
 
-#: tryton/gui/window/form.py:241
+#: tryton/gui/window/form.py:238
 msgid "ID:"
 msgstr "ID:"
 
-#: tryton/gui/window/form.py:242
+#: tryton/gui/window/form.py:239
 msgid "Creation User:"
 msgstr "Creado por:"
 
-#: tryton/gui/window/form.py:243
+#: tryton/gui/window/form.py:240
 msgid "Creation Date:"
 msgstr "Fecha de creación:"
 
-#: tryton/gui/window/form.py:244
+#: tryton/gui/window/form.py:241
 msgid "Latest Modification by:"
 msgstr "Última modificación por:"
 
-#: tryton/gui/window/form.py:245
+#: tryton/gui/window/form.py:242
 msgid "Latest Modification Date:"
 msgstr "Última fecha de modificación:"
 
-#: tryton/gui/window/form.py:263
+#: tryton/gui/window/form.py:260
 msgid "Model:"
 msgstr "Modelo:"
 
-#: tryton/gui/window/form.py:271
+#: tryton/gui/window/form.py:304
 msgid "Are you sure to remove this record?"
 msgstr "¿Está seguro que quiere eliminar este registro?"
 
-#: tryton/gui/window/form.py:273
+#: tryton/gui/window/form.py:306
 msgid "Are you sure to remove those records?"
 msgstr "¿Está seguro que quiere eliminar estos registros?"
 
-#: tryton/gui/window/form.py:276
+#: tryton/gui/window/form.py:309
 msgid "Records not removed!"
 msgstr "Los registros no se han eliminado."
 
-#: tryton/gui/window/form.py:278
+#: tryton/gui/window/form.py:311
 msgid "Records removed!"
 msgstr "Registros eliminados."
 
-#: tryton/gui/window/form.py:318
+#: tryton/gui/window/form.py:345
 msgid "Working now on the duplicated record(s)!"
 msgstr "Ahora está trabajando en el registro duplicado."
 
-#: tryton/gui/window/form.py:325
+#: tryton/gui/window/form.py:352
 msgid "Record saved!"
 msgstr "Registro guardado."
 
-#: tryton/gui/window/form.py:328
+#: tryton/gui/window/form.py:355
 msgid "Invalid form!"
 msgstr "Formulario incorrecto."
 
-#: tryton/gui/window/form.py:436
+#: tryton/gui/window/form.py:462
 msgid " of "
 msgstr " de "
 
-#: tryton/gui/window/form.py:457
+#: tryton/gui/window/form.py:483
 msgid ""
 "This record has been modified\n"
 "do you want to save it ?"
@@ -1259,46 +1267,52 @@ msgstr ""
 "Este registro ha sido modificado.\n"
 "¿Desea guardarlo?"
 
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
 msgid "Action"
 msgstr "Acción"
 
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
 msgid "Launch action"
 msgstr "Ejecutar acción"
 
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
 msgid "Relate"
 msgstr "_Relacionado"
 
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
 msgid "Open related records"
 msgstr "Abrir registros relacionados"
 
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
 msgid "Report"
 msgstr "Informes"
 
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
 msgid "Open report"
 msgstr "Abrir informe"
 
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
 msgid "E-Mail"
 msgstr "Email"
 
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
 msgid "E-Mail report"
 msgstr "Informe por email"
 
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
 msgid "Print"
 msgstr "Imprimir"
 
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
 msgid "Print report"
 msgstr "Imprimir informe"
 
+#: tryton/gui/window/form.py:607
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:257
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:1050
+msgid "Unknown"
+msgstr "Desconocido"
+
 #: tryton/gui/window/limit.py:17
 msgid "Limit"
 msgstr "Límite"
@@ -1327,6 +1341,18 @@ msgstr "Preferencias"
 msgid "Current Password:"
 msgstr "Contraseña actual:"
 
+#: tryton/gui/window/revision.py:20
+msgid "Revision"
+msgstr "Versión"
+
+#: tryton/gui/window/revision.py:29
+msgid "Select a revision"
+msgstr "Seleccionar una versión"
+
+#: tryton/gui/window/revision.py:32
+msgid "Revision:"
+msgstr "Versión:"
+
 #: tryton/gui/window/shortcuts.py:17
 msgid "Keyboard Shortcuts"
 msgstr "Combinaciones de teclas"
@@ -1506,21 +1532,21 @@ msgstr "Añadir nombres de _campo"
 msgid "Name"
 msgstr "Nombre"
 
-#: tryton/gui/window/win_export.py:306
+#: tryton/gui/window/win_export.py:309
 msgid "What is the name of this export?"
 msgstr "¿Cuál es el nombre de esta exportación?"
 
-#: tryton/gui/window/win_export.py:429
+#: tryton/gui/window/win_export.py:436
 #, python-format
 msgid "%d record saved!"
 msgstr "Se ha guardado %d registro."
 
-#: tryton/gui/window/win_export.py:431
+#: tryton/gui/window/win_export.py:438
 #, python-format
 msgid "%d records saved!"
 msgstr "Se han guardado %d registros."
 
-#: tryton/gui/window/win_export.py:434
+#: tryton/gui/window/win_export.py:441
 #, python-format
 msgid ""
 "Operation failed!\n"
@@ -1535,26 +1561,26 @@ msgstr ""
 msgid "Link"
 msgstr "Enlace"
 
-#: tryton/gui/window/win_form.py:134
+#: tryton/gui/window/win_form.py:136
 msgid "Add"
 msgstr "Añadir"
 
-#: tryton/gui/window/win_form.py:147
+#: tryton/gui/window/win_form.py:149
 msgid "Remove <Del>"
 msgstr "Eliminar <Supr>"
 
-#: tryton/gui/window/win_form.py:162
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:73
+#: tryton/gui/window/win_form.py:164
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:75
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:86
 msgid "Create a new record <F3>"
 msgstr "Crear un nuevo registro <F3>"
 
-#: tryton/gui/window/win_form.py:174
+#: tryton/gui/window/win_form.py:176
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:106
 msgid "Delete selected record <Del>"
 msgstr "Eliminar registro seleccionado <Supr>"
 
-#: tryton/gui/window/win_form.py:188
+#: tryton/gui/window/win_form.py:190
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:116
 msgid "Undelete selected record <Ins>"
 msgstr "Recuperar registro seleccionado <Ins>"
@@ -1577,10 +1603,10 @@ msgstr "Archivo a importar:"
 
 #: tryton/gui/window/win_import.py:111
 #: tryton/gui/window/view_form/view/form_gtk/binary.py:57
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:111
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:118
 #: tryton/gui/window/view_form/view/form_gtk/image.py:62
 #: tryton/gui/window/view_form/view/form_gtk/image.py:131
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:624
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:650
 msgid "Open..."
 msgstr "Abrir..."
 
@@ -1604,19 +1630,19 @@ msgstr "Codificación:"
 msgid "Lines to Skip:"
 msgstr "Líneas a omitir:"
 
-#: tryton/gui/window/win_import.py:184 tryton/gui/window/win_import.py:189
+#: tryton/gui/window/win_import.py:185 tryton/gui/window/win_import.py:190
 msgid "Field name"
 msgstr "Nombre del campo"
 
-#: tryton/gui/window/win_import.py:249
+#: tryton/gui/window/win_import.py:251
 msgid "You must select an import file first!"
 msgstr "Primero debe elegir un archivo a importar."
 
-#: tryton/gui/window/win_import.py:260
+#: tryton/gui/window/win_import.py:262
 msgid "Error opening CSV file"
 msgstr "Error al abrir el archivo CSV"
 
-#: tryton/gui/window/win_import.py:287
+#: tryton/gui/window/win_import.py:289
 #, python-format
 msgid "Error processing the file at field %s."
 msgstr "Se ha producido un error al procesar el archivo en el campo %s."
@@ -1631,24 +1657,7 @@ msgstr "Se ha importado %d registro."
 msgid "%d records imported!"
 msgstr "Se han importado %d registros."
 
-#: tryton/gui/window/win_import.py:371
-msgid "Importation Error!"
-msgstr "Error de importación."
-
-#: tryton/gui/window/win_import.py:372
-#, python-format
-msgid ""
-"Error importing record %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-msgstr ""
-"Error importando registro %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-
-#: tryton/gui/window/wizard.py:291
+#: tryton/gui/window/wizard.py:286
 msgid "Wizard"
 msgstr "Asistente"
 
@@ -1657,39 +1666,35 @@ msgstr "Asistente"
 msgid "No String Attr."
 msgstr "No tiene una cadena como atributo."
 
-#: tryton/gui/window/view_form/screen/screen.py:135
+#: tryton/gui/window/view_form/screen/screen.py:129
 msgid "ID"
 msgstr "ID"
 
-#: tryton/gui/window/view_form/screen/screen.py:136
+#: tryton/gui/window/view_form/screen/screen.py:130
 msgid "Creation User"
 msgstr "Creado por:"
 
-#: tryton/gui/window/view_form/screen/screen.py:137
+#: tryton/gui/window/view_form/screen/screen.py:131
 msgid "Creation Date"
 msgstr "Fecha de creación:"
 
-#: tryton/gui/window/view_form/screen/screen.py:138
+#: tryton/gui/window/view_form/screen/screen.py:132
 msgid "Modification User"
 msgstr "Última modificación por:"
 
-#: tryton/gui/window/view_form/screen/screen.py:139
+#: tryton/gui/window/view_form/screen/screen.py:133
 msgid "Modification Date"
 msgstr "Última fecha de modificación:"
 
-#: tryton/gui/window/view_form/screen/screen.py:634
+#: tryton/gui/window/view_form/screen/screen.py:631
 msgid "Unable to get view tree state"
 msgstr "No se ha podido obtener el estado de expansión del árbol"
 
-#: tryton/gui/window/view_form/screen/screen.py:671
+#: tryton/gui/window/view_form/screen/screen.py:668
 msgid "Unable to set view tree state"
 msgstr "No se ha podido establecer el estado de expansión del árbol"
 
-#: tryton/gui/window/view_form/view/list.py:651
-msgid "You must select a record to use the relation!"
-msgstr "Debe seleccionar un registro para usar la relación."
-
-#: tryton/gui/window/view_form/view/screen_container.py:25
+#: tryton/gui/window/view_form/view/screen_container.py:23
 msgid ".."
 msgstr ".."
 
@@ -1697,19 +1702,19 @@ msgstr ".."
 msgid "F_ilters"
 msgstr "F_iltros"
 
-#: tryton/gui/window/view_form/view/screen_container.py:149
+#: tryton/gui/window/view_form/view/screen_container.py:147
 msgid "Show bookmarks of filters"
 msgstr "Muestra las búsquedas favoritas"
 
-#: tryton/gui/window/view_form/view/screen_container.py:314
+#: tryton/gui/window/view_form/view/screen_container.py:312
 msgid "Remove this bookmark"
 msgstr "Eliminar de las búsquedas favoritas"
 
-#: tryton/gui/window/view_form/view/screen_container.py:321
+#: tryton/gui/window/view_form/view/screen_container.py:319
 msgid "Bookmark this filter"
 msgstr "Guardar como búsqueda favorita"
 
-#: tryton/gui/window/view_form/view/screen_container.py:380
+#: tryton/gui/window/view_form/view/screen_container.py:384
 msgid "Bookmark Name:"
 msgstr "Nombre de la búsqueda favorita:"
 
@@ -1737,24 +1742,24 @@ msgstr "Semana"
 msgid "Select a File..."
 msgstr "Seleccionar un archivo..."
 
-#: tryton/gui/window/view_form/view/form_gtk/char.py:157
+#: tryton/gui/window/view_form/view/form_gtk/char.py:161
 msgid "Show plain text"
 msgstr "Mostrar como texto plano"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:349
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:348
 msgid "Add value"
 msgstr "Añadir un valor"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:459
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:461
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:199
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:201
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:458
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:460
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:202
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:204
 #: tryton/gui/window/view_form/view/form_gtk/parser.py:255
 #: tryton/gui/window/view_form/view/form_gtk/parser.py:259
 msgid ":"
 msgstr ":"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:471
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:470
 #, python-format
 msgid "Remove \"%s\""
 msgstr "Eliminar \"%s\""
@@ -1771,23 +1776,23 @@ msgstr "Todos los archivos"
 msgid "Images"
 msgstr "Imágenes"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:175
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:178
 msgid "Translation"
 msgstr "Traducción"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:231
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:234
 msgid "Edit"
 msgstr "Editar"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:236
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:239
 msgid "Fuzzy"
 msgstr "Confuso"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:305
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:308
 msgid "You need to save the record before adding translations!"
 msgstr "Debe guardar el registro antes de añadir traducciones."
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:316
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:319
 msgid "No other language available!"
 msgstr "No hay otro idioma disponible."
 
@@ -1800,12 +1805,12 @@ msgstr "Añadir un registro existente"
 msgid "Remove selected record <Del>"
 msgstr "Eliminar registro seleccionado <Supr>"
 
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:74
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:351
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:76
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:356
 msgid "Open a record <F2>"
 msgstr "Abrir registro <F2>"
 
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:354
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:359
 msgid "Search a record <F2>"
 msgstr "Buscar registro <F2>"
 
@@ -1897,15 +1902,10 @@ msgstr "Imagen PNG (*.png)"
 msgid "Image size too large!"
 msgstr "El tamaño de la imagen es muy grande."
 
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:245
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:244
 msgid ": "
 msgstr ":"
 
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:258
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:1023
-msgid "Unknown"
-msgstr "Desconocido"
-
 #: tryton/plugins/translation/__init__.py:18
 msgid "Translate view"
 msgstr "Traducir vista"
diff --git a/share/locale/fr_FR/LC_MESSAGES/tryton.mo b/share/locale/fr_FR/LC_MESSAGES/tryton.mo
index e3d0d78..2550dde 100644
Binary files a/share/locale/fr_FR/LC_MESSAGES/tryton.mo and b/share/locale/fr_FR/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/fr_FR/LC_MESSAGES/tryton.po b/share/locale/fr_FR/LC_MESSAGES/tryton.po
index d1dd02e..7bcaffa 100644
--- a/share/locale/fr_FR/LC_MESSAGES/tryton.po
+++ b/share/locale/fr_FR/LC_MESSAGES/tryton.po
@@ -7,9 +7,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: tryton 0.0.1\n"
 "Report-Msgid-Bugs-To: issue_tracker at tryton.org\n"
-"POT-Creation-Date: 2013-10-20 16:34+0200\n"
+"POT-Creation-Date: 2014-04-18 22:49+0200\n"
 "PO-Revision-Date: 2013-04-19 23:58+0200\n"
-"Last-Translator: Cédric Krier <ced at b2ck.com>\n"
+"Last-Translator: Nicolas Évrard <nicolas.evrard at b2ck.com>\n"
 "Language-Team: fr_FR\n"
 "Plural-Forms: nplurals=2; plural=(n > 1)\n"
 "MIME-Version: 1.0\n"
@@ -64,62 +64,62 @@ msgstr "Impossible d'écrire le fichier de configuration %s !"
 msgid "Unable to set locale %s"
 msgstr "Impossible de sélectionner la locale %s"
 
-#: tryton/action/main.py:163
+#: tryton/action/main.py:171
 msgid "Select your action"
 msgstr "Sélectionnez votre action"
 
-#: tryton/action/main.py:169
+#: tryton/action/main.py:177
 msgid "No action defined!"
 msgstr "Pas d'action définie !"
 
-#: tryton/common/common.py:270
+#: tryton/common/common.py:284
 msgid "Tryton Connection"
 msgstr "Connexion Tryton"
 
-#: tryton/common/common.py:281
+#: tryton/common/common.py:295
 msgid "Server:"
 msgstr "Serveur :"
 
-#: tryton/common/common.py:299 tryton/gui/window/dblogin.py:79
+#: tryton/common/common.py:313 tryton/gui/window/dblogin.py:79
 msgid "Port:"
 msgstr "Port :"
 
-#: tryton/common/common.py:369
+#: tryton/common/common.py:383
 msgid "Selection"
 msgstr "Sélection"
 
-#: tryton/common/common.py:378
+#: tryton/common/common.py:392
 msgid "Your selection:"
 msgstr "Votre sélection :"
 
-#: tryton/common/common.py:498 tryton/gui/main.py:1407
-#: tryton/gui/window/win_export.py:402
+#: tryton/common/common.py:528 tryton/gui/main.py:1420
+#: tryton/gui/window/win_export.py:409
 #: tryton/gui/window/view_form/view/form_gtk/binary.py:69
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:138
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:150
 #: tryton/gui/window/view_form/view/form_gtk/image.py:74
-#: tryton/gui/window/view_form/view/form_gtk/image.py:158
+#: tryton/gui/window/view_form/view/form_gtk/image.py:161
 #: tryton/gui/window/view_form/view/graph_gtk/parser.py:105
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:656
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:686
 msgid "Save As..."
 msgstr "Enregistrer sous..."
 
-#: tryton/common/common.py:649
+#: tryton/common/common.py:675
 msgid "Always ignore this warning."
 msgstr "Toujours ignorer cet avertissement."
 
-#: tryton/common/common.py:654
+#: tryton/common/common.py:680
 msgid "Do you want to proceed?"
 msgstr "Souhaitez-vous continuer ?"
 
-#: tryton/common/common.py:673
+#: tryton/common/common.py:699
 msgid "Confirmation"
 msgstr "Confirmation"
 
-#: tryton/common/common.py:779 tryton/common/common.py:1083
+#: tryton/common/common.py:805 tryton/common/common.py:1114
 msgid "Concurrency Exception"
 msgstr "Erreur d'accès concurrent"
 
-#: tryton/common/common.py:793
+#: tryton/common/common.py:819
 msgid ""
 "<b>Write Concurrency Warning:</b>\n"
 "\n"
@@ -138,50 +138,50 @@ msgstr ""
 "   - \"Comparer\" pour voir la nouvelle version;\n"
 "   - \"Écraser\" pour sauver vos modifications."
 
-#: tryton/common/common.py:802
+#: tryton/common/common.py:828
 msgid "Compare"
 msgstr "Comparer"
 
-#: tryton/common/common.py:807
+#: tryton/common/common.py:833
 msgid "Write Anyway"
 msgstr "Écraser"
 
-#: tryton/common/common.py:833 tryton/gui/window/win_export.py:435
-#: tryton/gui/window/win_import.py:260 tryton/gui/window/win_import.py:288
+#: tryton/common/common.py:859 tryton/gui/window/win_export.py:442
+#: tryton/gui/window/win_import.py:262 tryton/gui/window/win_import.py:290
 msgid "Error"
 msgstr "Erreur"
 
-#: tryton/common/common.py:837
+#: tryton/common/common.py:863
 msgid "Report Bug"
 msgstr "Rapporter un bogue"
 
-#: tryton/common/common.py:844
+#: tryton/common/common.py:870
 msgid "Application Error!"
 msgstr "Erreur Applicative !"
 
-#: tryton/common/common.py:867
+#: tryton/common/common.py:893
 msgid "Error: "
 msgstr "Erreur : "
 
-#: tryton/common/common.py:887
+#: tryton/common/common.py:913
 #, python-format
 msgid "To report bugs you must have an account on <u>%s</u>"
 msgstr "Pour rapporter un bogue vous devez avoir un compte sur <u>%s</u>"
 
-#: tryton/common/common.py:917
+#: tryton/common/common.py:943
 msgid "Bug Tracker"
 msgstr "Bug Tracker"
 
-#: tryton/common/common.py:935
+#: tryton/common/common.py:961
 msgid "User:"
 msgstr "Utilisateur :"
 
-#: tryton/common/common.py:943 tryton/common/common.py:1101
+#: tryton/common/common.py:969 tryton/common/common.py:1132
 #: tryton/gui/window/dblogin.py:462
 msgid "Password:"
 msgstr "Mot de passe :"
 
-#: tryton/common/common.py:993
+#: tryton/common/common.py:1024
 msgid ""
 "The same bug was already reported by another user.\n"
 "To keep you informed your username is added to the nosy-list of this issue"
@@ -190,11 +190,11 @@ msgstr ""
 "Pour vous garder informé, votre nom d'utilisateur a été ajouté à la liste"
 " de suivi de ce bogue"
 
-#: tryton/common/common.py:1004
+#: tryton/common/common.py:1035
 msgid "Created new bug with ID "
 msgstr "Un nouveau bogue a été créé avec l'ID "
 
-#: tryton/common/common.py:1012 tryton/gui/main.py:921
+#: tryton/common/common.py:1043 tryton/gui/main.py:928
 msgid ""
 "Connection error!\n"
 "Bad username or password!"
@@ -202,11 +202,11 @@ msgstr ""
 "Erreur de connexion !\n"
 "Mauvais nom d'utilisateur ou mot de passe !"
 
-#: tryton/common/common.py:1017
+#: tryton/common/common.py:1048
 msgid "Exception:"
 msgstr "Exception :"
 
-#: tryton/common/common.py:1034
+#: tryton/common/common.py:1065
 msgid ""
 "The server fingerprint has changed since last connection!\n"
 "The application will stop connecting to this server until its fingerprint"
@@ -216,12 +216,12 @@ msgstr ""
 "Les connections à ce serveur sont annulées tant que son empreinte n'est "
 "pas corrigée."
 
-#: tryton/common/common.py:1036
+#: tryton/common/common.py:1067
 msgid "Security risk!"
 msgstr "Alerte sécurité !"
 
-#: tryton/common/common.py:1042 tryton/common/common.py:1108
-#: tryton/gui/main.py:918
+#: tryton/common/common.py:1073 tryton/common/common.py:1139
+#: tryton/gui/main.py:925
 msgid ""
 "Connection error!\n"
 "Unable to connect to the server!"
@@ -229,39 +229,39 @@ msgstr ""
 "Erreur de connexion !\n"
 "Impossible de se connecter au serveur !"
 
-#: tryton/common/common.py:1123
+#: tryton/common/common.py:1154
 msgid "Network Error!"
 msgstr "Erreur réseau"
 
-#: tryton/common/common.py:1354
+#: tryton/common/common.py:1409
 msgid "Y"
 msgstr "A"
 
-#: tryton/common/common.py:1355
+#: tryton/common/common.py:1410
 msgid "M"
 msgstr "M"
 
-#: tryton/common/common.py:1356
+#: tryton/common/common.py:1411
 msgid "w"
 msgstr "s"
 
-#: tryton/common/common.py:1357
+#: tryton/common/common.py:1412
 msgid "d"
 msgstr "j"
 
-#: tryton/common/common.py:1358
+#: tryton/common/common.py:1413
 msgid "h"
 msgstr "h"
 
-#: tryton/common/common.py:1359
+#: tryton/common/common.py:1414
 msgid "m"
 msgstr "m"
 
-#: tryton/common/completion.py:22
+#: tryton/common/completion.py:21
 msgid "<i>Search...</i>"
 msgstr "<i>Recherche...</i>"
 
-#: tryton/common/completion.py:23
+#: tryton/common/completion.py:22
 msgid "<i>Create...</i>"
 msgstr "<i>Créer...</i>"
 
@@ -269,253 +269,257 @@ msgstr "<i>Créer...</i>"
 msgid "Open the calendar <F2>"
 msgstr "Ouvrir le calendrier <F2>"
 
-#: tryton/common/date_widget.py:271
+#: tryton/common/date_widget.py:275
 msgid "Date Selection"
 msgstr "Sélection de la date"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "y"
 msgstr "y"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "yes"
 msgstr "oui"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "true"
 msgstr "vrai"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "t"
 msgstr "v"
 
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
 msgid "True"
 msgstr "Vrai"
 
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
 msgid "False"
 msgstr "Faux"
 
-#: tryton/common/popup_menu.py:71
+#: tryton/common/popup_menu.py:72
+msgid "Edit..."
+msgstr "Éditer..."
+
+#: tryton/common/popup_menu.py:77
 msgid "Attachments..."
 msgstr "Pièces jointes..."
 
-#: tryton/common/popup_menu.py:76
+#: tryton/common/popup_menu.py:87
 msgid "Actions..."
 msgstr "Actions..."
 
-#: tryton/common/popup_menu.py:77
+#: tryton/common/popup_menu.py:88
 msgid "Relate..."
 msgstr "Relation..."
 
-#: tryton/common/popup_menu.py:78
+#: tryton/common/popup_menu.py:89
 msgid "Report..."
 msgstr "Rapport..."
 
-#: tryton/common/popup_menu.py:79
+#: tryton/common/popup_menu.py:90
 msgid "E-Mail..."
 msgstr "Email..."
 
-#: tryton/common/popup_menu.py:80
+#: tryton/common/popup_menu.py:91
 msgid "Print..."
 msgstr "Imprimer..."
 
-#: tryton/gui/main.py:217
+#: tryton/gui/main.py:218
 msgid "_File"
 msgstr "_Fichier"
 
-#: tryton/gui/main.py:225
+#: tryton/gui/main.py:226
 msgid "_User"
 msgstr "_Utilisateur"
 
-#: tryton/gui/main.py:239
+#: tryton/gui/main.py:240
 msgid "_Options"
 msgstr "_Options"
 
-#: tryton/gui/main.py:247
+#: tryton/gui/main.py:248
 msgid "Fa_vorites"
 msgstr "Fa_voris"
 
-#: tryton/gui/main.py:263
+#: tryton/gui/main.py:264
 msgid "_Help"
 msgstr "_Aide"
 
-#: tryton/gui/main.py:285 tryton/gui/window/win_search.py:26
+#: tryton/gui/main.py:286 tryton/gui/window/win_search.py:26
 #: tryton/gui/window/view_form/view/screen_container.py:100
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:333
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:332
 #: tryton/gui/window/view_form/view/form_gtk/many2many.py:40
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:45
 msgid "Search"
 msgstr "Recherche"
 
-#: tryton/gui/main.py:364
+#: tryton/gui/main.py:374
 msgid "No result found."
 msgstr "Aucun résultat trouvé"
 
-#: tryton/gui/main.py:384
+#: tryton/gui/main.py:396
 msgid "_Connect..."
 msgstr "_Connecter..."
 
-#: tryton/gui/main.py:393
+#: tryton/gui/main.py:405
 msgid "_Disconnect"
 msgstr "_Déconnecter"
 
-#: tryton/gui/main.py:403
+#: tryton/gui/main.py:415
 msgid "Data_base"
 msgstr "_Base de données"
 
-#: tryton/gui/main.py:414
+#: tryton/gui/main.py:426
 msgid "_New Database..."
 msgstr "_Nouvelle base de données..."
 
-#: tryton/gui/main.py:423
+#: tryton/gui/main.py:435
 msgid "_Restore Database..."
 msgstr "_Restaurer une base de données..."
 
-#: tryton/gui/main.py:432
+#: tryton/gui/main.py:444
 msgid "_Backup Database..."
 msgstr "_Sauvegarder une base de données..."
 
-#: tryton/gui/main.py:441
+#: tryton/gui/main.py:453
 msgid "Dro_p Database..."
 msgstr "Su_pprimer une base de données..."
 
-#: tryton/gui/main.py:450
+#: tryton/gui/main.py:462
 msgid "_Quit..."
 msgstr "_Quitter..."
 
-#: tryton/gui/main.py:465
+#: tryton/gui/main.py:477
 msgid "_Preferences..."
 msgstr "_Préférences..."
 
-#: tryton/gui/main.py:476
+#: tryton/gui/main.py:488
 msgid "_Menu Reload"
 msgstr "_Recharger le menu"
 
-#: tryton/gui/main.py:485
+#: tryton/gui/main.py:497
 msgid "_Menu Toggle"
-msgstr "Montrer/Cacher le _Menu"
+msgstr "Montrer/Cacher le _menu"
 
-#: tryton/gui/main.py:492
+#: tryton/gui/main.py:504
 msgid "_Global Search"
 msgstr "Recherche _globale"
 
-#: tryton/gui/main.py:507
+#: tryton/gui/main.py:519
 msgid "_Toolbar"
 msgstr "_Barre d'outils"
 
-#: tryton/gui/main.py:515
+#: tryton/gui/main.py:527
 msgid "_Default"
 msgstr "_Défaut"
 
-#: tryton/gui/main.py:525
+#: tryton/gui/main.py:537
 msgid "_Text and Icons"
 msgstr "_Textes et Icônes"
 
-#: tryton/gui/main.py:535
+#: tryton/gui/main.py:547
 msgid "_Icons"
 msgstr "_Icônes"
 
-#: tryton/gui/main.py:544
+#: tryton/gui/main.py:556
 msgid "_Text"
 msgstr "_Textes"
 
-#: tryton/gui/main.py:553
+#: tryton/gui/main.py:565
 msgid "_Menubar"
 msgstr "_Barre de Menu"
 
-#: tryton/gui/main.py:561
+#: tryton/gui/main.py:573
 msgid "Change Accelerators"
 msgstr "Changer les raccourcis"
 
-#: tryton/gui/main.py:569
+#: tryton/gui/main.py:581
 msgid "_Mode"
 msgstr "_Mode"
 
-#: tryton/gui/main.py:577
+#: tryton/gui/main.py:589
 msgid "_Normal"
 msgstr "_Normal"
 
-#: tryton/gui/main.py:585
+#: tryton/gui/main.py:597
 msgid "_PDA"
 msgstr "_PDA"
 
-#: tryton/gui/main.py:592
+#: tryton/gui/main.py:604
 msgid "_Form"
 msgstr "_Formulaire"
 
-#: tryton/gui/main.py:601
+#: tryton/gui/main.py:613
 msgid "Save Width/Height"
 msgstr "Sauver largeur / hauteur"
 
-#: tryton/gui/main.py:612
+#: tryton/gui/main.py:624
 msgid "Save Tree State"
-msgstr "Sauver l'état d'arbre développé"
+msgstr "Sauver l'état des arbres"
 
-#: tryton/gui/main.py:624
+#: tryton/gui/main.py:636
 msgid "Spell Checking"
 msgstr "Vérifier l'orthographe"
 
-#: tryton/gui/main.py:634
+#: tryton/gui/main.py:646
 msgid "Tabs Position"
 msgstr "Position des onglets"
 
-#: tryton/gui/main.py:642
+#: tryton/gui/main.py:654
 msgid "Top"
 msgstr "Dessus"
 
-#: tryton/gui/main.py:651
+#: tryton/gui/main.py:663
 msgid "Left"
 msgstr "Gauche"
 
-#: tryton/gui/main.py:661
+#: tryton/gui/main.py:673
 msgid "Right"
 msgstr "Droite"
 
-#: tryton/gui/main.py:671
+#: tryton/gui/main.py:683
 msgid "Bottom"
 msgstr "Dessous"
 
-#: tryton/gui/main.py:680
+#: tryton/gui/main.py:692
 msgid "_Previous Tab"
 msgstr "Onglet _Précédent"
 
-#: tryton/gui/main.py:686
+#: tryton/gui/main.py:698
 msgid "_Next Tab"
 msgstr "Onglet _Suivant"
 
-#: tryton/gui/main.py:692
+#: tryton/gui/main.py:704
 msgid "Search Limit..."
 msgstr "Limite la recherche à ..."
 
-#: tryton/gui/main.py:698
+#: tryton/gui/main.py:710
 msgid "_Email..."
 msgstr "_Email..."
 
-#: tryton/gui/main.py:706
+#: tryton/gui/main.py:718
 msgid "_Save Options"
 msgstr "_Sauver les options"
 
-#: tryton/gui/main.py:718
+#: tryton/gui/main.py:730
 msgid "_Tips..."
 msgstr "_Astuces..."
 
-#: tryton/gui/main.py:727
+#: tryton/gui/main.py:739
 msgid "_Keyboard Shortcuts..."
 msgstr "Raccourcis _Clavier..."
 
-#: tryton/gui/main.py:736
+#: tryton/gui/main.py:748
 msgid "_About..."
 msgstr "_À Propos..."
 
-#: tryton/gui/main.py:787
+#: tryton/gui/main.py:799
 msgid "Manage Favorites"
 msgstr "_Gérer les favoris"
 
-#: tryton/gui/main.py:935
+#: tryton/gui/main.py:942
 msgid ""
 "The following action requires to close all tabs.\n"
 "Do you want to continue?"
@@ -523,11 +527,11 @@ msgstr ""
 "L'action suivante nécessite de fermer tous les onglets.\n"
 "Voulez-vous continuer?"
 
-#: tryton/gui/main.py:1196
+#: tryton/gui/main.py:1206
 msgid "Close Tab"
 msgstr "Fermer l'onglet"
 
-#: tryton/gui/main.py:1314
+#: tryton/gui/main.py:1327
 msgid ""
 "You are going to delete a Tryton database.\n"
 "Are you really sure to proceed?"
@@ -535,7 +539,7 @@ msgstr ""
 "Vous allez supprimer une base de données Tryton.\n"
 "Êtes-vous sûr de vouloir continuer ?"
 
-#: tryton/gui/main.py:1324
+#: tryton/gui/main.py:1337
 msgid ""
 "Wrong Tryton Server Password\n"
 "Please try again."
@@ -543,30 +547,30 @@ msgstr ""
 "Mauvais mot de passe du serveur Tryton.\n"
 "Essayez à nouveau."
 
-#: tryton/gui/main.py:1326 tryton/gui/main.py:1362 tryton/gui/main.py:1398
-#: tryton/gui/window/dbcreate.py:382
+#: tryton/gui/main.py:1339 tryton/gui/main.py:1375 tryton/gui/main.py:1411
+#: tryton/gui/window/dbcreate.py:384
 msgid "Access denied!"
 msgstr "Accès refusé !"
 
-#: tryton/gui/main.py:1329
+#: tryton/gui/main.py:1342
 msgid "Database drop failed with error message:\n"
 msgstr ""
 "La suppression de la base de données a échouée avec le message d'erreur :"
 "\n"
 
-#: tryton/gui/main.py:1330
+#: tryton/gui/main.py:1343
 msgid "Database drop failed!"
 msgstr "La suppression de la base de données a échouée !"
 
-#: tryton/gui/main.py:1332
+#: tryton/gui/main.py:1345
 msgid "Database dropped successfully!"
 msgstr "La base de données a été supprimée avec succès !"
 
-#: tryton/gui/main.py:1337
+#: tryton/gui/main.py:1350
 msgid "Open Backup File to Restore..."
 msgstr "Ouvrir le Fichier de Sauvergarde..."
 
-#: tryton/gui/main.py:1354
+#: tryton/gui/main.py:1367
 msgid ""
 "It is not possible to restore a password protected database.\n"
 "Backup and restore needed to be proceed manual."
@@ -575,11 +579,11 @@ msgstr ""
 "mot de passe.\n"
 "La sauvegarde et la restauration doivent être faites manuellement."
 
-#: tryton/gui/main.py:1358 tryton/gui/main.py:1394
+#: tryton/gui/main.py:1371 tryton/gui/main.py:1407
 msgid "Database is password protected!"
 msgstr "La base de données est protégée par un mot de passe !"
 
-#: tryton/gui/main.py:1360 tryton/gui/main.py:1396
+#: tryton/gui/main.py:1373 tryton/gui/main.py:1409
 msgid ""
 "Wrong Tryton Server Password.\n"
 "Please try again."
@@ -587,21 +591,21 @@ msgstr ""
 "Mauvais mot de passe du serveur Tryton.\n"
 "Essayez à nouveau."
 
-#: tryton/gui/main.py:1365
+#: tryton/gui/main.py:1378
 msgid "Database restore failed with error message:\n"
 msgstr ""
 "La restauration de la base de données a échouée avec le message d'erreur "
 ":\n"
 
-#: tryton/gui/main.py:1367 tryton/gui/main.py:1372
+#: tryton/gui/main.py:1380 tryton/gui/main.py:1385
 msgid "Database restore failed!"
 msgstr "La restauration de la base de données a échoué !"
 
-#: tryton/gui/main.py:1370
+#: tryton/gui/main.py:1383
 msgid "Database restored successfully!"
 msgstr "La base de données a été restaurée avec succès !"
 
-#: tryton/gui/main.py:1391
+#: tryton/gui/main.py:1404
 msgid ""
 "It is not possible to dump a password protected Database.\n"
 "Backup and restore needed to be proceed manual."
@@ -610,75 +614,75 @@ msgstr ""
 " mot de passe.\n"
 "La sauvegarde et la restauration doivent être faites manuellement."
 
-#: tryton/gui/main.py:1401
+#: tryton/gui/main.py:1414
 msgid "Database dump failed with error message:\n"
 msgstr "La sauvegarde de la base de donnée a échouée avec le message d'erreur :\n"
 
-#: tryton/gui/main.py:1403
+#: tryton/gui/main.py:1416
 msgid "Database dump failed!"
 msgstr "La sauvegarde de la base de données a échouée !"
 
-#: tryton/gui/main.py:1414
+#: tryton/gui/main.py:1427
 msgid "Database backuped successfully!"
 msgstr "La base de données a été sauvegardée avec succès !"
 
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
 msgid "New"
 msgstr "Nouveau"
 
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
 msgid "Create a new record"
 msgstr "Créer un nouvel enregistrement"
 
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
 #: tryton/gui/window/win_export.py:142
 msgid "Save"
 msgstr "Sauver"
 
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
 msgid "Save this record"
 msgstr "Sauver cet enregistrement"
 
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
-#: tryton/gui/window/win_form.py:228
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
+#: tryton/gui/window/win_form.py:232
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:154
 msgid "Switch"
 msgstr "Basculer"
 
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
 msgid "Switch view"
 msgstr "Basculer la vue"
 
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
 msgid "_Reload"
 msgstr "_Recharger"
 
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
 msgid "Reload"
 msgstr "Recharger"
 
-#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:48
+#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:50
 msgid "_New"
 msgstr "_Nouveau"
 
-#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:49
-#: tryton/gui/window/win_form.py:66
+#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:51
+#: tryton/gui/window/win_form.py:67
 msgid "_Save"
 msgstr "_Sauver"
 
-#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:50
+#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:52
 msgid "_Switch View"
 msgstr "_Changer de vue"
 
-#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:52
+#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:54
 msgid "_Reload/Undo"
 msgstr "_Recharger/Annuler"
 
-#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:56
+#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:58
 msgid "_Delete..."
 msgstr "Su_pprimer..."
 
-#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:65
+#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:68
 msgid "_Close Tab"
 msgstr "_Fermer l'onglet"
 
@@ -713,28 +717,28 @@ msgstr ""
 "bloqués.\n"
 "Cliquez sur 'Changer' pour changer l'adresse."
 
-#: tryton/gui/window/dbcreate.py:137
+#: tryton/gui/window/dbcreate.py:139
 msgid "Create new database"
 msgstr "Créer une nouvelle base de données"
 
-#: tryton/gui/window/dbcreate.py:147
+#: tryton/gui/window/dbcreate.py:149
 msgid "C_reate"
 msgstr "C_réer"
 
-#: tryton/gui/window/dbcreate.py:155
+#: tryton/gui/window/dbcreate.py:157
 msgid "Create the new database."
 msgstr "Créer une nouvelle base de données"
 
-#: tryton/gui/window/dbcreate.py:166
+#: tryton/gui/window/dbcreate.py:168
 msgid "Server Setup:"
 msgstr "Configuration du serveur :"
 
-#: tryton/gui/window/dbcreate.py:171
+#: tryton/gui/window/dbcreate.py:173
 msgid "Server connection:"
 msgstr "Connexion au serveur :"
 
-#: tryton/gui/window/dbcreate.py:180 tryton/gui/window/dbdumpdrop.py:140
-#: tryton/gui/window/dbrestore.py:86
+#: tryton/gui/window/dbcreate.py:182 tryton/gui/window/dbdumpdrop.py:140
+#: tryton/gui/window/dbrestore.py:88
 msgid ""
 "This is the URL of the server. Use server 'localhost' and port '8000' if "
 "the server is installed on this computer. Click on 'Change' to change the"
@@ -744,22 +748,22 @@ msgstr ""
 " si le serveur est installé sur cette machine. Cliquez sur 'Changer' pour"
 " changer l'adresse."
 
-#: tryton/gui/window/dbcreate.py:183 tryton/gui/window/dbdumpdrop.py:147
-#: tryton/gui/window/dbrestore.py:91
+#: tryton/gui/window/dbcreate.py:185 tryton/gui/window/dbdumpdrop.py:147
+#: tryton/gui/window/dbrestore.py:93
 msgid "C_hange"
 msgstr "C_hanger"
 
-#: tryton/gui/window/dbcreate.py:192 tryton/gui/window/dbrestore.py:97
+#: tryton/gui/window/dbcreate.py:194 tryton/gui/window/dbrestore.py:99
 msgid "Setup the server connection..."
 msgstr "Configurer la connexion au serveur"
 
-#: tryton/gui/window/dbcreate.py:195 tryton/gui/window/dbdumpdrop.py:186
-#: tryton/gui/window/dbrestore.py:100
+#: tryton/gui/window/dbcreate.py:197 tryton/gui/window/dbdumpdrop.py:186
+#: tryton/gui/window/dbrestore.py:102
 msgid "Tryton Server Password:"
 msgstr "Mot de passe du serveur Tryton :"
 
-#: tryton/gui/window/dbcreate.py:205 tryton/gui/window/dbdumpdrop.py:196
-#: tryton/gui/window/dbrestore.py:109
+#: tryton/gui/window/dbcreate.py:207 tryton/gui/window/dbdumpdrop.py:196
+#: tryton/gui/window/dbrestore.py:111
 msgid ""
 "This is the password of the Tryton server. It doesn't belong to a real "
 "user. This password is usually defined in the trytond configuration."
@@ -768,15 +772,15 @@ msgstr ""
 "vrai utilisateur. Ce mot de passe est défini dans la configuration de "
 "trytond."
 
-#: tryton/gui/window/dbcreate.py:216
+#: tryton/gui/window/dbcreate.py:218
 msgid "New database setup:"
 msgstr "Configuration de la nouvelle base de données :"
 
-#: tryton/gui/window/dbcreate.py:222
+#: tryton/gui/window/dbcreate.py:224
 msgid "Database name:"
 msgstr "Nom de la base de données :"
 
-#: tryton/gui/window/dbcreate.py:234
+#: tryton/gui/window/dbcreate.py:236
 msgid ""
 "Choose the name of the new database.\n"
 "Allowed characters are alphanumerical or _ (underscore)\n"
@@ -789,11 +793,11 @@ msgstr ""
 "Vous devez proscrire les accents, espaces ou caractères spéciaux ! "
 "Example : tryton"
 
-#: tryton/gui/window/dbcreate.py:241
+#: tryton/gui/window/dbcreate.py:243
 msgid "Default language:"
 msgstr "Langue par défaut :"
 
-#: tryton/gui/window/dbcreate.py:251
+#: tryton/gui/window/dbcreate.py:253
 msgid ""
 "Choose the default language that will be installed for this database. You"
 " will be able to install new languages after installation through the "
@@ -803,11 +807,11 @@ msgstr ""
 "données. Vous pourrez installer d'autres langues après l'installation "
 "sous le menu administration."
 
-#: tryton/gui/window/dbcreate.py:255
+#: tryton/gui/window/dbcreate.py:257
 msgid "Admin password:"
 msgstr "Mot de passe admin :"
 
-#: tryton/gui/window/dbcreate.py:265
+#: tryton/gui/window/dbcreate.py:267
 msgid ""
 "Choose a password for the admin user of the new database. With these "
 "credentials you will be later able to login into the database:\n"
@@ -820,15 +824,15 @@ msgstr ""
 "Nom d'utilisateur : admin\n"
 "Mot de passe : <Le mot de passe que vous avez choisi>"
 
-#: tryton/gui/window/dbcreate.py:273
+#: tryton/gui/window/dbcreate.py:275
 msgid "Confirm admin password:"
 msgstr "Confirmer le mot de passe admin :"
 
-#: tryton/gui/window/dbcreate.py:282
+#: tryton/gui/window/dbcreate.py:284
 msgid "Type the Admin password again"
 msgstr "Entrer le mot de passe admin à nouveau"
 
-#: tryton/gui/window/dbcreate.py:330
+#: tryton/gui/window/dbcreate.py:332
 msgid ""
 "The database name is restricted to alpha-nummerical characters and \"_\" "
 "(underscore). Avoid all accents, space and any other special characters."
@@ -838,29 +842,29 @@ msgstr ""
 " 63 caractères.\n"
 "Les accents, espaces et autres caractères spéciaux sont proscrit."
 
-#: tryton/gui/window/dbcreate.py:335
+#: tryton/gui/window/dbcreate.py:337
 msgid "Wrong characters in database name!"
 msgstr "Mauvais caractères dans le nom de base de données !"
 
-#: tryton/gui/window/dbcreate.py:339
+#: tryton/gui/window/dbcreate.py:341
 msgid "The new admin password doesn't match the confirmation field.\n"
 msgstr "Le mot de passe admin ne correspond pas au mot de passe de confirmation.\n"
 
-#: tryton/gui/window/dbcreate.py:341
+#: tryton/gui/window/dbcreate.py:343
 msgid "Passwords doesn't match!"
 msgstr "Les mots de passe ne correspondent pas !"
 
-#: tryton/gui/window/dbcreate.py:344
+#: tryton/gui/window/dbcreate.py:346
 msgid "Admin password and confirmation are required to create a new database."
 msgstr ""
 "Le mot de passe admin et de confirmation sont requis pour créer une "
 "nouvelle base de données."
 
-#: tryton/gui/window/dbcreate.py:346
+#: tryton/gui/window/dbcreate.py:348
 msgid "Missing admin password!"
 msgstr "Mot de passe admin manquant !"
 
-#: tryton/gui/window/dbcreate.py:361
+#: tryton/gui/window/dbcreate.py:363
 msgid ""
 "A database with the same name already exists.\n"
 "Try another database name."
@@ -868,17 +872,17 @@ msgstr ""
 "Une base de données avec le même nom existe déjà.\n"
 "Essayer un autre nom de base de données."
 
-#: tryton/gui/window/dbcreate.py:364
+#: tryton/gui/window/dbcreate.py:366
 msgid "This database name already exist!"
 msgstr "La base de données existe déjà !"
 
-#: tryton/gui/window/dbcreate.py:379
+#: tryton/gui/window/dbcreate.py:381
 msgid "Sorry, wrong password for the Tryton server. Please try again."
 msgstr ""
 "Désolé, le mot de passe du serveur Tryton est incorrect. Veuillez "
 "réessayer."
 
-#: tryton/gui/window/dbcreate.py:387
+#: tryton/gui/window/dbcreate.py:389
 msgid ""
 "Can't create the database, caused by an unknown reason.\n"
 "If there is a database created, it could be broken. Maybe drop this "
@@ -890,7 +894,7 @@ msgstr ""
 "Supprimer la ! Vérifiez le message d'erreur pour plus d'information.\n"
 "Message d'erreur :\n"
 
-#: tryton/gui/window/dbcreate.py:395
+#: tryton/gui/window/dbcreate.py:397
 msgid "Error creating database!"
 msgstr "Erreur de création de base de données !"
 
@@ -938,7 +942,7 @@ msgstr "Supprimer la base de données choisie."
 msgid "Choose a Tryton database to delete:"
 msgstr "Choisissez la base de données à supprimer"
 
-#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:75
+#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:77
 msgid "Server Connection:"
 msgstr "Connexion au serveur :"
 
@@ -1029,15 +1033,15 @@ msgstr "Hôte :"
 msgid "User name:"
 msgstr "Nom d'utilisateur :"
 
-#: tryton/gui/window/dbrestore.py:64
+#: tryton/gui/window/dbrestore.py:66
 msgid "Restore Database"
 msgstr "Restaurer une base de données"
 
-#: tryton/gui/window/dbrestore.py:117
+#: tryton/gui/window/dbrestore.py:119
 msgid "File to Restore:"
 msgstr "Fichier à restaurer :"
 
-#: tryton/gui/window/dbrestore.py:131
+#: tryton/gui/window/dbrestore.py:133
 msgid ""
 "Choose the name of the database to be restored.\n"
 "Allowed characters are alphanumerical or _ (underscore)\n"
@@ -1050,15 +1054,15 @@ msgstr ""
 "Vous devez proscrire les accents, espaces ou caractères spéciaux !\n"
 "Example : tryton"
 
-#: tryton/gui/window/dbrestore.py:137
+#: tryton/gui/window/dbrestore.py:139
 msgid "New Database Name:"
 msgstr "Nom de la nouvelle base de données :"
 
-#: tryton/gui/window/dbrestore.py:140
+#: tryton/gui/window/dbrestore.py:142
 msgid "Update Database:"
 msgstr "Mettre à jour la base de données :"
 
-#: tryton/gui/window/dbrestore.py:144
+#: tryton/gui/window/dbrestore.py:146
 msgid ""
 "Check for an automatic database update after restoring a database from a "
 "previous Tryton version."
@@ -1066,11 +1070,11 @@ msgstr ""
 "Cocher pour une mise à jour automatique de la base de données après "
 "restauration d'une base de données d'une version précédente de Tryton."
 
-#: tryton/gui/window/dbrestore.py:154
+#: tryton/gui/window/dbrestore.py:156
 msgid "Restore"
 msgstr "Restaurer"
 
-#: tryton/gui/window/dbrestore.py:163
+#: tryton/gui/window/dbrestore.py:165
 msgid "Restore the database from file."
 msgstr "Restaurer la base de données depuis le fichier."
 
@@ -1110,154 +1114,158 @@ msgstr "Corps :"
 msgid "Attachment:"
 msgstr "Attachement :"
 
-#: tryton/gui/window/form.py:39 tryton/gui/window/tips.py:74
-#: tryton/gui/window/win_form.py:201
-#: tryton/gui/window/view_form/view/screen_container.py:165
+#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:74
+#: tryton/gui/window/win_form.py:205
+#: tryton/gui/window/view_form/view/screen_container.py:163
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:128
 msgid "Previous"
 msgstr "Précédent"
 
-#: tryton/gui/window/form.py:40
+#: tryton/gui/window/form.py:42
 msgid "Previous Record"
 msgstr "Enregistrement précédent"
 
-#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:81
-#: tryton/gui/window/win_form.py:215
-#: tryton/gui/window/view_form/view/screen_container.py:177
+#: tryton/gui/window/form.py:43 tryton/gui/window/tips.py:81
+#: tryton/gui/window/win_form.py:219
+#: tryton/gui/window/view_form/view/screen_container.py:175
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:142
 msgid "Next"
 msgstr "Suivant"
 
-#: tryton/gui/window/form.py:41
+#: tryton/gui/window/form.py:43
 msgid "Next Record"
 msgstr "Enregistrement suivant"
 
-#: tryton/gui/window/form.py:44
+#: tryton/gui/window/form.py:46
 msgid "Attachment(0)"
 msgstr "Attachement(0)"
 
-#: tryton/gui/window/form.py:45
+#: tryton/gui/window/form.py:47
 msgid "Add an attachment to the record"
 msgstr "Ajouter un attachement à l'enregistrement"
 
-#: tryton/gui/window/form.py:54
+#: tryton/gui/window/form.py:56
 msgid "_Duplicate"
 msgstr "_Dupliquer"
 
-#: tryton/gui/window/form.py:59
+#: tryton/gui/window/form.py:61
 msgid "_Previous"
 msgstr "_Précédent"
 
-#: tryton/gui/window/form.py:61
+#: tryton/gui/window/form.py:63
 msgid "_Next"
 msgstr "Sui_vant"
 
-#: tryton/gui/window/form.py:62
+#: tryton/gui/window/form.py:64
 msgid "_Search"
 msgstr "_Recherche"
 
-#: tryton/gui/window/form.py:63
+#: tryton/gui/window/form.py:65
 msgid "View _Logs..."
 msgstr "Voir les _Logs..."
 
-#: tryton/gui/window/form.py:68
+#: tryton/gui/window/form.py:66
+msgid "Show revisions..."
+msgstr "Afficher les révisions..."
+
+#: tryton/gui/window/form.py:71
 msgid "A_ttachments..."
 msgstr "_Pièce jointes..."
 
-#: tryton/gui/window/form.py:70
+#: tryton/gui/window/form.py:73
 msgid "_Actions..."
 msgstr "_Actions..."
 
-#: tryton/gui/window/form.py:72
+#: tryton/gui/window/form.py:75
 msgid "_Relate..."
 msgstr "_Relation..."
 
-#: tryton/gui/window/form.py:75
+#: tryton/gui/window/form.py:78
 msgid "_Report..."
 msgstr "_Rapport..."
 
-#: tryton/gui/window/form.py:77
+#: tryton/gui/window/form.py:80
 msgid "_E-Mail..."
 msgstr "_Email..."
 
-#: tryton/gui/window/form.py:79
+#: tryton/gui/window/form.py:82
 msgid "_Print..."
 msgstr "_Imprimer..."
 
-#: tryton/gui/window/form.py:82
+#: tryton/gui/window/form.py:85
 msgid "_Export Data..."
 msgstr "_Export de données..."
 
-#: tryton/gui/window/form.py:84
+#: tryton/gui/window/form.py:87
 msgid "_Import Data..."
 msgstr "_Import de données..."
 
-#: tryton/gui/window/form.py:219
+#: tryton/gui/window/form.py:216
 #, python-format
 msgid "Attachment(%d)"
 msgstr "Attachement(%d)"
 
-#: tryton/gui/window/form.py:237
+#: tryton/gui/window/form.py:234
 msgid "You have to select one record!"
 msgstr "Vous devez sélectionner un enregistrement !"
 
-#: tryton/gui/window/form.py:241
+#: tryton/gui/window/form.py:238
 msgid "ID:"
 msgstr "ID :"
 
-#: tryton/gui/window/form.py:242
+#: tryton/gui/window/form.py:239
 msgid "Creation User:"
 msgstr "Créé par l'utilisateur :"
 
-#: tryton/gui/window/form.py:243
+#: tryton/gui/window/form.py:240
 msgid "Creation Date:"
 msgstr "Date de création :"
 
-#: tryton/gui/window/form.py:244
+#: tryton/gui/window/form.py:241
 msgid "Latest Modification by:"
 msgstr "Dernière modification par :"
 
-#: tryton/gui/window/form.py:245
+#: tryton/gui/window/form.py:242
 msgid "Latest Modification Date:"
 msgstr "Date de dernière modification :"
 
-#: tryton/gui/window/form.py:263
+#: tryton/gui/window/form.py:260
 msgid "Model:"
 msgstr "Modèle :"
 
-#: tryton/gui/window/form.py:271
+#: tryton/gui/window/form.py:304
 msgid "Are you sure to remove this record?"
 msgstr "Êtes-vous sûr de vouloir supprimer cet enregistrement ?"
 
-#: tryton/gui/window/form.py:273
+#: tryton/gui/window/form.py:306
 msgid "Are you sure to remove those records?"
 msgstr "Êtes-vous sûr de vouloir supprimer ces enregistrements ?"
 
-#: tryton/gui/window/form.py:276
+#: tryton/gui/window/form.py:309
 msgid "Records not removed!"
 msgstr "Enregistrements non supprimés !"
 
-#: tryton/gui/window/form.py:278
+#: tryton/gui/window/form.py:311
 msgid "Records removed!"
 msgstr "Enregistrements supprimés !"
 
-#: tryton/gui/window/form.py:318
+#: tryton/gui/window/form.py:345
 msgid "Working now on the duplicated record(s)!"
 msgstr "Sur les enregistrement(s) dupliqué(s) maintenant !"
 
-#: tryton/gui/window/form.py:325
+#: tryton/gui/window/form.py:352
 msgid "Record saved!"
 msgstr "Enregistrement sauvé !"
 
-#: tryton/gui/window/form.py:328
+#: tryton/gui/window/form.py:355
 msgid "Invalid form!"
 msgstr "Formulaire non-valide !"
 
-#: tryton/gui/window/form.py:436
+#: tryton/gui/window/form.py:462
 msgid " of "
 msgstr " de "
 
-#: tryton/gui/window/form.py:457
+#: tryton/gui/window/form.py:483
 msgid ""
 "This record has been modified\n"
 "do you want to save it ?"
@@ -1265,46 +1273,52 @@ msgstr ""
 "Cet enregistrement a été modifié\n"
 "Voulez-vous le sauvegarder ?"
 
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
 msgid "Action"
 msgstr "Actions"
 
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
 msgid "Launch action"
 msgstr "Lancer une action"
 
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
 msgid "Relate"
 msgstr "Relation"
 
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
 msgid "Open related records"
 msgstr "Ouvrir les enregistrements liés"
 
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
 msgid "Report"
 msgstr "Rapport"
 
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
 msgid "Open report"
 msgstr "Ouvrir un rapport"
 
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
 msgid "E-Mail"
 msgstr "Email"
 
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
 msgid "E-Mail report"
 msgstr "Rapport par email"
 
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
 msgid "Print"
 msgstr "Imprimer"
 
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
 msgid "Print report"
 msgstr "Imprimer un rapport"
 
+#: tryton/gui/window/form.py:607
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:257
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:1050
+msgid "Unknown"
+msgstr "Inconnu"
+
 #: tryton/gui/window/limit.py:17
 msgid "Limit"
 msgstr "Limite"
@@ -1333,6 +1347,18 @@ msgstr "Préférence"
 msgid "Current Password:"
 msgstr "Mot de passe actuel :"
 
+#: tryton/gui/window/revision.py:20
+msgid "Revision"
+msgstr "Révision"
+
+#: tryton/gui/window/revision.py:29
+msgid "Select a revision"
+msgstr "Sélectionner une révision"
+
+#: tryton/gui/window/revision.py:32
+msgid "Revision:"
+msgstr "Révision :"
+
 #: tryton/gui/window/shortcuts.py:17
 msgid "Keyboard Shortcuts"
 msgstr "Raccourcis clavier"
@@ -1455,7 +1481,7 @@ msgid ""
 "You can save any graphs in PNG file with right-click on it.\n"
 msgstr ""
 "<b>Export des  graphes</b>\n"
-"Vous pouvez exporter les graphes en PNG via un clic droit."
+"Vous pouvez exporter les graphes en PNG via un clic droit.\n"
 
 #: tryton/gui/window/tips.py:46
 msgid "Tips"
@@ -1511,21 +1537,21 @@ msgstr "Ajouter les noms des champs"
 msgid "Name"
 msgstr "Nom"
 
-#: tryton/gui/window/win_export.py:306
+#: tryton/gui/window/win_export.py:309
 msgid "What is the name of this export?"
 msgstr "Quel est le nom de cet export ?"
 
-#: tryton/gui/window/win_export.py:429
+#: tryton/gui/window/win_export.py:436
 #, python-format
 msgid "%d record saved!"
 msgstr "%d enregistrement sauvé!"
 
-#: tryton/gui/window/win_export.py:431
+#: tryton/gui/window/win_export.py:438
 #, python-format
 msgid "%d records saved!"
 msgstr "%d enregistrements sauvés!"
 
-#: tryton/gui/window/win_export.py:434
+#: tryton/gui/window/win_export.py:441
 #, python-format
 msgid ""
 "Operation failed!\n"
@@ -1540,26 +1566,26 @@ msgstr ""
 msgid "Link"
 msgstr "Lien"
 
-#: tryton/gui/window/win_form.py:134
+#: tryton/gui/window/win_form.py:136
 msgid "Add"
 msgstr "Ajouter"
 
-#: tryton/gui/window/win_form.py:147
+#: tryton/gui/window/win_form.py:149
 msgid "Remove <Del>"
 msgstr "Supprimer <Del>"
 
-#: tryton/gui/window/win_form.py:162
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:73
+#: tryton/gui/window/win_form.py:164
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:75
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:86
 msgid "Create a new record <F3>"
 msgstr "Créer un nouvel enregistrement<F3>"
 
-#: tryton/gui/window/win_form.py:174
+#: tryton/gui/window/win_form.py:176
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:106
 msgid "Delete selected record <Del>"
 msgstr "Supprimer l'enregistrement sélectionné<Del>"
 
-#: tryton/gui/window/win_form.py:188
+#: tryton/gui/window/win_form.py:190
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:116
 msgid "Undelete selected record <Ins>"
 msgstr "Restaurer l'enregistrement sélectionné<Ins>"
@@ -1582,10 +1608,10 @@ msgstr "Fichier à importer"
 
 #: tryton/gui/window/win_import.py:111
 #: tryton/gui/window/view_form/view/form_gtk/binary.py:57
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:111
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:118
 #: tryton/gui/window/view_form/view/form_gtk/image.py:62
 #: tryton/gui/window/view_form/view/form_gtk/image.py:131
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:624
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:650
 msgid "Open..."
 msgstr "Ouvrir..."
 
@@ -1609,19 +1635,19 @@ msgstr "Codage :"
 msgid "Lines to Skip:"
 msgstr "Lignes à ignorer :"
 
-#: tryton/gui/window/win_import.py:184 tryton/gui/window/win_import.py:189
+#: tryton/gui/window/win_import.py:185 tryton/gui/window/win_import.py:190
 msgid "Field name"
 msgstr "Nom du champ"
 
-#: tryton/gui/window/win_import.py:249
+#: tryton/gui/window/win_import.py:251
 msgid "You must select an import file first!"
 msgstr "Vous devez d'abord sélectionner un fichier d'import !"
 
-#: tryton/gui/window/win_import.py:260
+#: tryton/gui/window/win_import.py:262
 msgid "Error opening CSV file"
 msgstr "Erreur d'ouverture du fichier CSV"
 
-#: tryton/gui/window/win_import.py:287
+#: tryton/gui/window/win_import.py:289
 #, python-format
 msgid "Error processing the file at field %s."
 msgstr "Erreur lors du traitement du fichier du champ %s."
@@ -1636,24 +1662,7 @@ msgstr "%d enregistrement importé!"
 msgid "%d records imported!"
 msgstr "%d enregistrements importés!"
 
-#: tryton/gui/window/win_import.py:371
-msgid "Importation Error!"
-msgstr "Erreur d'importation !"
-
-#: tryton/gui/window/win_import.py:372
-#, python-format
-msgid ""
-"Error importing record %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-msgstr ""
-"Erreur d'import de l'enregistrement %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-
-#: tryton/gui/window/wizard.py:291
+#: tryton/gui/window/wizard.py:286
 msgid "Wizard"
 msgstr "Wizard"
 
@@ -1662,39 +1671,35 @@ msgstr "Wizard"
 msgid "No String Attr."
 msgstr "Pas d'attribut string."
 
-#: tryton/gui/window/view_form/screen/screen.py:135
+#: tryton/gui/window/view_form/screen/screen.py:129
 msgid "ID"
 msgstr "ID"
 
-#: tryton/gui/window/view_form/screen/screen.py:136
+#: tryton/gui/window/view_form/screen/screen.py:130
 msgid "Creation User"
 msgstr "Créé par l'utilisateur"
 
-#: tryton/gui/window/view_form/screen/screen.py:137
+#: tryton/gui/window/view_form/screen/screen.py:131
 msgid "Creation Date"
 msgstr "Date de création"
 
-#: tryton/gui/window/view_form/screen/screen.py:138
+#: tryton/gui/window/view_form/screen/screen.py:132
 msgid "Modification User"
 msgstr "Modifié par l'utilisateur"
 
-#: tryton/gui/window/view_form/screen/screen.py:139
+#: tryton/gui/window/view_form/screen/screen.py:133
 msgid "Modification Date"
 msgstr "Date de modification"
 
-#: tryton/gui/window/view_form/screen/screen.py:634
+#: tryton/gui/window/view_form/screen/screen.py:631
 msgid "Unable to get view tree state"
 msgstr "Impossible d'obtenir l'état de la vue arbre"
 
-#: tryton/gui/window/view_form/screen/screen.py:671
+#: tryton/gui/window/view_form/screen/screen.py:668
 msgid "Unable to set view tree state"
 msgstr "Impossible de définir l'état de la vue arbre"
 
-#: tryton/gui/window/view_form/view/list.py:651
-msgid "You must select a record to use the relation!"
-msgstr "Vous devez sélectionner un enregistrement pour utiliser la relation !"
-
-#: tryton/gui/window/view_form/view/screen_container.py:25
+#: tryton/gui/window/view_form/view/screen_container.py:23
 msgid ".."
 msgstr ".."
 
@@ -1702,19 +1707,19 @@ msgstr ".."
 msgid "F_ilters"
 msgstr "F_iltrer"
 
-#: tryton/gui/window/view_form/view/screen_container.py:149
+#: tryton/gui/window/view_form/view/screen_container.py:147
 msgid "Show bookmarks of filters"
 msgstr "Montrer les marques-pages des filtres"
 
-#: tryton/gui/window/view_form/view/screen_container.py:314
+#: tryton/gui/window/view_form/view/screen_container.py:312
 msgid "Remove this bookmark"
 msgstr "Supprimer ce marque-page"
 
-#: tryton/gui/window/view_form/view/screen_container.py:321
+#: tryton/gui/window/view_form/view/screen_container.py:319
 msgid "Bookmark this filter"
 msgstr "Sauver ce filtre"
 
-#: tryton/gui/window/view_form/view/screen_container.py:380
+#: tryton/gui/window/view_form/view/screen_container.py:384
 msgid "Bookmark Name:"
 msgstr "Nom du marque-page"
 
@@ -1742,24 +1747,24 @@ msgstr "Semaine"
 msgid "Select a File..."
 msgstr "Sélectionner un fichier ..."
 
-#: tryton/gui/window/view_form/view/form_gtk/char.py:157
+#: tryton/gui/window/view_form/view/form_gtk/char.py:161
 msgid "Show plain text"
 msgstr "Montrer en text clair"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:349
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:348
 msgid "Add value"
 msgstr "Ajouter une valeur"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:459
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:461
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:199
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:201
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:458
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:460
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:202
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:204
 #: tryton/gui/window/view_form/view/form_gtk/parser.py:255
 #: tryton/gui/window/view_form/view/form_gtk/parser.py:259
 msgid ":"
 msgstr " :"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:471
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:470
 #, python-format
 msgid "Remove \"%s\""
 msgstr "Supprimer \"%s\""
@@ -1776,23 +1781,23 @@ msgstr "Tous les fichiers"
 msgid "Images"
 msgstr "Images"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:175
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:178
 msgid "Translation"
 msgstr "Traduction"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:231
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:234
 msgid "Edit"
 msgstr "Éditer"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:236
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:239
 msgid "Fuzzy"
 msgstr "Floue"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:305
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:308
 msgid "You need to save the record before adding translations!"
 msgstr "Vous devez sauvegarder l'enregistrement avant d'ajouter des traductions !"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:316
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:319
 msgid "No other language available!"
 msgstr "Pas d'autre langue disponible !"
 
@@ -1805,12 +1810,12 @@ msgstr "Ajouter un enregistrement existant"
 msgid "Remove selected record <Del>"
 msgstr "Supprimer l'enregistrement sélectionné<Del>"
 
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:74
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:351
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:76
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:356
 msgid "Open a record <F2>"
 msgstr "Ouvrir un enregistrement<F2>"
 
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:354
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:359
 msgid "Search a record <F2>"
 msgstr "Chercher un enregistrement<F2>"
 
@@ -1902,15 +1907,10 @@ msgstr "image PNG (*.png)"
 msgid "Image size too large!"
 msgstr "Taille de l'image trop grande !"
 
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:245
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:244
 msgid ": "
 msgstr ": "
 
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:258
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:1023
-msgid "Unknown"
-msgstr "Inconnu"
-
 #: tryton/plugins/translation/__init__.py:18
 msgid "Translate view"
 msgstr "Traduire la vue"
diff --git a/share/locale/ja_JP/LC_MESSAGES/tryton.mo b/share/locale/ja_JP/LC_MESSAGES/tryton.mo
index ce40e6e..4bab3a1 100644
Binary files a/share/locale/ja_JP/LC_MESSAGES/tryton.mo and b/share/locale/ja_JP/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/ja_JP/LC_MESSAGES/tryton.po b/share/locale/ja_JP/LC_MESSAGES/tryton.po
index 86f9d8f..25179f6 100644
--- a/share/locale/ja_JP/LC_MESSAGES/tryton.po
+++ b/share/locale/ja_JP/LC_MESSAGES/tryton.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: tryton 1.5.0\n"
 "Report-Msgid-Bugs-To: issue_tracker at tryton.org\n"
-"POT-Creation-Date: 2013-10-20 16:34+0200\n"
+"POT-Creation-Date: 2014-04-18 22:49+0200\n"
 "PO-Revision-Date: 2012-04-23 11:07+0200\n"
 "Last-Translator: TANIGUCHI Takaki <takaki at asis.media-as.org>\n"
 "Language-Team: ja_JP <LL at li.org>\n"
@@ -64,62 +64,62 @@ msgstr "設定ファイル %s が書きこめません!"
 msgid "Unable to set locale %s"
 msgstr "%s ロケールに設定できません"
 
-#: tryton/action/main.py:163
+#: tryton/action/main.py:171
 msgid "Select your action"
 msgstr "動作を選択する"
 
-#: tryton/action/main.py:169
+#: tryton/action/main.py:177
 msgid "No action defined!"
 msgstr "動作が定義されていません!"
 
-#: tryton/common/common.py:270
+#: tryton/common/common.py:284
 msgid "Tryton Connection"
 msgstr "Tryton接続"
 
-#: tryton/common/common.py:281
+#: tryton/common/common.py:295
 msgid "Server:"
 msgstr "サーバー名:"
 
-#: tryton/common/common.py:299 tryton/gui/window/dblogin.py:79
+#: tryton/common/common.py:313 tryton/gui/window/dblogin.py:79
 msgid "Port:"
 msgstr "ポート番号:"
 
-#: tryton/common/common.py:369
+#: tryton/common/common.py:383
 msgid "Selection"
 msgstr "選択"
 
-#: tryton/common/common.py:378
+#: tryton/common/common.py:392
 msgid "Your selection:"
 msgstr "あなたの選択:"
 
-#: tryton/common/common.py:498 tryton/gui/main.py:1407
-#: tryton/gui/window/win_export.py:402
+#: tryton/common/common.py:528 tryton/gui/main.py:1420
+#: tryton/gui/window/win_export.py:409
 #: tryton/gui/window/view_form/view/form_gtk/binary.py:69
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:138
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:150
 #: tryton/gui/window/view_form/view/form_gtk/image.py:74
-#: tryton/gui/window/view_form/view/form_gtk/image.py:158
+#: tryton/gui/window/view_form/view/form_gtk/image.py:161
 #: tryton/gui/window/view_form/view/graph_gtk/parser.py:105
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:656
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:686
 msgid "Save As..."
 msgstr "名前を付けて保存"
 
-#: tryton/common/common.py:649
+#: tryton/common/common.py:675
 msgid "Always ignore this warning."
 msgstr "常にこの警告を無視する。"
 
-#: tryton/common/common.py:654
+#: tryton/common/common.py:680
 msgid "Do you want to proceed?"
 msgstr ""
 
-#: tryton/common/common.py:673
+#: tryton/common/common.py:699
 msgid "Confirmation"
 msgstr "確認"
 
-#: tryton/common/common.py:779 tryton/common/common.py:1083
+#: tryton/common/common.py:805 tryton/common/common.py:1114
 msgid "Concurrency Exception"
 msgstr "並列性例外"
 
-#: tryton/common/common.py:793
+#: tryton/common/common.py:819
 #, fuzzy
 msgid ""
 "<b>Write Concurrency Warning:</b>\n"
@@ -138,50 +138,50 @@ msgstr ""
 "  - \"比較\"で変更されたものを見る\n"
 "  - \"とにかく書き込む\"で現在の物を書き込む。\n"
 
-#: tryton/common/common.py:802
+#: tryton/common/common.py:828
 msgid "Compare"
 msgstr "比較"
 
-#: tryton/common/common.py:807
+#: tryton/common/common.py:833
 msgid "Write Anyway"
 msgstr "とにかく書き込む"
 
-#: tryton/common/common.py:833 tryton/gui/window/win_export.py:435
-#: tryton/gui/window/win_import.py:260 tryton/gui/window/win_import.py:288
+#: tryton/common/common.py:859 tryton/gui/window/win_export.py:442
+#: tryton/gui/window/win_import.py:262 tryton/gui/window/win_import.py:290
 msgid "Error"
 msgstr "エラー"
 
-#: tryton/common/common.py:837
+#: tryton/common/common.py:863
 msgid "Report Bug"
 msgstr "バグ報告"
 
-#: tryton/common/common.py:844
+#: tryton/common/common.py:870
 msgid "Application Error!"
 msgstr "アプリケーションエラー!"
 
-#: tryton/common/common.py:867
+#: tryton/common/common.py:893
 msgid "Error: "
 msgstr "エラー:"
 
-#: tryton/common/common.py:887
+#: tryton/common/common.py:913
 #, fuzzy, python-format
 msgid "To report bugs you must have an account on <u>%s</u>"
 msgstr "記録しておきたいバグを報告<u>%s</u>"
 
-#: tryton/common/common.py:917
+#: tryton/common/common.py:943
 msgid "Bug Tracker"
 msgstr "バグトラッカー"
 
-#: tryton/common/common.py:935
+#: tryton/common/common.py:961
 msgid "User:"
 msgstr "ユーザー:"
 
-#: tryton/common/common.py:943 tryton/common/common.py:1101
+#: tryton/common/common.py:969 tryton/common/common.py:1132
 #: tryton/gui/window/dblogin.py:462
 msgid "Password:"
 msgstr "パスワード:"
 
-#: tryton/common/common.py:993
+#: tryton/common/common.py:1024
 msgid ""
 "The same bug was already reported by another user.\n"
 "To keep you informed your username is added to the nosy-list of this issue"
@@ -189,11 +189,11 @@ msgstr ""
 "別のユーザーに同じバグが報告されています。\n"
 "お知らせするためにこの問題の通知リストにあなたのユーザー名を追加しました。"
 
-#: tryton/common/common.py:1004
+#: tryton/common/common.py:1035
 msgid "Created new bug with ID "
 msgstr "新しいバグがID番号と一緒に作成されました"
 
-#: tryton/common/common.py:1012 tryton/gui/main.py:921
+#: tryton/common/common.py:1043 tryton/gui/main.py:928
 msgid ""
 "Connection error!\n"
 "Bad username or password!"
@@ -201,11 +201,11 @@ msgstr ""
 "接続エラー!\n"
 "ユーザー名またはパスワードが違います!"
 
-#: tryton/common/common.py:1017
+#: tryton/common/common.py:1048
 msgid "Exception:"
 msgstr "例外:"
 
-#: tryton/common/common.py:1034
+#: tryton/common/common.py:1065
 msgid ""
 "The server fingerprint has changed since last connection!\n"
 "The application will stop connecting to this server until its fingerprint"
@@ -214,12 +214,12 @@ msgstr ""
 "このサーバーのフィンガープリントが最後の接続から変化しています!\n"
 "フィンガープリントが訂正されるまで接続を停止します。"
 
-#: tryton/common/common.py:1036
+#: tryton/common/common.py:1067
 msgid "Security risk!"
 msgstr "セキュリティリスク!"
 
-#: tryton/common/common.py:1042 tryton/common/common.py:1108
-#: tryton/gui/main.py:918
+#: tryton/common/common.py:1073 tryton/common/common.py:1139
+#: tryton/gui/main.py:925
 msgid ""
 "Connection error!\n"
 "Unable to connect to the server!"
@@ -227,39 +227,39 @@ msgstr ""
 "接続エラー!\n"
 "サーバーに接続できません!"
 
-#: tryton/common/common.py:1123
+#: tryton/common/common.py:1154
 msgid "Network Error!"
 msgstr "ネットワーク エラー!"
 
-#: tryton/common/common.py:1354
+#: tryton/common/common.py:1409
 msgid "Y"
 msgstr "年"
 
-#: tryton/common/common.py:1355
+#: tryton/common/common.py:1410
 msgid "M"
 msgstr "月"
 
-#: tryton/common/common.py:1356
+#: tryton/common/common.py:1411
 msgid "w"
 msgstr "週"
 
-#: tryton/common/common.py:1357
+#: tryton/common/common.py:1412
 msgid "d"
 msgstr "日"
 
-#: tryton/common/common.py:1358
+#: tryton/common/common.py:1413
 msgid "h"
 msgstr "時"
 
-#: tryton/common/common.py:1359
+#: tryton/common/common.py:1414
 msgid "m"
 msgstr "分"
 
-#: tryton/common/completion.py:22
+#: tryton/common/completion.py:21
 msgid "<i>Search...</i>"
 msgstr ""
 
-#: tryton/common/completion.py:23
+#: tryton/common/completion.py:22
 msgid "<i>Create...</i>"
 msgstr ""
 
@@ -268,273 +268,278 @@ msgstr ""
 msgid "Open the calendar <F2>"
 msgstr "カレンダーを開く"
 
-#: tryton/common/date_widget.py:271
+#: tryton/common/date_widget.py:275
 msgid "Date Selection"
 msgstr "日付を選択"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "y"
 msgstr ""
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 #, fuzzy
 msgid "yes"
 msgstr "バイト"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 #, fuzzy
 msgid "true"
 msgstr "真"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "t"
 msgstr ""
 
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
 msgid "True"
 msgstr "真"
 
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
 msgid "False"
 msgstr "偽"
 
-#: tryton/common/popup_menu.py:71
+#: tryton/common/popup_menu.py:72
+#, fuzzy
+msgid "Edit..."
+msgstr "終了(_Q)"
+
+#: tryton/common/popup_menu.py:77
 #, fuzzy
 msgid "Attachments..."
 msgstr "添付:"
 
-#: tryton/common/popup_menu.py:76
+#: tryton/common/popup_menu.py:87
 #, fuzzy
 msgid "Actions..."
 msgstr "実行(_A)"
 
-#: tryton/common/popup_menu.py:77
+#: tryton/common/popup_menu.py:88
 #, fuzzy
 msgid "Relate..."
 msgstr "削除(_D)"
 
-#: tryton/common/popup_menu.py:78
+#: tryton/common/popup_menu.py:89
 #, fuzzy
 msgid "Report..."
 msgstr "データのインポート(_I)"
 
-#: tryton/common/popup_menu.py:79
+#: tryton/common/popup_menu.py:90
 #, fuzzy
 msgid "E-Mail..."
 msgstr "Eメール(_E)"
 
-#: tryton/common/popup_menu.py:80
+#: tryton/common/popup_menu.py:91
 #, fuzzy
 msgid "Print..."
 msgstr "印刷(_P)"
 
-#: tryton/gui/main.py:217
+#: tryton/gui/main.py:218
 msgid "_File"
 msgstr "ファイル(_F)"
 
-#: tryton/gui/main.py:225
+#: tryton/gui/main.py:226
 msgid "_User"
 msgstr "ユーザー(_U)"
 
-#: tryton/gui/main.py:239
+#: tryton/gui/main.py:240
 msgid "_Options"
 msgstr "オプション(_O)"
 
-#: tryton/gui/main.py:247
+#: tryton/gui/main.py:248
 msgid "Fa_vorites"
 msgstr ""
 
-#: tryton/gui/main.py:263
+#: tryton/gui/main.py:264
 msgid "_Help"
 msgstr "ヘルプ(_H)"
 
-#: tryton/gui/main.py:285 tryton/gui/window/win_search.py:26
+#: tryton/gui/main.py:286 tryton/gui/window/win_search.py:26
 #: tryton/gui/window/view_form/view/screen_container.py:100
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:333
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:332
 #: tryton/gui/window/view_form/view/form_gtk/many2many.py:40
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:45
 msgid "Search"
 msgstr "検索"
 
-#: tryton/gui/main.py:364
+#: tryton/gui/main.py:374
 msgid "No result found."
 msgstr ""
 
-#: tryton/gui/main.py:384
+#: tryton/gui/main.py:396
 msgid "_Connect..."
 msgstr "接続(_C)"
 
-#: tryton/gui/main.py:393
+#: tryton/gui/main.py:405
 msgid "_Disconnect"
 msgstr "切断(_D)"
 
-#: tryton/gui/main.py:403
+#: tryton/gui/main.py:415
 msgid "Data_base"
 msgstr "データベース(_b)"
 
-#: tryton/gui/main.py:414
+#: tryton/gui/main.py:426
 msgid "_New Database..."
 msgstr "新規データベース(_N)"
 
-#: tryton/gui/main.py:423
+#: tryton/gui/main.py:435
 msgid "_Restore Database..."
 msgstr "データベースの復元(_R)"
 
-#: tryton/gui/main.py:432
+#: tryton/gui/main.py:444
 msgid "_Backup Database..."
 msgstr "データベースのバックアップ(_B)"
 
-#: tryton/gui/main.py:441
+#: tryton/gui/main.py:453
 msgid "Dro_p Database..."
 msgstr "データベースの削除(_P)"
 
-#: tryton/gui/main.py:450
+#: tryton/gui/main.py:462
 msgid "_Quit..."
 msgstr "終了(_Q)"
 
-#: tryton/gui/main.py:465
+#: tryton/gui/main.py:477
 msgid "_Preferences..."
 msgstr "設定(_P)"
 
-#: tryton/gui/main.py:476
+#: tryton/gui/main.py:488
 #, fuzzy
 msgid "_Menu Reload"
 msgstr "再読み込み(_R)"
 
-#: tryton/gui/main.py:485
+#: tryton/gui/main.py:497
 msgid "_Menu Toggle"
 msgstr ""
 
-#: tryton/gui/main.py:492
+#: tryton/gui/main.py:504
 msgid "_Global Search"
 msgstr ""
 
-#: tryton/gui/main.py:507
+#: tryton/gui/main.py:519
 msgid "_Toolbar"
 msgstr "ツールバー(_T)"
 
-#: tryton/gui/main.py:515
+#: tryton/gui/main.py:527
 msgid "_Default"
 msgstr "デフォルト(_D)"
 
-#: tryton/gui/main.py:525
+#: tryton/gui/main.py:537
 msgid "_Text and Icons"
 msgstr "テキストとアイコン(_T)"
 
-#: tryton/gui/main.py:535
+#: tryton/gui/main.py:547
 msgid "_Icons"
 msgstr "アイコン(_I)"
 
-#: tryton/gui/main.py:544
+#: tryton/gui/main.py:556
 msgid "_Text"
 msgstr "テキスト(_T)"
 
-#: tryton/gui/main.py:553
+#: tryton/gui/main.py:565
 msgid "_Menubar"
 msgstr "メニューバー(_M)"
 
-#: tryton/gui/main.py:561
+#: tryton/gui/main.py:573
 msgid "Change Accelerators"
 msgstr "アクセラレーターの変更"
 
-#: tryton/gui/main.py:569
+#: tryton/gui/main.py:581
 msgid "_Mode"
 msgstr "モード(_M)"
 
-#: tryton/gui/main.py:577
+#: tryton/gui/main.py:589
 msgid "_Normal"
 msgstr "ノーマル(_N)"
 
-#: tryton/gui/main.py:585
+#: tryton/gui/main.py:597
 msgid "_PDA"
 msgstr "_PDA"
 
-#: tryton/gui/main.py:592
+#: tryton/gui/main.py:604
 msgid "_Form"
 msgstr "フォーム(_F)"
 
-#: tryton/gui/main.py:601
+#: tryton/gui/main.py:613
 msgid "Save Width/Height"
 msgstr "幅/高さを保存"
 
-#: tryton/gui/main.py:612
+#: tryton/gui/main.py:624
 msgid "Save Tree State"
 msgstr ""
 
-#: tryton/gui/main.py:624
+#: tryton/gui/main.py:636
 msgid "Spell Checking"
 msgstr "スペルチェック"
 
-#: tryton/gui/main.py:634
+#: tryton/gui/main.py:646
 msgid "Tabs Position"
 msgstr "タブの位置"
 
-#: tryton/gui/main.py:642
+#: tryton/gui/main.py:654
 msgid "Top"
 msgstr "上"
 
-#: tryton/gui/main.py:651
+#: tryton/gui/main.py:663
 msgid "Left"
 msgstr "左"
 
-#: tryton/gui/main.py:661
+#: tryton/gui/main.py:673
 msgid "Right"
 msgstr "右"
 
-#: tryton/gui/main.py:671
+#: tryton/gui/main.py:683
 msgid "Bottom"
 msgstr "下"
 
-#: tryton/gui/main.py:680
+#: tryton/gui/main.py:692
 #, fuzzy
 msgid "_Previous Tab"
 msgstr "前(_P)"
 
-#: tryton/gui/main.py:686
+#: tryton/gui/main.py:698
 msgid "_Next Tab"
 msgstr ""
 
-#: tryton/gui/main.py:692
+#: tryton/gui/main.py:704
 msgid "Search Limit..."
 msgstr ""
 
-#: tryton/gui/main.py:698
+#: tryton/gui/main.py:710
 msgid "_Email..."
 msgstr "Eメール(_E)"
 
-#: tryton/gui/main.py:706
+#: tryton/gui/main.py:718
 msgid "_Save Options"
 msgstr "オプションの保存(_S)"
 
-#: tryton/gui/main.py:718
+#: tryton/gui/main.py:730
 msgid "_Tips..."
 msgstr "今日の技(_T)"
 
-#: tryton/gui/main.py:727
+#: tryton/gui/main.py:739
 msgid "_Keyboard Shortcuts..."
 msgstr "キーボードショートカット(_K)"
 
-#: tryton/gui/main.py:736
+#: tryton/gui/main.py:748
 msgid "_About..."
 msgstr "Trytonについて"
 
-#: tryton/gui/main.py:787
+#: tryton/gui/main.py:799
 msgid "Manage Favorites"
 msgstr ""
 
-#: tryton/gui/main.py:935
+#: tryton/gui/main.py:942
 msgid ""
 "The following action requires to close all tabs.\n"
 "Do you want to continue?"
 msgstr ""
 
-#: tryton/gui/main.py:1196
+#: tryton/gui/main.py:1206
 msgid "Close Tab"
 msgstr "タブを閉じる"
 
-#: tryton/gui/main.py:1314
+#: tryton/gui/main.py:1327
 msgid ""
 "You are going to delete a Tryton database.\n"
 "Are you really sure to proceed?"
@@ -542,7 +547,7 @@ msgstr ""
 "Trytonデータベースを削除します。\n"
 "本当に実行しますか?"
 
-#: tryton/gui/main.py:1324
+#: tryton/gui/main.py:1337
 msgid ""
 "Wrong Tryton Server Password\n"
 "Please try again."
@@ -550,28 +555,28 @@ msgstr ""
 "Trytonサーバのパスワードが違います\n"
 "もう一度試して下さい。"
 
-#: tryton/gui/main.py:1326 tryton/gui/main.py:1362 tryton/gui/main.py:1398
-#: tryton/gui/window/dbcreate.py:382
+#: tryton/gui/main.py:1339 tryton/gui/main.py:1375 tryton/gui/main.py:1411
+#: tryton/gui/window/dbcreate.py:384
 msgid "Access denied!"
 msgstr "アクセスが拒否されました!"
 
-#: tryton/gui/main.py:1329
+#: tryton/gui/main.py:1342
 msgid "Database drop failed with error message:\n"
 msgstr "データベースの削除に失敗しました。エラーメッセージ:\n"
 
-#: tryton/gui/main.py:1330
+#: tryton/gui/main.py:1343
 msgid "Database drop failed!"
 msgstr "データベースの削除に失敗しました!"
 
-#: tryton/gui/main.py:1332
+#: tryton/gui/main.py:1345
 msgid "Database dropped successfully!"
 msgstr "データベースの削除に成功しました!"
 
-#: tryton/gui/main.py:1337
+#: tryton/gui/main.py:1350
 msgid "Open Backup File to Restore..."
 msgstr "復元のためバックアップファイルを開く"
 
-#: tryton/gui/main.py:1354
+#: tryton/gui/main.py:1367
 msgid ""
 "It is not possible to restore a password protected database.\n"
 "Backup and restore needed to be proceed manual."
@@ -579,11 +584,11 @@ msgstr ""
 "パスワードで保護されたデータベースを復元できません。\n"
 "バックアップと復元は手動でする必要があります。"
 
-#: tryton/gui/main.py:1358 tryton/gui/main.py:1394
+#: tryton/gui/main.py:1371 tryton/gui/main.py:1407
 msgid "Database is password protected!"
 msgstr "データベースはパスワードで保護されています!"
 
-#: tryton/gui/main.py:1360 tryton/gui/main.py:1396
+#: tryton/gui/main.py:1373 tryton/gui/main.py:1409
 msgid ""
 "Wrong Tryton Server Password.\n"
 "Please try again."
@@ -591,19 +596,19 @@ msgstr ""
 "Trytonサーバーのパスワードが違います。\n"
 "もう一度試して下さい。"
 
-#: tryton/gui/main.py:1365
+#: tryton/gui/main.py:1378
 msgid "Database restore failed with error message:\n"
 msgstr "データベースの復元に失敗しました。エラーメッセージ:\n"
 
-#: tryton/gui/main.py:1367 tryton/gui/main.py:1372
+#: tryton/gui/main.py:1380 tryton/gui/main.py:1385
 msgid "Database restore failed!"
 msgstr "データベースの復元に失敗しました!"
 
-#: tryton/gui/main.py:1370
+#: tryton/gui/main.py:1383
 msgid "Database restored successfully!"
 msgstr "データベースの復元に成功しました!"
 
-#: tryton/gui/main.py:1391
+#: tryton/gui/main.py:1404
 msgid ""
 "It is not possible to dump a password protected Database.\n"
 "Backup and restore needed to be proceed manual."
@@ -611,75 +616,75 @@ msgstr ""
 "パスワードで保護されたデータベースのダンプはできません。\n"
 "バックアップと復元は手動でする必要があります。"
 
-#: tryton/gui/main.py:1401
+#: tryton/gui/main.py:1414
 msgid "Database dump failed with error message:\n"
 msgstr "データベースのダンプに失敗しました。エラーメッセージ:"
 
-#: tryton/gui/main.py:1403
+#: tryton/gui/main.py:1416
 msgid "Database dump failed!"
 msgstr "データベースのダンプに失敗しました!"
 
-#: tryton/gui/main.py:1414
+#: tryton/gui/main.py:1427
 msgid "Database backuped successfully!"
 msgstr "データベースのバックアップに成功しました!"
 
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
 msgid "New"
 msgstr ""
 
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
 msgid "Create a new record"
 msgstr "レコードの新規作成"
 
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
 #: tryton/gui/window/win_export.py:142
 msgid "Save"
 msgstr "保存"
 
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
 msgid "Save this record"
 msgstr "レコードの保存"
 
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
-#: tryton/gui/window/win_form.py:228
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
+#: tryton/gui/window/win_form.py:232
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:154
 msgid "Switch"
 msgstr "切替"
 
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
 msgid "Switch view"
 msgstr "ビューの切替"
 
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
 msgid "_Reload"
 msgstr "再読み込み(_R)"
 
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
 msgid "Reload"
 msgstr "再読み込み"
 
-#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:48
+#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:50
 msgid "_New"
 msgstr "新規(_N)"
 
-#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:49
-#: tryton/gui/window/win_form.py:66
+#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:51
+#: tryton/gui/window/win_form.py:67
 msgid "_Save"
 msgstr "保存(_S)"
 
-#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:50
+#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:52
 msgid "_Switch View"
 msgstr "ビューの切替(_S)"
 
-#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:52
+#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:54
 msgid "_Reload/Undo"
 msgstr "再読み込み/やり直し(_R)"
 
-#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:56
+#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:58
 msgid "_Delete..."
 msgstr "削除(_D)"
 
-#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:65
+#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:68
 msgid "_Close Tab"
 msgstr "タブを閉じる(_C)"
 
@@ -712,28 +717,28 @@ msgstr ""
 "サーバーとクライアントの間にファイアウォールがある場合,サーバーのアドレスとポート番号(通常は8070)がブロックされてないか確かめて下さい。\n"
 "'変更'をクリックしてアドレスを変更して下さい。"
 
-#: tryton/gui/window/dbcreate.py:137
+#: tryton/gui/window/dbcreate.py:139
 msgid "Create new database"
 msgstr "新しいデータベースを作成する"
 
-#: tryton/gui/window/dbcreate.py:147
+#: tryton/gui/window/dbcreate.py:149
 msgid "C_reate"
 msgstr "作成(_C)"
 
-#: tryton/gui/window/dbcreate.py:155
+#: tryton/gui/window/dbcreate.py:157
 msgid "Create the new database."
 msgstr "新しいデータベースを作成する。"
 
-#: tryton/gui/window/dbcreate.py:166
+#: tryton/gui/window/dbcreate.py:168
 msgid "Server Setup:"
 msgstr "サーバーセットアップ:"
 
-#: tryton/gui/window/dbcreate.py:171
+#: tryton/gui/window/dbcreate.py:173
 msgid "Server connection:"
 msgstr "サーバー接続:"
 
-#: tryton/gui/window/dbcreate.py:180 tryton/gui/window/dbdumpdrop.py:140
-#: tryton/gui/window/dbrestore.py:86
+#: tryton/gui/window/dbcreate.py:182 tryton/gui/window/dbdumpdrop.py:140
+#: tryton/gui/window/dbrestore.py:88
 #, fuzzy
 msgid ""
 "This is the URL of the server. Use server 'localhost' and port '8000' if "
@@ -741,36 +746,36 @@ msgid ""
 " address."
 msgstr "これはサーバーのURLです。このコンピュータにサーバーがインストールされていればサーバーは'localhost'でポート番号は'8070'です。'変更'をクリックしてアドレスを変更します。"
 
-#: tryton/gui/window/dbcreate.py:183 tryton/gui/window/dbdumpdrop.py:147
-#: tryton/gui/window/dbrestore.py:91
+#: tryton/gui/window/dbcreate.py:185 tryton/gui/window/dbdumpdrop.py:147
+#: tryton/gui/window/dbrestore.py:93
 msgid "C_hange"
 msgstr "変更(_C)"
 
-#: tryton/gui/window/dbcreate.py:192 tryton/gui/window/dbrestore.py:97
+#: tryton/gui/window/dbcreate.py:194 tryton/gui/window/dbrestore.py:99
 msgid "Setup the server connection..."
 msgstr "サーバ接続をセットアップする"
 
-#: tryton/gui/window/dbcreate.py:195 tryton/gui/window/dbdumpdrop.py:186
-#: tryton/gui/window/dbrestore.py:100
+#: tryton/gui/window/dbcreate.py:197 tryton/gui/window/dbdumpdrop.py:186
+#: tryton/gui/window/dbrestore.py:102
 msgid "Tryton Server Password:"
 msgstr "Trytonサーバパスワード:"
 
-#: tryton/gui/window/dbcreate.py:205 tryton/gui/window/dbdumpdrop.py:196
-#: tryton/gui/window/dbrestore.py:109
+#: tryton/gui/window/dbcreate.py:207 tryton/gui/window/dbdumpdrop.py:196
+#: tryton/gui/window/dbrestore.py:111
 msgid ""
 "This is the password of the Tryton server. It doesn't belong to a real "
 "user. This password is usually defined in the trytond configuration."
 msgstr "これはTrytonサーバーのパスワードです。ユーザーに結びつけられてはいません。このパスワードはtrytondの設定で定義されています。"
 
-#: tryton/gui/window/dbcreate.py:216
+#: tryton/gui/window/dbcreate.py:218
 msgid "New database setup:"
 msgstr "新規データベースセットアップ:"
 
-#: tryton/gui/window/dbcreate.py:222
+#: tryton/gui/window/dbcreate.py:224
 msgid "Database name:"
 msgstr "データベース名:"
 
-#: tryton/gui/window/dbcreate.py:234
+#: tryton/gui/window/dbcreate.py:236
 msgid ""
 "Choose the name of the new database.\n"
 "Allowed characters are alphanumerical or _ (underscore)\n"
@@ -781,22 +786,22 @@ msgstr ""
 "英数字と_(アンダースコア)が使えます。\n"
 "アセントや空白・特殊文字は避けて下さい! 例: tryton"
 
-#: tryton/gui/window/dbcreate.py:241
+#: tryton/gui/window/dbcreate.py:243
 msgid "Default language:"
 msgstr "デフォルトの言語:"
 
-#: tryton/gui/window/dbcreate.py:251
+#: tryton/gui/window/dbcreate.py:253
 msgid ""
 "Choose the default language that will be installed for this database. You"
 " will be able to install new languages after installation through the "
 "administration menu."
 msgstr "このデータベースにインストールするデフォルトの言語を選択。インストール後に管理者メニューから新しい言語をインストールできます。"
 
-#: tryton/gui/window/dbcreate.py:255
+#: tryton/gui/window/dbcreate.py:257
 msgid "Admin password:"
 msgstr "管理者パスワード:"
 
-#: tryton/gui/window/dbcreate.py:265
+#: tryton/gui/window/dbcreate.py:267
 msgid ""
 "Choose a password for the admin user of the new database. With these "
 "credentials you will be later able to login into the database:\n"
@@ -807,55 +812,55 @@ msgstr ""
 "ユーザー名: admin\n"
 "パスワード: <ここにパスワードを入力>"
 
-#: tryton/gui/window/dbcreate.py:273
+#: tryton/gui/window/dbcreate.py:275
 msgid "Confirm admin password:"
 msgstr "管理者パスワードを確認:"
 
-#: tryton/gui/window/dbcreate.py:282
+#: tryton/gui/window/dbcreate.py:284
 msgid "Type the Admin password again"
 msgstr "管理者パスワードを再入力して下さい"
 
-#: tryton/gui/window/dbcreate.py:330
+#: tryton/gui/window/dbcreate.py:332
 msgid ""
 "The database name is restricted to alpha-nummerical characters and \"_\" "
 "(underscore). Avoid all accents, space and any other special characters."
 msgstr "データベース名は英数字と\"_\"(アンダースコア)に制限されています。アセントや空白や特殊文字は避けて下さい。"
 
-#: tryton/gui/window/dbcreate.py:335
+#: tryton/gui/window/dbcreate.py:337
 msgid "Wrong characters in database name!"
 msgstr "データベース名に正しくない文字があります!"
 
-#: tryton/gui/window/dbcreate.py:339
+#: tryton/gui/window/dbcreate.py:341
 msgid "The new admin password doesn't match the confirmation field.\n"
 msgstr "管理者パスワードが再確認入力と一致しません\n"
 
-#: tryton/gui/window/dbcreate.py:341
+#: tryton/gui/window/dbcreate.py:343
 msgid "Passwords doesn't match!"
 msgstr "パスワードが一致しません!"
 
-#: tryton/gui/window/dbcreate.py:344
+#: tryton/gui/window/dbcreate.py:346
 msgid "Admin password and confirmation are required to create a new database."
 msgstr "新しいデータベースを作成するのに管理者パスワードと確認用パスワードが必要です。"
 
-#: tryton/gui/window/dbcreate.py:346
+#: tryton/gui/window/dbcreate.py:348
 msgid "Missing admin password!"
 msgstr "管理者パスワードがありません!"
 
-#: tryton/gui/window/dbcreate.py:361
+#: tryton/gui/window/dbcreate.py:363
 msgid ""
 "A database with the same name already exists.\n"
 "Try another database name."
 msgstr "同じ名前のデータベースが存在します。別の名前を試して下さい。"
 
-#: tryton/gui/window/dbcreate.py:364
+#: tryton/gui/window/dbcreate.py:366
 msgid "This database name already exist!"
 msgstr "このデータベース名は存在します!"
 
-#: tryton/gui/window/dbcreate.py:379
+#: tryton/gui/window/dbcreate.py:381
 msgid "Sorry, wrong password for the Tryton server. Please try again."
 msgstr "Trytonサーバーのパスワードが違います。再び試して下さい。"
 
-#: tryton/gui/window/dbcreate.py:387
+#: tryton/gui/window/dbcreate.py:389
 msgid ""
 "Can't create the database, caused by an unknown reason.\n"
 "If there is a database created, it could be broken. Maybe drop this "
@@ -866,7 +871,7 @@ msgstr ""
 "作成されていたとしても壊れているでしょう。データベースが削除されているかもしれません。可能な情報をエラーメッセージでチェックして下さい。\n"
 "エラーメッセージ:\n"
 
-#: tryton/gui/window/dbcreate.py:395
+#: tryton/gui/window/dbcreate.py:397
 msgid "Error creating database!"
 msgstr "データベースの作成エラー!"
 
@@ -914,7 +919,7 @@ msgstr "選択されたデータベースを削除します。"
 msgid "Choose a Tryton database to delete:"
 msgstr "削除するTrytonデータベースを選択:"
 
-#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:75
+#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:77
 msgid "Server Connection:"
 msgstr "サーバ接続:"
 
@@ -1012,15 +1017,15 @@ msgstr "ポート番号:"
 msgid "User name:"
 msgstr "ユーザー名:"
 
-#: tryton/gui/window/dbrestore.py:64
+#: tryton/gui/window/dbrestore.py:66
 msgid "Restore Database"
 msgstr "データベースの復元"
 
-#: tryton/gui/window/dbrestore.py:117
+#: tryton/gui/window/dbrestore.py:119
 msgid "File to Restore:"
 msgstr "復元するファイル:"
 
-#: tryton/gui/window/dbrestore.py:131
+#: tryton/gui/window/dbrestore.py:133
 msgid ""
 "Choose the name of the database to be restored.\n"
 "Allowed characters are alphanumerical or _ (underscore)\n"
@@ -1032,25 +1037,25 @@ msgstr ""
 "アセントや空白・特殊文字は使えません!\n"
 "例: tryton "
 
-#: tryton/gui/window/dbrestore.py:137
+#: tryton/gui/window/dbrestore.py:139
 msgid "New Database Name:"
 msgstr "新しいデータベース名:"
 
-#: tryton/gui/window/dbrestore.py:140
+#: tryton/gui/window/dbrestore.py:142
 msgid "Update Database:"
 msgstr "データベースをアップデートする:"
 
-#: tryton/gui/window/dbrestore.py:144
+#: tryton/gui/window/dbrestore.py:146
 msgid ""
 "Check for an automatic database update after restoring a database from a "
 "previous Tryton version."
 msgstr "以前のTrytonのバージョンのデータベースから復元したデータベースが自動的に更新できるか確認"
 
-#: tryton/gui/window/dbrestore.py:154
+#: tryton/gui/window/dbrestore.py:156
 msgid "Restore"
 msgstr "復元"
 
-#: tryton/gui/window/dbrestore.py:163
+#: tryton/gui/window/dbrestore.py:165
 msgid "Restore the database from file."
 msgstr "データベースをファイルから復元"
 
@@ -1090,159 +1095,163 @@ msgstr "本文:"
 msgid "Attachment:"
 msgstr "添付:"
 
-#: tryton/gui/window/form.py:39 tryton/gui/window/tips.py:74
-#: tryton/gui/window/win_form.py:201
-#: tryton/gui/window/view_form/view/screen_container.py:165
+#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:74
+#: tryton/gui/window/win_form.py:205
+#: tryton/gui/window/view_form/view/screen_container.py:163
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:128
 msgid "Previous"
 msgstr "前"
 
-#: tryton/gui/window/form.py:40
+#: tryton/gui/window/form.py:42
 msgid "Previous Record"
 msgstr "前のレコード"
 
-#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:81
-#: tryton/gui/window/win_form.py:215
-#: tryton/gui/window/view_form/view/screen_container.py:177
+#: tryton/gui/window/form.py:43 tryton/gui/window/tips.py:81
+#: tryton/gui/window/win_form.py:219
+#: tryton/gui/window/view_form/view/screen_container.py:175
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:142
 msgid "Next"
 msgstr "次"
 
-#: tryton/gui/window/form.py:41
+#: tryton/gui/window/form.py:43
 msgid "Next Record"
 msgstr "次のレコード"
 
-#: tryton/gui/window/form.py:44
+#: tryton/gui/window/form.py:46
 msgid "Attachment(0)"
 msgstr "添付(0)"
 
-#: tryton/gui/window/form.py:45
+#: tryton/gui/window/form.py:47
 msgid "Add an attachment to the record"
 msgstr "レコードに添付を追加する"
 
-#: tryton/gui/window/form.py:54
+#: tryton/gui/window/form.py:56
 msgid "_Duplicate"
 msgstr "複製(_D)"
 
-#: tryton/gui/window/form.py:59
+#: tryton/gui/window/form.py:61
 msgid "_Previous"
 msgstr "前(_P)"
 
-#: tryton/gui/window/form.py:61
+#: tryton/gui/window/form.py:63
 msgid "_Next"
 msgstr "次(_N)"
 
-#: tryton/gui/window/form.py:62
+#: tryton/gui/window/form.py:64
 #, fuzzy
 msgid "_Search"
 msgstr "検索"
 
-#: tryton/gui/window/form.py:63
+#: tryton/gui/window/form.py:65
 msgid "View _Logs..."
 msgstr "ログの閲覧(_L)"
 
-#: tryton/gui/window/form.py:68
+#: tryton/gui/window/form.py:66
+msgid "Show revisions..."
+msgstr ""
+
+#: tryton/gui/window/form.py:71
 #, fuzzy
 msgid "A_ttachments..."
 msgstr "添付:"
 
-#: tryton/gui/window/form.py:70
+#: tryton/gui/window/form.py:73
 msgid "_Actions..."
 msgstr "実行(_A)"
 
-#: tryton/gui/window/form.py:72
+#: tryton/gui/window/form.py:75
 #, fuzzy
 msgid "_Relate..."
 msgstr "削除(_D)"
 
-#: tryton/gui/window/form.py:75
+#: tryton/gui/window/form.py:78
 #, fuzzy
 msgid "_Report..."
 msgstr "データのインポート(_I)"
 
-#: tryton/gui/window/form.py:77
+#: tryton/gui/window/form.py:80
 #, fuzzy
 msgid "_E-Mail..."
 msgstr "Eメール(_E)"
 
-#: tryton/gui/window/form.py:79
+#: tryton/gui/window/form.py:82
 msgid "_Print..."
 msgstr "印刷(_P)"
 
-#: tryton/gui/window/form.py:82
+#: tryton/gui/window/form.py:85
 msgid "_Export Data..."
 msgstr "データのエクスポート(_E)"
 
-#: tryton/gui/window/form.py:84
+#: tryton/gui/window/form.py:87
 msgid "_Import Data..."
 msgstr "データのインポート(_I)"
 
-#: tryton/gui/window/form.py:219
+#: tryton/gui/window/form.py:216
 #, python-format
 msgid "Attachment(%d)"
 msgstr "添付(%d)"
 
-#: tryton/gui/window/form.py:237
+#: tryton/gui/window/form.py:234
 msgid "You have to select one record!"
 msgstr "レコードを一つ選択して下さい!"
 
-#: tryton/gui/window/form.py:241
+#: tryton/gui/window/form.py:238
 msgid "ID:"
 msgstr "ID:"
 
-#: tryton/gui/window/form.py:242
+#: tryton/gui/window/form.py:239
 msgid "Creation User:"
 msgstr "作成ユーザー:"
 
-#: tryton/gui/window/form.py:243
+#: tryton/gui/window/form.py:240
 msgid "Creation Date:"
 msgstr "作成日:"
 
-#: tryton/gui/window/form.py:244
+#: tryton/gui/window/form.py:241
 msgid "Latest Modification by:"
 msgstr "最終更新ユーザー:"
 
-#: tryton/gui/window/form.py:245
+#: tryton/gui/window/form.py:242
 msgid "Latest Modification Date:"
 msgstr "最終更新日:"
 
-#: tryton/gui/window/form.py:263
+#: tryton/gui/window/form.py:260
 msgid "Model:"
 msgstr "モデル:"
 
-#: tryton/gui/window/form.py:271
+#: tryton/gui/window/form.py:304
 msgid "Are you sure to remove this record?"
 msgstr "このレコードを削除しますか?"
 
-#: tryton/gui/window/form.py:273
+#: tryton/gui/window/form.py:306
 msgid "Are you sure to remove those records?"
 msgstr "このレコードを削除しますか?"
 
-#: tryton/gui/window/form.py:276
+#: tryton/gui/window/form.py:309
 msgid "Records not removed!"
 msgstr "レコードが削除されませんでした!"
 
-#: tryton/gui/window/form.py:278
+#: tryton/gui/window/form.py:311
 msgid "Records removed!"
 msgstr "レコードが削除されました!"
 
-#: tryton/gui/window/form.py:318
+#: tryton/gui/window/form.py:345
 msgid "Working now on the duplicated record(s)!"
 msgstr "重複したレコードで作業中です!"
 
-#: tryton/gui/window/form.py:325
+#: tryton/gui/window/form.py:352
 msgid "Record saved!"
 msgstr "レコードが保存されました!"
 
-#: tryton/gui/window/form.py:328
+#: tryton/gui/window/form.py:355
 msgid "Invalid form!"
 msgstr "不正なフォームです!"
 
-#: tryton/gui/window/form.py:436
+#: tryton/gui/window/form.py:462
 msgid " of "
 msgstr " 中 "
 
-#: tryton/gui/window/form.py:457
+#: tryton/gui/window/form.py:483
 msgid ""
 "This record has been modified\n"
 "do you want to save it ?"
@@ -1250,51 +1259,57 @@ msgstr ""
 "レコードが変更されています\n"
 "保存しますか?"
 
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
 msgid "Action"
 msgstr "実行"
 
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
 msgid "Launch action"
 msgstr ""
 
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
 #, fuzzy
 msgid "Relate"
 msgstr "作成(_C)"
 
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
 #, fuzzy
 msgid "Open related records"
 msgstr "レコードを開く"
 
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
 #, fuzzy
 msgid "Report"
 msgstr "レポート"
 
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
 #, fuzzy
 msgid "Open report"
 msgstr "レコードを開く"
 
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
 #, fuzzy
 msgid "E-Mail"
 msgstr "Eメール"
 
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
 msgid "E-Mail report"
 msgstr ""
 
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
 msgid "Print"
 msgstr "印刷"
 
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
 msgid "Print report"
 msgstr ""
 
+#: tryton/gui/window/form.py:607
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:257
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:1050
+msgid "Unknown"
+msgstr "未知"
+
 #: tryton/gui/window/limit.py:17
 #, fuzzy
 msgid "Limit"
@@ -1324,6 +1339,20 @@ msgstr "設定"
 msgid "Current Password:"
 msgstr "現在のパスワード:"
 
+#: tryton/gui/window/revision.py:20
+#, fuzzy
+msgid "Revision"
+msgstr "前"
+
+#: tryton/gui/window/revision.py:29
+#, fuzzy
+msgid "Select a revision"
+msgstr "選択"
+
+#: tryton/gui/window/revision.py:32
+msgid "Revision:"
+msgstr ""
+
 #: tryton/gui/window/shortcuts.py:17
 msgid "Keyboard Shortcuts"
 msgstr "キーボードショートカット"
@@ -1499,21 +1528,21 @@ msgstr "フィールド名を追加(_F)"
 msgid "Name"
 msgstr "名前"
 
-#: tryton/gui/window/win_export.py:306
+#: tryton/gui/window/win_export.py:309
 msgid "What is the name of this export?"
 msgstr "このエクスポートの名前は何ですか?"
 
-#: tryton/gui/window/win_export.py:429
+#: tryton/gui/window/win_export.py:436
 #, python-format
 msgid "%d record saved!"
 msgstr "%d レコード保存されました!"
 
-#: tryton/gui/window/win_export.py:431
+#: tryton/gui/window/win_export.py:438
 #, python-format
 msgid "%d records saved!"
 msgstr "%d レコード保存されました!"
 
-#: tryton/gui/window/win_export.py:434
+#: tryton/gui/window/win_export.py:441
 #, python-format
 msgid ""
 "Operation failed!\n"
@@ -1528,28 +1557,28 @@ msgstr ""
 msgid "Link"
 msgstr "リンク"
 
-#: tryton/gui/window/win_form.py:134
+#: tryton/gui/window/win_form.py:136
 msgid "Add"
 msgstr "追加"
 
-#: tryton/gui/window/win_form.py:147
+#: tryton/gui/window/win_form.py:149
 msgid "Remove <Del>"
 msgstr ""
 
-#: tryton/gui/window/win_form.py:162
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:73
+#: tryton/gui/window/win_form.py:164
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:75
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:86
 #, fuzzy
 msgid "Create a new record <F3>"
 msgstr "レコードの新規作成"
 
-#: tryton/gui/window/win_form.py:174
+#: tryton/gui/window/win_form.py:176
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:106
 #, fuzzy
 msgid "Delete selected record <Del>"
 msgstr "選択したレコードを削除"
 
-#: tryton/gui/window/win_form.py:188
+#: tryton/gui/window/win_form.py:190
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:116
 #, fuzzy
 msgid "Undelete selected record <Ins>"
@@ -1573,10 +1602,10 @@ msgstr "インポートするファイル:"
 
 #: tryton/gui/window/win_import.py:111
 #: tryton/gui/window/view_form/view/form_gtk/binary.py:57
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:111
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:118
 #: tryton/gui/window/view_form/view/form_gtk/image.py:62
 #: tryton/gui/window/view_form/view/form_gtk/image.py:131
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:624
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:650
 msgid "Open..."
 msgstr "開く"
 
@@ -1601,19 +1630,19 @@ msgstr "エンコーディング:"
 msgid "Lines to Skip:"
 msgstr "スキップする行:"
 
-#: tryton/gui/window/win_import.py:184 tryton/gui/window/win_import.py:189
+#: tryton/gui/window/win_import.py:185 tryton/gui/window/win_import.py:190
 msgid "Field name"
 msgstr "フィールド名"
 
-#: tryton/gui/window/win_import.py:249
+#: tryton/gui/window/win_import.py:251
 msgid "You must select an import file first!"
 msgstr "最初にインポートするファイルを選択して下さい!"
 
-#: tryton/gui/window/win_import.py:260
+#: tryton/gui/window/win_import.py:262
 msgid "Error opening CSV file"
 msgstr "CSVファイルを開くときにエラーが起こりました"
 
-#: tryton/gui/window/win_import.py:287
+#: tryton/gui/window/win_import.py:289
 #, fuzzy, python-format
 msgid "Error processing the file at field %s."
 msgstr "ファイルの%sフィールドの処理でエラーが起こりました。"
@@ -1628,20 +1657,7 @@ msgstr "%d レコードをインポートしました!"
 msgid "%d records imported!"
 msgstr "%d レコードをインポートしました。"
 
-#: tryton/gui/window/win_import.py:371
-msgid "Importation Error!"
-msgstr "インポートのエラーです!"
-
-#: tryton/gui/window/win_import.py:372
-#, python-format
-msgid ""
-"Error importing record %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-msgstr ""
-
-#: tryton/gui/window/wizard.py:291
+#: tryton/gui/window/wizard.py:286
 msgid "Wizard"
 msgstr "ウィザード"
 
@@ -1650,45 +1666,41 @@ msgstr "ウィザード"
 msgid "No String Attr."
 msgstr "文字属性なし。"
 
-#: tryton/gui/window/view_form/screen/screen.py:135
+#: tryton/gui/window/view_form/screen/screen.py:129
 #, fuzzy
 msgid "ID"
 msgstr "日"
 
-#: tryton/gui/window/view_form/screen/screen.py:136
+#: tryton/gui/window/view_form/screen/screen.py:130
 #, fuzzy
 msgid "Creation User"
 msgstr "作成ユーザー:"
 
-#: tryton/gui/window/view_form/screen/screen.py:137
+#: tryton/gui/window/view_form/screen/screen.py:131
 #, fuzzy
 msgid "Creation Date"
 msgstr "作成日:"
 
-#: tryton/gui/window/view_form/screen/screen.py:138
+#: tryton/gui/window/view_form/screen/screen.py:132
 #, fuzzy
 msgid "Modification User"
 msgstr "最終更新日:"
 
-#: tryton/gui/window/view_form/screen/screen.py:139
+#: tryton/gui/window/view_form/screen/screen.py:133
 #, fuzzy
 msgid "Modification Date"
 msgstr "最終更新日:"
 
-#: tryton/gui/window/view_form/screen/screen.py:634
+#: tryton/gui/window/view_form/screen/screen.py:631
 msgid "Unable to get view tree state"
 msgstr ""
 
-#: tryton/gui/window/view_form/screen/screen.py:671
-#, fuzzy, python-format
+#: tryton/gui/window/view_form/screen/screen.py:668
+#, fuzzy
 msgid "Unable to set view tree state"
 msgstr "%s ロケールに設定できません"
 
-#: tryton/gui/window/view_form/view/list.py:651
-msgid "You must select a record to use the relation!"
-msgstr "リレーションを使うにはレコードを選択して下さい!"
-
-#: tryton/gui/window/view_form/view/screen_container.py:25
+#: tryton/gui/window/view_form/view/screen_container.py:23
 msgid ".."
 msgstr ""
 
@@ -1697,19 +1709,19 @@ msgstr ""
 msgid "F_ilters"
 msgstr "ファイル(_F)"
 
-#: tryton/gui/window/view_form/view/screen_container.py:149
+#: tryton/gui/window/view_form/view/screen_container.py:147
 msgid "Show bookmarks of filters"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/screen_container.py:314
+#: tryton/gui/window/view_form/view/screen_container.py:312
 msgid "Remove this bookmark"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/screen_container.py:321
+#: tryton/gui/window/view_form/view/screen_container.py:319
 msgid "Bookmark this filter"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/screen_container.py:380
+#: tryton/gui/window/view_form/view/screen_container.py:384
 msgid "Bookmark Name:"
 msgstr ""
 
@@ -1741,24 +1753,24 @@ msgstr ""
 msgid "Select a File..."
 msgstr "ファイルを選択"
 
-#: tryton/gui/window/view_form/view/form_gtk/char.py:157
+#: tryton/gui/window/view_form/view/form_gtk/char.py:161
 msgid "Show plain text"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:349
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:348
 msgid "Add value"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:459
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:461
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:199
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:201
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:458
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:460
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:202
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:204
 #: tryton/gui/window/view_form/view/form_gtk/parser.py:255
 #: tryton/gui/window/view_form/view/form_gtk/parser.py:259
 msgid ":"
 msgstr ":"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:471
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:470
 #, python-format
 msgid "Remove \"%s\""
 msgstr ""
@@ -1776,24 +1788,24 @@ msgstr "全てのファイル"
 msgid "Images"
 msgstr "画像"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:175
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:178
 #, fuzzy
 msgid "Translation"
 msgstr "翻訳を追加"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:231
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:234
 msgid "Edit"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:236
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:239
 msgid "Fuzzy"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:305
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:308
 msgid "You need to save the record before adding translations!"
 msgstr "翻訳を追加する前にレコードを保存して下さい!"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:316
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:319
 msgid "No other language available!"
 msgstr "他の利用できる言語はありません"
 
@@ -1808,13 +1820,13 @@ msgstr "レコードの保存"
 msgid "Remove selected record <Del>"
 msgstr "選択したレコードを削除"
 
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:74
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:351
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:76
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:356
 #, fuzzy
 msgid "Open a record <F2>"
 msgstr "レコードを開く"
 
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:354
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:359
 #, fuzzy
 msgid "Search a record <F2>"
 msgstr "レコードを検索する"
@@ -1909,15 +1921,10 @@ msgstr "PNG画像 (*.png)"
 msgid "Image size too large!"
 msgstr "画像サイズが大きすぎます!"
 
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:245
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:244
 msgid ": "
 msgstr ":"
 
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:258
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:1023
-msgid "Unknown"
-msgstr "未知"
-
 #: tryton/plugins/translation/__init__.py:18
 msgid "Translate view"
 msgstr "翻訳ビュー"
diff --git a/share/locale/lt_LT/LC_MESSAGES/tryton.mo b/share/locale/lt_LT/LC_MESSAGES/tryton.mo
index 83c4de8..ae0f525 100644
Binary files a/share/locale/lt_LT/LC_MESSAGES/tryton.mo and b/share/locale/lt_LT/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/lt_LT/LC_MESSAGES/tryton.po b/share/locale/lt_LT/LC_MESSAGES/tryton.po
index 5039e81..c00e29f 100644
--- a/share/locale/lt_LT/LC_MESSAGES/tryton.po
+++ b/share/locale/lt_LT/LC_MESSAGES/tryton.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: tryton 2.3.0\n"
 "Report-Msgid-Bugs-To: issue_tracker at tryton.org\n"
-"POT-Creation-Date: 2013-10-20 16:34+0200\n"
+"POT-Creation-Date: 2014-04-18 22:49+0200\n"
 "PO-Revision-Date: 2013-04-18 11:37+0300\n"
 "Last-Translator: Giedrius Slavinskas <giedrius at inovera.lt>\n"
 "Language-Team: lt_LT <LL at li.org>\n"
@@ -65,62 +65,62 @@ msgstr ""
 msgid "Unable to set locale %s"
 msgstr "Nepavyko nustatyti lokalės %s"
 
-#: tryton/action/main.py:163
+#: tryton/action/main.py:171
 msgid "Select your action"
 msgstr "Pasirinkite veiksmą"
 
-#: tryton/action/main.py:169
+#: tryton/action/main.py:177
 msgid "No action defined!"
 msgstr "Nėra apibrėžtų veiksmų!"
 
-#: tryton/common/common.py:270
+#: tryton/common/common.py:284
 msgid "Tryton Connection"
 msgstr "Tryton prisijungimas"
 
-#: tryton/common/common.py:281
+#: tryton/common/common.py:295
 msgid "Server:"
 msgstr "Serveris:"
 
-#: tryton/common/common.py:299 tryton/gui/window/dblogin.py:79
+#: tryton/common/common.py:313 tryton/gui/window/dblogin.py:79
 msgid "Port:"
 msgstr "Prievadas:"
 
-#: tryton/common/common.py:369
+#: tryton/common/common.py:383
 msgid "Selection"
 msgstr "Pasirinkimas"
 
-#: tryton/common/common.py:378
+#: tryton/common/common.py:392
 msgid "Your selection:"
 msgstr "Jūsų pasirinkimas:"
 
-#: tryton/common/common.py:498 tryton/gui/main.py:1407
-#: tryton/gui/window/win_export.py:402
+#: tryton/common/common.py:528 tryton/gui/main.py:1420
+#: tryton/gui/window/win_export.py:409
 #: tryton/gui/window/view_form/view/form_gtk/binary.py:69
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:138
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:150
 #: tryton/gui/window/view_form/view/form_gtk/image.py:74
-#: tryton/gui/window/view_form/view/form_gtk/image.py:158
+#: tryton/gui/window/view_form/view/form_gtk/image.py:161
 #: tryton/gui/window/view_form/view/graph_gtk/parser.py:105
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:656
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:686
 msgid "Save As..."
 msgstr "Įrašyti kaip..."
 
-#: tryton/common/common.py:649
+#: tryton/common/common.py:675
 msgid "Always ignore this warning."
 msgstr "Daugiau nepaisyti šio pranešimo."
 
-#: tryton/common/common.py:654
+#: tryton/common/common.py:680
 msgid "Do you want to proceed?"
 msgstr "Ar tikrai norite vykdyti?"
 
-#: tryton/common/common.py:673
+#: tryton/common/common.py:699
 msgid "Confirmation"
 msgstr "Patvirtinimas"
 
-#: tryton/common/common.py:779 tryton/common/common.py:1083
+#: tryton/common/common.py:805 tryton/common/common.py:1114
 msgid "Concurrency Exception"
 msgstr "Lygiagretaus duomenų rašymo klaida"
 
-#: tryton/common/common.py:793
+#: tryton/common/common.py:819
 msgid ""
 "<b>Write Concurrency Warning:</b>\n"
 "\n"
@@ -138,50 +138,50 @@ msgstr ""
 "    - \"Palyginti\", kad peržiūrėti pakeistą versiją;\n"
 "    - \"Rašyti visvien\", kad išsaugoti jūsų turimą versiją."
 
-#: tryton/common/common.py:802
+#: tryton/common/common.py:828
 msgid "Compare"
 msgstr "Palyginti"
 
-#: tryton/common/common.py:807
+#: tryton/common/common.py:833
 msgid "Write Anyway"
 msgstr "Rašyti visvien"
 
-#: tryton/common/common.py:833 tryton/gui/window/win_export.py:435
-#: tryton/gui/window/win_import.py:260 tryton/gui/window/win_import.py:288
+#: tryton/common/common.py:859 tryton/gui/window/win_export.py:442
+#: tryton/gui/window/win_import.py:262 tryton/gui/window/win_import.py:290
 msgid "Error"
 msgstr "Klaida"
 
-#: tryton/common/common.py:837
+#: tryton/common/common.py:863
 msgid "Report Bug"
 msgstr "Pranešti apie klaidą"
 
-#: tryton/common/common.py:844
+#: tryton/common/common.py:870
 msgid "Application Error!"
 msgstr "Programos klaida!"
 
-#: tryton/common/common.py:867
+#: tryton/common/common.py:893
 msgid "Error: "
 msgstr "Klaida: "
 
-#: tryton/common/common.py:887
+#: tryton/common/common.py:913
 #, python-format
 msgid "To report bugs you must have an account on <u>%s</u>"
 msgstr "Klaidų pranešimui reikalinga naudotojo paskyra <u>%s</u>"
 
-#: tryton/common/common.py:917
+#: tryton/common/common.py:943
 msgid "Bug Tracker"
 msgstr "Klaidų pėdsekys"
 
-#: tryton/common/common.py:935
+#: tryton/common/common.py:961
 msgid "User:"
 msgstr "Naudotojas:"
 
-#: tryton/common/common.py:943 tryton/common/common.py:1101
+#: tryton/common/common.py:969 tryton/common/common.py:1132
 #: tryton/gui/window/dblogin.py:462
 msgid "Password:"
 msgstr "Slaptažodis:"
 
-#: tryton/common/common.py:993
+#: tryton/common/common.py:1024
 msgid ""
 "The same bug was already reported by another user.\n"
 "To keep you informed your username is added to the nosy-list of this issue"
@@ -190,11 +190,11 @@ msgstr ""
 "Norėdami informuoti apie klaidos tvarkymo eigą, jūsų naudotojo vardas "
 "buvo pridėtas prie klaidos pranešimo sąrašo"
 
-#: tryton/common/common.py:1004
+#: tryton/common/common.py:1035
 msgid "Created new bug with ID "
 msgstr "Užregistruoti naują klaidą su ID"
 
-#: tryton/common/common.py:1012 tryton/gui/main.py:921
+#: tryton/common/common.py:1043 tryton/gui/main.py:928
 msgid ""
 "Connection error!\n"
 "Bad username or password!"
@@ -202,11 +202,11 @@ msgstr ""
 "Prisijungimo klaida!\n"
 "Neteisingas naudotojo vardas arba slaptažodis!"
 
-#: tryton/common/common.py:1017
+#: tryton/common/common.py:1048
 msgid "Exception:"
 msgstr "Klaida:"
 
-#: tryton/common/common.py:1034
+#: tryton/common/common.py:1065
 msgid ""
 "The server fingerprint has changed since last connection!\n"
 "The application will stop connecting to this server until its fingerprint"
@@ -217,12 +217,12 @@ msgstr ""
 "Programa nustos jungtis su šiuos serveriui, kol bus sutvarkytas "
 "identifikatorius."
 
-#: tryton/common/common.py:1036
+#: tryton/common/common.py:1067
 msgid "Security risk!"
 msgstr "Saugumo pavojus!"
 
-#: tryton/common/common.py:1042 tryton/common/common.py:1108
-#: tryton/gui/main.py:918
+#: tryton/common/common.py:1073 tryton/common/common.py:1139
+#: tryton/gui/main.py:925
 msgid ""
 "Connection error!\n"
 "Unable to connect to the server!"
@@ -230,39 +230,39 @@ msgstr ""
 "Prisijungimo klaida!\n"
 "Nepavyko prisijungti prie serverio!"
 
-#: tryton/common/common.py:1123
+#: tryton/common/common.py:1154
 msgid "Network Error!"
 msgstr "Tinklo klaida!"
 
-#: tryton/common/common.py:1354
+#: tryton/common/common.py:1409
 msgid "Y"
 msgstr "Y"
 
-#: tryton/common/common.py:1355
+#: tryton/common/common.py:1410
 msgid "M"
 msgstr "M"
 
-#: tryton/common/common.py:1356
+#: tryton/common/common.py:1411
 msgid "w"
 msgstr "w"
 
-#: tryton/common/common.py:1357
+#: tryton/common/common.py:1412
 msgid "d"
 msgstr "d"
 
-#: tryton/common/common.py:1358
+#: tryton/common/common.py:1413
 msgid "h"
 msgstr "h"
 
-#: tryton/common/common.py:1359
+#: tryton/common/common.py:1414
 msgid "m"
 msgstr "m"
 
-#: tryton/common/completion.py:22
+#: tryton/common/completion.py:21
 msgid "<i>Search...</i>"
 msgstr "<i>Ieškoti...</i>"
 
-#: tryton/common/completion.py:23
+#: tryton/common/completion.py:22
 msgid "<i>Create...</i>"
 msgstr "<i>Sukurti...</i>"
 
@@ -270,254 +270,259 @@ msgstr "<i>Sukurti...</i>"
 msgid "Open the calendar <F2>"
 msgstr "Atverti kalendorių <F2>"
 
-#: tryton/common/date_widget.py:271
+#: tryton/common/date_widget.py:275
 msgid "Date Selection"
 msgstr "Datos pasirinkimas"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "y"
 msgstr "t"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "yes"
 msgstr "taip"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "true"
 msgstr "teisa"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "t"
 msgstr "t"
 
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
 msgid "True"
 msgstr "Tiesa"
 
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
 msgid "False"
 msgstr "Netiesa"
 
-#: tryton/common/popup_menu.py:71
+#: tryton/common/popup_menu.py:72
+#, fuzzy
+msgid "Edit..."
+msgstr "Išei_ti..."
+
+#: tryton/common/popup_menu.py:77
 msgid "Attachments..."
 msgstr "Priedai..."
 
-#: tryton/common/popup_menu.py:76
+#: tryton/common/popup_menu.py:87
 msgid "Actions..."
 msgstr "Veiksmai..."
 
-#: tryton/common/popup_menu.py:77
+#: tryton/common/popup_menu.py:88
 msgid "Relate..."
 msgstr "Susiję įrašai..."
 
-#: tryton/common/popup_menu.py:78
+#: tryton/common/popup_menu.py:89
 msgid "Report..."
 msgstr "Ataskaita..."
 
-#: tryton/common/popup_menu.py:79
+#: tryton/common/popup_menu.py:90
 msgid "E-Mail..."
 msgstr "El. paštas..."
 
-#: tryton/common/popup_menu.py:80
+#: tryton/common/popup_menu.py:91
 msgid "Print..."
 msgstr "Spausdinti..."
 
-#: tryton/gui/main.py:217
+#: tryton/gui/main.py:218
 msgid "_File"
 msgstr "_Failas"
 
-#: tryton/gui/main.py:225
+#: tryton/gui/main.py:226
 msgid "_User"
 msgstr "_Naudotojas"
 
-#: tryton/gui/main.py:239
+#: tryton/gui/main.py:240
 msgid "_Options"
 msgstr "_Parinktys"
 
-#: tryton/gui/main.py:247
+#: tryton/gui/main.py:248
 msgid "Fa_vorites"
 msgstr "_Mėgstami"
 
-#: tryton/gui/main.py:263
+#: tryton/gui/main.py:264
 msgid "_Help"
 msgstr "_Žinynas"
 
-#: tryton/gui/main.py:285 tryton/gui/window/win_search.py:26
+#: tryton/gui/main.py:286 tryton/gui/window/win_search.py:26
 #: tryton/gui/window/view_form/view/screen_container.py:100
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:333
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:332
 #: tryton/gui/window/view_form/view/form_gtk/many2many.py:40
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:45
 msgid "Search"
 msgstr "Ieškoti"
 
-#: tryton/gui/main.py:364
+#: tryton/gui/main.py:374
 msgid "No result found."
 msgstr "Nerasta rezultatų."
 
-#: tryton/gui/main.py:384
+#: tryton/gui/main.py:396
 msgid "_Connect..."
 msgstr "_Prisijungti..."
 
-#: tryton/gui/main.py:393
+#: tryton/gui/main.py:405
 msgid "_Disconnect"
 msgstr "_Atsijungti"
 
-#: tryton/gui/main.py:403
+#: tryton/gui/main.py:415
 msgid "Data_base"
 msgstr "Duomenų bazė"
 
-#: tryton/gui/main.py:414
+#: tryton/gui/main.py:426
 msgid "_New Database..."
 msgstr "_Nauja duomenų bazė..."
 
-#: tryton/gui/main.py:423
+#: tryton/gui/main.py:435
 msgid "_Restore Database..."
 msgstr "_Atkurti duomenų bazę..."
 
-#: tryton/gui/main.py:432
+#: tryton/gui/main.py:444
 msgid "_Backup Database..."
 msgstr "_Duomenų bazės atsarginė kopija..."
 
-#: tryton/gui/main.py:441
+#: tryton/gui/main.py:453
 msgid "Dro_p Database..."
 msgstr "Nai_kinti duomenų bazę"
 
-#: tryton/gui/main.py:450
+#: tryton/gui/main.py:462
 msgid "_Quit..."
 msgstr "Išei_ti..."
 
-#: tryton/gui/main.py:465
+#: tryton/gui/main.py:477
 msgid "_Preferences..."
 msgstr "Nus_tatymai..."
 
-#: tryton/gui/main.py:476
+#: tryton/gui/main.py:488
 msgid "_Menu Reload"
 msgstr "Pekrauti meniu"
 
-#: tryton/gui/main.py:485
+#: tryton/gui/main.py:497
 msgid "_Menu Toggle"
 msgstr "Įjungti/išjungti _meniu"
 
-#: tryton/gui/main.py:492
+#: tryton/gui/main.py:504
 msgid "_Global Search"
 msgstr "Globali paieška"
 
-#: tryton/gui/main.py:507
+#: tryton/gui/main.py:519
 msgid "_Toolbar"
 msgstr "Įrankių _juosta"
 
-#: tryton/gui/main.py:515
+#: tryton/gui/main.py:527
 msgid "_Default"
 msgstr "_Numatytasis"
 
-#: tryton/gui/main.py:525
+#: tryton/gui/main.py:537
 msgid "_Text and Icons"
 msgstr "_Tekstas ir piktogramos"
 
-#: tryton/gui/main.py:535
+#: tryton/gui/main.py:547
 msgid "_Icons"
 msgstr "P_iktogramos"
 
-#: tryton/gui/main.py:544
+#: tryton/gui/main.py:556
 msgid "_Text"
 msgstr "_Tekstas"
 
-#: tryton/gui/main.py:553
+#: tryton/gui/main.py:565
 msgid "_Menubar"
 msgstr "_Meniu juosta"
 
-#: tryton/gui/main.py:561
+#: tryton/gui/main.py:573
 msgid "Change Accelerators"
 msgstr "Keisti trumpinius"
 
-#: tryton/gui/main.py:569
+#: tryton/gui/main.py:581
 msgid "_Mode"
 msgstr "_Rėžimas"
 
-#: tryton/gui/main.py:577
+#: tryton/gui/main.py:589
 msgid "_Normal"
 msgstr "Sta_ndartinis"
 
-#: tryton/gui/main.py:585
+#: tryton/gui/main.py:597
 msgid "_PDA"
 msgstr "_PDA"
 
-#: tryton/gui/main.py:592
+#: tryton/gui/main.py:604
 msgid "_Form"
 msgstr "_Forma"
 
-#: tryton/gui/main.py:601
+#: tryton/gui/main.py:613
 msgid "Save Width/Height"
 msgstr "Įsiminti plotį/aukštį"
 
-#: tryton/gui/main.py:612
+#: tryton/gui/main.py:624
 #, fuzzy
 msgid "Save Tree State"
 msgstr "Įsiminti hierarchinio sąrašo išskleistas šakas"
 
-#: tryton/gui/main.py:624
+#: tryton/gui/main.py:636
 msgid "Spell Checking"
 msgstr "Rašybos klaidų tikrinimas"
 
-#: tryton/gui/main.py:634
+#: tryton/gui/main.py:646
 msgid "Tabs Position"
 msgstr "Kortelių pozicija"
 
-#: tryton/gui/main.py:642
+#: tryton/gui/main.py:654
 msgid "Top"
 msgstr "Viršuje"
 
-#: tryton/gui/main.py:651
+#: tryton/gui/main.py:663
 msgid "Left"
 msgstr "Kairėje"
 
-#: tryton/gui/main.py:661
+#: tryton/gui/main.py:673
 msgid "Right"
 msgstr "Dešinėje"
 
-#: tryton/gui/main.py:671
+#: tryton/gui/main.py:683
 msgid "Bottom"
 msgstr "Apačioje"
 
-#: tryton/gui/main.py:680
+#: tryton/gui/main.py:692
 msgid "_Previous Tab"
 msgstr "_Buvusi kortelė"
 
-#: tryton/gui/main.py:686
+#: tryton/gui/main.py:698
 msgid "_Next Tab"
 msgstr "Kita kortelė"
 
-#: tryton/gui/main.py:692
+#: tryton/gui/main.py:704
 msgid "Search Limit..."
 msgstr "Paieškos ribojimas..."
 
-#: tryton/gui/main.py:698
+#: tryton/gui/main.py:710
 msgid "_Email..."
 msgstr "_El. paštas..."
 
-#: tryton/gui/main.py:706
+#: tryton/gui/main.py:718
 msgid "_Save Options"
 msgstr "Iš_saugoti pasirinktis"
 
-#: tryton/gui/main.py:718
+#: tryton/gui/main.py:730
 msgid "_Tips..."
 msgstr "Pa_tarimai..."
 
-#: tryton/gui/main.py:727
+#: tryton/gui/main.py:739
 msgid "_Keyboard Shortcuts..."
 msgstr "_Trumpiniai..."
 
-#: tryton/gui/main.py:736
+#: tryton/gui/main.py:748
 msgid "_About..."
 msgstr "_Apie..."
 
-#: tryton/gui/main.py:787
+#: tryton/gui/main.py:799
 msgid "Manage Favorites"
 msgstr "_Tvarkyti mėgstamus"
 
-#: tryton/gui/main.py:935
+#: tryton/gui/main.py:942
 msgid ""
 "The following action requires to close all tabs.\n"
 "Do you want to continue?"
@@ -525,11 +530,11 @@ msgstr ""
 "Atliekant šį veiksmą bus uždarytos visos kortelės.\n"
 "Ar norite tęsti?"
 
-#: tryton/gui/main.py:1196
+#: tryton/gui/main.py:1206
 msgid "Close Tab"
 msgstr "Uždaryti kortelę"
 
-#: tryton/gui/main.py:1314
+#: tryton/gui/main.py:1327
 msgid ""
 "You are going to delete a Tryton database.\n"
 "Are you really sure to proceed?"
@@ -537,7 +542,7 @@ msgstr ""
 "Bus ištrinta Tryton duomenų bazė.\n"
 "Ar jūs tikrai norite tęsti?"
 
-#: tryton/gui/main.py:1324
+#: tryton/gui/main.py:1337
 msgid ""
 "Wrong Tryton Server Password\n"
 "Please try again."
@@ -545,28 +550,28 @@ msgstr ""
 "Neteisingas Tryon serverio slaptažodis\n"
 "Bandykite iš naujo."
 
-#: tryton/gui/main.py:1326 tryton/gui/main.py:1362 tryton/gui/main.py:1398
-#: tryton/gui/window/dbcreate.py:382
+#: tryton/gui/main.py:1339 tryton/gui/main.py:1375 tryton/gui/main.py:1411
+#: tryton/gui/window/dbcreate.py:384
 msgid "Access denied!"
 msgstr "Neturite teisių!"
 
-#: tryton/gui/main.py:1329
+#: tryton/gui/main.py:1342
 msgid "Database drop failed with error message:\n"
 msgstr "Nepavyko sunaikinti duomenų bazės. Klaidos pranešimas:\n"
 
-#: tryton/gui/main.py:1330
+#: tryton/gui/main.py:1343
 msgid "Database drop failed!"
 msgstr "Nepavyko sunaikinti duomenų bazės!"
 
-#: tryton/gui/main.py:1332
+#: tryton/gui/main.py:1345
 msgid "Database dropped successfully!"
 msgstr "Sėkmingai sunaikinta duomenų bazė!"
 
-#: tryton/gui/main.py:1337
+#: tryton/gui/main.py:1350
 msgid "Open Backup File to Restore..."
 msgstr "Atverti atsarginę kopiją atkūrimui..."
 
-#: tryton/gui/main.py:1354
+#: tryton/gui/main.py:1367
 msgid ""
 "It is not possible to restore a password protected database.\n"
 "Backup and restore needed to be proceed manual."
@@ -574,11 +579,11 @@ msgstr ""
 "Negalima atkurti duomenų bazės apsaugotos slaptažodžiu.\n"
 "Atsarginės kopijos sukūrimą bei atkūrimą atlikite savarankiškai."
 
-#: tryton/gui/main.py:1358 tryton/gui/main.py:1394
+#: tryton/gui/main.py:1371 tryton/gui/main.py:1407
 msgid "Database is password protected!"
 msgstr "Duomenų bazės slaptažodis yra apsaugotas!"
 
-#: tryton/gui/main.py:1360 tryton/gui/main.py:1396
+#: tryton/gui/main.py:1373 tryton/gui/main.py:1409
 msgid ""
 "Wrong Tryton Server Password.\n"
 "Please try again."
@@ -586,19 +591,19 @@ msgstr ""
 "Neteisingas Tryton serverio slaptažodis.\n"
 "Bandykite iš naujo."
 
-#: tryton/gui/main.py:1365
+#: tryton/gui/main.py:1378
 msgid "Database restore failed with error message:\n"
 msgstr "Nepavyko sunaikinti duomenų bazės. Klaidos pranešimas:\n"
 
-#: tryton/gui/main.py:1367 tryton/gui/main.py:1372
+#: tryton/gui/main.py:1380 tryton/gui/main.py:1385
 msgid "Database restore failed!"
 msgstr "Nepavyko sunaikinti duomenų bazės!"
 
-#: tryton/gui/main.py:1370
+#: tryton/gui/main.py:1383
 msgid "Database restored successfully!"
 msgstr "Sėkmingai sunaikinta duomenų bazė!"
 
-#: tryton/gui/main.py:1391
+#: tryton/gui/main.py:1404
 msgid ""
 "It is not possible to dump a password protected Database.\n"
 "Backup and restore needed to be proceed manual."
@@ -607,75 +612,75 @@ msgstr ""
 "kopijos.\n"
 "Atsarginės kopijos sukūrimą bei atkūrimą atlikite savarankiškai."
 
-#: tryton/gui/main.py:1401
+#: tryton/gui/main.py:1414
 msgid "Database dump failed with error message:\n"
 msgstr "Nepavyko padaryti duomenų bazės atsarginės kopijos.Klaidos pranešimas:\n"
 
-#: tryton/gui/main.py:1403
+#: tryton/gui/main.py:1416
 msgid "Database dump failed!"
 msgstr "Nepavyko padaryti duomenų bazės atsarginės kopijos!"
 
-#: tryton/gui/main.py:1414
+#: tryton/gui/main.py:1427
 msgid "Database backuped successfully!"
 msgstr "Sėkmingai padaryta duomenų bazės atsarginė kopija!"
 
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
 msgid "New"
 msgstr "Naujas"
 
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
 msgid "Create a new record"
 msgstr "Sukurti naują įrašą"
 
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
 #: tryton/gui/window/win_export.py:142
 msgid "Save"
 msgstr "Išsaugoti"
 
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
 msgid "Save this record"
 msgstr "Išsaugoti šį įrašą"
 
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
-#: tryton/gui/window/win_form.py:228
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
+#: tryton/gui/window/win_form.py:232
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:154
 msgid "Switch"
 msgstr "Perjungti"
 
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
 msgid "Switch view"
 msgstr "Perjungti rodymą"
 
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
 msgid "_Reload"
 msgstr "Pe_rkrauti"
 
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
 msgid "Reload"
 msgstr "Perkrauti"
 
-#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:48
+#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:50
 msgid "_New"
 msgstr "_Naujas"
 
-#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:49
-#: tryton/gui/window/win_form.py:66
+#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:51
+#: tryton/gui/window/win_form.py:67
 msgid "_Save"
 msgstr "_Saugoti"
 
-#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:50
+#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:52
 msgid "_Switch View"
 msgstr "_Perjungti rodymą"
 
-#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:52
+#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:54
 msgid "_Reload/Undo"
 msgstr "Pe_rkrauti/atšaukti"
 
-#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:56
+#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:58
 msgid "_Delete..."
 msgstr "_Ištrinti..."
 
-#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:65
+#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:68
 msgid "_Close Tab"
 msgstr "Uždaryti _kortelę"
 
@@ -709,28 +714,28 @@ msgstr ""
 "serverio adresas ir prievadas (dažniausiai 8000) yra neužblokuoti.\n"
 "Spauskite 'Keisti', kad pakeisti serverio jungtį."
 
-#: tryton/gui/window/dbcreate.py:137
+#: tryton/gui/window/dbcreate.py:139
 msgid "Create new database"
 msgstr "Kurti naują duomenų bazę"
 
-#: tryton/gui/window/dbcreate.py:147
+#: tryton/gui/window/dbcreate.py:149
 msgid "C_reate"
 msgstr "Ku_rti"
 
-#: tryton/gui/window/dbcreate.py:155
+#: tryton/gui/window/dbcreate.py:157
 msgid "Create the new database."
 msgstr "Kurti naują duomenų bazę"
 
-#: tryton/gui/window/dbcreate.py:166
+#: tryton/gui/window/dbcreate.py:168
 msgid "Server Setup:"
 msgstr "Serverio nustatymai:"
 
-#: tryton/gui/window/dbcreate.py:171
+#: tryton/gui/window/dbcreate.py:173
 msgid "Server connection:"
 msgstr "Serverio jungtis:"
 
-#: tryton/gui/window/dbcreate.py:180 tryton/gui/window/dbdumpdrop.py:140
-#: tryton/gui/window/dbrestore.py:86
+#: tryton/gui/window/dbcreate.py:182 tryton/gui/window/dbdumpdrop.py:140
+#: tryton/gui/window/dbrestore.py:88
 msgid ""
 "This is the URL of the server. Use server 'localhost' and port '8000' if "
 "the server is installed on this computer. Click on 'Change' to change the"
@@ -740,22 +745,22 @@ msgstr ""
 "'8000', jeigu serveris įdiegtas šiame kompiuteryje. Spauskite ant "
 "'Keisti' norėdami pakeisti serverio adresą."
 
-#: tryton/gui/window/dbcreate.py:183 tryton/gui/window/dbdumpdrop.py:147
-#: tryton/gui/window/dbrestore.py:91
+#: tryton/gui/window/dbcreate.py:185 tryton/gui/window/dbdumpdrop.py:147
+#: tryton/gui/window/dbrestore.py:93
 msgid "C_hange"
 msgstr "Ke_isti"
 
-#: tryton/gui/window/dbcreate.py:192 tryton/gui/window/dbrestore.py:97
+#: tryton/gui/window/dbcreate.py:194 tryton/gui/window/dbrestore.py:99
 msgid "Setup the server connection..."
 msgstr "Keisti serverio jungtį..."
 
-#: tryton/gui/window/dbcreate.py:195 tryton/gui/window/dbdumpdrop.py:186
-#: tryton/gui/window/dbrestore.py:100
+#: tryton/gui/window/dbcreate.py:197 tryton/gui/window/dbdumpdrop.py:186
+#: tryton/gui/window/dbrestore.py:102
 msgid "Tryton Server Password:"
 msgstr "Tryton serverio slaptažodis:"
 
-#: tryton/gui/window/dbcreate.py:205 tryton/gui/window/dbdumpdrop.py:196
-#: tryton/gui/window/dbrestore.py:109
+#: tryton/gui/window/dbcreate.py:207 tryton/gui/window/dbdumpdrop.py:196
+#: tryton/gui/window/dbrestore.py:111
 msgid ""
 "This is the password of the Tryton server. It doesn't belong to a real "
 "user. This password is usually defined in the trytond configuration."
@@ -764,15 +769,15 @@ msgstr ""
 "kuriam nors naudotojui. Slaptažodis dažniausiai nurodomas trytond "
 "konfiguraciniame faile."
 
-#: tryton/gui/window/dbcreate.py:216
+#: tryton/gui/window/dbcreate.py:218
 msgid "New database setup:"
 msgstr "Naujos duomenų bazės nustatymai:"
 
-#: tryton/gui/window/dbcreate.py:222
+#: tryton/gui/window/dbcreate.py:224
 msgid "Database name:"
 msgstr "Duomenų bazės pavadinimas:"
 
-#: tryton/gui/window/dbcreate.py:234
+#: tryton/gui/window/dbcreate.py:236
 msgid ""
 "Choose the name of the new database.\n"
 "Allowed characters are alphanumerical or _ (underscore)\n"
@@ -785,11 +790,11 @@ msgstr ""
 "Negalima įvesti nelotyniškų raidžių, tarpų bei skyrybos ženklų! Pavyzdys:"
 " tryton"
 
-#: tryton/gui/window/dbcreate.py:241
+#: tryton/gui/window/dbcreate.py:243
 msgid "Default language:"
 msgstr "Numatytoji kalba:"
 
-#: tryton/gui/window/dbcreate.py:251
+#: tryton/gui/window/dbcreate.py:253
 msgid ""
 "Choose the default language that will be installed for this database. You"
 " will be able to install new languages after installation through the "
@@ -799,11 +804,11 @@ msgstr ""
 "Papildomas kalbas galima įdiegti per administravimo meniu, kai bus "
 "sukurta nauja duomenų bazė"
 
-#: tryton/gui/window/dbcreate.py:255
+#: tryton/gui/window/dbcreate.py:257
 msgid "Admin password:"
 msgstr "Administratoriaus slaptažodis:"
 
-#: tryton/gui/window/dbcreate.py:265
+#: tryton/gui/window/dbcreate.py:267
 msgid ""
 "Choose a password for the admin user of the new database. With these "
 "credentials you will be later able to login into the database:\n"
@@ -815,15 +820,15 @@ msgstr ""
 "Naudotojas: admin\n"
 "Slaptažodis: <Slaptažodis, kurį įvedėte čia>"
 
-#: tryton/gui/window/dbcreate.py:273
+#: tryton/gui/window/dbcreate.py:275
 msgid "Confirm admin password:"
 msgstr "Pakartokite slaptažodį:"
 
-#: tryton/gui/window/dbcreate.py:282
+#: tryton/gui/window/dbcreate.py:284
 msgid "Type the Admin password again"
 msgstr "Pakartotinai įrašykite administratoriaus slaptažodį"
 
-#: tryton/gui/window/dbcreate.py:330
+#: tryton/gui/window/dbcreate.py:332
 msgid ""
 "The database name is restricted to alpha-nummerical characters and \"_\" "
 "(underscore). Avoid all accents, space and any other special characters."
@@ -832,29 +837,29 @@ msgstr ""
 "skaičiai ir \"_\" (pabraukimas). Venkite nelotyniškų raidžių, tarpų bei "
 "skyrybos ženklų."
 
-#: tryton/gui/window/dbcreate.py:335
+#: tryton/gui/window/dbcreate.py:337
 msgid "Wrong characters in database name!"
 msgstr "Negalima simbolis duomenų bazės pavadinime!"
 
-#: tryton/gui/window/dbcreate.py:339
+#: tryton/gui/window/dbcreate.py:341
 msgid "The new admin password doesn't match the confirmation field.\n"
 msgstr "Naujas administratoriaus slaptažodis nesutampa su pakartotinu.\n"
 
-#: tryton/gui/window/dbcreate.py:341
+#: tryton/gui/window/dbcreate.py:343
 msgid "Passwords doesn't match!"
 msgstr "Slaptažodžiai nesutampa!"
 
-#: tryton/gui/window/dbcreate.py:344
+#: tryton/gui/window/dbcreate.py:346
 msgid "Admin password and confirmation are required to create a new database."
 msgstr ""
 "Administratoriaus slaptažodis kartu su pakartotinu slaptažodžiu yrabūtini"
 " norint sukurti naują duomenų bazę."
 
-#: tryton/gui/window/dbcreate.py:346
+#: tryton/gui/window/dbcreate.py:348
 msgid "Missing admin password!"
 msgstr "Neįvestas administratoriaus slaptažodis!"
 
-#: tryton/gui/window/dbcreate.py:361
+#: tryton/gui/window/dbcreate.py:363
 msgid ""
 "A database with the same name already exists.\n"
 "Try another database name."
@@ -862,15 +867,15 @@ msgstr ""
 "Duomenų bazė tokiu pavadinimu jau yra sukurta.\n"
 "Pasirinkite kitą pavadinimą."
 
-#: tryton/gui/window/dbcreate.py:364
+#: tryton/gui/window/dbcreate.py:366
 msgid "This database name already exist!"
 msgstr "Duomenų bazė tokiu pavadinimu jau yra sukurta!"
 
-#: tryton/gui/window/dbcreate.py:379
+#: tryton/gui/window/dbcreate.py:381
 msgid "Sorry, wrong password for the Tryton server. Please try again."
 msgstr "Neteisingas Tryton serverio slaptažodis. Bandykite iš naujo."
 
-#: tryton/gui/window/dbcreate.py:387
+#: tryton/gui/window/dbcreate.py:389
 msgid ""
 "Can't create the database, caused by an unknown reason.\n"
 "If there is a database created, it could be broken. Maybe drop this "
@@ -883,7 +888,7 @@ msgstr ""
 "papildomos informacijos.\n"
 "Klaidos pranešimas:\n"
 
-#: tryton/gui/window/dbcreate.py:395
+#: tryton/gui/window/dbcreate.py:397
 msgid "Error creating database!"
 msgstr "Klaida kuriant duomenų bazę!"
 
@@ -931,7 +936,7 @@ msgstr "Naikinti pasirinktą duomenų bazę."
 msgid "Choose a Tryton database to delete:"
 msgstr "Pasirinkite duomenų bazę, kurią sunaikinti:"
 
-#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:75
+#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:77
 msgid "Server Connection:"
 msgstr "Serverio jungtis:"
 
@@ -1022,15 +1027,15 @@ msgstr "Serveris:"
 msgid "User name:"
 msgstr "Naudotojas:"
 
-#: tryton/gui/window/dbrestore.py:64
+#: tryton/gui/window/dbrestore.py:66
 msgid "Restore Database"
 msgstr "Atkurti duomenų bazę"
 
-#: tryton/gui/window/dbrestore.py:117
+#: tryton/gui/window/dbrestore.py:119
 msgid "File to Restore:"
 msgstr "Atkuriama iš failo:"
 
-#: tryton/gui/window/dbrestore.py:131
+#: tryton/gui/window/dbrestore.py:133
 msgid ""
 "Choose the name of the database to be restored.\n"
 "Allowed characters are alphanumerical or _ (underscore)\n"
@@ -1043,15 +1048,15 @@ msgstr ""
 "Negalima įvesti nelotyniškų raidžių, tarpų bei skyrybos ženklų! Pavyzdys:"
 " tryton"
 
-#: tryton/gui/window/dbrestore.py:137
+#: tryton/gui/window/dbrestore.py:139
 msgid "New Database Name:"
 msgstr "Naujos duomenų bazės pavadinimas:"
 
-#: tryton/gui/window/dbrestore.py:140
+#: tryton/gui/window/dbrestore.py:142
 msgid "Update Database:"
 msgstr "Atnaujinti duomenų bazę:"
 
-#: tryton/gui/window/dbrestore.py:144
+#: tryton/gui/window/dbrestore.py:146
 msgid ""
 "Check for an automatic database update after restoring a database from a "
 "previous Tryton version."
@@ -1059,11 +1064,11 @@ msgstr ""
 "Pažymėkite, jeigu norite, kad po duomenų bazė atkūrimo būtų atnaujinama "
 "iki esamos Tryton versijos."
 
-#: tryton/gui/window/dbrestore.py:154
+#: tryton/gui/window/dbrestore.py:156
 msgid "Restore"
 msgstr "Atkurti"
 
-#: tryton/gui/window/dbrestore.py:163
+#: tryton/gui/window/dbrestore.py:165
 msgid "Restore the database from file."
 msgstr "Atkurti duomenų bazę iš failo."
 
@@ -1103,154 +1108,158 @@ msgstr "Turinys:"
 msgid "Attachment:"
 msgstr "Priedas:"
 
-#: tryton/gui/window/form.py:39 tryton/gui/window/tips.py:74
-#: tryton/gui/window/win_form.py:201
-#: tryton/gui/window/view_form/view/screen_container.py:165
+#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:74
+#: tryton/gui/window/win_form.py:205
+#: tryton/gui/window/view_form/view/screen_container.py:163
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:128
 msgid "Previous"
 msgstr "Buvęs"
 
-#: tryton/gui/window/form.py:40
+#: tryton/gui/window/form.py:42
 msgid "Previous Record"
 msgstr "Buvęs įrašas"
 
-#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:81
-#: tryton/gui/window/win_form.py:215
-#: tryton/gui/window/view_form/view/screen_container.py:177
+#: tryton/gui/window/form.py:43 tryton/gui/window/tips.py:81
+#: tryton/gui/window/win_form.py:219
+#: tryton/gui/window/view_form/view/screen_container.py:175
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:142
 msgid "Next"
 msgstr "Kitas"
 
-#: tryton/gui/window/form.py:41
+#: tryton/gui/window/form.py:43
 msgid "Next Record"
 msgstr "Kitas įrašas"
 
-#: tryton/gui/window/form.py:44
+#: tryton/gui/window/form.py:46
 msgid "Attachment(0)"
 msgstr "Priedai(0)"
 
-#: tryton/gui/window/form.py:45
+#: tryton/gui/window/form.py:47
 msgid "Add an attachment to the record"
 msgstr "Prisegti failą prie įrašo"
 
-#: tryton/gui/window/form.py:54
+#: tryton/gui/window/form.py:56
 msgid "_Duplicate"
 msgstr "Sukurti ko_piją"
 
-#: tryton/gui/window/form.py:59
+#: tryton/gui/window/form.py:61
 msgid "_Previous"
 msgstr "_Buvęs"
 
-#: tryton/gui/window/form.py:61
+#: tryton/gui/window/form.py:63
 msgid "_Next"
 msgstr "_Kitas"
 
-#: tryton/gui/window/form.py:62
+#: tryton/gui/window/form.py:64
 msgid "_Search"
 msgstr "I_eškoti"
 
-#: tryton/gui/window/form.py:63
+#: tryton/gui/window/form.py:65
 msgid "View _Logs..."
 msgstr "Žiūrėti _žurnalus..."
 
-#: tryton/gui/window/form.py:68
+#: tryton/gui/window/form.py:66
+msgid "Show revisions..."
+msgstr ""
+
+#: tryton/gui/window/form.py:71
 msgid "A_ttachments..."
 msgstr "P_riedas:"
 
-#: tryton/gui/window/form.py:70
+#: tryton/gui/window/form.py:73
 msgid "_Actions..."
 msgstr "_Veiksmai..."
 
-#: tryton/gui/window/form.py:72
+#: tryton/gui/window/form.py:75
 msgid "_Relate..."
 msgstr "_Susiję įrašai..."
 
-#: tryton/gui/window/form.py:75
+#: tryton/gui/window/form.py:78
 msgid "_Report..."
 msgstr "_Ataskaita..."
 
-#: tryton/gui/window/form.py:77
+#: tryton/gui/window/form.py:80
 msgid "_E-Mail..."
 msgstr "Siųsti _el. paštu..."
 
-#: tryton/gui/window/form.py:79
+#: tryton/gui/window/form.py:82
 msgid "_Print..."
 msgstr "_Spausdinti..."
 
-#: tryton/gui/window/form.py:82
+#: tryton/gui/window/form.py:85
 msgid "_Export Data..."
 msgstr "_Eksportuoti duomenis..."
 
-#: tryton/gui/window/form.py:84
+#: tryton/gui/window/form.py:87
 msgid "_Import Data..."
 msgstr "_Importuoti duomenis..."
 
-#: tryton/gui/window/form.py:219
+#: tryton/gui/window/form.py:216
 #, python-format
 msgid "Attachment(%d)"
 msgstr "Priedai(%d)"
 
-#: tryton/gui/window/form.py:237
+#: tryton/gui/window/form.py:234
 msgid "You have to select one record!"
 msgstr "Pasirinkite bent vieną įrašą!"
 
-#: tryton/gui/window/form.py:241
+#: tryton/gui/window/form.py:238
 msgid "ID:"
 msgstr "ID:"
 
-#: tryton/gui/window/form.py:242
+#: tryton/gui/window/form.py:239
 msgid "Creation User:"
 msgstr "Sukūrė naudotojas:"
 
-#: tryton/gui/window/form.py:243
+#: tryton/gui/window/form.py:240
 msgid "Creation Date:"
 msgstr "Sukūrimo data:"
 
-#: tryton/gui/window/form.py:244
+#: tryton/gui/window/form.py:241
 msgid "Latest Modification by:"
 msgstr "Paskutinį kartą redagavo:"
 
-#: tryton/gui/window/form.py:245
+#: tryton/gui/window/form.py:242
 msgid "Latest Modification Date:"
 msgstr "Paskutinio redagavimo data:"
 
-#: tryton/gui/window/form.py:263
+#: tryton/gui/window/form.py:260
 msgid "Model:"
 msgstr "Modelis:"
 
-#: tryton/gui/window/form.py:271
+#: tryton/gui/window/form.py:304
 msgid "Are you sure to remove this record?"
 msgstr "Ar tikrai norite ištrinti šį įrašą?"
 
-#: tryton/gui/window/form.py:273
+#: tryton/gui/window/form.py:306
 msgid "Are you sure to remove those records?"
 msgstr "Ar tikrai norite ištrinti šiuos įrašus?"
 
-#: tryton/gui/window/form.py:276
+#: tryton/gui/window/form.py:309
 msgid "Records not removed!"
 msgstr "Įrašai nebuvo ištrinti!"
 
-#: tryton/gui/window/form.py:278
+#: tryton/gui/window/form.py:311
 msgid "Records removed!"
 msgstr "Įrašai ištrinti!"
 
-#: tryton/gui/window/form.py:318
+#: tryton/gui/window/form.py:345
 msgid "Working now on the duplicated record(s)!"
 msgstr "Dabar dirbate su įrašo(-ų) kopija(-omis)!"
 
-#: tryton/gui/window/form.py:325
+#: tryton/gui/window/form.py:352
 msgid "Record saved!"
 msgstr "Įrašas išsaugotas!"
 
-#: tryton/gui/window/form.py:328
+#: tryton/gui/window/form.py:355
 msgid "Invalid form!"
 msgstr "Netinkama forma!"
 
-#: tryton/gui/window/form.py:436
+#: tryton/gui/window/form.py:462
 msgid " of "
 msgstr " iš "
 
-#: tryton/gui/window/form.py:457
+#: tryton/gui/window/form.py:483
 msgid ""
 "This record has been modified\n"
 "do you want to save it ?"
@@ -1258,46 +1267,52 @@ msgstr ""
 "Šis įrašas buvo pakeistas\n"
 "Ar norite jį išsaugoti?"
 
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
 msgid "Action"
 msgstr "Veiksmai"
 
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
 msgid "Launch action"
 msgstr "Vykdyti veiksmą"
 
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
 msgid "Relate"
 msgstr "Susijęs"
 
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
 msgid "Open related records"
 msgstr "Atverti susijusius įrašus"
 
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
 msgid "Report"
 msgstr "Ataskaitos"
 
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
 msgid "Open report"
 msgstr "Atverti ataskaitą"
 
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
 msgid "E-Mail"
 msgstr "Siuntimas"
 
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
 msgid "E-Mail report"
 msgstr "Siųsti ataskaitą el. paštu"
 
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
 msgid "Print"
 msgstr "Spausdinimas"
 
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
 msgid "Print report"
 msgstr "Spausdinti ataskaitą"
 
+#: tryton/gui/window/form.py:607
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:257
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:1050
+msgid "Unknown"
+msgstr "Nežinomas"
+
 #: tryton/gui/window/limit.py:17
 msgid "Limit"
 msgstr "Riba"
@@ -1326,6 +1341,20 @@ msgstr "Nustatymai"
 msgid "Current Password:"
 msgstr "Dabartinis slaptažodis:"
 
+#: tryton/gui/window/revision.py:20
+#, fuzzy
+msgid "Revision"
+msgstr "Buvęs"
+
+#: tryton/gui/window/revision.py:29
+#, fuzzy
+msgid "Select a revision"
+msgstr "Pasirinkimas"
+
+#: tryton/gui/window/revision.py:32
+msgid "Revision:"
+msgstr ""
+
 #: tryton/gui/window/shortcuts.py:17
 msgid "Keyboard Shortcuts"
 msgstr "Spartieji klavišai"
@@ -1509,21 +1538,21 @@ msgstr "Pridėti laukų pavadinimus"
 msgid "Name"
 msgstr "Pavadinimas"
 
-#: tryton/gui/window/win_export.py:306
+#: tryton/gui/window/win_export.py:309
 msgid "What is the name of this export?"
 msgstr "Kokiu pavadinimu išsaugoti šį eksportavimo šabloną?"
 
-#: tryton/gui/window/win_export.py:429
+#: tryton/gui/window/win_export.py:436
 #, python-format
 msgid "%d record saved!"
 msgstr "%d įrašas išsaugotas!"
 
-#: tryton/gui/window/win_export.py:431
+#: tryton/gui/window/win_export.py:438
 #, python-format
 msgid "%d records saved!"
 msgstr "%d įrašai išsaugoti!"
 
-#: tryton/gui/window/win_export.py:434
+#: tryton/gui/window/win_export.py:441
 #, python-format
 msgid ""
 "Operation failed!\n"
@@ -1538,26 +1567,26 @@ msgstr ""
 msgid "Link"
 msgstr "Nuoroda"
 
-#: tryton/gui/window/win_form.py:134
+#: tryton/gui/window/win_form.py:136
 msgid "Add"
 msgstr "Pridėti"
 
-#: tryton/gui/window/win_form.py:147
+#: tryton/gui/window/win_form.py:149
 msgid "Remove <Del>"
 msgstr "Šalinti <Del>"
 
-#: tryton/gui/window/win_form.py:162
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:73
+#: tryton/gui/window/win_form.py:164
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:75
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:86
 msgid "Create a new record <F3>"
 msgstr "Sukurti naują įrašą <F3>"
 
-#: tryton/gui/window/win_form.py:174
+#: tryton/gui/window/win_form.py:176
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:106
 msgid "Delete selected record <Del>"
 msgstr "Pašalinti pasirinktą įrašą <Del>"
 
-#: tryton/gui/window/win_form.py:188
+#: tryton/gui/window/win_form.py:190
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:116
 msgid "Undelete selected record <Ins>"
 msgstr "Atkurti pasirinktą įrašą <Ins>"
@@ -1580,10 +1609,10 @@ msgstr "Importuoti iš failo:"
 
 #: tryton/gui/window/win_import.py:111
 #: tryton/gui/window/view_form/view/form_gtk/binary.py:57
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:111
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:118
 #: tryton/gui/window/view_form/view/form_gtk/image.py:62
 #: tryton/gui/window/view_form/view/form_gtk/image.py:131
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:624
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:650
 msgid "Open..."
 msgstr "Atverti..."
 
@@ -1607,19 +1636,19 @@ msgstr "Koduotė:"
 msgid "Lines to Skip:"
 msgstr "Praleisti eilutes:"
 
-#: tryton/gui/window/win_import.py:184 tryton/gui/window/win_import.py:189
+#: tryton/gui/window/win_import.py:185 tryton/gui/window/win_import.py:190
 msgid "Field name"
 msgstr "Lauko pavadinimas"
 
-#: tryton/gui/window/win_import.py:249
+#: tryton/gui/window/win_import.py:251
 msgid "You must select an import file first!"
 msgstr "Pasirinkite failą iš kurio importuosite!"
 
-#: tryton/gui/window/win_import.py:260
+#: tryton/gui/window/win_import.py:262
 msgid "Error opening CSV file"
 msgstr "Klaida atveriant CSV failą"
 
-#: tryton/gui/window/win_import.py:287
+#: tryton/gui/window/win_import.py:289
 #, python-format
 msgid "Error processing the file at field %s."
 msgstr "Klaida apdorojant failą ties lauku %s."
@@ -1634,24 +1663,7 @@ msgstr "%d įrašas importuotas!"
 msgid "%d records imported!"
 msgstr "%d įrašai importuoti!"
 
-#: tryton/gui/window/win_import.py:371
-msgid "Importation Error!"
-msgstr "Importavimo klaida!"
-
-#: tryton/gui/window/win_import.py:372
-#, python-format
-msgid ""
-"Error importing record %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-msgstr ""
-"Klaida importuojant įrašą %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-
-#: tryton/gui/window/wizard.py:291
+#: tryton/gui/window/wizard.py:286
 msgid "Wizard"
 msgstr "Vedlys"
 
@@ -1660,44 +1672,40 @@ msgstr "Vedlys"
 msgid "No String Attr."
 msgstr "Be pavadinimo"
 
-#: tryton/gui/window/view_form/screen/screen.py:135
+#: tryton/gui/window/view_form/screen/screen.py:129
 msgid "ID"
 msgstr "ID"
 
-#: tryton/gui/window/view_form/screen/screen.py:136
+#: tryton/gui/window/view_form/screen/screen.py:130
 #, fuzzy
 msgid "Creation User"
 msgstr "Sukūrė naudotojas:"
 
-#: tryton/gui/window/view_form/screen/screen.py:137
+#: tryton/gui/window/view_form/screen/screen.py:131
 #, fuzzy
 msgid "Creation Date"
 msgstr "Sukūrimo data:"
 
-#: tryton/gui/window/view_form/screen/screen.py:138
+#: tryton/gui/window/view_form/screen/screen.py:132
 #, fuzzy
 msgid "Modification User"
 msgstr "Paskutinio redagavimo data:"
 
-#: tryton/gui/window/view_form/screen/screen.py:139
+#: tryton/gui/window/view_form/screen/screen.py:133
 #, fuzzy
 msgid "Modification Date"
 msgstr "Paskutinio redagavimo data:"
 
-#: tryton/gui/window/view_form/screen/screen.py:634
+#: tryton/gui/window/view_form/screen/screen.py:631
 msgid "Unable to get view tree state"
 msgstr ""
 
-#: tryton/gui/window/view_form/screen/screen.py:671
-#, fuzzy, python-format
+#: tryton/gui/window/view_form/screen/screen.py:668
+#, fuzzy
 msgid "Unable to set view tree state"
 msgstr "Nepavyko nustatyti lokalės %s"
 
-#: tryton/gui/window/view_form/view/list.py:651
-msgid "You must select a record to use the relation!"
-msgstr "Pasirinkite įrašą, kad galėtumėte naudoti sąryšį!"
-
-#: tryton/gui/window/view_form/view/screen_container.py:25
+#: tryton/gui/window/view_form/view/screen_container.py:23
 msgid ".."
 msgstr ".."
 
@@ -1705,19 +1713,19 @@ msgstr ".."
 msgid "F_ilters"
 msgstr "F_iltras"
 
-#: tryton/gui/window/view_form/view/screen_container.py:149
+#: tryton/gui/window/view_form/view/screen_container.py:147
 msgid "Show bookmarks of filters"
 msgstr "Rodyti filtrų žymeles"
 
-#: tryton/gui/window/view_form/view/screen_container.py:314
+#: tryton/gui/window/view_form/view/screen_container.py:312
 msgid "Remove this bookmark"
 msgstr "Šalinti šią žymelę"
 
-#: tryton/gui/window/view_form/view/screen_container.py:321
+#: tryton/gui/window/view_form/view/screen_container.py:319
 msgid "Bookmark this filter"
 msgstr "Sukurti šio filtro žymelę"
 
-#: tryton/gui/window/view_form/view/screen_container.py:380
+#: tryton/gui/window/view_form/view/screen_container.py:384
 msgid "Bookmark Name:"
 msgstr "Žymelės pavadinimas:"
 
@@ -1748,24 +1756,24 @@ msgstr ""
 msgid "Select a File..."
 msgstr "Pasirinkite failą..."
 
-#: tryton/gui/window/view_form/view/form_gtk/char.py:157
+#: tryton/gui/window/view_form/view/form_gtk/char.py:161
 msgid "Show plain text"
 msgstr "Rodyti paprastą tekstą"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:349
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:348
 msgid "Add value"
 msgstr "Pridėti reikšmę"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:459
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:461
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:199
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:201
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:458
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:460
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:202
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:204
 #: tryton/gui/window/view_form/view/form_gtk/parser.py:255
 #: tryton/gui/window/view_form/view/form_gtk/parser.py:259
 msgid ":"
 msgstr ":"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:471
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:470
 #, python-format
 msgid "Remove \"%s\""
 msgstr "Šalinti \"%s\""
@@ -1782,23 +1790,23 @@ msgstr "Visi failai"
 msgid "Images"
 msgstr "Paveikslėliai"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:175
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:178
 msgid "Translation"
 msgstr "Vertimas"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:231
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:234
 msgid "Edit"
 msgstr "Keisti"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:236
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:239
 msgid "Fuzzy"
 msgstr "Neaiškus"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:305
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:308
 msgid "You need to save the record before adding translations!"
 msgstr "Išsaugokite įrašą prieš pridedant vertimą!"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:316
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:319
 msgid "No other language available!"
 msgstr "Jokia kita kalba nėra prieinama!"
 
@@ -1811,12 +1819,12 @@ msgstr "Pridėti turimą įrašą"
 msgid "Remove selected record <Del>"
 msgstr "Pašalinti pasirinktą įrašą <Del>"
 
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:74
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:351
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:76
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:356
 msgid "Open a record <F2>"
 msgstr "Atverti įrašą <F2>"
 
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:354
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:359
 msgid "Search a record <F2>"
 msgstr "Ieškoti įrašo <F2>"
 
@@ -1908,15 +1916,10 @@ msgstr "PNG paveikslėlis (*.png)"
 msgid "Image size too large!"
 msgstr "Paveikslėlis yra per didelis!"
 
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:245
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:244
 msgid ": "
 msgstr ": "
 
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:258
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:1023
-msgid "Unknown"
-msgstr "Nežinomas"
-
 #: tryton/plugins/translation/__init__.py:18
 msgid "Translate view"
 msgstr "Vertimų peržiūra"
diff --git a/share/locale/nl_NL/LC_MESSAGES/tryton.mo b/share/locale/nl_NL/LC_MESSAGES/tryton.mo
index 46847cf..edd81bc 100644
Binary files a/share/locale/nl_NL/LC_MESSAGES/tryton.mo and b/share/locale/nl_NL/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/nl_NL/LC_MESSAGES/tryton.po b/share/locale/nl_NL/LC_MESSAGES/tryton.po
index 98a1cfb..e726389 100644
--- a/share/locale/nl_NL/LC_MESSAGES/tryton.po
+++ b/share/locale/nl_NL/LC_MESSAGES/tryton.po
@@ -3,7 +3,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Tryton 1.8\n"
 "Report-Msgid-Bugs-To: issue_tracker at tryton.org\n"
-"POT-Creation-Date: 2013-10-20 16:34+0200\n"
+"POT-Creation-Date: 2014-04-18 22:49+0200\n"
 "PO-Revision-Date: 2012-04-23 11:07+0200\n"
 "Last-Translator: Bram van der Sar <avdsar at telfort.nl>\n"
 "Language-Team: \n"
@@ -60,62 +60,62 @@ msgstr "Kan configuratiebestand %s niet opslaan! "
 msgid "Unable to set locale %s"
 msgstr "Kan omgeving %s niet instellen"
 
-#: tryton/action/main.py:163
+#: tryton/action/main.py:171
 msgid "Select your action"
 msgstr "Selecteer je handeling."
 
-#: tryton/action/main.py:169
+#: tryton/action/main.py:177
 msgid "No action defined!"
 msgstr "Geen handeling gedefinieerd!"
 
-#: tryton/common/common.py:270
+#: tryton/common/common.py:284
 msgid "Tryton Connection"
 msgstr "Tryton verbinding"
 
-#: tryton/common/common.py:281
+#: tryton/common/common.py:295
 msgid "Server:"
 msgstr "Server:"
 
-#: tryton/common/common.py:299 tryton/gui/window/dblogin.py:79
+#: tryton/common/common.py:313 tryton/gui/window/dblogin.py:79
 msgid "Port:"
 msgstr "Poort:"
 
-#: tryton/common/common.py:369
+#: tryton/common/common.py:383
 msgid "Selection"
 msgstr "Selectie"
 
-#: tryton/common/common.py:378
+#: tryton/common/common.py:392
 msgid "Your selection:"
 msgstr "Uw selectie:"
 
-#: tryton/common/common.py:498 tryton/gui/main.py:1407
-#: tryton/gui/window/win_export.py:402
+#: tryton/common/common.py:528 tryton/gui/main.py:1420
+#: tryton/gui/window/win_export.py:409
 #: tryton/gui/window/view_form/view/form_gtk/binary.py:69
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:138
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:150
 #: tryton/gui/window/view_form/view/form_gtk/image.py:74
-#: tryton/gui/window/view_form/view/form_gtk/image.py:158
+#: tryton/gui/window/view_form/view/form_gtk/image.py:161
 #: tryton/gui/window/view_form/view/graph_gtk/parser.py:105
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:656
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:686
 msgid "Save As..."
 msgstr "Opslaan als..."
 
-#: tryton/common/common.py:649
+#: tryton/common/common.py:675
 msgid "Always ignore this warning."
 msgstr "Altijd deze waarschuwing negeren."
 
-#: tryton/common/common.py:654
+#: tryton/common/common.py:680
 msgid "Do you want to proceed?"
 msgstr ""
 
-#: tryton/common/common.py:673
+#: tryton/common/common.py:699
 msgid "Confirmation"
 msgstr "Bevestiging"
 
-#: tryton/common/common.py:779 tryton/common/common.py:1083
+#: tryton/common/common.py:805 tryton/common/common.py:1114
 msgid "Concurrency Exception"
 msgstr "Simultaan gebruik"
 
-#: tryton/common/common.py:793
+#: tryton/common/common.py:819
 #, fuzzy
 msgid ""
 "<b>Write Concurrency Warning:</b>\n"
@@ -134,50 +134,50 @@ msgstr ""
 " - \"Vergelijk\" om de verschillen te vergelijken;\n"
 " - \"Toch opslaan\" om deze versie op te slaan. "
 
-#: tryton/common/common.py:802
+#: tryton/common/common.py:828
 msgid "Compare"
 msgstr "Vergelijk"
 
-#: tryton/common/common.py:807
+#: tryton/common/common.py:833
 msgid "Write Anyway"
 msgstr "Overschrijven"
 
-#: tryton/common/common.py:833 tryton/gui/window/win_export.py:435
-#: tryton/gui/window/win_import.py:260 tryton/gui/window/win_import.py:288
+#: tryton/common/common.py:859 tryton/gui/window/win_export.py:442
+#: tryton/gui/window/win_import.py:262 tryton/gui/window/win_import.py:290
 msgid "Error"
 msgstr "Fout"
 
-#: tryton/common/common.py:837
+#: tryton/common/common.py:863
 msgid "Report Bug"
 msgstr "Programmafout melden"
 
-#: tryton/common/common.py:844
+#: tryton/common/common.py:870
 msgid "Application Error!"
 msgstr "Programmafout"
 
-#: tryton/common/common.py:867
+#: tryton/common/common.py:893
 msgid "Error: "
 msgstr "Fout: "
 
-#: tryton/common/common.py:887
+#: tryton/common/common.py:913
 #, fuzzy, python-format
 msgid "To report bugs you must have an account on <u>%s</u>"
 msgstr "Om programmafouten aan te melden moet je een account hebben bij <u>%s</u>"
 
-#: tryton/common/common.py:917
+#: tryton/common/common.py:943
 msgid "Bug Tracker"
 msgstr "Foutrapportage"
 
-#: tryton/common/common.py:935
+#: tryton/common/common.py:961
 msgid "User:"
 msgstr "Gebruiker:"
 
-#: tryton/common/common.py:943 tryton/common/common.py:1101
+#: tryton/common/common.py:969 tryton/common/common.py:1132
 #: tryton/gui/window/dblogin.py:462
 msgid "Password:"
 msgstr "Wachtwoord:"
 
-#: tryton/common/common.py:993
+#: tryton/common/common.py:1024
 msgid ""
 "The same bug was already reported by another user.\n"
 "To keep you informed your username is added to the nosy-list of this issue"
@@ -186,11 +186,11 @@ msgstr ""
 "Om je op de hoogte te houden is je gebuikersnaam toegevoegd aan de lijst "
 "van belangstellenden"
 
-#: tryton/common/common.py:1004
+#: tryton/common/common.py:1035
 msgid "Created new bug with ID "
 msgstr "Nieuwe foutmelding gemaakt met ID "
 
-#: tryton/common/common.py:1012 tryton/gui/main.py:921
+#: tryton/common/common.py:1043 tryton/gui/main.py:928
 msgid ""
 "Connection error!\n"
 "Bad username or password!"
@@ -198,11 +198,11 @@ msgstr ""
 "Geen verbinding!\n"
 "Verkeerde gebruikersnaam of wachtwoord!"
 
-#: tryton/common/common.py:1017
+#: tryton/common/common.py:1048
 msgid "Exception:"
 msgstr "Uitzondering:"
 
-#: tryton/common/common.py:1034
+#: tryton/common/common.py:1065
 msgid ""
 "The server fingerprint has changed since last connection!\n"
 "The application will stop connecting to this server until its fingerprint"
@@ -213,12 +213,12 @@ msgstr ""
 "Het programma maakt geen verbinding meer met de server totdat de "
 "identificatiecode is hersteld."
 
-#: tryton/common/common.py:1036
+#: tryton/common/common.py:1067
 msgid "Security risk!"
 msgstr "Beveiligingsrisico!"
 
-#: tryton/common/common.py:1042 tryton/common/common.py:1108
-#: tryton/gui/main.py:918
+#: tryton/common/common.py:1073 tryton/common/common.py:1139
+#: tryton/gui/main.py:925
 msgid ""
 "Connection error!\n"
 "Unable to connect to the server!"
@@ -226,39 +226,39 @@ msgstr ""
 "Verbinding mislukt!\n"
 "Verbinden met de server niet mogelijk!"
 
-#: tryton/common/common.py:1123
+#: tryton/common/common.py:1154
 msgid "Network Error!"
 msgstr "Netwerkfout."
 
-#: tryton/common/common.py:1354
+#: tryton/common/common.py:1409
 msgid "Y"
 msgstr " J"
 
-#: tryton/common/common.py:1355
+#: tryton/common/common.py:1410
 msgid "M"
 msgstr "M"
 
-#: tryton/common/common.py:1356
+#: tryton/common/common.py:1411
 msgid "w"
 msgstr "w"
 
-#: tryton/common/common.py:1357
+#: tryton/common/common.py:1412
 msgid "d"
 msgstr " d"
 
-#: tryton/common/common.py:1358
+#: tryton/common/common.py:1413
 msgid "h"
 msgstr "u"
 
-#: tryton/common/common.py:1359
+#: tryton/common/common.py:1414
 msgid "m"
 msgstr "m"
 
-#: tryton/common/completion.py:22
+#: tryton/common/completion.py:21
 msgid "<i>Search...</i>"
 msgstr ""
 
-#: tryton/common/completion.py:23
+#: tryton/common/completion.py:22
 msgid "<i>Create...</i>"
 msgstr ""
 
@@ -267,273 +267,278 @@ msgstr ""
 msgid "Open the calendar <F2>"
 msgstr "Open de kalender"
 
-#: tryton/common/date_widget.py:271
+#: tryton/common/date_widget.py:275
 msgid "Date Selection"
 msgstr "Datum selecteren"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "y"
 msgstr ""
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 #, fuzzy
 msgid "yes"
 msgstr "bytes"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 #, fuzzy
 msgid "true"
 msgstr "Waar"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "t"
 msgstr ""
 
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
 msgid "True"
 msgstr "Waar"
 
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
 msgid "False"
 msgstr "Niet waar"
 
-#: tryton/common/popup_menu.py:71
+#: tryton/common/popup_menu.py:72
+#, fuzzy
+msgid "Edit..."
+msgstr "Afsluiten"
+
+#: tryton/common/popup_menu.py:77
 #, fuzzy
 msgid "Attachments..."
 msgstr "Bijlage:"
 
-#: tryton/common/popup_menu.py:76
+#: tryton/common/popup_menu.py:87
 #, fuzzy
 msgid "Actions..."
 msgstr "_Acties.."
 
-#: tryton/common/popup_menu.py:77
+#: tryton/common/popup_menu.py:88
 #, fuzzy
 msgid "Relate..."
 msgstr "Verwijderen... "
 
-#: tryton/common/popup_menu.py:78
+#: tryton/common/popup_menu.py:89
 #, fuzzy
 msgid "Report..."
 msgstr "_Importeer gegevens... "
 
-#: tryton/common/popup_menu.py:79
+#: tryton/common/popup_menu.py:90
 #, fuzzy
 msgid "E-Mail..."
 msgstr "E-mail"
 
-#: tryton/common/popup_menu.py:80
+#: tryton/common/popup_menu.py:91
 #, fuzzy
 msgid "Print..."
 msgstr "Afdrukken"
 
-#: tryton/gui/main.py:217
+#: tryton/gui/main.py:218
 msgid "_File"
 msgstr "_Bestand"
 
-#: tryton/gui/main.py:225
+#: tryton/gui/main.py:226
 msgid "_User"
 msgstr "_Gebruiker"
 
-#: tryton/gui/main.py:239
+#: tryton/gui/main.py:240
 msgid "_Options"
 msgstr "_Opties"
 
-#: tryton/gui/main.py:247
+#: tryton/gui/main.py:248
 msgid "Fa_vorites"
 msgstr ""
 
-#: tryton/gui/main.py:263
+#: tryton/gui/main.py:264
 msgid "_Help"
 msgstr "_Help"
 
-#: tryton/gui/main.py:285 tryton/gui/window/win_search.py:26
+#: tryton/gui/main.py:286 tryton/gui/window/win_search.py:26
 #: tryton/gui/window/view_form/view/screen_container.py:100
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:333
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:332
 #: tryton/gui/window/view_form/view/form_gtk/many2many.py:40
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:45
 msgid "Search"
 msgstr "Zoeken"
 
-#: tryton/gui/main.py:364
+#: tryton/gui/main.py:374
 msgid "No result found."
 msgstr ""
 
-#: tryton/gui/main.py:384
+#: tryton/gui/main.py:396
 msgid "_Connect..."
 msgstr "_Verbinden..."
 
-#: tryton/gui/main.py:393
+#: tryton/gui/main.py:405
 msgid "_Disconnect"
 msgstr "Verbinding verbreken"
 
-#: tryton/gui/main.py:403
+#: tryton/gui/main.py:415
 msgid "Data_base"
 msgstr "Data_base"
 
-#: tryton/gui/main.py:414
+#: tryton/gui/main.py:426
 msgid "_New Database..."
 msgstr "_Nieuwe database..."
 
-#: tryton/gui/main.py:423
+#: tryton/gui/main.py:435
 msgid "_Restore Database..."
 msgstr "_Herstel database..."
 
-#: tryton/gui/main.py:432
+#: tryton/gui/main.py:444
 msgid "_Backup Database..."
 msgstr "Reservekopie van database..."
 
-#: tryton/gui/main.py:441
+#: tryton/gui/main.py:453
 msgid "Dro_p Database..."
 msgstr "Verwijder database..."
 
-#: tryton/gui/main.py:450
+#: tryton/gui/main.py:462
 msgid "_Quit..."
 msgstr "Afsluiten"
 
-#: tryton/gui/main.py:465
+#: tryton/gui/main.py:477
 msgid "_Preferences..."
 msgstr "_Voorkeuren..."
 
-#: tryton/gui/main.py:476
+#: tryton/gui/main.py:488
 #, fuzzy
 msgid "_Menu Reload"
 msgstr "He_rladen"
 
-#: tryton/gui/main.py:485
+#: tryton/gui/main.py:497
 msgid "_Menu Toggle"
 msgstr ""
 
-#: tryton/gui/main.py:492
+#: tryton/gui/main.py:504
 msgid "_Global Search"
 msgstr ""
 
-#: tryton/gui/main.py:507
+#: tryton/gui/main.py:519
 msgid "_Toolbar"
 msgstr "_Werkbalk"
 
-#: tryton/gui/main.py:515
+#: tryton/gui/main.py:527
 msgid "_Default"
 msgstr "_Standaard"
 
-#: tryton/gui/main.py:525
+#: tryton/gui/main.py:537
 msgid "_Text and Icons"
 msgstr "_Tekst en pictogrammen"
 
-#: tryton/gui/main.py:535
+#: tryton/gui/main.py:547
 msgid "_Icons"
 msgstr "Pictogrammen..."
 
-#: tryton/gui/main.py:544
+#: tryton/gui/main.py:556
 msgid "_Text"
 msgstr "_Tekst"
 
-#: tryton/gui/main.py:553
+#: tryton/gui/main.py:565
 msgid "_Menubar"
 msgstr "_Menubalk"
 
-#: tryton/gui/main.py:561
+#: tryton/gui/main.py:573
 msgid "Change Accelerators"
 msgstr "Versnellers aanpassen"
 
-#: tryton/gui/main.py:569
+#: tryton/gui/main.py:581
 msgid "_Mode"
 msgstr "_Modus"
 
-#: tryton/gui/main.py:577
+#: tryton/gui/main.py:589
 msgid "_Normal"
 msgstr "_Normaal"
 
-#: tryton/gui/main.py:585
+#: tryton/gui/main.py:597
 msgid "_PDA"
 msgstr "_PDA"
 
-#: tryton/gui/main.py:592
+#: tryton/gui/main.py:604
 msgid "_Form"
 msgstr "Formulier"
 
-#: tryton/gui/main.py:601
+#: tryton/gui/main.py:613
 msgid "Save Width/Height"
 msgstr "Bewaar breedte/hoogte"
 
-#: tryton/gui/main.py:612
+#: tryton/gui/main.py:624
 msgid "Save Tree State"
 msgstr ""
 
-#: tryton/gui/main.py:624
+#: tryton/gui/main.py:636
 msgid "Spell Checking"
 msgstr "Spellingscontrole uitvoeren"
 
-#: tryton/gui/main.py:634
+#: tryton/gui/main.py:646
 msgid "Tabs Position"
 msgstr "Positie tabbladeren"
 
-#: tryton/gui/main.py:642
+#: tryton/gui/main.py:654
 msgid "Top"
 msgstr "Bovenkant"
 
-#: tryton/gui/main.py:651
+#: tryton/gui/main.py:663
 msgid "Left"
 msgstr "Links"
 
-#: tryton/gui/main.py:661
+#: tryton/gui/main.py:673
 msgid "Right"
 msgstr "Rechts"
 
-#: tryton/gui/main.py:671
+#: tryton/gui/main.py:683
 msgid "Bottom"
 msgstr "Onderkant"
 
-#: tryton/gui/main.py:680
+#: tryton/gui/main.py:692
 #, fuzzy
 msgid "_Previous Tab"
 msgstr "V_orige"
 
-#: tryton/gui/main.py:686
+#: tryton/gui/main.py:698
 msgid "_Next Tab"
 msgstr ""
 
-#: tryton/gui/main.py:692
+#: tryton/gui/main.py:704
 msgid "Search Limit..."
 msgstr "Zoek limiet..."
 
-#: tryton/gui/main.py:698
+#: tryton/gui/main.py:710
 msgid "_Email..."
 msgstr "E-mail"
 
-#: tryton/gui/main.py:706
+#: tryton/gui/main.py:718
 msgid "_Save Options"
 msgstr "_Sla opties op"
 
-#: tryton/gui/main.py:718
+#: tryton/gui/main.py:730
 msgid "_Tips..."
 msgstr "_Tips..."
 
-#: tryton/gui/main.py:727
+#: tryton/gui/main.py:739
 msgid "_Keyboard Shortcuts..."
 msgstr "Sneltoetsen"
 
-#: tryton/gui/main.py:736
+#: tryton/gui/main.py:748
 msgid "_About..."
 msgstr "I_nfo..."
 
-#: tryton/gui/main.py:787
+#: tryton/gui/main.py:799
 msgid "Manage Favorites"
 msgstr ""
 
-#: tryton/gui/main.py:935
+#: tryton/gui/main.py:942
 msgid ""
 "The following action requires to close all tabs.\n"
 "Do you want to continue?"
 msgstr ""
 
-#: tryton/gui/main.py:1196
+#: tryton/gui/main.py:1206
 msgid "Close Tab"
 msgstr "Tabblad sluiten"
 
-#: tryton/gui/main.py:1314
+#: tryton/gui/main.py:1327
 msgid ""
 "You are going to delete a Tryton database.\n"
 "Are you really sure to proceed?"
@@ -541,7 +546,7 @@ msgstr ""
 "U gaat een Tryton database verwijderen.\n"
 "Weet u zeker dat u door wil gaan?"
 
-#: tryton/gui/main.py:1324
+#: tryton/gui/main.py:1337
 msgid ""
 "Wrong Tryton Server Password\n"
 "Please try again."
@@ -549,28 +554,28 @@ msgstr ""
 "Verkeerde wachtwoord voor de Tryton server\n"
 "Probeer het opnieuw."
 
-#: tryton/gui/main.py:1326 tryton/gui/main.py:1362 tryton/gui/main.py:1398
-#: tryton/gui/window/dbcreate.py:382
+#: tryton/gui/main.py:1339 tryton/gui/main.py:1375 tryton/gui/main.py:1411
+#: tryton/gui/window/dbcreate.py:384
 msgid "Access denied!"
 msgstr "Geen toegang!"
 
-#: tryton/gui/main.py:1329
+#: tryton/gui/main.py:1342
 msgid "Database drop failed with error message:\n"
 msgstr "Verwijderen database is mislukt met foutmelding:\n"
 
-#: tryton/gui/main.py:1330
+#: tryton/gui/main.py:1343
 msgid "Database drop failed!"
 msgstr "Database kan niet worden verwijderd."
 
-#: tryton/gui/main.py:1332
+#: tryton/gui/main.py:1345
 msgid "Database dropped successfully!"
 msgstr "Database succesvol verwijderd!"
 
-#: tryton/gui/main.py:1337
+#: tryton/gui/main.py:1350
 msgid "Open Backup File to Restore..."
 msgstr "Open reservekopie om te herstellen..."
 
-#: tryton/gui/main.py:1354
+#: tryton/gui/main.py:1367
 msgid ""
 "It is not possible to restore a password protected database.\n"
 "Backup and restore needed to be proceed manual."
@@ -578,11 +583,11 @@ msgstr ""
 "Een met een wachtwoord beveiligde database kan niet terug gezet worden.\n"
 "Voer deze handeling handmatig uit."
 
-#: tryton/gui/main.py:1358 tryton/gui/main.py:1394
+#: tryton/gui/main.py:1371 tryton/gui/main.py:1407
 msgid "Database is password protected!"
 msgstr "Database beveiligd met een wachtwoord!"
 
-#: tryton/gui/main.py:1360 tryton/gui/main.py:1396
+#: tryton/gui/main.py:1373 tryton/gui/main.py:1409
 msgid ""
 "Wrong Tryton Server Password.\n"
 "Please try again."
@@ -590,19 +595,19 @@ msgstr ""
 "Verkeerde wachtwoord voor de Tryton server\n"
 "Probeer het opnieuw."
 
-#: tryton/gui/main.py:1365
+#: tryton/gui/main.py:1378
 msgid "Database restore failed with error message:\n"
 msgstr "Herstellen database is mislukt met foutmelding:\n"
 
-#: tryton/gui/main.py:1367 tryton/gui/main.py:1372
+#: tryton/gui/main.py:1380 tryton/gui/main.py:1385
 msgid "Database restore failed!"
 msgstr "Database terugzetten mislukt!"
 
-#: tryton/gui/main.py:1370
+#: tryton/gui/main.py:1383
 msgid "Database restored successfully!"
 msgstr "Database succesvol teruggezet!"
 
-#: tryton/gui/main.py:1391
+#: tryton/gui/main.py:1404
 msgid ""
 "It is not possible to dump a password protected Database.\n"
 "Backup and restore needed to be proceed manual."
@@ -610,75 +615,75 @@ msgstr ""
 "Een met een wachtwoord beveiligde database kan niet verwijderd worden.\n"
 "Voer deze handeling handmatig uit."
 
-#: tryton/gui/main.py:1401
+#: tryton/gui/main.py:1414
 msgid "Database dump failed with error message:\n"
 msgstr "Verwijderen database is mislukt met foutmelding:\n"
 
-#: tryton/gui/main.py:1403
+#: tryton/gui/main.py:1416
 msgid "Database dump failed!"
 msgstr "Database verwijderen mislukt!"
 
-#: tryton/gui/main.py:1414
+#: tryton/gui/main.py:1427
 msgid "Database backuped successfully!"
 msgstr "Reservekopie van database gemaakt!"
 
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
 msgid "New"
 msgstr ""
 
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
 msgid "Create a new record"
 msgstr "Maak een nieuw item"
 
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
 #: tryton/gui/window/win_export.py:142
 msgid "Save"
 msgstr "Opslaan"
 
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
 msgid "Save this record"
 msgstr "Bewaar dit item"
 
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
-#: tryton/gui/window/win_form.py:228
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
+#: tryton/gui/window/win_form.py:232
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:154
 msgid "Switch"
 msgstr "Omschakelen"
 
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
 msgid "Switch view"
 msgstr "Wijzig beeld"
 
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
 msgid "_Reload"
 msgstr "He_rladen"
 
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
 msgid "Reload"
 msgstr "Herladen"
 
-#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:48
+#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:50
 msgid "_New"
 msgstr "_Nieuw"
 
-#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:49
-#: tryton/gui/window/win_form.py:66
+#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:51
+#: tryton/gui/window/win_form.py:67
 msgid "_Save"
 msgstr "Op_slaan"
 
-#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:50
+#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:52
 msgid "_Switch View"
 msgstr "Wijzig beeld"
 
-#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:52
+#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:54
 msgid "_Reload/Undo"
 msgstr "_Ongedaan maken"
 
-#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:56
+#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:58
 msgid "_Delete..."
 msgstr "Verwijderen... "
 
-#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:65
+#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:68
 msgid "_Close Tab"
 msgstr "Tabblad sluiten"
 
@@ -715,28 +720,28 @@ msgstr ""
 "geblokkeerd worden.\n"
 "Klik op 'Wijzig' om het adres aan te passen."
 
-#: tryton/gui/window/dbcreate.py:137
+#: tryton/gui/window/dbcreate.py:139
 msgid "Create new database"
 msgstr "Maak een nieuwe Database."
 
-#: tryton/gui/window/dbcreate.py:147
+#: tryton/gui/window/dbcreate.py:149
 msgid "C_reate"
 msgstr "Aan_maken"
 
-#: tryton/gui/window/dbcreate.py:155
+#: tryton/gui/window/dbcreate.py:157
 msgid "Create the new database."
 msgstr "Maak de nieuwe Database."
 
-#: tryton/gui/window/dbcreate.py:166
+#: tryton/gui/window/dbcreate.py:168
 msgid "Server Setup:"
 msgstr "Server instelling:"
 
-#: tryton/gui/window/dbcreate.py:171
+#: tryton/gui/window/dbcreate.py:173
 msgid "Server connection:"
 msgstr "Server verbinding:"
 
-#: tryton/gui/window/dbcreate.py:180 tryton/gui/window/dbdumpdrop.py:140
-#: tryton/gui/window/dbrestore.py:86
+#: tryton/gui/window/dbcreate.py:182 tryton/gui/window/dbdumpdrop.py:140
+#: tryton/gui/window/dbrestore.py:88
 #, fuzzy
 msgid ""
 "This is the URL of the server. Use server 'localhost' and port '8000' if "
@@ -747,22 +752,22 @@ msgstr ""
 "als de server op deze computer is geïnstalleerd. Klik op 'Wijzig' om het "
 "adres aan te passen."
 
-#: tryton/gui/window/dbcreate.py:183 tryton/gui/window/dbdumpdrop.py:147
-#: tryton/gui/window/dbrestore.py:91
+#: tryton/gui/window/dbcreate.py:185 tryton/gui/window/dbdumpdrop.py:147
+#: tryton/gui/window/dbrestore.py:93
 msgid "C_hange"
 msgstr "_Wijzigen"
 
-#: tryton/gui/window/dbcreate.py:192 tryton/gui/window/dbrestore.py:97
+#: tryton/gui/window/dbcreate.py:194 tryton/gui/window/dbrestore.py:99
 msgid "Setup the server connection..."
 msgstr "Verbinden met server..."
 
-#: tryton/gui/window/dbcreate.py:195 tryton/gui/window/dbdumpdrop.py:186
-#: tryton/gui/window/dbrestore.py:100
+#: tryton/gui/window/dbcreate.py:197 tryton/gui/window/dbdumpdrop.py:186
+#: tryton/gui/window/dbrestore.py:102
 msgid "Tryton Server Password:"
 msgstr "Wachtwoord Tryton server:"
 
-#: tryton/gui/window/dbcreate.py:205 tryton/gui/window/dbdumpdrop.py:196
-#: tryton/gui/window/dbrestore.py:109
+#: tryton/gui/window/dbcreate.py:207 tryton/gui/window/dbdumpdrop.py:196
+#: tryton/gui/window/dbrestore.py:111
 msgid ""
 "This is the password of the Tryton server. It doesn't belong to a real "
 "user. This password is usually defined in the trytond configuration."
@@ -771,15 +776,15 @@ msgstr ""
 "van een gebruiker. Dit wachtwoord is doorgaans gedefinieerd in de trytond"
 " configuratie."
 
-#: tryton/gui/window/dbcreate.py:216
+#: tryton/gui/window/dbcreate.py:218
 msgid "New database setup:"
 msgstr "Maak een nieuwe database:"
 
-#: tryton/gui/window/dbcreate.py:222
+#: tryton/gui/window/dbcreate.py:224
 msgid "Database name:"
 msgstr "Naam database:"
 
-#: tryton/gui/window/dbcreate.py:234
+#: tryton/gui/window/dbcreate.py:236
 msgid ""
 "Choose the name of the new database.\n"
 "Allowed characters are alphanumerical or _ (underscore)\n"
@@ -790,11 +795,11 @@ msgstr ""
 "Toegestane tekens zijn alfa-numeriek of _ (underscore).\n"
 "Vermijd alle accenten, spaties en speciale tekens! Voorbeeld: tryton."
 
-#: tryton/gui/window/dbcreate.py:241
+#: tryton/gui/window/dbcreate.py:243
 msgid "Default language:"
 msgstr "Standaardtaal:"
 
-#: tryton/gui/window/dbcreate.py:251
+#: tryton/gui/window/dbcreate.py:253
 msgid ""
 "Choose the default language that will be installed for this database. You"
 " will be able to install new languages after installation through the "
@@ -803,11 +808,11 @@ msgstr ""
 "Kies de standaardtaal welke geïnstalleerd wordt voor deze database. Het "
 "is mogelijk de taal te wijzigen na installatie in het Systeembeheer menu."
 
-#: tryton/gui/window/dbcreate.py:255
+#: tryton/gui/window/dbcreate.py:257
 msgid "Admin password:"
 msgstr "Admin wachtwoord:"
 
-#: tryton/gui/window/dbcreate.py:265
+#: tryton/gui/window/dbcreate.py:267
 msgid ""
 "Choose a password for the admin user of the new database. With these "
 "credentials you will be later able to login into the database:\n"
@@ -819,15 +824,15 @@ msgstr ""
 "Gebruikersnaam: admin\n"
 "Wachtwoord: <het wachtwoord dat je hier ingeeft>"
 
-#: tryton/gui/window/dbcreate.py:273
+#: tryton/gui/window/dbcreate.py:275
 msgid "Confirm admin password:"
 msgstr "Bevestig admin wachtwoord:"
 
-#: tryton/gui/window/dbcreate.py:282
+#: tryton/gui/window/dbcreate.py:284
 msgid "Type the Admin password again"
 msgstr "Admin wachtwoord opnieuw invoeren"
 
-#: tryton/gui/window/dbcreate.py:330
+#: tryton/gui/window/dbcreate.py:332
 msgid ""
 "The database name is restricted to alpha-nummerical characters and \"_\" "
 "(underscore). Avoid all accents, space and any other special characters."
@@ -836,29 +841,29 @@ msgstr ""
 "(underscore). Vermijd alle accenten, spaties en andere bijzondere "
 "karakters."
 
-#: tryton/gui/window/dbcreate.py:335
+#: tryton/gui/window/dbcreate.py:337
 msgid "Wrong characters in database name!"
 msgstr "Ongeldige tekens in database naam!"
 
-#: tryton/gui/window/dbcreate.py:339
+#: tryton/gui/window/dbcreate.py:341
 msgid "The new admin password doesn't match the confirmation field.\n"
 msgstr "Het nieuwe wachtwoord voor admin komt niet overeen met de bevestiging.\n"
 
-#: tryton/gui/window/dbcreate.py:341
+#: tryton/gui/window/dbcreate.py:343
 msgid "Passwords doesn't match!"
 msgstr "Wachtwoorden komen niet overeen!"
 
-#: tryton/gui/window/dbcreate.py:344
+#: tryton/gui/window/dbcreate.py:346
 msgid "Admin password and confirmation are required to create a new database."
 msgstr ""
 "Admin wachtwoord en bevestiging zijn nodig om een nieuwe database te "
 "maken."
 
-#: tryton/gui/window/dbcreate.py:346
+#: tryton/gui/window/dbcreate.py:348
 msgid "Missing admin password!"
 msgstr "Wachtwoord admin ontbreekt!"
 
-#: tryton/gui/window/dbcreate.py:361
+#: tryton/gui/window/dbcreate.py:363
 msgid ""
 "A database with the same name already exists.\n"
 "Try another database name."
@@ -866,15 +871,15 @@ msgstr ""
 "Een database met deze naam bestaat al.\n"
 "Probeer een andere database naam. "
 
-#: tryton/gui/window/dbcreate.py:364
+#: tryton/gui/window/dbcreate.py:366
 msgid "This database name already exist!"
 msgstr "Deze database bestaat al!"
 
-#: tryton/gui/window/dbcreate.py:379
+#: tryton/gui/window/dbcreate.py:381
 msgid "Sorry, wrong password for the Tryton server. Please try again."
 msgstr "Sorry, verkeerde wachtwoord voor de Tryton server. Probeer het opnieuw. "
 
-#: tryton/gui/window/dbcreate.py:387
+#: tryton/gui/window/dbcreate.py:389
 msgid ""
 "Can't create the database, caused by an unknown reason.\n"
 "If there is a database created, it could be broken. Maybe drop this "
@@ -887,7 +892,7 @@ msgstr ""
 "informatie.\n"
 "Foutmelding:\n"
 
-#: tryton/gui/window/dbcreate.py:395
+#: tryton/gui/window/dbcreate.py:397
 msgid "Error creating database!"
 msgstr "Database maken mislukt!"
 
@@ -937,7 +942,7 @@ msgstr "Verwijder de gekozen database."
 msgid "Choose a Tryton database to delete:"
 msgstr "Kies een Tryton database om te verwijderen:"
 
-#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:75
+#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:77
 msgid "Server Connection:"
 msgstr "Verbinding met server:"
 
@@ -1035,15 +1040,15 @@ msgstr "Poort:"
 msgid "User name:"
 msgstr "Gebruikersnaam:"
 
-#: tryton/gui/window/dbrestore.py:64
+#: tryton/gui/window/dbrestore.py:66
 msgid "Restore Database"
 msgstr "Database terug zetten"
 
-#: tryton/gui/window/dbrestore.py:117
+#: tryton/gui/window/dbrestore.py:119
 msgid "File to Restore:"
 msgstr "Terug te zetten bestand:"
 
-#: tryton/gui/window/dbrestore.py:131
+#: tryton/gui/window/dbrestore.py:133
 msgid ""
 "Choose the name of the database to be restored.\n"
 "Allowed characters are alphanumerical or _ (underscore)\n"
@@ -1055,15 +1060,15 @@ msgstr ""
 "Vermijd alle accenten, spaties en speciale tekens!\n"
 "Voorbeeld: tryton "
 
-#: tryton/gui/window/dbrestore.py:137
+#: tryton/gui/window/dbrestore.py:139
 msgid "New Database Name:"
 msgstr "Naam nieuwe database:"
 
-#: tryton/gui/window/dbrestore.py:140
+#: tryton/gui/window/dbrestore.py:142
 msgid "Update Database:"
 msgstr "Database bijwerken:"
 
-#: tryton/gui/window/dbrestore.py:144
+#: tryton/gui/window/dbrestore.py:146
 msgid ""
 "Check for an automatic database update after restoring a database from a "
 "previous Tryton version."
@@ -1071,11 +1076,11 @@ msgstr ""
 "Inschakelen voor het automatisch bijwerken van de database uit een vorige"
 " Tryton versie."
 
-#: tryton/gui/window/dbrestore.py:154
+#: tryton/gui/window/dbrestore.py:156
 msgid "Restore"
 msgstr "Herstellen"
 
-#: tryton/gui/window/dbrestore.py:163
+#: tryton/gui/window/dbrestore.py:165
 msgid "Restore the database from file."
 msgstr "Herstel database uit bestand."
 
@@ -1115,159 +1120,163 @@ msgstr "Bericht:"
 msgid "Attachment:"
 msgstr "Bijlage:"
 
-#: tryton/gui/window/form.py:39 tryton/gui/window/tips.py:74
-#: tryton/gui/window/win_form.py:201
-#: tryton/gui/window/view_form/view/screen_container.py:165
+#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:74
+#: tryton/gui/window/win_form.py:205
+#: tryton/gui/window/view_form/view/screen_container.py:163
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:128
 msgid "Previous"
 msgstr "Vorige"
 
-#: tryton/gui/window/form.py:40
+#: tryton/gui/window/form.py:42
 msgid "Previous Record"
 msgstr "Vorige item"
 
-#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:81
-#: tryton/gui/window/win_form.py:215
-#: tryton/gui/window/view_form/view/screen_container.py:177
+#: tryton/gui/window/form.py:43 tryton/gui/window/tips.py:81
+#: tryton/gui/window/win_form.py:219
+#: tryton/gui/window/view_form/view/screen_container.py:175
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:142
 msgid "Next"
 msgstr "Volgende"
 
-#: tryton/gui/window/form.py:41
+#: tryton/gui/window/form.py:43
 msgid "Next Record"
 msgstr "Volgende item"
 
-#: tryton/gui/window/form.py:44
+#: tryton/gui/window/form.py:46
 msgid "Attachment(0)"
 msgstr "Bijlage"
 
-#: tryton/gui/window/form.py:45
+#: tryton/gui/window/form.py:47
 msgid "Add an attachment to the record"
 msgstr "Voeg een bijlage aan dit item toe"
 
-#: tryton/gui/window/form.py:54
+#: tryton/gui/window/form.py:56
 msgid "_Duplicate"
 msgstr "_Dupliceren"
 
-#: tryton/gui/window/form.py:59
+#: tryton/gui/window/form.py:61
 msgid "_Previous"
 msgstr "V_orige"
 
-#: tryton/gui/window/form.py:61
+#: tryton/gui/window/form.py:63
 msgid "_Next"
 msgstr "_Volgende"
 
-#: tryton/gui/window/form.py:62
+#: tryton/gui/window/form.py:64
 #, fuzzy
 msgid "_Search"
 msgstr "Zoeken"
 
-#: tryton/gui/window/form.py:63
+#: tryton/gui/window/form.py:65
 msgid "View _Logs..."
 msgstr "Bekijk logregister"
 
-#: tryton/gui/window/form.py:68
+#: tryton/gui/window/form.py:66
+msgid "Show revisions..."
+msgstr ""
+
+#: tryton/gui/window/form.py:71
 #, fuzzy
 msgid "A_ttachments..."
 msgstr "Bijlage:"
 
-#: tryton/gui/window/form.py:70
+#: tryton/gui/window/form.py:73
 msgid "_Actions..."
 msgstr "_Acties.."
 
-#: tryton/gui/window/form.py:72
+#: tryton/gui/window/form.py:75
 #, fuzzy
 msgid "_Relate..."
 msgstr "Verwijderen... "
 
-#: tryton/gui/window/form.py:75
+#: tryton/gui/window/form.py:78
 #, fuzzy
 msgid "_Report..."
 msgstr "_Importeer gegevens... "
 
-#: tryton/gui/window/form.py:77
+#: tryton/gui/window/form.py:80
 #, fuzzy
 msgid "_E-Mail..."
 msgstr "E-mail"
 
-#: tryton/gui/window/form.py:79
+#: tryton/gui/window/form.py:82
 msgid "_Print..."
 msgstr "Afdrukken"
 
-#: tryton/gui/window/form.py:82
+#: tryton/gui/window/form.py:85
 msgid "_Export Data..."
 msgstr "_Exporteer gegevens... "
 
-#: tryton/gui/window/form.py:84
+#: tryton/gui/window/form.py:87
 msgid "_Import Data..."
 msgstr "_Importeer gegevens... "
 
-#: tryton/gui/window/form.py:219
+#: tryton/gui/window/form.py:216
 #, python-format
 msgid "Attachment(%d)"
 msgstr "Bijlage (%d)"
 
-#: tryton/gui/window/form.py:237
+#: tryton/gui/window/form.py:234
 msgid "You have to select one record!"
 msgstr "Je moet één item selecteren!"
 
-#: tryton/gui/window/form.py:241
+#: tryton/gui/window/form.py:238
 msgid "ID:"
 msgstr "ID:"
 
-#: tryton/gui/window/form.py:242
+#: tryton/gui/window/form.py:239
 msgid "Creation User:"
 msgstr "Aangemaakt door:"
 
-#: tryton/gui/window/form.py:243
+#: tryton/gui/window/form.py:240
 msgid "Creation Date:"
 msgstr "Aanmaakdatum"
 
-#: tryton/gui/window/form.py:244
+#: tryton/gui/window/form.py:241
 msgid "Latest Modification by:"
 msgstr "Laatste wijziging door:"
 
-#: tryton/gui/window/form.py:245
+#: tryton/gui/window/form.py:242
 msgid "Latest Modification Date:"
 msgstr "Laatste wijzigingsdatum:"
 
-#: tryton/gui/window/form.py:263
+#: tryton/gui/window/form.py:260
 msgid "Model:"
 msgstr "Model:"
 
-#: tryton/gui/window/form.py:271
+#: tryton/gui/window/form.py:304
 msgid "Are you sure to remove this record?"
 msgstr "Weet je zeker dat je dit item wilt verwijderen?"
 
-#: tryton/gui/window/form.py:273
+#: tryton/gui/window/form.py:306
 msgid "Are you sure to remove those records?"
 msgstr "Weet je zeker dat je deze items wilt verwijderen?"
 
-#: tryton/gui/window/form.py:276
+#: tryton/gui/window/form.py:309
 msgid "Records not removed!"
 msgstr "Items niet verwijderd!"
 
-#: tryton/gui/window/form.py:278
+#: tryton/gui/window/form.py:311
 msgid "Records removed!"
 msgstr "Items verwijderd!"
 
-#: tryton/gui/window/form.py:318
+#: tryton/gui/window/form.py:345
 msgid "Working now on the duplicated record(s)!"
 msgstr "Je werkt nu met het gekopieerde item!"
 
-#: tryton/gui/window/form.py:325
+#: tryton/gui/window/form.py:352
 msgid "Record saved!"
 msgstr "Item opgeslagen!"
 
-#: tryton/gui/window/form.py:328
+#: tryton/gui/window/form.py:355
 msgid "Invalid form!"
 msgstr "Ongeldige invoer in formulier!"
 
-#: tryton/gui/window/form.py:436
+#: tryton/gui/window/form.py:462
 msgid " of "
 msgstr " van "
 
-#: tryton/gui/window/form.py:457
+#: tryton/gui/window/form.py:483
 msgid ""
 "This record has been modified\n"
 "do you want to save it ?"
@@ -1275,51 +1284,57 @@ msgstr ""
 "Item is aangepast.\n"
 "Wil je de wijzigingen opslaan?"
 
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
 msgid "Action"
 msgstr "Actie"
 
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
 msgid "Launch action"
 msgstr ""
 
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
 #, fuzzy
 msgid "Relate"
 msgstr "Aan_maken"
 
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
 #, fuzzy
 msgid "Open related records"
 msgstr "Item openen"
 
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
 #, fuzzy
 msgid "Report"
 msgstr "Rapporten"
 
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
 #, fuzzy
 msgid "Open report"
 msgstr "Item openen"
 
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
 #, fuzzy
 msgid "E-Mail"
 msgstr "E-mail"
 
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
 msgid "E-Mail report"
 msgstr ""
 
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
 msgid "Print"
 msgstr "Afdrukken"
 
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
 msgid "Print report"
 msgstr ""
 
+#: tryton/gui/window/form.py:607
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:257
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:1050
+msgid "Unknown"
+msgstr "Onbekend"
+
 #: tryton/gui/window/limit.py:17
 msgid "Limit"
 msgstr "Limiet:"
@@ -1348,6 +1363,20 @@ msgstr "Voorkeur"
 msgid "Current Password:"
 msgstr "Huidig Wachtwoord:"
 
+#: tryton/gui/window/revision.py:20
+#, fuzzy
+msgid "Revision"
+msgstr "Vorige"
+
+#: tryton/gui/window/revision.py:29
+#, fuzzy
+msgid "Select a revision"
+msgstr "Selectie"
+
+#: tryton/gui/window/revision.py:32
+msgid "Revision:"
+msgstr ""
+
 #: tryton/gui/window/shortcuts.py:17
 msgid "Keyboard Shortcuts"
 msgstr "Sneltoetsen"
@@ -1533,21 +1562,21 @@ msgstr "Voeg veldnamen toe"
 msgid "Name"
 msgstr "Naam"
 
-#: tryton/gui/window/win_export.py:306
+#: tryton/gui/window/win_export.py:309
 msgid "What is the name of this export?"
 msgstr "Wat is de naam voor deze export?"
 
-#: tryton/gui/window/win_export.py:429
+#: tryton/gui/window/win_export.py:436
 #, python-format
 msgid "%d record saved!"
 msgstr "%d item opgeslagen!"
 
-#: tryton/gui/window/win_export.py:431
+#: tryton/gui/window/win_export.py:438
 #, python-format
 msgid "%d records saved!"
 msgstr "%d items opgeslagen!"
 
-#: tryton/gui/window/win_export.py:434
+#: tryton/gui/window/win_export.py:441
 #, python-format
 msgid ""
 "Operation failed!\n"
@@ -1562,28 +1591,28 @@ msgstr ""
 msgid "Link"
 msgstr "Koppeling"
 
-#: tryton/gui/window/win_form.py:134
+#: tryton/gui/window/win_form.py:136
 msgid "Add"
 msgstr "Toevoegen"
 
-#: tryton/gui/window/win_form.py:147
+#: tryton/gui/window/win_form.py:149
 msgid "Remove <Del>"
 msgstr ""
 
-#: tryton/gui/window/win_form.py:162
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:73
+#: tryton/gui/window/win_form.py:164
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:75
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:86
 #, fuzzy
 msgid "Create a new record <F3>"
 msgstr "Maak een nieuw item"
 
-#: tryton/gui/window/win_form.py:174
+#: tryton/gui/window/win_form.py:176
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:106
 #, fuzzy
 msgid "Delete selected record <Del>"
 msgstr "Geselecteerd item verwijderen"
 
-#: tryton/gui/window/win_form.py:188
+#: tryton/gui/window/win_form.py:190
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:116
 #, fuzzy
 msgid "Undelete selected record <Ins>"
@@ -1607,10 +1636,10 @@ msgstr "Bestand om te importeren:"
 
 #: tryton/gui/window/win_import.py:111
 #: tryton/gui/window/view_form/view/form_gtk/binary.py:57
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:111
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:118
 #: tryton/gui/window/view_form/view/form_gtk/image.py:62
 #: tryton/gui/window/view_form/view/form_gtk/image.py:131
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:624
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:650
 msgid "Open..."
 msgstr "Openen..."
 
@@ -1635,19 +1664,19 @@ msgstr "Codering:"
 msgid "Lines to Skip:"
 msgstr "Regels overslaan:"
 
-#: tryton/gui/window/win_import.py:184 tryton/gui/window/win_import.py:189
+#: tryton/gui/window/win_import.py:185 tryton/gui/window/win_import.py:190
 msgid "Field name"
 msgstr "Veldnaam"
 
-#: tryton/gui/window/win_import.py:249
+#: tryton/gui/window/win_import.py:251
 msgid "You must select an import file first!"
 msgstr "U moet eerst een import bestand selecteren!"
 
-#: tryton/gui/window/win_import.py:260
+#: tryton/gui/window/win_import.py:262
 msgid "Error opening CSV file"
 msgstr "Fout bij openen CSV-bestand"
 
-#: tryton/gui/window/win_import.py:287
+#: tryton/gui/window/win_import.py:289
 #, fuzzy, python-format
 msgid "Error processing the file at field %s."
 msgstr "Fout bij inlezen van bestand bij veld%s"
@@ -1662,20 +1691,7 @@ msgstr "%d item geïmporteerd!"
 msgid "%d records imported!"
 msgstr "%d items geïmporteerd!"
 
-#: tryton/gui/window/win_import.py:371
-msgid "Importation Error!"
-msgstr "Fout bij importeren!"
-
-#: tryton/gui/window/win_import.py:372
-#, python-format
-msgid ""
-"Error importing record %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-msgstr ""
-
-#: tryton/gui/window/wizard.py:291
+#: tryton/gui/window/wizard.py:286
 msgid "Wizard"
 msgstr "Assistent"
 
@@ -1684,45 +1700,41 @@ msgstr "Assistent"
 msgid "No String Attr."
 msgstr "Lege opdracht"
 
-#: tryton/gui/window/view_form/screen/screen.py:135
+#: tryton/gui/window/view_form/screen/screen.py:129
 #, fuzzy
 msgid "ID"
 msgstr " d"
 
-#: tryton/gui/window/view_form/screen/screen.py:136
+#: tryton/gui/window/view_form/screen/screen.py:130
 #, fuzzy
 msgid "Creation User"
 msgstr "Aangemaakt door:"
 
-#: tryton/gui/window/view_form/screen/screen.py:137
+#: tryton/gui/window/view_form/screen/screen.py:131
 #, fuzzy
 msgid "Creation Date"
 msgstr "Aanmaakdatum"
 
-#: tryton/gui/window/view_form/screen/screen.py:138
+#: tryton/gui/window/view_form/screen/screen.py:132
 #, fuzzy
 msgid "Modification User"
 msgstr "Laatste wijzigingsdatum:"
 
-#: tryton/gui/window/view_form/screen/screen.py:139
+#: tryton/gui/window/view_form/screen/screen.py:133
 #, fuzzy
 msgid "Modification Date"
 msgstr "Laatste wijzigingsdatum:"
 
-#: tryton/gui/window/view_form/screen/screen.py:634
+#: tryton/gui/window/view_form/screen/screen.py:631
 msgid "Unable to get view tree state"
 msgstr ""
 
-#: tryton/gui/window/view_form/screen/screen.py:671
-#, fuzzy, python-format
+#: tryton/gui/window/view_form/screen/screen.py:668
+#, fuzzy
 msgid "Unable to set view tree state"
 msgstr "Kan omgeving %s niet instellen"
 
-#: tryton/gui/window/view_form/view/list.py:651
-msgid "You must select a record to use the relation!"
-msgstr "Eerst een regel selecteren voordat deze optie gebruikt kan worden!"
-
-#: tryton/gui/window/view_form/view/screen_container.py:25
+#: tryton/gui/window/view_form/view/screen_container.py:23
 msgid ".."
 msgstr ""
 
@@ -1731,19 +1743,19 @@ msgstr ""
 msgid "F_ilters"
 msgstr "_Bestand"
 
-#: tryton/gui/window/view_form/view/screen_container.py:149
+#: tryton/gui/window/view_form/view/screen_container.py:147
 msgid "Show bookmarks of filters"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/screen_container.py:314
+#: tryton/gui/window/view_form/view/screen_container.py:312
 msgid "Remove this bookmark"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/screen_container.py:321
+#: tryton/gui/window/view_form/view/screen_container.py:319
 msgid "Bookmark this filter"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/screen_container.py:380
+#: tryton/gui/window/view_form/view/screen_container.py:384
 msgid "Bookmark Name:"
 msgstr ""
 
@@ -1775,24 +1787,24 @@ msgstr ""
 msgid "Select a File..."
 msgstr "Kies een bestand"
 
-#: tryton/gui/window/view_form/view/form_gtk/char.py:157
+#: tryton/gui/window/view_form/view/form_gtk/char.py:161
 msgid "Show plain text"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:349
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:348
 msgid "Add value"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:459
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:461
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:199
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:201
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:458
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:460
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:202
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:204
 #: tryton/gui/window/view_form/view/form_gtk/parser.py:255
 #: tryton/gui/window/view_form/view/form_gtk/parser.py:259
 msgid ":"
 msgstr ":"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:471
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:470
 #, python-format
 msgid "Remove \"%s\""
 msgstr ""
@@ -1810,24 +1822,24 @@ msgstr "Alle bestanden"
 msgid "Images"
 msgstr "Afbeeldingen"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:175
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:178
 #, fuzzy
 msgid "Translation"
 msgstr "Voeg vertaling toe"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:231
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:234
 msgid "Edit"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:236
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:239
 msgid "Fuzzy"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:305
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:308
 msgid "You need to save the record before adding translations!"
 msgstr "Gegevens eerst opslaan voordat u een vertaling toevoegt! "
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:316
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:319
 msgid "No other language available!"
 msgstr "Geen andere taal beschikbaar!"
 
@@ -1842,13 +1854,13 @@ msgstr "Bewaar dit item"
 msgid "Remove selected record <Del>"
 msgstr "Geselecteerd item verwijderen"
 
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:74
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:351
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:76
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:356
 #, fuzzy
 msgid "Open a record <F2>"
 msgstr "Item openen"
 
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:354
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:359
 #, fuzzy
 msgid "Search a record <F2>"
 msgstr "Item zoeken"
@@ -1943,15 +1955,10 @@ msgstr "PNG afbeelding (*.png)"
 msgid "Image size too large!"
 msgstr "Afbeelding te groot!"
 
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:245
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:244
 msgid ": "
 msgstr ":"
 
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:258
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:1023
-msgid "Unknown"
-msgstr "Onbekend"
-
 #: tryton/plugins/translation/__init__.py:18
 msgid "Translate view"
 msgstr "Vertaal aanzicht"
diff --git a/share/locale/ru_RU/LC_MESSAGES/tryton.mo b/share/locale/ru_RU/LC_MESSAGES/tryton.mo
index f8d6f02..528c04b 100644
Binary files a/share/locale/ru_RU/LC_MESSAGES/tryton.mo and b/share/locale/ru_RU/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/ru_RU/LC_MESSAGES/tryton.po b/share/locale/ru_RU/LC_MESSAGES/tryton.po
index 95e19e6..42f18b1 100644
--- a/share/locale/ru_RU/LC_MESSAGES/tryton.po
+++ b/share/locale/ru_RU/LC_MESSAGES/tryton.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: tryton 1.3.0\n"
 "Report-Msgid-Bugs-To: issue_tracker at tryton.org\n"
-"POT-Creation-Date: 2013-10-20 16:34+0200\n"
+"POT-Creation-Date: 2014-04-18 22:49+0200\n"
 "PO-Revision-Date: 2013-04-12 23:16+0500\n"
 "Last-Translator: Ilya Melnikov <rayanayar at mail.ru>\n"
 "Language-Team: ru_RU <k-dmitry2 at narod.ru>\n"
@@ -65,62 +65,62 @@ msgstr "Невозможно записать файл конфигурации
 msgid "Unable to set locale %s"
 msgstr "Не удается установить локализацию %s"
 
-#: tryton/action/main.py:163
+#: tryton/action/main.py:171
 msgid "Select your action"
 msgstr "Выберите действие"
 
-#: tryton/action/main.py:169
+#: tryton/action/main.py:177
 msgid "No action defined!"
 msgstr "Не определены действия!"
 
-#: tryton/common/common.py:270
+#: tryton/common/common.py:284
 msgid "Tryton Connection"
 msgstr "Tryton соединение"
 
-#: tryton/common/common.py:281
+#: tryton/common/common.py:295
 msgid "Server:"
 msgstr "Сервер:"
 
-#: tryton/common/common.py:299 tryton/gui/window/dblogin.py:79
+#: tryton/common/common.py:313 tryton/gui/window/dblogin.py:79
 msgid "Port:"
 msgstr "Порт:"
 
-#: tryton/common/common.py:369
+#: tryton/common/common.py:383
 msgid "Selection"
 msgstr "Выбор"
 
-#: tryton/common/common.py:378
+#: tryton/common/common.py:392
 msgid "Your selection:"
 msgstr "Ваш выбор:"
 
-#: tryton/common/common.py:498 tryton/gui/main.py:1407
-#: tryton/gui/window/win_export.py:402
+#: tryton/common/common.py:528 tryton/gui/main.py:1420
+#: tryton/gui/window/win_export.py:409
 #: tryton/gui/window/view_form/view/form_gtk/binary.py:69
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:138
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:150
 #: tryton/gui/window/view_form/view/form_gtk/image.py:74
-#: tryton/gui/window/view_form/view/form_gtk/image.py:158
+#: tryton/gui/window/view_form/view/form_gtk/image.py:161
 #: tryton/gui/window/view_form/view/graph_gtk/parser.py:105
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:656
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:686
 msgid "Save As..."
 msgstr "Сохранить как..."
 
-#: tryton/common/common.py:649
+#: tryton/common/common.py:675
 msgid "Always ignore this warning."
 msgstr "Всегда игнорировать это предупреждение."
 
-#: tryton/common/common.py:654
+#: tryton/common/common.py:680
 msgid "Do you want to proceed?"
 msgstr "Вы хотите продолжить?"
 
-#: tryton/common/common.py:673
+#: tryton/common/common.py:699
 msgid "Confirmation"
 msgstr "Подтвердите"
 
-#: tryton/common/common.py:779 tryton/common/common.py:1083
+#: tryton/common/common.py:805 tryton/common/common.py:1114
 msgid "Concurrency Exception"
 msgstr "Прерывание конкурентных записей"
 
-#: tryton/common/common.py:793
+#: tryton/common/common.py:819
 msgid ""
 "<b>Write Concurrency Warning:</b>\n"
 "\n"
@@ -138,50 +138,50 @@ msgstr ""
 "- \" Сравнить \", чтобы увидеть модифицированный вариант;\n"
 "- \" Переписать \", чтобы сохранить вашу текущую версию."
 
-#: tryton/common/common.py:802
+#: tryton/common/common.py:828
 msgid "Compare"
 msgstr "Сравнить"
 
-#: tryton/common/common.py:807
+#: tryton/common/common.py:833
 msgid "Write Anyway"
 msgstr "Записать все равно"
 
-#: tryton/common/common.py:833 tryton/gui/window/win_export.py:435
-#: tryton/gui/window/win_import.py:260 tryton/gui/window/win_import.py:288
+#: tryton/common/common.py:859 tryton/gui/window/win_export.py:442
+#: tryton/gui/window/win_import.py:262 tryton/gui/window/win_import.py:290
 msgid "Error"
 msgstr "Ошибка"
 
-#: tryton/common/common.py:837
+#: tryton/common/common.py:863
 msgid "Report Bug"
 msgstr "Сообщить об ошибке"
 
-#: tryton/common/common.py:844
+#: tryton/common/common.py:870
 msgid "Application Error!"
 msgstr "Ошибка приложения!"
 
-#: tryton/common/common.py:867
+#: tryton/common/common.py:893
 msgid "Error: "
 msgstr "Ошибка: "
 
-#: tryton/common/common.py:887
+#: tryton/common/common.py:913
 #, python-format
 msgid "To report bugs you must have an account on <u>%s</u>"
 msgstr "Вы можете отправить отчет об ошибке если вы зарегистрированны на <u>%s</u>"
 
-#: tryton/common/common.py:917
+#: tryton/common/common.py:943
 msgid "Bug Tracker"
 msgstr "Система сбора ошибок"
 
-#: tryton/common/common.py:935
+#: tryton/common/common.py:961
 msgid "User:"
 msgstr "Пользователь:"
 
-#: tryton/common/common.py:943 tryton/common/common.py:1101
+#: tryton/common/common.py:969 tryton/common/common.py:1132
 #: tryton/gui/window/dblogin.py:462
 msgid "Password:"
 msgstr "Пароль:"
 
-#: tryton/common/common.py:993
+#: tryton/common/common.py:1024
 msgid ""
 "The same bug was already reported by another user.\n"
 "To keep you informed your username is added to the nosy-list of this issue"
@@ -190,11 +190,11 @@ msgstr ""
 "Чтобы держать вас в курсе ваше имя пользователя будет добавлен в список "
 "перечень по этому вопросу"
 
-#: tryton/common/common.py:1004
+#: tryton/common/common.py:1035
 msgid "Created new bug with ID "
 msgstr "Создан новый отчет об ошибке с идентификатором"
 
-#: tryton/common/common.py:1012 tryton/gui/main.py:921
+#: tryton/common/common.py:1043 tryton/gui/main.py:928
 msgid ""
 "Connection error!\n"
 "Bad username or password!"
@@ -202,11 +202,11 @@ msgstr ""
 "Ошибка соединения!\n"
 "Неверное имя пользователя или пароль!"
 
-#: tryton/common/common.py:1017
+#: tryton/common/common.py:1048
 msgid "Exception:"
 msgstr "Исключительная ситуация:"
 
-#: tryton/common/common.py:1034
+#: tryton/common/common.py:1065
 msgid ""
 "The server fingerprint has changed since last connection!\n"
 "The application will stop connecting to this server until its fingerprint"
@@ -216,12 +216,12 @@ msgstr ""
 "Подключение к серверу приостановлено до тех пор пока сертификат не будет "
 "исправлен."
 
-#: tryton/common/common.py:1036
+#: tryton/common/common.py:1067
 msgid "Security risk!"
 msgstr "Угроза безопасности!"
 
-#: tryton/common/common.py:1042 tryton/common/common.py:1108
-#: tryton/gui/main.py:918
+#: tryton/common/common.py:1073 tryton/common/common.py:1139
+#: tryton/gui/main.py:925
 msgid ""
 "Connection error!\n"
 "Unable to connect to the server!"
@@ -229,39 +229,39 @@ msgstr ""
 "Ошибка соединения!\n"
 "Невозможно соединиться с сервером!"
 
-#: tryton/common/common.py:1123
+#: tryton/common/common.py:1154
 msgid "Network Error!"
 msgstr "Сетевая ошибка!"
 
-#: tryton/common/common.py:1354
+#: tryton/common/common.py:1409
 msgid "Y"
 msgstr "Г"
 
-#: tryton/common/common.py:1355
+#: tryton/common/common.py:1410
 msgid "M"
 msgstr "М"
 
-#: tryton/common/common.py:1356
+#: tryton/common/common.py:1411
 msgid "w"
 msgstr "н"
 
-#: tryton/common/common.py:1357
+#: tryton/common/common.py:1412
 msgid "d"
 msgstr "д"
 
-#: tryton/common/common.py:1358
+#: tryton/common/common.py:1413
 msgid "h"
 msgstr "ч"
 
-#: tryton/common/common.py:1359
+#: tryton/common/common.py:1414
 msgid "m"
 msgstr "м"
 
-#: tryton/common/completion.py:22
+#: tryton/common/completion.py:21
 msgid "<i>Search...</i>"
 msgstr "<i>Поиск...</i>"
 
-#: tryton/common/completion.py:23
+#: tryton/common/completion.py:22
 msgid "<i>Create...</i>"
 msgstr "<i>Создать...</i>"
 
@@ -269,254 +269,259 @@ msgstr "<i>Создать...</i>"
 msgid "Open the calendar <F2>"
 msgstr "Открыть календарь <F2>"
 
-#: tryton/common/date_widget.py:271
+#: tryton/common/date_widget.py:275
 msgid "Date Selection"
 msgstr "Выбор даты"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "y"
 msgstr ""
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "yes"
 msgstr "да"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "true"
 msgstr "истинный"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "t"
 msgstr ""
 
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
 msgid "True"
 msgstr "Истинный"
 
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
 msgid "False"
 msgstr "Ложный"
 
-#: tryton/common/popup_menu.py:71
+#: tryton/common/popup_menu.py:72
+#, fuzzy
+msgid "Edit..."
+msgstr "_Выход..."
+
+#: tryton/common/popup_menu.py:77
 msgid "Attachments..."
 msgstr "Вложения..."
 
-#: tryton/common/popup_menu.py:76
+#: tryton/common/popup_menu.py:87
 msgid "Actions..."
 msgstr "Действия..."
 
-#: tryton/common/popup_menu.py:77
+#: tryton/common/popup_menu.py:88
 msgid "Relate..."
 msgstr "Связанные..."
 
-#: tryton/common/popup_menu.py:78
+#: tryton/common/popup_menu.py:89
 msgid "Report..."
 msgstr "Отчет..."
 
-#: tryton/common/popup_menu.py:79
+#: tryton/common/popup_menu.py:90
 msgid "E-Mail..."
 msgstr "Эл.почта..."
 
-#: tryton/common/popup_menu.py:80
+#: tryton/common/popup_menu.py:91
 msgid "Print..."
 msgstr "Печать..."
 
-#: tryton/gui/main.py:217
+#: tryton/gui/main.py:218
 msgid "_File"
 msgstr "Файл"
 
-#: tryton/gui/main.py:225
+#: tryton/gui/main.py:226
 msgid "_User"
 msgstr "_Пользователь"
 
-#: tryton/gui/main.py:239
+#: tryton/gui/main.py:240
 msgid "_Options"
 msgstr "_Параметры"
 
-#: tryton/gui/main.py:247
+#: tryton/gui/main.py:248
 msgid "Fa_vorites"
 msgstr "Избранное"
 
-#: tryton/gui/main.py:263
+#: tryton/gui/main.py:264
 msgid "_Help"
 msgstr "Помощь"
 
-#: tryton/gui/main.py:285 tryton/gui/window/win_search.py:26
+#: tryton/gui/main.py:286 tryton/gui/window/win_search.py:26
 #: tryton/gui/window/view_form/view/screen_container.py:100
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:333
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:332
 #: tryton/gui/window/view_form/view/form_gtk/many2many.py:40
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:45
 msgid "Search"
 msgstr "Поиск"
 
-#: tryton/gui/main.py:364
+#: tryton/gui/main.py:374
 msgid "No result found."
 msgstr "Ничего не найдено."
 
-#: tryton/gui/main.py:384
+#: tryton/gui/main.py:396
 msgid "_Connect..."
 msgstr "Подключение..."
 
-#: tryton/gui/main.py:393
+#: tryton/gui/main.py:405
 msgid "_Disconnect"
 msgstr "Отключение"
 
-#: tryton/gui/main.py:403
+#: tryton/gui/main.py:415
 msgid "Data_base"
 msgstr "База данных"
 
-#: tryton/gui/main.py:414
+#: tryton/gui/main.py:426
 msgid "_New Database..."
 msgstr "Новая база данных..."
 
-#: tryton/gui/main.py:423
+#: tryton/gui/main.py:435
 msgid "_Restore Database..."
 msgstr "Восстановить базу данных..."
 
-#: tryton/gui/main.py:432
+#: tryton/gui/main.py:444
 msgid "_Backup Database..."
 msgstr "Сохранить базу данных..."
 
-#: tryton/gui/main.py:441
+#: tryton/gui/main.py:453
 msgid "Dro_p Database..."
 msgstr "Удалить базу данных..."
 
-#: tryton/gui/main.py:450
+#: tryton/gui/main.py:462
 msgid "_Quit..."
 msgstr "_Выход..."
 
-#: tryton/gui/main.py:465
+#: tryton/gui/main.py:477
 msgid "_Preferences..."
 msgstr "Настройки..."
 
-#: tryton/gui/main.py:476
+#: tryton/gui/main.py:488
 msgid "_Menu Reload"
 msgstr "Обновить меню"
 
-#: tryton/gui/main.py:485
+#: tryton/gui/main.py:497
 msgid "_Menu Toggle"
 msgstr "Показать/скрыть меню"
 
-#: tryton/gui/main.py:492
+#: tryton/gui/main.py:504
 msgid "_Global Search"
 msgstr "Глобальный поиск"
 
-#: tryton/gui/main.py:507
+#: tryton/gui/main.py:519
 msgid "_Toolbar"
 msgstr "Панель инструментов"
 
-#: tryton/gui/main.py:515
+#: tryton/gui/main.py:527
 msgid "_Default"
 msgstr "По умолчанию"
 
-#: tryton/gui/main.py:525
+#: tryton/gui/main.py:537
 msgid "_Text and Icons"
 msgstr "Текст и Значки"
 
-#: tryton/gui/main.py:535
+#: tryton/gui/main.py:547
 msgid "_Icons"
 msgstr "Значки"
 
-#: tryton/gui/main.py:544
+#: tryton/gui/main.py:556
 msgid "_Text"
 msgstr "Текст"
 
-#: tryton/gui/main.py:553
+#: tryton/gui/main.py:565
 msgid "_Menubar"
 msgstr "_Меню"
 
-#: tryton/gui/main.py:561
+#: tryton/gui/main.py:573
 msgid "Change Accelerators"
 msgstr "Режим изменения быстрых клавиш"
 
-#: tryton/gui/main.py:569
+#: tryton/gui/main.py:581
 msgid "_Mode"
 msgstr "Режим"
 
-#: tryton/gui/main.py:577
+#: tryton/gui/main.py:589
 msgid "_Normal"
 msgstr "Нормальный"
 
-#: tryton/gui/main.py:585
+#: tryton/gui/main.py:597
 msgid "_PDA"
 msgstr "Упрощенный"
 
-#: tryton/gui/main.py:592
+#: tryton/gui/main.py:604
 msgid "_Form"
 msgstr "Форма"
 
-#: tryton/gui/main.py:601
+#: tryton/gui/main.py:613
 msgid "Save Width/Height"
 msgstr "Сохранить размеры"
 
-#: tryton/gui/main.py:612
+#: tryton/gui/main.py:624
 #, fuzzy
 msgid "Save Tree State"
 msgstr "Запомнить состояние дерева"
 
-#: tryton/gui/main.py:624
+#: tryton/gui/main.py:636
 msgid "Spell Checking"
 msgstr "Проверка орфографии"
 
-#: tryton/gui/main.py:634
+#: tryton/gui/main.py:646
 msgid "Tabs Position"
 msgstr "Положение вкладок"
 
-#: tryton/gui/main.py:642
+#: tryton/gui/main.py:654
 msgid "Top"
 msgstr "Вверху"
 
-#: tryton/gui/main.py:651
+#: tryton/gui/main.py:663
 msgid "Left"
 msgstr "Влево"
 
-#: tryton/gui/main.py:661
+#: tryton/gui/main.py:673
 msgid "Right"
 msgstr "В право"
 
-#: tryton/gui/main.py:671
+#: tryton/gui/main.py:683
 msgid "Bottom"
 msgstr "Снизу"
 
-#: tryton/gui/main.py:680
+#: tryton/gui/main.py:692
 msgid "_Previous Tab"
 msgstr "Предыдущая вкладка"
 
-#: tryton/gui/main.py:686
+#: tryton/gui/main.py:698
 msgid "_Next Tab"
 msgstr "Следующая вкладка"
 
-#: tryton/gui/main.py:692
+#: tryton/gui/main.py:704
 msgid "Search Limit..."
 msgstr "Максимальное количество строк..."
 
-#: tryton/gui/main.py:698
+#: tryton/gui/main.py:710
 msgid "_Email..."
 msgstr "Настройки _Эл.почты"
 
-#: tryton/gui/main.py:706
+#: tryton/gui/main.py:718
 msgid "_Save Options"
 msgstr "Сохранить настройки"
 
-#: tryton/gui/main.py:718
+#: tryton/gui/main.py:730
 msgid "_Tips..."
 msgstr "_Советы..."
 
-#: tryton/gui/main.py:727
+#: tryton/gui/main.py:739
 msgid "_Keyboard Shortcuts..."
 msgstr "_Быстрые клавиши"
 
-#: tryton/gui/main.py:736
+#: tryton/gui/main.py:748
 msgid "_About..."
 msgstr "О программе"
 
-#: tryton/gui/main.py:787
+#: tryton/gui/main.py:799
 msgid "Manage Favorites"
 msgstr "Управление закладками"
 
-#: tryton/gui/main.py:935
+#: tryton/gui/main.py:942
 msgid ""
 "The following action requires to close all tabs.\n"
 "Do you want to continue?"
@@ -524,11 +529,11 @@ msgstr ""
 "Данное действие приведет к закрытию всех вкладок.\n"
 "Продолжить?"
 
-#: tryton/gui/main.py:1196
+#: tryton/gui/main.py:1206
 msgid "Close Tab"
 msgstr "Закрыть вкладку"
 
-#: tryton/gui/main.py:1314
+#: tryton/gui/main.py:1327
 msgid ""
 "You are going to delete a Tryton database.\n"
 "Are you really sure to proceed?"
@@ -536,7 +541,7 @@ msgstr ""
 "Вы собираетесь удалить базу данных.\n"
 "Вы действительно уверены, продолжить?"
 
-#: tryton/gui/main.py:1324
+#: tryton/gui/main.py:1337
 msgid ""
 "Wrong Tryton Server Password\n"
 "Please try again."
@@ -544,28 +549,28 @@ msgstr ""
 "Неверный административный пароль сервера Tryton\n"
 "Пожалуйста, попробуйте снова"
 
-#: tryton/gui/main.py:1326 tryton/gui/main.py:1362 tryton/gui/main.py:1398
-#: tryton/gui/window/dbcreate.py:382
+#: tryton/gui/main.py:1339 tryton/gui/main.py:1375 tryton/gui/main.py:1411
+#: tryton/gui/window/dbcreate.py:384
 msgid "Access denied!"
 msgstr "Доступ запрещен!"
 
-#: tryton/gui/main.py:1329
+#: tryton/gui/main.py:1342
 msgid "Database drop failed with error message:\n"
 msgstr "Удаление базы данных завершено с сообщением об ошибке:\n"
 
-#: tryton/gui/main.py:1330
+#: tryton/gui/main.py:1343
 msgid "Database drop failed!"
 msgstr "Не удалось удалить базу данных!"
 
-#: tryton/gui/main.py:1332
+#: tryton/gui/main.py:1345
 msgid "Database dropped successfully!"
 msgstr "База успешно удалена!"
 
-#: tryton/gui/main.py:1337
+#: tryton/gui/main.py:1350
 msgid "Open Backup File to Restore..."
 msgstr "Открыть файл для восстановления..."
 
-#: tryton/gui/main.py:1354
+#: tryton/gui/main.py:1367
 msgid ""
 "It is not possible to restore a password protected database.\n"
 "Backup and restore needed to be proceed manual."
@@ -573,11 +578,11 @@ msgstr ""
 "Не возможно восстановить на защищенной паролем базе данных.\n"
 "Резервное копирование и восстановление необходимо выполнить вручную."
 
-#: tryton/gui/main.py:1358 tryton/gui/main.py:1394
+#: tryton/gui/main.py:1371 tryton/gui/main.py:1407
 msgid "Database is password protected!"
 msgstr "База данных защищена паролем!"
 
-#: tryton/gui/main.py:1360 tryton/gui/main.py:1396
+#: tryton/gui/main.py:1373 tryton/gui/main.py:1409
 msgid ""
 "Wrong Tryton Server Password.\n"
 "Please try again."
@@ -585,19 +590,19 @@ msgstr ""
 "Неверный административный пароль сервера Tryton\n"
 "Пожалуйста, попробуйте снова"
 
-#: tryton/gui/main.py:1365
+#: tryton/gui/main.py:1378
 msgid "Database restore failed with error message:\n"
 msgstr "Восстановление базы данных с сообщением об ошибке:\n"
 
-#: tryton/gui/main.py:1367 tryton/gui/main.py:1372
+#: tryton/gui/main.py:1380 tryton/gui/main.py:1385
 msgid "Database restore failed!"
 msgstr "Базу данных восстановить не удалось!"
 
-#: tryton/gui/main.py:1370
+#: tryton/gui/main.py:1383
 msgid "Database restored successfully!"
 msgstr "База данных восстановлена полностью!"
 
-#: tryton/gui/main.py:1391
+#: tryton/gui/main.py:1404
 msgid ""
 "It is not possible to dump a password protected Database.\n"
 "Backup and restore needed to be proceed manual."
@@ -605,75 +610,75 @@ msgstr ""
 "Не возможно сделать снимок на защищенной паролем базе данных. \n"
 "Резервное копирование и восстановление необходимо выполнить вручную."
 
-#: tryton/gui/main.py:1401
+#: tryton/gui/main.py:1414
 msgid "Database dump failed with error message:\n"
 msgstr "Резервное копирование базы данных завершилось с сообщением об ошибке:\n"
 
-#: tryton/gui/main.py:1403
+#: tryton/gui/main.py:1416
 msgid "Database dump failed!"
 msgstr "Не удалось выполнить резервное копирование базы данных!"
 
-#: tryton/gui/main.py:1414
+#: tryton/gui/main.py:1427
 msgid "Database backuped successfully!"
 msgstr "База данных сохранена успешно!"
 
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
 msgid "New"
 msgstr "Новый"
 
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
 msgid "Create a new record"
 msgstr "Создать новую запись"
 
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
 #: tryton/gui/window/win_export.py:142
 msgid "Save"
 msgstr "Сохранить"
 
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
 msgid "Save this record"
 msgstr "Сохранить эту запись"
 
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
-#: tryton/gui/window/win_form.py:228
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
+#: tryton/gui/window/win_form.py:232
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:154
 msgid "Switch"
 msgstr "Переключить"
 
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
 msgid "Switch view"
 msgstr "Переключить вид"
 
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
 msgid "_Reload"
 msgstr "_Обновить"
 
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
 msgid "Reload"
 msgstr "Обновить"
 
-#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:48
+#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:50
 msgid "_New"
 msgstr "Новый"
 
-#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:49
-#: tryton/gui/window/win_form.py:66
+#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:51
+#: tryton/gui/window/win_form.py:67
 msgid "_Save"
 msgstr "Сохранить"
 
-#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:50
+#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:52
 msgid "_Switch View"
 msgstr "Сменить просмотр"
 
-#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:52
+#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:54
 msgid "_Reload/Undo"
 msgstr "Обновить/Отменить"
 
-#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:56
+#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:58
 msgid "_Delete..."
 msgstr "Удалить..."
 
-#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:65
+#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:68
 msgid "_Close Tab"
 msgstr "Закрыть вкладку"
 
@@ -708,28 +713,28 @@ msgstr ""
 "Нажмите на 'Изменить' для изменения адреса.\n"
 "4. Если это не помогло обратитесь к администратору вашей сети."
 
-#: tryton/gui/window/dbcreate.py:137
+#: tryton/gui/window/dbcreate.py:139
 msgid "Create new database"
 msgstr "Создать новую базу данных"
 
-#: tryton/gui/window/dbcreate.py:147
+#: tryton/gui/window/dbcreate.py:149
 msgid "C_reate"
 msgstr "С_оздать"
 
-#: tryton/gui/window/dbcreate.py:155
+#: tryton/gui/window/dbcreate.py:157
 msgid "Create the new database."
 msgstr "Создать новую базу данных"
 
-#: tryton/gui/window/dbcreate.py:166
+#: tryton/gui/window/dbcreate.py:168
 msgid "Server Setup:"
 msgstr "Параметры подключения к серверу:"
 
-#: tryton/gui/window/dbcreate.py:171
+#: tryton/gui/window/dbcreate.py:173
 msgid "Server connection:"
 msgstr "Соединение с сервером:"
 
-#: tryton/gui/window/dbcreate.py:180 tryton/gui/window/dbdumpdrop.py:140
-#: tryton/gui/window/dbrestore.py:86
+#: tryton/gui/window/dbcreate.py:182 tryton/gui/window/dbdumpdrop.py:140
+#: tryton/gui/window/dbrestore.py:88
 msgid ""
 "This is the URL of the server. Use server 'localhost' and port '8000' if "
 "the server is installed on this computer. Click on 'Change' to change the"
@@ -739,22 +744,22 @@ msgstr ""
 "если сервер установлен на этом компьютере. Нажмите кнопку 'Изменить' для "
 "изменения адреса."
 
-#: tryton/gui/window/dbcreate.py:183 tryton/gui/window/dbdumpdrop.py:147
-#: tryton/gui/window/dbrestore.py:91
+#: tryton/gui/window/dbcreate.py:185 tryton/gui/window/dbdumpdrop.py:147
+#: tryton/gui/window/dbrestore.py:93
 msgid "C_hange"
 msgstr "Изменить"
 
-#: tryton/gui/window/dbcreate.py:192 tryton/gui/window/dbrestore.py:97
+#: tryton/gui/window/dbcreate.py:194 tryton/gui/window/dbrestore.py:99
 msgid "Setup the server connection..."
 msgstr "Настройка соединения с сервером"
 
-#: tryton/gui/window/dbcreate.py:195 tryton/gui/window/dbdumpdrop.py:186
-#: tryton/gui/window/dbrestore.py:100
+#: tryton/gui/window/dbcreate.py:197 tryton/gui/window/dbdumpdrop.py:186
+#: tryton/gui/window/dbrestore.py:102
 msgid "Tryton Server Password:"
 msgstr "Пароль сервера Tryton:"
 
-#: tryton/gui/window/dbcreate.py:205 tryton/gui/window/dbdumpdrop.py:196
-#: tryton/gui/window/dbrestore.py:109
+#: tryton/gui/window/dbcreate.py:207 tryton/gui/window/dbdumpdrop.py:196
+#: tryton/gui/window/dbrestore.py:111
 msgid ""
 "This is the password of the Tryton server. It doesn't belong to a real "
 "user. This password is usually defined in the trytond configuration."
@@ -762,15 +767,15 @@ msgstr ""
 "Это пароль для сервера Tryton. Он не относится к реальному пользователю. "
 "Этот пароль обычно определяется в серверной конфигурации."
 
-#: tryton/gui/window/dbcreate.py:216
+#: tryton/gui/window/dbcreate.py:218
 msgid "New database setup:"
 msgstr "Параметры новой базы данных:"
 
-#: tryton/gui/window/dbcreate.py:222
+#: tryton/gui/window/dbcreate.py:224
 msgid "Database name:"
 msgstr "Имя базы данных:"
 
-#: tryton/gui/window/dbcreate.py:234
+#: tryton/gui/window/dbcreate.py:236
 msgid ""
 "Choose the name of the new database.\n"
 "Allowed characters are alphanumerical or _ (underscore)\n"
@@ -782,11 +787,11 @@ msgstr ""
 "Недопустимо использование пробелов и других специальных символов!\n"
 "Примеры: Tryton, test_1, MyCompany"
 
-#: tryton/gui/window/dbcreate.py:241
+#: tryton/gui/window/dbcreate.py:243
 msgid "Default language:"
 msgstr "Язык по умолчанию:"
 
-#: tryton/gui/window/dbcreate.py:251
+#: tryton/gui/window/dbcreate.py:253
 msgid ""
 "Choose the default language that will be installed for this database. You"
 " will be able to install new languages after installation through the "
@@ -796,11 +801,11 @@ msgstr ""
 "данных. Вы сможете установить новые языки после установки через "
 "административное меню."
 
-#: tryton/gui/window/dbcreate.py:255
+#: tryton/gui/window/dbcreate.py:257
 msgid "Admin password:"
 msgstr "Пароль администратора:"
 
-#: tryton/gui/window/dbcreate.py:265
+#: tryton/gui/window/dbcreate.py:267
 msgid ""
 "Choose a password for the admin user of the new database. With these "
 "credentials you will be later able to login into the database:\n"
@@ -812,15 +817,15 @@ msgstr ""
 "Имя пользователя: Admin\n"
 "Пароль: <пароль вы установите здесь>"
 
-#: tryton/gui/window/dbcreate.py:273
+#: tryton/gui/window/dbcreate.py:275
 msgid "Confirm admin password:"
 msgstr "Подтвердите пароль администратора:"
 
-#: tryton/gui/window/dbcreate.py:282
+#: tryton/gui/window/dbcreate.py:284
 msgid "Type the Admin password again"
 msgstr "Введите административный пароль повторно"
 
-#: tryton/gui/window/dbcreate.py:330
+#: tryton/gui/window/dbcreate.py:332
 msgid ""
 "The database name is restricted to alpha-nummerical characters and \"_\" "
 "(underscore). Avoid all accents, space and any other special characters."
@@ -829,27 +834,27 @@ msgstr ""
 "(Подчеркивание). Недопустимо использование пробелов и других специальных "
 "символов."
 
-#: tryton/gui/window/dbcreate.py:335
+#: tryton/gui/window/dbcreate.py:337
 msgid "Wrong characters in database name!"
 msgstr "Недопустимые символы в имени базы данных!"
 
-#: tryton/gui/window/dbcreate.py:339
+#: tryton/gui/window/dbcreate.py:341
 msgid "The new admin password doesn't match the confirmation field.\n"
 msgstr "Новый пароль не совпадает с полем подтверждения.\n"
 
-#: tryton/gui/window/dbcreate.py:341
+#: tryton/gui/window/dbcreate.py:343
 msgid "Passwords doesn't match!"
 msgstr "Пароли не совпадают!"
 
-#: tryton/gui/window/dbcreate.py:344
+#: tryton/gui/window/dbcreate.py:346
 msgid "Admin password and confirmation are required to create a new database."
 msgstr "Пароль администратора необходим для создания новой базы данных."
 
-#: tryton/gui/window/dbcreate.py:346
+#: tryton/gui/window/dbcreate.py:348
 msgid "Missing admin password!"
 msgstr "Отсутствует административный пароль!"
 
-#: tryton/gui/window/dbcreate.py:361
+#: tryton/gui/window/dbcreate.py:363
 msgid ""
 "A database with the same name already exists.\n"
 "Try another database name."
@@ -857,15 +862,15 @@ msgstr ""
 "База данных с таким же названием уже существует.\n"
 "Попробуйте другое имя базы данных."
 
-#: tryton/gui/window/dbcreate.py:364
+#: tryton/gui/window/dbcreate.py:366
 msgid "This database name already exist!"
 msgstr "Такая база данных уже существует!"
 
-#: tryton/gui/window/dbcreate.py:379
+#: tryton/gui/window/dbcreate.py:381
 msgid "Sorry, wrong password for the Tryton server. Please try again."
 msgstr "Извините, неверный пароль для сервера. Попробуйте еще раз."
 
-#: tryton/gui/window/dbcreate.py:387
+#: tryton/gui/window/dbcreate.py:389
 msgid ""
 "Can't create the database, caused by an unknown reason.\n"
 "If there is a database created, it could be broken. Maybe drop this "
@@ -877,7 +882,7 @@ msgstr ""
 "данных! Дополнительная информация может быть в сообщении об ошибке.\n"
 "Сообщение об ошибке:\n"
 
-#: tryton/gui/window/dbcreate.py:395
+#: tryton/gui/window/dbcreate.py:397
 msgid "Error creating database!"
 msgstr "Ошибка создания базы данных!"
 
@@ -925,7 +930,7 @@ msgstr "Удалить выбранную базу данных"
 msgid "Choose a Tryton database to delete:"
 msgstr "Выберите базу данных для удаления:"
 
-#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:75
+#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:77
 msgid "Server Connection:"
 msgstr "Соединение с сервером:"
 
@@ -1016,15 +1021,15 @@ msgstr "Сервер:порт"
 msgid "User name:"
 msgstr "Имя пользователя:"
 
-#: tryton/gui/window/dbrestore.py:64
+#: tryton/gui/window/dbrestore.py:66
 msgid "Restore Database"
 msgstr "Восстановить базу данных"
 
-#: tryton/gui/window/dbrestore.py:117
+#: tryton/gui/window/dbrestore.py:119
 msgid "File to Restore:"
 msgstr "Файл для восстановления:"
 
-#: tryton/gui/window/dbrestore.py:131
+#: tryton/gui/window/dbrestore.py:133
 msgid ""
 "Choose the name of the database to be restored.\n"
 "Allowed characters are alphanumerical or _ (underscore)\n"
@@ -1036,15 +1041,15 @@ msgstr ""
 "Недопустимо использование пробелов и других специальных символов!\n"
 "Примеры: Tryton, test_1, MyCompany"
 
-#: tryton/gui/window/dbrestore.py:137
+#: tryton/gui/window/dbrestore.py:139
 msgid "New Database Name:"
 msgstr "Название новой базы данных:"
 
-#: tryton/gui/window/dbrestore.py:140
+#: tryton/gui/window/dbrestore.py:142
 msgid "Update Database:"
 msgstr "Обновить базу данных:"
 
-#: tryton/gui/window/dbrestore.py:144
+#: tryton/gui/window/dbrestore.py:146
 msgid ""
 "Check for an automatic database update after restoring a database from a "
 "previous Tryton version."
@@ -1052,11 +1057,11 @@ msgstr ""
 "Проверить наличие автоматического обновления базы данных после "
 "восстановления базы данных из предыдущей версии Tryton."
 
-#: tryton/gui/window/dbrestore.py:154
+#: tryton/gui/window/dbrestore.py:156
 msgid "Restore"
 msgstr "Восстановить"
 
-#: tryton/gui/window/dbrestore.py:163
+#: tryton/gui/window/dbrestore.py:165
 msgid "Restore the database from file."
 msgstr "Восстановить базу данных из файла."
 
@@ -1096,154 +1101,158 @@ msgstr "Сообщение:"
 msgid "Attachment:"
 msgstr "Вложение:"
 
-#: tryton/gui/window/form.py:39 tryton/gui/window/tips.py:74
-#: tryton/gui/window/win_form.py:201
-#: tryton/gui/window/view_form/view/screen_container.py:165
+#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:74
+#: tryton/gui/window/win_form.py:205
+#: tryton/gui/window/view_form/view/screen_container.py:163
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:128
 msgid "Previous"
 msgstr "Предыдущий"
 
-#: tryton/gui/window/form.py:40
+#: tryton/gui/window/form.py:42
 msgid "Previous Record"
 msgstr "Предыдущая запись"
 
-#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:81
-#: tryton/gui/window/win_form.py:215
-#: tryton/gui/window/view_form/view/screen_container.py:177
+#: tryton/gui/window/form.py:43 tryton/gui/window/tips.py:81
+#: tryton/gui/window/win_form.py:219
+#: tryton/gui/window/view_form/view/screen_container.py:175
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:142
 msgid "Next"
 msgstr "Следующий"
 
-#: tryton/gui/window/form.py:41
+#: tryton/gui/window/form.py:43
 msgid "Next Record"
 msgstr "Следующая запись"
 
-#: tryton/gui/window/form.py:44
+#: tryton/gui/window/form.py:46
 msgid "Attachment(0)"
 msgstr "Вложений (0)"
 
-#: tryton/gui/window/form.py:45
+#: tryton/gui/window/form.py:47
 msgid "Add an attachment to the record"
 msgstr "Добавить вложение для этой записи"
 
-#: tryton/gui/window/form.py:54
+#: tryton/gui/window/form.py:56
 msgid "_Duplicate"
 msgstr "Копировать"
 
-#: tryton/gui/window/form.py:59
+#: tryton/gui/window/form.py:61
 msgid "_Previous"
 msgstr "Предыдущая"
 
-#: tryton/gui/window/form.py:61
+#: tryton/gui/window/form.py:63
 msgid "_Next"
 msgstr "Следующая"
 
-#: tryton/gui/window/form.py:62
+#: tryton/gui/window/form.py:64
 msgid "_Search"
 msgstr "Поиск"
 
-#: tryton/gui/window/form.py:63
+#: tryton/gui/window/form.py:65
 msgid "View _Logs..."
 msgstr "Просмотр изменений"
 
-#: tryton/gui/window/form.py:68
+#: tryton/gui/window/form.py:66
+msgid "Show revisions..."
+msgstr ""
+
+#: tryton/gui/window/form.py:71
 msgid "A_ttachments..."
 msgstr "Вложения..."
 
-#: tryton/gui/window/form.py:70
+#: tryton/gui/window/form.py:73
 msgid "_Actions..."
 msgstr "Действия"
 
-#: tryton/gui/window/form.py:72
+#: tryton/gui/window/form.py:75
 msgid "_Relate..."
 msgstr "Связанные..."
 
-#: tryton/gui/window/form.py:75
+#: tryton/gui/window/form.py:78
 msgid "_Report..."
 msgstr "Отчет..."
 
-#: tryton/gui/window/form.py:77
+#: tryton/gui/window/form.py:80
 msgid "_E-Mail..."
 msgstr "Эл.почта..."
 
-#: tryton/gui/window/form.py:79
+#: tryton/gui/window/form.py:82
 msgid "_Print..."
 msgstr "печать"
 
-#: tryton/gui/window/form.py:82
+#: tryton/gui/window/form.py:85
 msgid "_Export Data..."
 msgstr "Экспорт данных"
 
-#: tryton/gui/window/form.py:84
+#: tryton/gui/window/form.py:87
 msgid "_Import Data..."
 msgstr "Импорт данных"
 
-#: tryton/gui/window/form.py:219
+#: tryton/gui/window/form.py:216
 #, python-format
 msgid "Attachment(%d)"
 msgstr "Вложений (%d)"
 
-#: tryton/gui/window/form.py:237
+#: tryton/gui/window/form.py:234
 msgid "You have to select one record!"
 msgstr "Вы должны выбрать одну запись!"
 
-#: tryton/gui/window/form.py:241
+#: tryton/gui/window/form.py:238
 msgid "ID:"
 msgstr "Номер строки"
 
-#: tryton/gui/window/form.py:242
+#: tryton/gui/window/form.py:239
 msgid "Creation User:"
 msgstr "Создано пользователем"
 
-#: tryton/gui/window/form.py:243
+#: tryton/gui/window/form.py:240
 msgid "Creation Date:"
 msgstr "Дата создания"
 
-#: tryton/gui/window/form.py:244
+#: tryton/gui/window/form.py:241
 msgid "Latest Modification by:"
 msgstr "Изменена пользователем:"
 
-#: tryton/gui/window/form.py:245
+#: tryton/gui/window/form.py:242
 msgid "Latest Modification Date:"
 msgstr "Дата изменения:"
 
-#: tryton/gui/window/form.py:263
+#: tryton/gui/window/form.py:260
 msgid "Model:"
 msgstr "Модель:"
 
-#: tryton/gui/window/form.py:271
+#: tryton/gui/window/form.py:304
 msgid "Are you sure to remove this record?"
 msgstr "Вы уверены что хотите удалить эту запись?"
 
-#: tryton/gui/window/form.py:273
+#: tryton/gui/window/form.py:306
 msgid "Are you sure to remove those records?"
 msgstr "Вы уверены что хотите удалить эти записи?"
 
-#: tryton/gui/window/form.py:276
+#: tryton/gui/window/form.py:309
 msgid "Records not removed!"
 msgstr "Записи не удалены!"
 
-#: tryton/gui/window/form.py:278
+#: tryton/gui/window/form.py:311
 msgid "Records removed!"
 msgstr "Записи удалены!"
 
-#: tryton/gui/window/form.py:318
+#: tryton/gui/window/form.py:345
 msgid "Working now on the duplicated record(s)!"
 msgstr "Сейчас работает на дублирующихся записях!"
 
-#: tryton/gui/window/form.py:325
+#: tryton/gui/window/form.py:352
 msgid "Record saved!"
 msgstr "Запись сохранена!"
 
-#: tryton/gui/window/form.py:328
+#: tryton/gui/window/form.py:355
 msgid "Invalid form!"
 msgstr "Недопустимая форма!"
 
-#: tryton/gui/window/form.py:436
+#: tryton/gui/window/form.py:462
 msgid " of "
 msgstr "из"
 
-#: tryton/gui/window/form.py:457
+#: tryton/gui/window/form.py:483
 msgid ""
 "This record has been modified\n"
 "do you want to save it ?"
@@ -1251,46 +1260,52 @@ msgstr ""
 "Эта запись была изменена\n"
 "Вы хотите её сохранить?"
 
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
 msgid "Action"
 msgstr "Действие"
 
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
 msgid "Launch action"
 msgstr "Выполнить действие"
 
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
 msgid "Relate"
 msgstr "Связанные"
 
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
 msgid "Open related records"
 msgstr "Открыть связанные записи"
 
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
 msgid "Report"
 msgstr "Отчет"
 
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
 msgid "Open report"
 msgstr "Открыть отчет"
 
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
 msgid "E-Mail"
 msgstr "Эл.почта"
 
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
 msgid "E-Mail report"
 msgstr "Отправить отчет по Эл.почте"
 
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
 msgid "Print"
 msgstr "Печать"
 
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
 msgid "Print report"
 msgstr "Печать отчета"
 
+#: tryton/gui/window/form.py:607
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:257
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:1050
+msgid "Unknown"
+msgstr "Неизвестно"
+
 #: tryton/gui/window/limit.py:17
 msgid "Limit"
 msgstr "Ограничение"
@@ -1319,6 +1334,20 @@ msgstr "Настройка"
 msgid "Current Password:"
 msgstr "Текущий пароль:"
 
+#: tryton/gui/window/revision.py:20
+#, fuzzy
+msgid "Revision"
+msgstr "Предыдущий"
+
+#: tryton/gui/window/revision.py:29
+#, fuzzy
+msgid "Select a revision"
+msgstr "Выбор"
+
+#: tryton/gui/window/revision.py:32
+msgid "Revision:"
+msgstr ""
+
 #: tryton/gui/window/shortcuts.py:17
 msgid "Keyboard Shortcuts"
 msgstr "Сочетания клавиш быстрого доступа"
@@ -1499,21 +1528,21 @@ msgstr "Добавить имя поля"
 msgid "Name"
 msgstr "Имя"
 
-#: tryton/gui/window/win_export.py:306
+#: tryton/gui/window/win_export.py:309
 msgid "What is the name of this export?"
 msgstr "Укажите имя для экспорта."
 
-#: tryton/gui/window/win_export.py:429
+#: tryton/gui/window/win_export.py:436
 #, python-format
 msgid "%d record saved!"
 msgstr "%d запись сохранена!"
 
-#: tryton/gui/window/win_export.py:431
+#: tryton/gui/window/win_export.py:438
 #, python-format
 msgid "%d records saved!"
 msgstr "%d записей сохранено!"
 
-#: tryton/gui/window/win_export.py:434
+#: tryton/gui/window/win_export.py:441
 #, python-format
 msgid ""
 "Operation failed!\n"
@@ -1528,26 +1557,26 @@ msgstr ""
 msgid "Link"
 msgstr "Ссылка"
 
-#: tryton/gui/window/win_form.py:134
+#: tryton/gui/window/win_form.py:136
 msgid "Add"
 msgstr "Добавить"
 
-#: tryton/gui/window/win_form.py:147
+#: tryton/gui/window/win_form.py:149
 msgid "Remove <Del>"
 msgstr "Удалить <Del>"
 
-#: tryton/gui/window/win_form.py:162
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:73
+#: tryton/gui/window/win_form.py:164
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:75
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:86
 msgid "Create a new record <F3>"
 msgstr "Создать новую запись <F3>"
 
-#: tryton/gui/window/win_form.py:174
+#: tryton/gui/window/win_form.py:176
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:106
 msgid "Delete selected record <Del>"
 msgstr "Удалить выбраную запись <Del>"
 
-#: tryton/gui/window/win_form.py:188
+#: tryton/gui/window/win_form.py:190
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:116
 msgid "Undelete selected record <Ins>"
 msgstr "Восстановить выбраную запись <Ins>"
@@ -1570,10 +1599,10 @@ msgstr "Файл для импорта:"
 
 #: tryton/gui/window/win_import.py:111
 #: tryton/gui/window/view_form/view/form_gtk/binary.py:57
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:111
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:118
 #: tryton/gui/window/view_form/view/form_gtk/image.py:62
 #: tryton/gui/window/view_form/view/form_gtk/image.py:131
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:624
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:650
 msgid "Open..."
 msgstr "Открыть..."
 
@@ -1597,19 +1626,19 @@ msgstr "Кодировка:"
 msgid "Lines to Skip:"
 msgstr "Строки для пропуска:"
 
-#: tryton/gui/window/win_import.py:184 tryton/gui/window/win_import.py:189
+#: tryton/gui/window/win_import.py:185 tryton/gui/window/win_import.py:190
 msgid "Field name"
 msgstr "Наименование поля"
 
-#: tryton/gui/window/win_import.py:249
+#: tryton/gui/window/win_import.py:251
 msgid "You must select an import file first!"
 msgstr "Вы должны сначала выбрать файл для импорта!"
 
-#: tryton/gui/window/win_import.py:260
+#: tryton/gui/window/win_import.py:262
 msgid "Error opening CSV file"
 msgstr "Ошибка открытия файла CSV"
 
-#: tryton/gui/window/win_import.py:287
+#: tryton/gui/window/win_import.py:289
 #, python-format
 msgid "Error processing the file at field %s."
 msgstr "Ошибка при обработке файла на поле %s."
@@ -1624,24 +1653,7 @@ msgstr "%d запись импортирована!"
 msgid "%d records imported!"
 msgstr "%d записей импортировано!"
 
-#: tryton/gui/window/win_import.py:371
-msgid "Importation Error!"
-msgstr "Ошибка при импорте!"
-
-#: tryton/gui/window/win_import.py:372
-#, python-format
-msgid ""
-"Error importing record %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-msgstr ""
-"Ошибка импорта записи %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-
-#: tryton/gui/window/wizard.py:291
+#: tryton/gui/window/wizard.py:286
 msgid "Wizard"
 msgstr "Мастер"
 
@@ -1650,44 +1662,40 @@ msgstr "Мастер"
 msgid "No String Attr."
 msgstr "Нет строковых атрибутов"
 
-#: tryton/gui/window/view_form/screen/screen.py:135
+#: tryton/gui/window/view_form/screen/screen.py:129
 msgid "ID"
 msgstr "ID"
 
-#: tryton/gui/window/view_form/screen/screen.py:136
+#: tryton/gui/window/view_form/screen/screen.py:130
 #, fuzzy
 msgid "Creation User"
 msgstr "Создано пользователем"
 
-#: tryton/gui/window/view_form/screen/screen.py:137
+#: tryton/gui/window/view_form/screen/screen.py:131
 #, fuzzy
 msgid "Creation Date"
 msgstr "Дата создания"
 
-#: tryton/gui/window/view_form/screen/screen.py:138
+#: tryton/gui/window/view_form/screen/screen.py:132
 #, fuzzy
 msgid "Modification User"
 msgstr "Дата изменения:"
 
-#: tryton/gui/window/view_form/screen/screen.py:139
+#: tryton/gui/window/view_form/screen/screen.py:133
 #, fuzzy
 msgid "Modification Date"
 msgstr "Дата изменения:"
 
-#: tryton/gui/window/view_form/screen/screen.py:634
+#: tryton/gui/window/view_form/screen/screen.py:631
 msgid "Unable to get view tree state"
 msgstr ""
 
-#: tryton/gui/window/view_form/screen/screen.py:671
-#, fuzzy, python-format
+#: tryton/gui/window/view_form/screen/screen.py:668
+#, fuzzy
 msgid "Unable to set view tree state"
 msgstr "Не удается установить локализацию %s"
 
-#: tryton/gui/window/view_form/view/list.py:651
-msgid "You must select a record to use the relation!"
-msgstr "Необходимо выбрать запись для использования Отношения!"
-
-#: tryton/gui/window/view_form/view/screen_container.py:25
+#: tryton/gui/window/view_form/view/screen_container.py:23
 msgid ".."
 msgstr ".."
 
@@ -1695,19 +1703,19 @@ msgstr ".."
 msgid "F_ilters"
 msgstr "Фильтры"
 
-#: tryton/gui/window/view_form/view/screen_container.py:149
+#: tryton/gui/window/view_form/view/screen_container.py:147
 msgid "Show bookmarks of filters"
 msgstr "Показать сохраненные фильтры"
 
-#: tryton/gui/window/view_form/view/screen_container.py:314
+#: tryton/gui/window/view_form/view/screen_container.py:312
 msgid "Remove this bookmark"
 msgstr "Удалить эту закладку"
 
-#: tryton/gui/window/view_form/view/screen_container.py:321
+#: tryton/gui/window/view_form/view/screen_container.py:319
 msgid "Bookmark this filter"
 msgstr "Запомнить этот фильтр"
 
-#: tryton/gui/window/view_form/view/screen_container.py:380
+#: tryton/gui/window/view_form/view/screen_container.py:384
 msgid "Bookmark Name:"
 msgstr "Имя закладки:"
 
@@ -1738,24 +1746,24 @@ msgstr ""
 msgid "Select a File..."
 msgstr "Выбрать файл..."
 
-#: tryton/gui/window/view_form/view/form_gtk/char.py:157
+#: tryton/gui/window/view_form/view/form_gtk/char.py:161
 msgid "Show plain text"
 msgstr "Показать в виде текста"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:349
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:348
 msgid "Add value"
 msgstr "Добавить значение"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:459
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:461
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:199
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:201
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:458
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:460
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:202
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:204
 #: tryton/gui/window/view_form/view/form_gtk/parser.py:255
 #: tryton/gui/window/view_form/view/form_gtk/parser.py:259
 msgid ":"
 msgstr ":"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:471
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:470
 #, python-format
 msgid "Remove \"%s\""
 msgstr "Удалить \"%s\""
@@ -1772,23 +1780,23 @@ msgstr "Все фалы"
 msgid "Images"
 msgstr "Изображения"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:175
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:178
 msgid "Translation"
 msgstr "Перевод"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:231
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:234
 msgid "Edit"
 msgstr "Редактировать"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:236
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:239
 msgid "Fuzzy"
 msgstr "Неточный"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:305
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:308
 msgid "You need to save the record before adding translations!"
 msgstr "Необходимо сохранить запись перед добавлением перевода!"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:316
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:319
 msgid "No other language available!"
 msgstr "Отсутствуют другие доступные языки!"
 
@@ -1801,12 +1809,12 @@ msgstr "Добавить существующую запись"
 msgid "Remove selected record <Del>"
 msgstr "Удалить выбраную запись <Del>"
 
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:74
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:351
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:76
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:356
 msgid "Open a record <F2>"
 msgstr "Открыть запись <F2>"
 
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:354
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:359
 msgid "Search a record <F2>"
 msgstr "Поиск записи <F2>"
 
@@ -1898,15 +1906,10 @@ msgstr "PNG изображение (*.png)"
 msgid "Image size too large!"
 msgstr "Размер изображения слишком большой!"
 
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:245
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:244
 msgid ": "
 msgstr ": "
 
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:258
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:1023
-msgid "Unknown"
-msgstr "Неизвестно"
-
 #: tryton/plugins/translation/__init__.py:18
 msgid "Translate view"
 msgstr "Перевод текущего окна"
diff --git a/share/locale/sl_SI/LC_MESSAGES/tryton.mo b/share/locale/sl_SI/LC_MESSAGES/tryton.mo
index 672db11..06bef10 100644
Binary files a/share/locale/sl_SI/LC_MESSAGES/tryton.mo and b/share/locale/sl_SI/LC_MESSAGES/tryton.mo differ
diff --git a/share/locale/sl_SI/LC_MESSAGES/tryton.po b/share/locale/sl_SI/LC_MESSAGES/tryton.po
index b3f84f2..29fa4e8 100644
--- a/share/locale/sl_SI/LC_MESSAGES/tryton.po
+++ b/share/locale/sl_SI/LC_MESSAGES/tryton.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: tryton 3.0\n"
 "Report-Msgid-Bugs-To: issue_tracker at tryton.org\n"
-"POT-Creation-Date: 2013-10-20 16:34+0200\n"
-"PO-Revision-Date: 2013-10-17 11:35+0200\n"
+"POT-Creation-Date: 2014-04-18 22:49+0200\n"
+"PO-Revision-Date: 2014-03-22 17:10+0100\n"
 "Last-Translator: Venceslav Vezjak <vezjakv at gmail.com>\n"
 "Language-Team: sl_SI <LL at li.org>\n"
 "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 "
@@ -65,62 +65,62 @@ msgstr "Ni možno zapisati konfiguracijske datoteke %s!"
 msgid "Unable to set locale %s"
 msgstr "Ni možno nastaviti krajevnih nastavitev %s"
 
-#: tryton/action/main.py:163
+#: tryton/action/main.py:171
 msgid "Select your action"
 msgstr "Izberi ukrep"
 
-#: tryton/action/main.py:169
+#: tryton/action/main.py:177
 msgid "No action defined!"
 msgstr "Nobenega ukrepa ni določenega!"
 
-#: tryton/common/common.py:270
+#: tryton/common/common.py:284
 msgid "Tryton Connection"
 msgstr "Tryton povezava"
 
-#: tryton/common/common.py:281
+#: tryton/common/common.py:295
 msgid "Server:"
 msgstr "Strežnik:"
 
-#: tryton/common/common.py:299 tryton/gui/window/dblogin.py:79
+#: tryton/common/common.py:313 tryton/gui/window/dblogin.py:79
 msgid "Port:"
 msgstr "Vrata:"
 
-#: tryton/common/common.py:369
+#: tryton/common/common.py:383
 msgid "Selection"
 msgstr "Izbira"
 
-#: tryton/common/common.py:378
+#: tryton/common/common.py:392
 msgid "Your selection:"
 msgstr "Vaša izbira:"
 
-#: tryton/common/common.py:498 tryton/gui/main.py:1407
-#: tryton/gui/window/win_export.py:402
+#: tryton/common/common.py:528 tryton/gui/main.py:1420
+#: tryton/gui/window/win_export.py:409
 #: tryton/gui/window/view_form/view/form_gtk/binary.py:69
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:138
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:150
 #: tryton/gui/window/view_form/view/form_gtk/image.py:74
-#: tryton/gui/window/view_form/view/form_gtk/image.py:158
+#: tryton/gui/window/view_form/view/form_gtk/image.py:161
 #: tryton/gui/window/view_form/view/graph_gtk/parser.py:105
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:656
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:686
 msgid "Save As..."
 msgstr "Shrani kot..."
 
-#: tryton/common/common.py:649
+#: tryton/common/common.py:675
 msgid "Always ignore this warning."
 msgstr "Vedno prezri to opozorilo."
 
-#: tryton/common/common.py:654
+#: tryton/common/common.py:680
 msgid "Do you want to proceed?"
 msgstr "Ali želite nadaljevati?"
 
-#: tryton/common/common.py:673
+#: tryton/common/common.py:699
 msgid "Confirmation"
 msgstr "Potrditev"
 
-#: tryton/common/common.py:779 tryton/common/common.py:1083
+#: tryton/common/common.py:805 tryton/common/common.py:1114
 msgid "Concurrency Exception"
 msgstr "Izjema sočasnega izvajanja"
 
-#: tryton/common/common.py:793
+#: tryton/common/common.py:819
 msgid ""
 "<b>Write Concurrency Warning:</b>\n"
 "\n"
@@ -138,50 +138,50 @@ msgstr ""
 "    - \"Primerjaj\" za vpogled v spremenjeno inačico;\n"
 "    - \"Vseeno zapiši\" za shranitev vaše trenutne inačice."
 
-#: tryton/common/common.py:802
+#: tryton/common/common.py:828
 msgid "Compare"
 msgstr "Primerjaj"
 
-#: tryton/common/common.py:807
+#: tryton/common/common.py:833
 msgid "Write Anyway"
 msgstr "Vseeno zapiši"
 
-#: tryton/common/common.py:833 tryton/gui/window/win_export.py:435
-#: tryton/gui/window/win_import.py:260 tryton/gui/window/win_import.py:288
+#: tryton/common/common.py:859 tryton/gui/window/win_export.py:442
+#: tryton/gui/window/win_import.py:262 tryton/gui/window/win_import.py:290
 msgid "Error"
 msgstr "Napaka"
 
-#: tryton/common/common.py:837
+#: tryton/common/common.py:863
 msgid "Report Bug"
 msgstr "Prijava programske napake"
 
-#: tryton/common/common.py:844
+#: tryton/common/common.py:870
 msgid "Application Error!"
 msgstr "Napaka programa!"
 
-#: tryton/common/common.py:867
+#: tryton/common/common.py:893
 msgid "Error: "
 msgstr "Napaka: "
 
-#: tryton/common/common.py:887
+#: tryton/common/common.py:913
 #, python-format
 msgid "To report bugs you must have an account on <u>%s</u>"
 msgstr "Za prijavo programskih napak morate imeti odprt račun pri <u>%s</u>"
 
-#: tryton/common/common.py:917
+#: tryton/common/common.py:943
 msgid "Bug Tracker"
 msgstr "Sledilnik programskih napak"
 
-#: tryton/common/common.py:935
+#: tryton/common/common.py:961
 msgid "User:"
 msgstr "Uporabnik:"
 
-#: tryton/common/common.py:943 tryton/common/common.py:1101
+#: tryton/common/common.py:969 tryton/common/common.py:1132
 #: tryton/gui/window/dblogin.py:462
 msgid "Password:"
 msgstr "Geslo:"
 
-#: tryton/common/common.py:993
+#: tryton/common/common.py:1024
 msgid ""
 "The same bug was already reported by another user.\n"
 "To keep you informed your username is added to the nosy-list of this issue"
@@ -190,11 +190,11 @@ msgstr ""
 "Zaradi obveščanja je vaše uporabniško ime dodano na seznam te programske "
 "napake"
 
-#: tryton/common/common.py:1004
+#: tryton/common/common.py:1035
 msgid "Created new bug with ID "
 msgstr "Evidentirana je nova programska napaka z ID "
 
-#: tryton/common/common.py:1012 tryton/gui/main.py:921
+#: tryton/common/common.py:1043 tryton/gui/main.py:928
 msgid ""
 "Connection error!\n"
 "Bad username or password!"
@@ -202,11 +202,11 @@ msgstr ""
 "Napaka pri povezavovanju!\n"
 "Napačno uporabniško ime ali geslo!"
 
-#: tryton/common/common.py:1017
+#: tryton/common/common.py:1048
 msgid "Exception:"
 msgstr "Izjema:"
 
-#: tryton/common/common.py:1034
+#: tryton/common/common.py:1065
 msgid ""
 "The server fingerprint has changed since last connection!\n"
 "The application will stop connecting to this server until its fingerprint"
@@ -216,12 +216,12 @@ msgstr ""
 "Program bo ustavil povezovanje na ta strežnik, dokler ne bo njegov prstni"
 " odtis popravljen."
 
-#: tryton/common/common.py:1036
+#: tryton/common/common.py:1067
 msgid "Security risk!"
 msgstr "Varnostno tveganje"
 
-#: tryton/common/common.py:1042 tryton/common/common.py:1108
-#: tryton/gui/main.py:918
+#: tryton/common/common.py:1073 tryton/common/common.py:1139
+#: tryton/gui/main.py:925
 msgid ""
 "Connection error!\n"
 "Unable to connect to the server!"
@@ -229,39 +229,39 @@ msgstr ""
 "Napaka pri povezovanju!\n"
 "Ni se možno povezati na strežnik!"
 
-#: tryton/common/common.py:1123
+#: tryton/common/common.py:1154
 msgid "Network Error!"
 msgstr "Napaka mreže!"
 
-#: tryton/common/common.py:1354
+#: tryton/common/common.py:1409
 msgid "Y"
 msgstr "l"
 
-#: tryton/common/common.py:1355
+#: tryton/common/common.py:1410
 msgid "M"
 msgstr "M"
 
-#: tryton/common/common.py:1356
+#: tryton/common/common.py:1411
 msgid "w"
 msgstr "t"
 
-#: tryton/common/common.py:1357
+#: tryton/common/common.py:1412
 msgid "d"
 msgstr "d"
 
-#: tryton/common/common.py:1358
+#: tryton/common/common.py:1413
 msgid "h"
 msgstr "u"
 
-#: tryton/common/common.py:1359
+#: tryton/common/common.py:1414
 msgid "m"
 msgstr "m"
 
-#: tryton/common/completion.py:22
+#: tryton/common/completion.py:21
 msgid "<i>Search...</i>"
 msgstr "<i>Išči...</i>"
 
-#: tryton/common/completion.py:23
+#: tryton/common/completion.py:22
 msgid "<i>Create...</i>"
 msgstr "<i>Ustvari...</i>"
 
@@ -269,253 +269,257 @@ msgstr "<i>Ustvari...</i>"
 msgid "Open the calendar <F2>"
 msgstr "Odpri koledar <F2>"
 
-#: tryton/common/date_widget.py:271
+#: tryton/common/date_widget.py:275
 msgid "Date Selection"
 msgstr "Izbira datuma"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "y"
 msgstr "d"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "yes"
 msgstr "da"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "true"
-msgstr "resnično"
+msgstr "da"
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "t"
 msgstr "t"
 
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
 msgid "True"
-msgstr "Resnično"
+msgstr "Da"
 
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
 msgid "False"
-msgstr "Neresnično"
+msgstr "Ne"
+
+#: tryton/common/popup_menu.py:72
+msgid "Edit..."
+msgstr "Uredi ..."
 
-#: tryton/common/popup_menu.py:71
+#: tryton/common/popup_menu.py:77
 msgid "Attachments..."
 msgstr "Priponke..."
 
-#: tryton/common/popup_menu.py:76
+#: tryton/common/popup_menu.py:87
 msgid "Actions..."
 msgstr "_Ukrepi..."
 
-#: tryton/common/popup_menu.py:77
+#: tryton/common/popup_menu.py:88
 msgid "Relate..."
 msgstr "_Veze..."
 
-#: tryton/common/popup_menu.py:78
+#: tryton/common/popup_menu.py:89
 msgid "Report..."
 msgstr "Poročila..."
 
-#: tryton/common/popup_menu.py:79
+#: tryton/common/popup_menu.py:90
 msgid "E-Mail..."
 msgstr "_Elektronska pošta..."
 
-#: tryton/common/popup_menu.py:80
+#: tryton/common/popup_menu.py:91
 msgid "Print..."
 msgstr "_Izpis..."
 
-#: tryton/gui/main.py:217
+#: tryton/gui/main.py:218
 msgid "_File"
 msgstr "_Datoteka"
 
-#: tryton/gui/main.py:225
+#: tryton/gui/main.py:226
 msgid "_User"
 msgstr "_Uporabnik"
 
-#: tryton/gui/main.py:239
+#: tryton/gui/main.py:240
 msgid "_Options"
 msgstr "_Možnosti"
 
-#: tryton/gui/main.py:247
+#: tryton/gui/main.py:248
 msgid "Fa_vorites"
 msgstr "P_riljubljeno"
 
-#: tryton/gui/main.py:263
+#: tryton/gui/main.py:264
 msgid "_Help"
 msgstr "_Pomoč"
 
-#: tryton/gui/main.py:285 tryton/gui/window/win_search.py:26
+#: tryton/gui/main.py:286 tryton/gui/window/win_search.py:26
 #: tryton/gui/window/view_form/view/screen_container.py:100
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:333
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:332
 #: tryton/gui/window/view_form/view/form_gtk/many2many.py:40
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:45
 msgid "Search"
 msgstr "Išči"
 
-#: tryton/gui/main.py:364
+#: tryton/gui/main.py:374
 msgid "No result found."
 msgstr "Brez rezultatov."
 
-#: tryton/gui/main.py:384
+#: tryton/gui/main.py:396
 msgid "_Connect..."
 msgstr "_Poveži..."
 
-#: tryton/gui/main.py:393
+#: tryton/gui/main.py:405
 msgid "_Disconnect"
 msgstr "Pre_kini povezavo"
 
-#: tryton/gui/main.py:403
+#: tryton/gui/main.py:415
 msgid "Data_base"
 msgstr "Podatkovna _baza"
 
-#: tryton/gui/main.py:414
+#: tryton/gui/main.py:426
 msgid "_New Database..."
 msgstr "_Nova podatkovna baza ..."
 
-#: tryton/gui/main.py:423
+#: tryton/gui/main.py:435
 msgid "_Restore Database..."
 msgstr "_Obnovitev podatkovne baze ..."
 
-#: tryton/gui/main.py:432
+#: tryton/gui/main.py:444
 msgid "_Backup Database..."
 msgstr "Varnostno _kopiranje podatkovne baze ..."
 
-#: tryton/gui/main.py:441
+#: tryton/gui/main.py:453
 msgid "Dro_p Database..."
 msgstr "_Brisanje podatkovne baze ..."
 
-#: tryton/gui/main.py:450
+#: tryton/gui/main.py:462
 msgid "_Quit..."
 msgstr "_Izhod..."
 
-#: tryton/gui/main.py:465
+#: tryton/gui/main.py:477
 msgid "_Preferences..."
 msgstr "_Nastavitve..."
 
-#: tryton/gui/main.py:476
+#: tryton/gui/main.py:488
 msgid "_Menu Reload"
 msgstr "_Ponovno naloži meni"
 
-#: tryton/gui/main.py:485
+#: tryton/gui/main.py:497
 msgid "_Menu Toggle"
 msgstr "_Preklopi meni"
 
-#: tryton/gui/main.py:492
+#: tryton/gui/main.py:504
 msgid "_Global Search"
 msgstr "_Globalno iskanje"
 
-#: tryton/gui/main.py:507
+#: tryton/gui/main.py:519
 msgid "_Toolbar"
 msgstr "_Orodna vrstica"
 
-#: tryton/gui/main.py:515
+#: tryton/gui/main.py:527
 msgid "_Default"
 msgstr "_Privzeto"
 
-#: tryton/gui/main.py:525
+#: tryton/gui/main.py:537
 msgid "_Text and Icons"
 msgstr "Bese_dilo in ikone"
 
-#: tryton/gui/main.py:535
+#: tryton/gui/main.py:547
 msgid "_Icons"
 msgstr "_Ikone"
 
-#: tryton/gui/main.py:544
+#: tryton/gui/main.py:556
 msgid "_Text"
 msgstr "_Besedilo"
 
-#: tryton/gui/main.py:553
+#: tryton/gui/main.py:565
 msgid "_Menubar"
 msgstr "_Menu vrstica"
 
-#: tryton/gui/main.py:561
+#: tryton/gui/main.py:573
 msgid "Change Accelerators"
 msgstr "Spremeni bližnjice"
 
-#: tryton/gui/main.py:569
+#: tryton/gui/main.py:581
 msgid "_Mode"
 msgstr "_Način"
 
-#: tryton/gui/main.py:577
+#: tryton/gui/main.py:589
 msgid "_Normal"
 msgstr "_Navaden"
 
-#: tryton/gui/main.py:585
+#: tryton/gui/main.py:597
 msgid "_PDA"
 msgstr "_PDA"
 
-#: tryton/gui/main.py:592
+#: tryton/gui/main.py:604
 msgid "_Form"
 msgstr "O_brazec"
 
-#: tryton/gui/main.py:601
+#: tryton/gui/main.py:613
 msgid "Save Width/Height"
 msgstr "Shrani širino/višino"
 
-#: tryton/gui/main.py:612
+#: tryton/gui/main.py:624
 msgid "Save Tree State"
 msgstr "Shrani stanje drevesa"
 
-#: tryton/gui/main.py:624
+#: tryton/gui/main.py:636
 msgid "Spell Checking"
 msgstr "Črkovanje"
 
-#: tryton/gui/main.py:634
+#: tryton/gui/main.py:646
 msgid "Tabs Position"
 msgstr "Položaj zavihkov"
 
-#: tryton/gui/main.py:642
+#: tryton/gui/main.py:654
 msgid "Top"
 msgstr "Zgoraj"
 
-#: tryton/gui/main.py:651
+#: tryton/gui/main.py:663
 msgid "Left"
 msgstr "Levo"
 
-#: tryton/gui/main.py:661
+#: tryton/gui/main.py:673
 msgid "Right"
 msgstr "Desno"
 
-#: tryton/gui/main.py:671
+#: tryton/gui/main.py:683
 msgid "Bottom"
 msgstr "Spodaj"
 
-#: tryton/gui/main.py:680
+#: tryton/gui/main.py:692
 msgid "_Previous Tab"
 msgstr "P_rejšnji zavihek"
 
-#: tryton/gui/main.py:686
+#: tryton/gui/main.py:698
 msgid "_Next Tab"
 msgstr "_Naslednji zavihek"
 
-#: tryton/gui/main.py:692
+#: tryton/gui/main.py:704
 msgid "Search Limit..."
 msgstr "Omejitev iskanja..."
 
-#: tryton/gui/main.py:698
+#: tryton/gui/main.py:710
 msgid "_Email..."
 msgstr "_Epošta..."
 
-#: tryton/gui/main.py:706
+#: tryton/gui/main.py:718
 msgid "_Save Options"
 msgstr "_Shrani možnosti"
 
-#: tryton/gui/main.py:718
+#: tryton/gui/main.py:730
 msgid "_Tips..."
 msgstr "_Nasveti..."
 
-#: tryton/gui/main.py:727
+#: tryton/gui/main.py:739
 msgid "_Keyboard Shortcuts..."
 msgstr "_Bližnjice na tipkovnici..."
 
-#: tryton/gui/main.py:736
+#: tryton/gui/main.py:748
 msgid "_About..."
 msgstr "_Vizitka..."
 
-#: tryton/gui/main.py:787
+#: tryton/gui/main.py:799
 msgid "Manage Favorites"
 msgstr "_Upravljaj zaznamke"
 
-#: tryton/gui/main.py:935
+#: tryton/gui/main.py:942
 msgid ""
 "The following action requires to close all tabs.\n"
 "Do you want to continue?"
@@ -523,11 +527,11 @@ msgstr ""
 "Za naslednji ukrep morajo biti vsi zavihki zaprti.\n"
 "Ali želite nadaljevati?"
 
-#: tryton/gui/main.py:1196
+#: tryton/gui/main.py:1206
 msgid "Close Tab"
 msgstr "Zapri zavihek"
 
-#: tryton/gui/main.py:1314
+#: tryton/gui/main.py:1327
 msgid ""
 "You are going to delete a Tryton database.\n"
 "Are you really sure to proceed?"
@@ -535,7 +539,7 @@ msgstr ""
 "Nameravate izbrisati Tryton podatkovno bazo.\n"
 "Ali ste res želite nadaljevati?"
 
-#: tryton/gui/main.py:1324
+#: tryton/gui/main.py:1337
 msgid ""
 "Wrong Tryton Server Password\n"
 "Please try again."
@@ -543,28 +547,28 @@ msgstr ""
 "Napačno geslo za Tryton strežnik.\n"
 "Prosimo, poskusite še enkrat."
 
-#: tryton/gui/main.py:1326 tryton/gui/main.py:1362 tryton/gui/main.py:1398
-#: tryton/gui/window/dbcreate.py:382
+#: tryton/gui/main.py:1339 tryton/gui/main.py:1375 tryton/gui/main.py:1411
+#: tryton/gui/window/dbcreate.py:384
 msgid "Access denied!"
 msgstr "Dostop zavrnjen!"
 
-#: tryton/gui/main.py:1329
+#: tryton/gui/main.py:1342
 msgid "Database drop failed with error message:\n"
 msgstr "Brisanje podatkovne baze je odpovedalo z napako:\n"
 
-#: tryton/gui/main.py:1330
+#: tryton/gui/main.py:1343
 msgid "Database drop failed!"
 msgstr "Brisanje podatkovne baze je odpovedalo!"
 
-#: tryton/gui/main.py:1332
+#: tryton/gui/main.py:1345
 msgid "Database dropped successfully!"
 msgstr "Brisanje podatkovne baze uspešno zaključeno!"
 
-#: tryton/gui/main.py:1337
+#: tryton/gui/main.py:1350
 msgid "Open Backup File to Restore..."
 msgstr "Odpri varnostno kopijo za obnovitev..."
 
-#: tryton/gui/main.py:1354
+#: tryton/gui/main.py:1367
 msgid ""
 "It is not possible to restore a password protected database.\n"
 "Backup and restore needed to be proceed manual."
@@ -572,11 +576,11 @@ msgstr ""
 "Ni možno obnoviti podatkovne baze, ki so zaščitene z geslom.\n"
 "Varnostno kopiranje in obnovitev se mora ročno izvesti."
 
-#: tryton/gui/main.py:1358 tryton/gui/main.py:1394
+#: tryton/gui/main.py:1371 tryton/gui/main.py:1407
 msgid "Database is password protected!"
 msgstr "Podatkovna baza je zaščitena z geslom!"
 
-#: tryton/gui/main.py:1360 tryton/gui/main.py:1396
+#: tryton/gui/main.py:1373 tryton/gui/main.py:1409
 msgid ""
 "Wrong Tryton Server Password.\n"
 "Please try again."
@@ -584,19 +588,19 @@ msgstr ""
 "Napačno geslo za Tryton strežnik.\n"
 "Prosimo, poskusite še enkrat."
 
-#: tryton/gui/main.py:1365
+#: tryton/gui/main.py:1378
 msgid "Database restore failed with error message:\n"
 msgstr "Obnovitev podatkovne baze je odpovedala z napako:\n"
 
-#: tryton/gui/main.py:1367 tryton/gui/main.py:1372
+#: tryton/gui/main.py:1380 tryton/gui/main.py:1385
 msgid "Database restore failed!"
 msgstr "Obnovitev podatkovne baze je odpovedala!"
 
-#: tryton/gui/main.py:1370
+#: tryton/gui/main.py:1383
 msgid "Database restored successfully!"
 msgstr "Obnovitev podatkovne baze uspešno zaključena!"
 
-#: tryton/gui/main.py:1391
+#: tryton/gui/main.py:1404
 msgid ""
 "It is not possible to dump a password protected Database.\n"
 "Backup and restore needed to be proceed manual."
@@ -604,75 +608,75 @@ msgstr ""
 "Ni možno zapisati podatkovne baze, ki je zaščitena z geslom.\n"
 "Varnostno kopiranje in obnovitev se mora ročno izvesti."
 
-#: tryton/gui/main.py:1401
+#: tryton/gui/main.py:1414
 msgid "Database dump failed with error message:\n"
 msgstr "Zapisovanje podatkovne baze je odpovedalo z napako:\n"
 
-#: tryton/gui/main.py:1403
+#: tryton/gui/main.py:1416
 msgid "Database dump failed!"
 msgstr "Zapisovanje podatkovne baze odpovedalo!"
 
-#: tryton/gui/main.py:1414
+#: tryton/gui/main.py:1427
 msgid "Database backuped successfully!"
 msgstr "Varnostno kopiranje podatkovne baze uspešno zaključeno!"
 
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
 msgid "New"
 msgstr "Novo"
 
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
 msgid "Create a new record"
 msgstr "Ustvari nov zapis"
 
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
 #: tryton/gui/window/win_export.py:142
 msgid "Save"
 msgstr "Shrani"
 
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
 msgid "Save this record"
 msgstr "Shrani ta zapis"
 
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
-#: tryton/gui/window/win_form.py:228
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
+#: tryton/gui/window/win_form.py:232
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:154
 msgid "Switch"
 msgstr "Preklopi"
 
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
 msgid "Switch view"
 msgstr "Preklopi pogled"
 
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
 msgid "_Reload"
 msgstr "_Ponovno naloži"
 
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
 msgid "Reload"
 msgstr "Ponovno naloži"
 
-#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:48
+#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:50
 msgid "_New"
 msgstr "_Nov"
 
-#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:49
-#: tryton/gui/window/win_form.py:66
+#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:51
+#: tryton/gui/window/win_form.py:67
 msgid "_Save"
 msgstr "_Shrani"
 
-#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:50
+#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:52
 msgid "_Switch View"
 msgstr "Preklopi po_gled"
 
-#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:52
+#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:54
 msgid "_Reload/Undo"
 msgstr "Ponovno naloži/Razvel_javi"
 
-#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:56
+#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:58
 msgid "_Delete..."
 msgstr "Z_briši..."
 
-#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:65
+#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:68
 msgid "_Close Tab"
 msgstr "Zapri zavi_hek"
 
@@ -706,28 +710,28 @@ msgstr ""
 "naslov in vrata (ponavadi 8000) strežnika nista blokirana.\n"
 "Za spremembo naslova klikni na 'Spremeni'."
 
-#: tryton/gui/window/dbcreate.py:137
+#: tryton/gui/window/dbcreate.py:139
 msgid "Create new database"
 msgstr "Ustvari novo podatkovno bazo"
 
-#: tryton/gui/window/dbcreate.py:147
+#: tryton/gui/window/dbcreate.py:149
 msgid "C_reate"
 msgstr "_Ustvari"
 
-#: tryton/gui/window/dbcreate.py:155
+#: tryton/gui/window/dbcreate.py:157
 msgid "Create the new database."
 msgstr "Ustvari novo podatkovno bazo."
 
-#: tryton/gui/window/dbcreate.py:166
+#: tryton/gui/window/dbcreate.py:168
 msgid "Server Setup:"
 msgstr "Nastavitev strežnika:"
 
-#: tryton/gui/window/dbcreate.py:171
+#: tryton/gui/window/dbcreate.py:173
 msgid "Server connection:"
 msgstr "Povezava do strežnika:"
 
-#: tryton/gui/window/dbcreate.py:180 tryton/gui/window/dbdumpdrop.py:140
-#: tryton/gui/window/dbrestore.py:86
+#: tryton/gui/window/dbcreate.py:182 tryton/gui/window/dbdumpdrop.py:140
+#: tryton/gui/window/dbrestore.py:88
 msgid ""
 "This is the URL of the server. Use server 'localhost' and port '8000' if "
 "the server is installed on this computer. Click on 'Change' to change the"
@@ -737,22 +741,22 @@ msgstr ""
 "uporabi strežnik 'localhost' in vrata '8000'. Za spremembo naslova klikni"
 " na 'Spremeni'."
 
-#: tryton/gui/window/dbcreate.py:183 tryton/gui/window/dbdumpdrop.py:147
-#: tryton/gui/window/dbrestore.py:91
+#: tryton/gui/window/dbcreate.py:185 tryton/gui/window/dbdumpdrop.py:147
+#: tryton/gui/window/dbrestore.py:93
 msgid "C_hange"
 msgstr "_Spremeni"
 
-#: tryton/gui/window/dbcreate.py:192 tryton/gui/window/dbrestore.py:97
+#: tryton/gui/window/dbcreate.py:194 tryton/gui/window/dbrestore.py:99
 msgid "Setup the server connection..."
 msgstr "Nastavi povezavo s strežnikom..."
 
-#: tryton/gui/window/dbcreate.py:195 tryton/gui/window/dbdumpdrop.py:186
-#: tryton/gui/window/dbrestore.py:100
+#: tryton/gui/window/dbcreate.py:197 tryton/gui/window/dbdumpdrop.py:186
+#: tryton/gui/window/dbrestore.py:102
 msgid "Tryton Server Password:"
 msgstr "Geslo za Tryton strežnik:"
 
-#: tryton/gui/window/dbcreate.py:205 tryton/gui/window/dbdumpdrop.py:196
-#: tryton/gui/window/dbrestore.py:109
+#: tryton/gui/window/dbcreate.py:207 tryton/gui/window/dbdumpdrop.py:196
+#: tryton/gui/window/dbrestore.py:111
 msgid ""
 "This is the password of the Tryton server. It doesn't belong to a real "
 "user. This password is usually defined in the trytond configuration."
@@ -760,15 +764,15 @@ msgstr ""
 "To je geslo Tryton strežnika in ni povezano s pravim uporabnikom. To "
 "geslo je ponavadi določeno v trytond konfiguraciji."
 
-#: tryton/gui/window/dbcreate.py:216
+#: tryton/gui/window/dbcreate.py:218
 msgid "New database setup:"
 msgstr "Namestitev nove podatkovne baze:"
 
-#: tryton/gui/window/dbcreate.py:222
+#: tryton/gui/window/dbcreate.py:224
 msgid "Database name:"
 msgstr "Ime podatkovne baze:"
 
-#: tryton/gui/window/dbcreate.py:234
+#: tryton/gui/window/dbcreate.py:236
 msgid ""
 "Choose the name of the new database.\n"
 "Allowed characters are alphanumerical or _ (underscore)\n"
@@ -780,11 +784,11 @@ msgstr ""
 "Izogibaj se vsem znakom za naglaševanje, presledku ali posebnim znakom! "
 "Primer: tryton"
 
-#: tryton/gui/window/dbcreate.py:241
+#: tryton/gui/window/dbcreate.py:243
 msgid "Default language:"
 msgstr "Privzet jezik:"
 
-#: tryton/gui/window/dbcreate.py:251
+#: tryton/gui/window/dbcreate.py:253
 msgid ""
 "Choose the default language that will be installed for this database. You"
 " will be able to install new languages after installation through the "
@@ -793,11 +797,11 @@ msgstr ""
 "Izberi privzet jezik, ki bo nameščen za to podatkovno bazo. Po namestitvi"
 " lahko nove jezike dodate preko skrbniškega menija."
 
-#: tryton/gui/window/dbcreate.py:255
+#: tryton/gui/window/dbcreate.py:257
 msgid "Admin password:"
 msgstr "Skrbniško geslo:"
 
-#: tryton/gui/window/dbcreate.py:265
+#: tryton/gui/window/dbcreate.py:267
 msgid ""
 "Choose a password for the admin user of the new database. With these "
 "credentials you will be later able to login into the database:\n"
@@ -809,15 +813,15 @@ msgstr ""
 "Uporabniško ime: admin\n"
 "Geslo: <tu nastavljeno geslo>"
 
-#: tryton/gui/window/dbcreate.py:273
+#: tryton/gui/window/dbcreate.py:275
 msgid "Confirm admin password:"
 msgstr "Potrdi skrbniško geslo:"
 
-#: tryton/gui/window/dbcreate.py:282
+#: tryton/gui/window/dbcreate.py:284
 msgid "Type the Admin password again"
 msgstr "Ponovno vtipkaj skrbniško geslo"
 
-#: tryton/gui/window/dbcreate.py:330
+#: tryton/gui/window/dbcreate.py:332
 msgid ""
 "The database name is restricted to alpha-nummerical characters and \"_\" "
 "(underscore). Avoid all accents, space and any other special characters."
@@ -826,29 +830,29 @@ msgstr ""
 "(podčrtaj). Izogibaj se vsem znakom za naglaševanje, presledku ali drugim"
 " posebnim znakom."
 
-#: tryton/gui/window/dbcreate.py:335
+#: tryton/gui/window/dbcreate.py:337
 msgid "Wrong characters in database name!"
 msgstr "Nedovoljeni znaki v imenu podatkovne baze!"
 
-#: tryton/gui/window/dbcreate.py:339
+#: tryton/gui/window/dbcreate.py:341
 msgid "The new admin password doesn't match the confirmation field.\n"
 msgstr "Novo skrbniško geslo se ne ujema s tistim v potrditvenem polju.\n"
 
-#: tryton/gui/window/dbcreate.py:341
+#: tryton/gui/window/dbcreate.py:343
 msgid "Passwords doesn't match!"
 msgstr "Gesli se ne ujemata!"
 
-#: tryton/gui/window/dbcreate.py:344
+#: tryton/gui/window/dbcreate.py:346
 msgid "Admin password and confirmation are required to create a new database."
 msgstr ""
 "Skrbniško geslo in potrditev gesla sta potrebna za izdelavo podatkovne "
 "baze."
 
-#: tryton/gui/window/dbcreate.py:346
+#: tryton/gui/window/dbcreate.py:348
 msgid "Missing admin password!"
 msgstr "Manjka skrbniško geslo!"
 
-#: tryton/gui/window/dbcreate.py:361
+#: tryton/gui/window/dbcreate.py:363
 msgid ""
 "A database with the same name already exists.\n"
 "Try another database name."
@@ -856,15 +860,15 @@ msgstr ""
 "Podatkovna baza s tem imenom že obstaja.\n"
 "Poskusi z drugim imenom."
 
-#: tryton/gui/window/dbcreate.py:364
+#: tryton/gui/window/dbcreate.py:366
 msgid "This database name already exist!"
 msgstr "To ime podatkovne baze že obstaja!"
 
-#: tryton/gui/window/dbcreate.py:379
+#: tryton/gui/window/dbcreate.py:381
 msgid "Sorry, wrong password for the Tryton server. Please try again."
 msgstr "Žal napačno geslo za Tryton strežnik. Prosim, poskusi znova."
 
-#: tryton/gui/window/dbcreate.py:387
+#: tryton/gui/window/dbcreate.py:389
 msgid ""
 "Can't create the database, caused by an unknown reason.\n"
 "If there is a database created, it could be broken. Maybe drop this "
@@ -876,7 +880,7 @@ msgstr ""
 "zbrišete! Prosimo, preveri sporočilo napake za dodatne informacije.\n"
 "Sporočilo napake:\n"
 
-#: tryton/gui/window/dbcreate.py:395
+#: tryton/gui/window/dbcreate.py:397
 msgid "Error creating database!"
 msgstr "Napaka pri izdelavi podatkovne baze!"
 
@@ -924,7 +928,7 @@ msgstr "Zbriši izbrano podatkovno bazo."
 msgid "Choose a Tryton database to delete:"
 msgstr "Za brisanje izberi Tryton podatkovno bazo:"
 
-#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:75
+#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:77
 msgid "Server Connection:"
 msgstr "Povezava do strežnika:"
 
@@ -1015,15 +1019,15 @@ msgstr "Strežnik:"
 msgid "User name:"
 msgstr "Uporabnik:"
 
-#: tryton/gui/window/dbrestore.py:64
+#: tryton/gui/window/dbrestore.py:66
 msgid "Restore Database"
 msgstr "Obnovitev podatkovne baze"
 
-#: tryton/gui/window/dbrestore.py:117
+#: tryton/gui/window/dbrestore.py:119
 msgid "File to Restore:"
 msgstr "Datoteka za obnovitev:"
 
-#: tryton/gui/window/dbrestore.py:131
+#: tryton/gui/window/dbrestore.py:133
 msgid ""
 "Choose the name of the database to be restored.\n"
 "Allowed characters are alphanumerical or _ (underscore)\n"
@@ -1036,15 +1040,15 @@ msgstr ""
 "znakom.\n"
 "Primer: tryton"
 
-#: tryton/gui/window/dbrestore.py:137
+#: tryton/gui/window/dbrestore.py:139
 msgid "New Database Name:"
 msgstr "Novo ime podatkovne baze:"
 
-#: tryton/gui/window/dbrestore.py:140
+#: tryton/gui/window/dbrestore.py:142
 msgid "Update Database:"
 msgstr "Posodobitev podatkovne baze:"
 
-#: tryton/gui/window/dbrestore.py:144
+#: tryton/gui/window/dbrestore.py:146
 msgid ""
 "Check for an automatic database update after restoring a database from a "
 "previous Tryton version."
@@ -1052,11 +1056,11 @@ msgstr ""
 "Po obnovitvi podatkovne baze iz prejšnje Tryton inačice preveri samodejno"
 " posodabljanje podatkovne baze."
 
-#: tryton/gui/window/dbrestore.py:154
+#: tryton/gui/window/dbrestore.py:156
 msgid "Restore"
 msgstr "Obnovi"
 
-#: tryton/gui/window/dbrestore.py:163
+#: tryton/gui/window/dbrestore.py:165
 msgid "Restore the database from file."
 msgstr "Obnovitev podatkovne baze iz datoteke."
 
@@ -1096,154 +1100,158 @@ msgstr "Vsebina:"
 msgid "Attachment:"
 msgstr "Priponka:"
 
-#: tryton/gui/window/form.py:39 tryton/gui/window/tips.py:74
-#: tryton/gui/window/win_form.py:201
-#: tryton/gui/window/view_form/view/screen_container.py:165
+#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:74
+#: tryton/gui/window/win_form.py:205
+#: tryton/gui/window/view_form/view/screen_container.py:163
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:128
 msgid "Previous"
 msgstr "Prejšnji"
 
-#: tryton/gui/window/form.py:40
+#: tryton/gui/window/form.py:42
 msgid "Previous Record"
 msgstr "Prejšnji zapis"
 
-#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:81
-#: tryton/gui/window/win_form.py:215
-#: tryton/gui/window/view_form/view/screen_container.py:177
+#: tryton/gui/window/form.py:43 tryton/gui/window/tips.py:81
+#: tryton/gui/window/win_form.py:219
+#: tryton/gui/window/view_form/view/screen_container.py:175
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:142
 msgid "Next"
 msgstr "Naslednji"
 
-#: tryton/gui/window/form.py:41
+#: tryton/gui/window/form.py:43
 msgid "Next Record"
 msgstr "Naslednji zapis"
 
-#: tryton/gui/window/form.py:44
+#: tryton/gui/window/form.py:46
 msgid "Attachment(0)"
 msgstr "Priponka(0)"
 
-#: tryton/gui/window/form.py:45
+#: tryton/gui/window/form.py:47
 msgid "Add an attachment to the record"
 msgstr "Dodaj priponko zapisu"
 
-#: tryton/gui/window/form.py:54
+#: tryton/gui/window/form.py:56
 msgid "_Duplicate"
 msgstr "_Podvoji"
 
-#: tryton/gui/window/form.py:59
+#: tryton/gui/window/form.py:61
 msgid "_Previous"
 msgstr "P_rejšnji"
 
-#: tryton/gui/window/form.py:61
+#: tryton/gui/window/form.py:63
 msgid "_Next"
 msgstr "Nas_lednji"
 
-#: tryton/gui/window/form.py:62
+#: tryton/gui/window/form.py:64
 msgid "_Search"
 msgstr "_Išči"
 
-#: tryton/gui/window/form.py:63
+#: tryton/gui/window/form.py:65
 msgid "View _Logs..."
 msgstr "Poglej dnevni_k..."
 
-#: tryton/gui/window/form.py:68
+#: tryton/gui/window/form.py:66
+msgid "Show revisions..."
+msgstr "Prikaži različice ..."
+
+#: tryton/gui/window/form.py:71
 msgid "A_ttachments..."
 msgstr "P_riponke..."
 
-#: tryton/gui/window/form.py:70
+#: tryton/gui/window/form.py:73
 msgid "_Actions..."
 msgstr "_Ukrepi..."
 
-#: tryton/gui/window/form.py:72
+#: tryton/gui/window/form.py:75
 msgid "_Relate..."
 msgstr "_Veze..."
 
-#: tryton/gui/window/form.py:75
+#: tryton/gui/window/form.py:78
 msgid "_Report..."
 msgstr "P_oročila..."
 
-#: tryton/gui/window/form.py:77
+#: tryton/gui/window/form.py:80
 msgid "_E-Mail..."
 msgstr "_Elektronska pošta..."
 
-#: tryton/gui/window/form.py:79
+#: tryton/gui/window/form.py:82
 msgid "_Print..."
 msgstr "_Tiskaj..."
 
-#: tryton/gui/window/form.py:82
+#: tryton/gui/window/form.py:85
 msgid "_Export Data..."
 msgstr "I_zvozi podatke..."
 
-#: tryton/gui/window/form.py:84
+#: tryton/gui/window/form.py:87
 msgid "_Import Data..."
 msgstr "Uv_ozi podatke..."
 
-#: tryton/gui/window/form.py:219
+#: tryton/gui/window/form.py:216
 #, python-format
 msgid "Attachment(%d)"
 msgstr "Priponka(%d)"
 
-#: tryton/gui/window/form.py:237
+#: tryton/gui/window/form.py:234
 msgid "You have to select one record!"
 msgstr "Izbrati moraš zapis!"
 
-#: tryton/gui/window/form.py:241
+#: tryton/gui/window/form.py:238
 msgid "ID:"
 msgstr "ID:"
 
-#: tryton/gui/window/form.py:242
+#: tryton/gui/window/form.py:239
 msgid "Creation User:"
 msgstr "Ustvaril:"
 
-#: tryton/gui/window/form.py:243
+#: tryton/gui/window/form.py:240
 msgid "Creation Date:"
 msgstr "Ustvarjeno:"
 
-#: tryton/gui/window/form.py:244
+#: tryton/gui/window/form.py:241
 msgid "Latest Modification by:"
 msgstr "Nazadnje popravil:"
 
-#: tryton/gui/window/form.py:245
+#: tryton/gui/window/form.py:242
 msgid "Latest Modification Date:"
 msgstr "Nazadnje popravljeno:"
 
-#: tryton/gui/window/form.py:263
+#: tryton/gui/window/form.py:260
 msgid "Model:"
 msgstr "Model:"
 
-#: tryton/gui/window/form.py:271
+#: tryton/gui/window/form.py:304
 msgid "Are you sure to remove this record?"
 msgstr "Ali res želiš izbrisati ta zapis?"
 
-#: tryton/gui/window/form.py:273
+#: tryton/gui/window/form.py:306
 msgid "Are you sure to remove those records?"
 msgstr "Ali res želiš izbrisati te zapise?"
 
-#: tryton/gui/window/form.py:276
+#: tryton/gui/window/form.py:309
 msgid "Records not removed!"
 msgstr "Zapisi niso izbrisani!"
 
-#: tryton/gui/window/form.py:278
+#: tryton/gui/window/form.py:311
 msgid "Records removed!"
 msgstr "Zapisi izbrisani!"
 
-#: tryton/gui/window/form.py:318
+#: tryton/gui/window/form.py:345
 msgid "Working now on the duplicated record(s)!"
 msgstr "Sedaj se dela na podvojenih zapisih!"
 
-#: tryton/gui/window/form.py:325
+#: tryton/gui/window/form.py:352
 msgid "Record saved!"
 msgstr "Zapis shranjen!"
 
-#: tryton/gui/window/form.py:328
+#: tryton/gui/window/form.py:355
 msgid "Invalid form!"
 msgstr "Neveljaven obrazec!"
 
-#: tryton/gui/window/form.py:436
+#: tryton/gui/window/form.py:462
 msgid " of "
 msgstr " od "
 
-#: tryton/gui/window/form.py:457
+#: tryton/gui/window/form.py:483
 msgid ""
 "This record has been modified\n"
 "do you want to save it ?"
@@ -1251,46 +1259,52 @@ msgstr ""
 "Ta zapis je bil spremenjen,\n"
 "ga želiš shraniti?"
 
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
 msgid "Action"
 msgstr "Ukrep"
 
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
 msgid "Launch action"
 msgstr "Zaženi ukrep"
 
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
 msgid "Relate"
 msgstr "Veza"
 
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
 msgid "Open related records"
 msgstr "Odpri vezo"
 
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
 msgid "Report"
 msgstr "Poročila"
 
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
 msgid "Open report"
 msgstr "Odpri poročilo"
 
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
 msgid "E-Mail"
 msgstr "Pošlji"
 
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
 msgid "E-Mail report"
 msgstr "Pošlji poročilo"
 
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
 msgid "Print"
 msgstr "Tisk"
 
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
 msgid "Print report"
 msgstr "Izpis poročila"
 
+#: tryton/gui/window/form.py:607
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:257
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:1050
+msgid "Unknown"
+msgstr "Neznano"
+
 #: tryton/gui/window/limit.py:17
 msgid "Limit"
 msgstr "Omejitev"
@@ -1319,6 +1333,18 @@ msgstr "Nastavitev"
 msgid "Current Password:"
 msgstr "Trenutno geslo:"
 
+#: tryton/gui/window/revision.py:20
+msgid "Revision"
+msgstr "Različica"
+
+#: tryton/gui/window/revision.py:29
+msgid "Select a revision"
+msgstr "Izberi različico"
+
+#: tryton/gui/window/revision.py:32
+msgid "Revision:"
+msgstr "Različica:"
+
 #: tryton/gui/window/shortcuts.py:17
 msgid "Keyboard Shortcuts"
 msgstr "Bližnjice"
@@ -1496,21 +1522,21 @@ msgstr "Dodaj imena _polj"
 msgid "Name"
 msgstr "Naziv"
 
-#: tryton/gui/window/win_export.py:306
+#: tryton/gui/window/win_export.py:309
 msgid "What is the name of this export?"
 msgstr "Kako se imenuje ta izvoz?"
 
-#: tryton/gui/window/win_export.py:429
+#: tryton/gui/window/win_export.py:436
 #, python-format
 msgid "%d record saved!"
 msgstr "%d zapis shranjen!"
 
-#: tryton/gui/window/win_export.py:431
+#: tryton/gui/window/win_export.py:438
 #, python-format
 msgid "%d records saved!"
 msgstr "%d zapisov shranjenih!"
 
-#: tryton/gui/window/win_export.py:434
+#: tryton/gui/window/win_export.py:441
 #, python-format
 msgid ""
 "Operation failed!\n"
@@ -1525,26 +1551,26 @@ msgstr ""
 msgid "Link"
 msgstr "Povezava"
 
-#: tryton/gui/window/win_form.py:134
+#: tryton/gui/window/win_form.py:136
 msgid "Add"
 msgstr "Dodaj"
 
-#: tryton/gui/window/win_form.py:147
+#: tryton/gui/window/win_form.py:149
 msgid "Remove <Del>"
 msgstr "Odstrani <Del>"
 
-#: tryton/gui/window/win_form.py:162
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:73
+#: tryton/gui/window/win_form.py:164
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:75
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:86
 msgid "Create a new record <F3>"
 msgstr "Ustvari nov zapis <F3>"
 
-#: tryton/gui/window/win_form.py:174
+#: tryton/gui/window/win_form.py:176
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:106
 msgid "Delete selected record <Del>"
 msgstr "Zbriši izbran zapis <Del>"
 
-#: tryton/gui/window/win_form.py:188
+#: tryton/gui/window/win_form.py:190
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:116
 msgid "Undelete selected record <Ins>"
 msgstr "Povrni izbran zapis <Ins>"
@@ -1567,10 +1593,10 @@ msgstr "Datoteka za uvoz:"
 
 #: tryton/gui/window/win_import.py:111
 #: tryton/gui/window/view_form/view/form_gtk/binary.py:57
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:111
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:118
 #: tryton/gui/window/view_form/view/form_gtk/image.py:62
 #: tryton/gui/window/view_form/view/form_gtk/image.py:131
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:624
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:650
 msgid "Open..."
 msgstr "Odpri..."
 
@@ -1594,19 +1620,19 @@ msgstr "Kodiranje:"
 msgid "Lines to Skip:"
 msgstr "Izpuščene vrstice:"
 
-#: tryton/gui/window/win_import.py:184 tryton/gui/window/win_import.py:189
+#: tryton/gui/window/win_import.py:185 tryton/gui/window/win_import.py:190
 msgid "Field name"
 msgstr "Naziv polja"
 
-#: tryton/gui/window/win_import.py:249
+#: tryton/gui/window/win_import.py:251
 msgid "You must select an import file first!"
 msgstr "Najprej morate izbrati datoteke za uvažanje!"
 
-#: tryton/gui/window/win_import.py:260
+#: tryton/gui/window/win_import.py:262
 msgid "Error opening CSV file"
 msgstr "Napaka pri odpiranju CSV datoteke"
 
-#: tryton/gui/window/win_import.py:287
+#: tryton/gui/window/win_import.py:289
 #, python-format
 msgid "Error processing the file at field %s."
 msgstr "Napaka obdelave datoteke pri polju %s."
@@ -1621,24 +1647,7 @@ msgstr "%d zapis uvožen!"
 msgid "%d records imported!"
 msgstr "%d zapisov uvoženih!"
 
-#: tryton/gui/window/win_import.py:371
-msgid "Importation Error!"
-msgstr "Napaka uvažanja!"
-
-#: tryton/gui/window/win_import.py:372
-#, python-format
-msgid ""
-"Error importing record %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-msgstr ""
-"Napaka pri uvozu zapisa %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-
-#: tryton/gui/window/wizard.py:291
+#: tryton/gui/window/wizard.py:286
 msgid "Wizard"
 msgstr "Čarovnik"
 
@@ -1647,39 +1656,35 @@ msgstr "Čarovnik"
 msgid "No String Attr."
 msgstr "Ni atributov."
 
-#: tryton/gui/window/view_form/screen/screen.py:135
+#: tryton/gui/window/view_form/screen/screen.py:129
 msgid "ID"
 msgstr "ID"
 
-#: tryton/gui/window/view_form/screen/screen.py:136
+#: tryton/gui/window/view_form/screen/screen.py:130
 msgid "Creation User"
 msgstr "Ustvaril"
 
-#: tryton/gui/window/view_form/screen/screen.py:137
+#: tryton/gui/window/view_form/screen/screen.py:131
 msgid "Creation Date"
 msgstr "Ustvarjeno"
 
-#: tryton/gui/window/view_form/screen/screen.py:138
+#: tryton/gui/window/view_form/screen/screen.py:132
 msgid "Modification User"
 msgstr "Popravil"
 
-#: tryton/gui/window/view_form/screen/screen.py:139
+#: tryton/gui/window/view_form/screen/screen.py:133
 msgid "Modification Date"
 msgstr "Popravljeno"
 
-#: tryton/gui/window/view_form/screen/screen.py:634
+#: tryton/gui/window/view_form/screen/screen.py:631
 msgid "Unable to get view tree state"
 msgstr "Stanja obrazca ni možno dobiti"
 
-#: tryton/gui/window/view_form/screen/screen.py:671
+#: tryton/gui/window/view_form/screen/screen.py:668
 msgid "Unable to set view tree state"
 msgstr "Ni možno nastaviti stanja obrazca"
 
-#: tryton/gui/window/view_form/view/list.py:651
-msgid "You must select a record to use the relation!"
-msgstr "Za uporabo te veze morate izbrati zapis!"
-
-#: tryton/gui/window/view_form/view/screen_container.py:25
+#: tryton/gui/window/view_form/view/screen_container.py:23
 msgid ".."
 msgstr ".."
 
@@ -1687,19 +1692,19 @@ msgstr ".."
 msgid "F_ilters"
 msgstr "_Filtri"
 
-#: tryton/gui/window/view_form/view/screen_container.py:149
+#: tryton/gui/window/view_form/view/screen_container.py:147
 msgid "Show bookmarks of filters"
 msgstr "Prikaži zaznamke filtrov"
 
-#: tryton/gui/window/view_form/view/screen_container.py:314
+#: tryton/gui/window/view_form/view/screen_container.py:312
 msgid "Remove this bookmark"
 msgstr "Odstrani ta zaznamek"
 
-#: tryton/gui/window/view_form/view/screen_container.py:321
+#: tryton/gui/window/view_form/view/screen_container.py:319
 msgid "Bookmark this filter"
 msgstr "Shrani ta filter"
 
-#: tryton/gui/window/view_form/view/screen_container.py:380
+#: tryton/gui/window/view_form/view/screen_container.py:384
 msgid "Bookmark Name:"
 msgstr "Ime zaznamka:"
 
@@ -1727,24 +1732,24 @@ msgstr "Teden"
 msgid "Select a File..."
 msgstr "Izberi datoteko..."
 
-#: tryton/gui/window/view_form/view/form_gtk/char.py:157
+#: tryton/gui/window/view_form/view/form_gtk/char.py:161
 msgid "Show plain text"
 msgstr "Prikaži navadno besedilo"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:349
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:348
 msgid "Add value"
 msgstr "Dodaj vrednost"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:459
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:461
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:199
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:201
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:458
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:460
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:202
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:204
 #: tryton/gui/window/view_form/view/form_gtk/parser.py:255
 #: tryton/gui/window/view_form/view/form_gtk/parser.py:259
 msgid ":"
 msgstr ":"
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:471
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:470
 #, python-format
 msgid "Remove \"%s\""
 msgstr "Odstrani \"%s\""
@@ -1761,23 +1766,23 @@ msgstr "Vse datoteke"
 msgid "Images"
 msgstr "Slike"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:175
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:178
 msgid "Translation"
 msgstr "Prevod"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:231
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:234
 msgid "Edit"
 msgstr "Uredi"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:236
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:239
 msgid "Fuzzy"
 msgstr "Nejasno"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:305
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:308
 msgid "You need to save the record before adding translations!"
 msgstr "Pred dodajanjem prevodov morate zapis shraniti!"
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:316
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:319
 msgid "No other language available!"
 msgstr "Drugih jezikov ni na voljo!"
 
@@ -1790,12 +1795,12 @@ msgstr "Dodaj obstoječi zapis"
 msgid "Remove selected record <Del>"
 msgstr "Odstrani izbran zapis <Del>"
 
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:74
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:351
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:76
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:356
 msgid "Open a record <F2>"
 msgstr "Odpri zapis <F2>"
 
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:354
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:359
 msgid "Search a record <F2>"
 msgstr "Poišči zapis <F2>"
 
@@ -1887,15 +1892,10 @@ msgstr "PNG slika (*.png)"
 msgid "Image size too large!"
 msgstr "Slika je prevelika!"
 
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:245
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:244
 msgid ": "
 msgstr ": "
 
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:258
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:1023
-msgid "Unknown"
-msgstr "Neznano"
-
 #: tryton/plugins/translation/__init__.py:18
 msgid "Translate view"
 msgstr "Prevedi pogled"
diff --git a/share/locale/tryton.pot b/share/locale/tryton.pot
index 3e32ef5..f479a6b 100644
--- a/share/locale/tryton.pot
+++ b/share/locale/tryton.pot
@@ -1,14 +1,14 @@
 # Translations template for tryton.
-# Copyright (C) 2013 Tryton
+# Copyright (C) 2014 Tryton
 # This file is distributed under the same license as the tryton project.
-# FIRST AUTHOR <EMAIL at ADDRESS>, 2013.
+# FIRST AUTHOR <EMAIL at ADDRESS>, 2014.
 #
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: tryton 2.9.0\n"
+"Project-Id-Version: tryton 3.1.dev0\n"
 "Report-Msgid-Bugs-To: issue_tracker at tryton.org\n"
-"POT-Creation-Date: 2013-10-20 16:34+0200\n"
+"POT-Creation-Date: 2014-04-18 22:49+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -64,62 +64,62 @@ msgstr ""
 msgid "Unable to set locale %s"
 msgstr ""
 
-#: tryton/action/main.py:163
+#: tryton/action/main.py:171
 msgid "Select your action"
 msgstr ""
 
-#: tryton/action/main.py:169
+#: tryton/action/main.py:177
 msgid "No action defined!"
 msgstr ""
 
-#: tryton/common/common.py:270
+#: tryton/common/common.py:284
 msgid "Tryton Connection"
 msgstr ""
 
-#: tryton/common/common.py:281
+#: tryton/common/common.py:295
 msgid "Server:"
 msgstr ""
 
-#: tryton/common/common.py:299 tryton/gui/window/dblogin.py:79
+#: tryton/common/common.py:313 tryton/gui/window/dblogin.py:79
 msgid "Port:"
 msgstr ""
 
-#: tryton/common/common.py:369
+#: tryton/common/common.py:383
 msgid "Selection"
 msgstr ""
 
-#: tryton/common/common.py:378
+#: tryton/common/common.py:392
 msgid "Your selection:"
 msgstr ""
 
-#: tryton/common/common.py:498 tryton/gui/main.py:1407
-#: tryton/gui/window/win_export.py:402
+#: tryton/common/common.py:528 tryton/gui/main.py:1420
+#: tryton/gui/window/win_export.py:409
 #: tryton/gui/window/view_form/view/form_gtk/binary.py:69
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:138
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:150
 #: tryton/gui/window/view_form/view/form_gtk/image.py:74
-#: tryton/gui/window/view_form/view/form_gtk/image.py:158
+#: tryton/gui/window/view_form/view/form_gtk/image.py:161
 #: tryton/gui/window/view_form/view/graph_gtk/parser.py:105
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:656
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:686
 msgid "Save As..."
 msgstr ""
 
-#: tryton/common/common.py:649
+#: tryton/common/common.py:675
 msgid "Always ignore this warning."
 msgstr ""
 
-#: tryton/common/common.py:654
+#: tryton/common/common.py:680
 msgid "Do you want to proceed?"
 msgstr ""
 
-#: tryton/common/common.py:673
+#: tryton/common/common.py:699
 msgid "Confirmation"
 msgstr ""
 
-#: tryton/common/common.py:779 tryton/common/common.py:1083
+#: tryton/common/common.py:805 tryton/common/common.py:1114
 msgid "Concurrency Exception"
 msgstr ""
 
-#: tryton/common/common.py:793
+#: tryton/common/common.py:819
 msgid ""
 "<b>Write Concurrency Warning:</b>\n"
 "\n"
@@ -130,120 +130,120 @@ msgid ""
 "    - \"Write Anyway\" to save your current version."
 msgstr ""
 
-#: tryton/common/common.py:802
+#: tryton/common/common.py:828
 msgid "Compare"
 msgstr ""
 
-#: tryton/common/common.py:807
+#: tryton/common/common.py:833
 msgid "Write Anyway"
 msgstr ""
 
-#: tryton/common/common.py:833 tryton/gui/window/win_export.py:435
-#: tryton/gui/window/win_import.py:260 tryton/gui/window/win_import.py:288
+#: tryton/common/common.py:859 tryton/gui/window/win_export.py:442
+#: tryton/gui/window/win_import.py:262 tryton/gui/window/win_import.py:290
 msgid "Error"
 msgstr ""
 
-#: tryton/common/common.py:837
+#: tryton/common/common.py:863
 msgid "Report Bug"
 msgstr ""
 
-#: tryton/common/common.py:844
+#: tryton/common/common.py:870
 msgid "Application Error!"
 msgstr ""
 
-#: tryton/common/common.py:867
+#: tryton/common/common.py:893
 msgid "Error: "
 msgstr ""
 
-#: tryton/common/common.py:887
+#: tryton/common/common.py:913
 #, python-format
 msgid "To report bugs you must have an account on <u>%s</u>"
 msgstr ""
 
-#: tryton/common/common.py:917
+#: tryton/common/common.py:943
 msgid "Bug Tracker"
 msgstr ""
 
-#: tryton/common/common.py:935
+#: tryton/common/common.py:961
 msgid "User:"
 msgstr ""
 
-#: tryton/common/common.py:943 tryton/common/common.py:1101
+#: tryton/common/common.py:969 tryton/common/common.py:1132
 #: tryton/gui/window/dblogin.py:462
 msgid "Password:"
 msgstr ""
 
-#: tryton/common/common.py:993
+#: tryton/common/common.py:1024
 msgid ""
 "The same bug was already reported by another user.\n"
 "To keep you informed your username is added to the nosy-list of this issue"
 msgstr ""
 
-#: tryton/common/common.py:1004
+#: tryton/common/common.py:1035
 msgid "Created new bug with ID "
 msgstr ""
 
-#: tryton/common/common.py:1012 tryton/gui/main.py:921
+#: tryton/common/common.py:1043 tryton/gui/main.py:928
 msgid ""
 "Connection error!\n"
 "Bad username or password!"
 msgstr ""
 
-#: tryton/common/common.py:1017
+#: tryton/common/common.py:1048
 msgid "Exception:"
 msgstr ""
 
-#: tryton/common/common.py:1034
+#: tryton/common/common.py:1065
 msgid ""
 "The server fingerprint has changed since last connection!\n"
 "The application will stop connecting to this server until its fingerprint"
 " is fixed."
 msgstr ""
 
-#: tryton/common/common.py:1036
+#: tryton/common/common.py:1067
 msgid "Security risk!"
 msgstr ""
 
-#: tryton/common/common.py:1042 tryton/common/common.py:1108
-#: tryton/gui/main.py:918
+#: tryton/common/common.py:1073 tryton/common/common.py:1139
+#: tryton/gui/main.py:925
 msgid ""
 "Connection error!\n"
 "Unable to connect to the server!"
 msgstr ""
 
-#: tryton/common/common.py:1123
+#: tryton/common/common.py:1154
 msgid "Network Error!"
 msgstr ""
 
-#: tryton/common/common.py:1354
+#: tryton/common/common.py:1409
 msgid "Y"
 msgstr ""
 
-#: tryton/common/common.py:1355
+#: tryton/common/common.py:1410
 msgid "M"
 msgstr ""
 
-#: tryton/common/common.py:1356
+#: tryton/common/common.py:1411
 msgid "w"
 msgstr ""
 
-#: tryton/common/common.py:1357
+#: tryton/common/common.py:1412
 msgid "d"
 msgstr ""
 
-#: tryton/common/common.py:1358
+#: tryton/common/common.py:1413
 msgid "h"
 msgstr ""
 
-#: tryton/common/common.py:1359
+#: tryton/common/common.py:1414
 msgid "m"
 msgstr ""
 
-#: tryton/common/completion.py:22
+#: tryton/common/completion.py:21
 msgid "<i>Search...</i>"
 msgstr ""
 
-#: tryton/common/completion.py:23
+#: tryton/common/completion.py:22
 msgid "<i>Create...</i>"
 msgstr ""
 
@@ -251,398 +251,402 @@ msgstr ""
 msgid "Open the calendar <F2>"
 msgstr ""
 
-#: tryton/common/date_widget.py:271
+#: tryton/common/date_widget.py:275
 msgid "Date Selection"
 msgstr ""
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "y"
 msgstr ""
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "yes"
 msgstr ""
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "true"
 msgstr ""
 
-#: tryton/common/domain_parser.py:188
+#: tryton/common/domain_parser.py:221
 msgid "t"
 msgstr ""
 
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
 msgid "True"
 msgstr ""
 
-#: tryton/common/domain_parser.py:383
-#: tryton/gui/window/view_form/view/screen_container.py:462
+#: tryton/common/domain_parser.py:422
+#: tryton/gui/window/view_form/view/screen_container.py:461
 msgid "False"
 msgstr ""
 
-#: tryton/common/popup_menu.py:71
+#: tryton/common/popup_menu.py:72
+msgid "Edit..."
+msgstr ""
+
+#: tryton/common/popup_menu.py:77
 msgid "Attachments..."
 msgstr ""
 
-#: tryton/common/popup_menu.py:76
+#: tryton/common/popup_menu.py:87
 msgid "Actions..."
 msgstr ""
 
-#: tryton/common/popup_menu.py:77
+#: tryton/common/popup_menu.py:88
 msgid "Relate..."
 msgstr ""
 
-#: tryton/common/popup_menu.py:78
+#: tryton/common/popup_menu.py:89
 msgid "Report..."
 msgstr ""
 
-#: tryton/common/popup_menu.py:79
+#: tryton/common/popup_menu.py:90
 msgid "E-Mail..."
 msgstr ""
 
-#: tryton/common/popup_menu.py:80
+#: tryton/common/popup_menu.py:91
 msgid "Print..."
 msgstr ""
 
-#: tryton/gui/main.py:217
+#: tryton/gui/main.py:218
 msgid "_File"
 msgstr ""
 
-#: tryton/gui/main.py:225
+#: tryton/gui/main.py:226
 msgid "_User"
 msgstr ""
 
-#: tryton/gui/main.py:239
+#: tryton/gui/main.py:240
 msgid "_Options"
 msgstr ""
 
-#: tryton/gui/main.py:247
+#: tryton/gui/main.py:248
 msgid "Fa_vorites"
 msgstr ""
 
-#: tryton/gui/main.py:263
+#: tryton/gui/main.py:264
 msgid "_Help"
 msgstr ""
 
-#: tryton/gui/main.py:285 tryton/gui/window/win_search.py:26
+#: tryton/gui/main.py:286 tryton/gui/window/win_search.py:26
 #: tryton/gui/window/view_form/view/screen_container.py:100
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:333
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:332
 #: tryton/gui/window/view_form/view/form_gtk/many2many.py:40
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:45
 msgid "Search"
 msgstr ""
 
-#: tryton/gui/main.py:364
+#: tryton/gui/main.py:374
 msgid "No result found."
 msgstr ""
 
-#: tryton/gui/main.py:384
+#: tryton/gui/main.py:396
 msgid "_Connect..."
 msgstr ""
 
-#: tryton/gui/main.py:393
+#: tryton/gui/main.py:405
 msgid "_Disconnect"
 msgstr ""
 
-#: tryton/gui/main.py:403
+#: tryton/gui/main.py:415
 msgid "Data_base"
 msgstr ""
 
-#: tryton/gui/main.py:414
+#: tryton/gui/main.py:426
 msgid "_New Database..."
 msgstr ""
 
-#: tryton/gui/main.py:423
+#: tryton/gui/main.py:435
 msgid "_Restore Database..."
 msgstr ""
 
-#: tryton/gui/main.py:432
+#: tryton/gui/main.py:444
 msgid "_Backup Database..."
 msgstr ""
 
-#: tryton/gui/main.py:441
+#: tryton/gui/main.py:453
 msgid "Dro_p Database..."
 msgstr ""
 
-#: tryton/gui/main.py:450
+#: tryton/gui/main.py:462
 msgid "_Quit..."
 msgstr ""
 
-#: tryton/gui/main.py:465
+#: tryton/gui/main.py:477
 msgid "_Preferences..."
 msgstr ""
 
-#: tryton/gui/main.py:476
+#: tryton/gui/main.py:488
 msgid "_Menu Reload"
 msgstr ""
 
-#: tryton/gui/main.py:485
+#: tryton/gui/main.py:497
 msgid "_Menu Toggle"
 msgstr ""
 
-#: tryton/gui/main.py:492
+#: tryton/gui/main.py:504
 msgid "_Global Search"
 msgstr ""
 
-#: tryton/gui/main.py:507
+#: tryton/gui/main.py:519
 msgid "_Toolbar"
 msgstr ""
 
-#: tryton/gui/main.py:515
+#: tryton/gui/main.py:527
 msgid "_Default"
 msgstr ""
 
-#: tryton/gui/main.py:525
+#: tryton/gui/main.py:537
 msgid "_Text and Icons"
 msgstr ""
 
-#: tryton/gui/main.py:535
+#: tryton/gui/main.py:547
 msgid "_Icons"
 msgstr ""
 
-#: tryton/gui/main.py:544
+#: tryton/gui/main.py:556
 msgid "_Text"
 msgstr ""
 
-#: tryton/gui/main.py:553
+#: tryton/gui/main.py:565
 msgid "_Menubar"
 msgstr ""
 
-#: tryton/gui/main.py:561
+#: tryton/gui/main.py:573
 msgid "Change Accelerators"
 msgstr ""
 
-#: tryton/gui/main.py:569
+#: tryton/gui/main.py:581
 msgid "_Mode"
 msgstr ""
 
-#: tryton/gui/main.py:577
+#: tryton/gui/main.py:589
 msgid "_Normal"
 msgstr ""
 
-#: tryton/gui/main.py:585
+#: tryton/gui/main.py:597
 msgid "_PDA"
 msgstr ""
 
-#: tryton/gui/main.py:592
+#: tryton/gui/main.py:604
 msgid "_Form"
 msgstr ""
 
-#: tryton/gui/main.py:601
+#: tryton/gui/main.py:613
 msgid "Save Width/Height"
 msgstr ""
 
-#: tryton/gui/main.py:612
+#: tryton/gui/main.py:624
 msgid "Save Tree State"
 msgstr ""
 
-#: tryton/gui/main.py:624
+#: tryton/gui/main.py:636
 msgid "Spell Checking"
 msgstr ""
 
-#: tryton/gui/main.py:634
+#: tryton/gui/main.py:646
 msgid "Tabs Position"
 msgstr ""
 
-#: tryton/gui/main.py:642
+#: tryton/gui/main.py:654
 msgid "Top"
 msgstr ""
 
-#: tryton/gui/main.py:651
+#: tryton/gui/main.py:663
 msgid "Left"
 msgstr ""
 
-#: tryton/gui/main.py:661
+#: tryton/gui/main.py:673
 msgid "Right"
 msgstr ""
 
-#: tryton/gui/main.py:671
+#: tryton/gui/main.py:683
 msgid "Bottom"
 msgstr ""
 
-#: tryton/gui/main.py:680
+#: tryton/gui/main.py:692
 msgid "_Previous Tab"
 msgstr ""
 
-#: tryton/gui/main.py:686
+#: tryton/gui/main.py:698
 msgid "_Next Tab"
 msgstr ""
 
-#: tryton/gui/main.py:692
+#: tryton/gui/main.py:704
 msgid "Search Limit..."
 msgstr ""
 
-#: tryton/gui/main.py:698
+#: tryton/gui/main.py:710
 msgid "_Email..."
 msgstr ""
 
-#: tryton/gui/main.py:706
+#: tryton/gui/main.py:718
 msgid "_Save Options"
 msgstr ""
 
-#: tryton/gui/main.py:718
+#: tryton/gui/main.py:730
 msgid "_Tips..."
 msgstr ""
 
-#: tryton/gui/main.py:727
+#: tryton/gui/main.py:739
 msgid "_Keyboard Shortcuts..."
 msgstr ""
 
-#: tryton/gui/main.py:736
+#: tryton/gui/main.py:748
 msgid "_About..."
 msgstr ""
 
-#: tryton/gui/main.py:787
+#: tryton/gui/main.py:799
 msgid "Manage Favorites"
 msgstr ""
 
-#: tryton/gui/main.py:935
+#: tryton/gui/main.py:942
 msgid ""
 "The following action requires to close all tabs.\n"
 "Do you want to continue?"
 msgstr ""
 
-#: tryton/gui/main.py:1196
+#: tryton/gui/main.py:1206
 msgid "Close Tab"
 msgstr ""
 
-#: tryton/gui/main.py:1314
+#: tryton/gui/main.py:1327
 msgid ""
 "You are going to delete a Tryton database.\n"
 "Are you really sure to proceed?"
 msgstr ""
 
-#: tryton/gui/main.py:1324
+#: tryton/gui/main.py:1337
 msgid ""
 "Wrong Tryton Server Password\n"
 "Please try again."
 msgstr ""
 
-#: tryton/gui/main.py:1326 tryton/gui/main.py:1362 tryton/gui/main.py:1398
-#: tryton/gui/window/dbcreate.py:382
+#: tryton/gui/main.py:1339 tryton/gui/main.py:1375 tryton/gui/main.py:1411
+#: tryton/gui/window/dbcreate.py:384
 msgid "Access denied!"
 msgstr ""
 
-#: tryton/gui/main.py:1329
+#: tryton/gui/main.py:1342
 msgid "Database drop failed with error message:\n"
 msgstr ""
 
-#: tryton/gui/main.py:1330
+#: tryton/gui/main.py:1343
 msgid "Database drop failed!"
 msgstr ""
 
-#: tryton/gui/main.py:1332
+#: tryton/gui/main.py:1345
 msgid "Database dropped successfully!"
 msgstr ""
 
-#: tryton/gui/main.py:1337
+#: tryton/gui/main.py:1350
 msgid "Open Backup File to Restore..."
 msgstr ""
 
-#: tryton/gui/main.py:1354
+#: tryton/gui/main.py:1367
 msgid ""
 "It is not possible to restore a password protected database.\n"
 "Backup and restore needed to be proceed manual."
 msgstr ""
 
-#: tryton/gui/main.py:1358 tryton/gui/main.py:1394
+#: tryton/gui/main.py:1371 tryton/gui/main.py:1407
 msgid "Database is password protected!"
 msgstr ""
 
-#: tryton/gui/main.py:1360 tryton/gui/main.py:1396
+#: tryton/gui/main.py:1373 tryton/gui/main.py:1409
 msgid ""
 "Wrong Tryton Server Password.\n"
 "Please try again."
 msgstr ""
 
-#: tryton/gui/main.py:1365
+#: tryton/gui/main.py:1378
 msgid "Database restore failed with error message:\n"
 msgstr ""
 
-#: tryton/gui/main.py:1367 tryton/gui/main.py:1372
+#: tryton/gui/main.py:1380 tryton/gui/main.py:1385
 msgid "Database restore failed!"
 msgstr ""
 
-#: tryton/gui/main.py:1370
+#: tryton/gui/main.py:1383
 msgid "Database restored successfully!"
 msgstr ""
 
-#: tryton/gui/main.py:1391
+#: tryton/gui/main.py:1404
 msgid ""
 "It is not possible to dump a password protected Database.\n"
 "Backup and restore needed to be proceed manual."
 msgstr ""
 
-#: tryton/gui/main.py:1401
+#: tryton/gui/main.py:1414
 msgid "Database dump failed with error message:\n"
 msgstr ""
 
-#: tryton/gui/main.py:1403
+#: tryton/gui/main.py:1416
 msgid "Database dump failed!"
 msgstr ""
 
-#: tryton/gui/main.py:1414
+#: tryton/gui/main.py:1427
 msgid "Database backuped successfully!"
 msgstr ""
 
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
 msgid "New"
 msgstr ""
 
-#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:30
+#: tryton/gui/window/board.py:19 tryton/gui/window/form.py:32
 msgid "Create a new record"
 msgstr ""
 
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
 #: tryton/gui/window/win_export.py:142
 msgid "Save"
 msgstr ""
 
-#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:32
+#: tryton/gui/window/board.py:20 tryton/gui/window/form.py:34
 msgid "Save this record"
 msgstr ""
 
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
-#: tryton/gui/window/win_form.py:228
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
+#: tryton/gui/window/win_form.py:232
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:154
 msgid "Switch"
 msgstr ""
 
-#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:34
+#: tryton/gui/window/board.py:21 tryton/gui/window/form.py:36
 msgid "Switch view"
 msgstr ""
 
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
 msgid "_Reload"
 msgstr ""
 
-#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:36
+#: tryton/gui/window/board.py:23 tryton/gui/window/form.py:38
 msgid "Reload"
 msgstr ""
 
-#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:48
+#: tryton/gui/window/board.py:28 tryton/gui/window/form.py:50
 msgid "_New"
 msgstr ""
 
-#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:49
-#: tryton/gui/window/win_form.py:66
+#: tryton/gui/window/board.py:29 tryton/gui/window/form.py:51
+#: tryton/gui/window/win_form.py:67
 msgid "_Save"
 msgstr ""
 
-#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:50
+#: tryton/gui/window/board.py:30 tryton/gui/window/form.py:52
 msgid "_Switch View"
 msgstr ""
 
-#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:52
+#: tryton/gui/window/board.py:32 tryton/gui/window/form.py:54
 msgid "_Reload/Undo"
 msgstr ""
 
-#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:56
+#: tryton/gui/window/board.py:34 tryton/gui/window/form.py:58
 msgid "_Delete..."
 msgstr ""
 
-#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:65
+#: tryton/gui/window/board.py:36 tryton/gui/window/form.py:68
 msgid "_Close Tab"
 msgstr ""
 
@@ -667,64 +671,64 @@ msgid ""
 "Click on 'Change' to change the address."
 msgstr ""
 
-#: tryton/gui/window/dbcreate.py:137
+#: tryton/gui/window/dbcreate.py:139
 msgid "Create new database"
 msgstr ""
 
-#: tryton/gui/window/dbcreate.py:147
+#: tryton/gui/window/dbcreate.py:149
 msgid "C_reate"
 msgstr ""
 
-#: tryton/gui/window/dbcreate.py:155
+#: tryton/gui/window/dbcreate.py:157
 msgid "Create the new database."
 msgstr ""
 
-#: tryton/gui/window/dbcreate.py:166
+#: tryton/gui/window/dbcreate.py:168
 msgid "Server Setup:"
 msgstr ""
 
-#: tryton/gui/window/dbcreate.py:171
+#: tryton/gui/window/dbcreate.py:173
 msgid "Server connection:"
 msgstr ""
 
-#: tryton/gui/window/dbcreate.py:180 tryton/gui/window/dbdumpdrop.py:140
-#: tryton/gui/window/dbrestore.py:86
+#: tryton/gui/window/dbcreate.py:182 tryton/gui/window/dbdumpdrop.py:140
+#: tryton/gui/window/dbrestore.py:88
 msgid ""
 "This is the URL of the server. Use server 'localhost' and port '8000' if "
 "the server is installed on this computer. Click on 'Change' to change the"
 " address."
 msgstr ""
 
-#: tryton/gui/window/dbcreate.py:183 tryton/gui/window/dbdumpdrop.py:147
-#: tryton/gui/window/dbrestore.py:91
+#: tryton/gui/window/dbcreate.py:185 tryton/gui/window/dbdumpdrop.py:147
+#: tryton/gui/window/dbrestore.py:93
 msgid "C_hange"
 msgstr ""
 
-#: tryton/gui/window/dbcreate.py:192 tryton/gui/window/dbrestore.py:97
+#: tryton/gui/window/dbcreate.py:194 tryton/gui/window/dbrestore.py:99
 msgid "Setup the server connection..."
 msgstr ""
 
-#: tryton/gui/window/dbcreate.py:195 tryton/gui/window/dbdumpdrop.py:186
-#: tryton/gui/window/dbrestore.py:100
+#: tryton/gui/window/dbcreate.py:197 tryton/gui/window/dbdumpdrop.py:186
+#: tryton/gui/window/dbrestore.py:102
 msgid "Tryton Server Password:"
 msgstr ""
 
-#: tryton/gui/window/dbcreate.py:205 tryton/gui/window/dbdumpdrop.py:196
-#: tryton/gui/window/dbrestore.py:109
+#: tryton/gui/window/dbcreate.py:207 tryton/gui/window/dbdumpdrop.py:196
+#: tryton/gui/window/dbrestore.py:111
 msgid ""
 "This is the password of the Tryton server. It doesn't belong to a real "
 "user. This password is usually defined in the trytond configuration."
 msgstr ""
 
-#: tryton/gui/window/dbcreate.py:216
+#: tryton/gui/window/dbcreate.py:218
 msgid "New database setup:"
 msgstr ""
 
-#: tryton/gui/window/dbcreate.py:222
+#: tryton/gui/window/dbcreate.py:224
 msgid "Database name:"
 msgstr ""
 
-#: tryton/gui/window/dbcreate.py:234
+#: tryton/gui/window/dbcreate.py:236
 msgid ""
 "Choose the name of the new database.\n"
 "Allowed characters are alphanumerical or _ (underscore)\n"
@@ -732,22 +736,22 @@ msgid ""
 "tryton"
 msgstr ""
 
-#: tryton/gui/window/dbcreate.py:241
+#: tryton/gui/window/dbcreate.py:243
 msgid "Default language:"
 msgstr ""
 
-#: tryton/gui/window/dbcreate.py:251
+#: tryton/gui/window/dbcreate.py:253
 msgid ""
 "Choose the default language that will be installed for this database. You"
 " will be able to install new languages after installation through the "
 "administration menu."
 msgstr ""
 
-#: tryton/gui/window/dbcreate.py:255
+#: tryton/gui/window/dbcreate.py:257
 msgid "Admin password:"
 msgstr ""
 
-#: tryton/gui/window/dbcreate.py:265
+#: tryton/gui/window/dbcreate.py:267
 msgid ""
 "Choose a password for the admin user of the new database. With these "
 "credentials you will be later able to login into the database:\n"
@@ -755,55 +759,55 @@ msgid ""
 "Password: <The password you set here>"
 msgstr ""
 
-#: tryton/gui/window/dbcreate.py:273
+#: tryton/gui/window/dbcreate.py:275
 msgid "Confirm admin password:"
 msgstr ""
 
-#: tryton/gui/window/dbcreate.py:282
+#: tryton/gui/window/dbcreate.py:284
 msgid "Type the Admin password again"
 msgstr ""
 
-#: tryton/gui/window/dbcreate.py:330
+#: tryton/gui/window/dbcreate.py:332
 msgid ""
 "The database name is restricted to alpha-nummerical characters and \"_\" "
 "(underscore). Avoid all accents, space and any other special characters."
 msgstr ""
 
-#: tryton/gui/window/dbcreate.py:335
+#: tryton/gui/window/dbcreate.py:337
 msgid "Wrong characters in database name!"
 msgstr ""
 
-#: tryton/gui/window/dbcreate.py:339
+#: tryton/gui/window/dbcreate.py:341
 msgid "The new admin password doesn't match the confirmation field.\n"
 msgstr ""
 
-#: tryton/gui/window/dbcreate.py:341
+#: tryton/gui/window/dbcreate.py:343
 msgid "Passwords doesn't match!"
 msgstr ""
 
-#: tryton/gui/window/dbcreate.py:344
+#: tryton/gui/window/dbcreate.py:346
 msgid "Admin password and confirmation are required to create a new database."
 msgstr ""
 
-#: tryton/gui/window/dbcreate.py:346
+#: tryton/gui/window/dbcreate.py:348
 msgid "Missing admin password!"
 msgstr ""
 
-#: tryton/gui/window/dbcreate.py:361
+#: tryton/gui/window/dbcreate.py:363
 msgid ""
 "A database with the same name already exists.\n"
 "Try another database name."
 msgstr ""
 
-#: tryton/gui/window/dbcreate.py:364
+#: tryton/gui/window/dbcreate.py:366
 msgid "This database name already exist!"
 msgstr ""
 
-#: tryton/gui/window/dbcreate.py:379
+#: tryton/gui/window/dbcreate.py:381
 msgid "Sorry, wrong password for the Tryton server. Please try again."
 msgstr ""
 
-#: tryton/gui/window/dbcreate.py:387
+#: tryton/gui/window/dbcreate.py:389
 msgid ""
 "Can't create the database, caused by an unknown reason.\n"
 "If there is a database created, it could be broken. Maybe drop this "
@@ -811,7 +815,7 @@ msgid ""
 "Error message:\n"
 msgstr ""
 
-#: tryton/gui/window/dbcreate.py:395
+#: tryton/gui/window/dbcreate.py:397
 msgid "Error creating database!"
 msgstr ""
 
@@ -859,7 +863,7 @@ msgstr ""
 msgid "Choose a Tryton database to delete:"
 msgstr ""
 
-#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:75
+#: tryton/gui/window/dbdumpdrop.py:130 tryton/gui/window/dbrestore.py:77
 msgid "Server Connection:"
 msgstr ""
 
@@ -950,15 +954,15 @@ msgstr ""
 msgid "User name:"
 msgstr ""
 
-#: tryton/gui/window/dbrestore.py:64
+#: tryton/gui/window/dbrestore.py:66
 msgid "Restore Database"
 msgstr ""
 
-#: tryton/gui/window/dbrestore.py:117
+#: tryton/gui/window/dbrestore.py:119
 msgid "File to Restore:"
 msgstr ""
 
-#: tryton/gui/window/dbrestore.py:131
+#: tryton/gui/window/dbrestore.py:133
 msgid ""
 "Choose the name of the database to be restored.\n"
 "Allowed characters are alphanumerical or _ (underscore)\n"
@@ -966,25 +970,25 @@ msgid ""
 "Example: tryton"
 msgstr ""
 
-#: tryton/gui/window/dbrestore.py:137
+#: tryton/gui/window/dbrestore.py:139
 msgid "New Database Name:"
 msgstr ""
 
-#: tryton/gui/window/dbrestore.py:140
+#: tryton/gui/window/dbrestore.py:142
 msgid "Update Database:"
 msgstr ""
 
-#: tryton/gui/window/dbrestore.py:144
+#: tryton/gui/window/dbrestore.py:146
 msgid ""
 "Check for an automatic database update after restoring a database from a "
 "previous Tryton version."
 msgstr ""
 
-#: tryton/gui/window/dbrestore.py:154
+#: tryton/gui/window/dbrestore.py:156
 msgid "Restore"
 msgstr ""
 
-#: tryton/gui/window/dbrestore.py:163
+#: tryton/gui/window/dbrestore.py:165
 msgid "Restore the database from file."
 msgstr ""
 
@@ -1024,199 +1028,209 @@ msgstr ""
 msgid "Attachment:"
 msgstr ""
 
-#: tryton/gui/window/form.py:39 tryton/gui/window/tips.py:74
-#: tryton/gui/window/win_form.py:201
-#: tryton/gui/window/view_form/view/screen_container.py:165
+#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:74
+#: tryton/gui/window/win_form.py:205
+#: tryton/gui/window/view_form/view/screen_container.py:163
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:128
 msgid "Previous"
 msgstr ""
 
-#: tryton/gui/window/form.py:40
+#: tryton/gui/window/form.py:42
 msgid "Previous Record"
 msgstr ""
 
-#: tryton/gui/window/form.py:41 tryton/gui/window/tips.py:81
-#: tryton/gui/window/win_form.py:215
-#: tryton/gui/window/view_form/view/screen_container.py:177
+#: tryton/gui/window/form.py:43 tryton/gui/window/tips.py:81
+#: tryton/gui/window/win_form.py:219
+#: tryton/gui/window/view_form/view/screen_container.py:175
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:142
 msgid "Next"
 msgstr ""
 
-#: tryton/gui/window/form.py:41
+#: tryton/gui/window/form.py:43
 msgid "Next Record"
 msgstr ""
 
-#: tryton/gui/window/form.py:44
+#: tryton/gui/window/form.py:46
 msgid "Attachment(0)"
 msgstr ""
 
-#: tryton/gui/window/form.py:45
+#: tryton/gui/window/form.py:47
 msgid "Add an attachment to the record"
 msgstr ""
 
-#: tryton/gui/window/form.py:54
+#: tryton/gui/window/form.py:56
 msgid "_Duplicate"
 msgstr ""
 
-#: tryton/gui/window/form.py:59
+#: tryton/gui/window/form.py:61
 msgid "_Previous"
 msgstr ""
 
-#: tryton/gui/window/form.py:61
+#: tryton/gui/window/form.py:63
 msgid "_Next"
 msgstr ""
 
-#: tryton/gui/window/form.py:62
+#: tryton/gui/window/form.py:64
 msgid "_Search"
 msgstr ""
 
-#: tryton/gui/window/form.py:63
+#: tryton/gui/window/form.py:65
 msgid "View _Logs..."
 msgstr ""
 
-#: tryton/gui/window/form.py:68
+#: tryton/gui/window/form.py:66
+msgid "Show revisions..."
+msgstr ""
+
+#: tryton/gui/window/form.py:71
 msgid "A_ttachments..."
 msgstr ""
 
-#: tryton/gui/window/form.py:70
+#: tryton/gui/window/form.py:73
 msgid "_Actions..."
 msgstr ""
 
-#: tryton/gui/window/form.py:72
+#: tryton/gui/window/form.py:75
 msgid "_Relate..."
 msgstr ""
 
-#: tryton/gui/window/form.py:75
+#: tryton/gui/window/form.py:78
 msgid "_Report..."
 msgstr ""
 
-#: tryton/gui/window/form.py:77
+#: tryton/gui/window/form.py:80
 msgid "_E-Mail..."
 msgstr ""
 
-#: tryton/gui/window/form.py:79
+#: tryton/gui/window/form.py:82
 msgid "_Print..."
 msgstr ""
 
-#: tryton/gui/window/form.py:82
+#: tryton/gui/window/form.py:85
 msgid "_Export Data..."
 msgstr ""
 
-#: tryton/gui/window/form.py:84
+#: tryton/gui/window/form.py:87
 msgid "_Import Data..."
 msgstr ""
 
-#: tryton/gui/window/form.py:219
+#: tryton/gui/window/form.py:216
 #, python-format
 msgid "Attachment(%d)"
 msgstr ""
 
-#: tryton/gui/window/form.py:237
+#: tryton/gui/window/form.py:234
 msgid "You have to select one record!"
 msgstr ""
 
-#: tryton/gui/window/form.py:241
+#: tryton/gui/window/form.py:238
 msgid "ID:"
 msgstr ""
 
-#: tryton/gui/window/form.py:242
+#: tryton/gui/window/form.py:239
 msgid "Creation User:"
 msgstr ""
 
-#: tryton/gui/window/form.py:243
+#: tryton/gui/window/form.py:240
 msgid "Creation Date:"
 msgstr ""
 
-#: tryton/gui/window/form.py:244
+#: tryton/gui/window/form.py:241
 msgid "Latest Modification by:"
 msgstr ""
 
-#: tryton/gui/window/form.py:245
+#: tryton/gui/window/form.py:242
 msgid "Latest Modification Date:"
 msgstr ""
 
-#: tryton/gui/window/form.py:263
+#: tryton/gui/window/form.py:260
 msgid "Model:"
 msgstr ""
 
-#: tryton/gui/window/form.py:271
+#: tryton/gui/window/form.py:304
 msgid "Are you sure to remove this record?"
 msgstr ""
 
-#: tryton/gui/window/form.py:273
+#: tryton/gui/window/form.py:306
 msgid "Are you sure to remove those records?"
 msgstr ""
 
-#: tryton/gui/window/form.py:276
+#: tryton/gui/window/form.py:309
 msgid "Records not removed!"
 msgstr ""
 
-#: tryton/gui/window/form.py:278
+#: tryton/gui/window/form.py:311
 msgid "Records removed!"
 msgstr ""
 
-#: tryton/gui/window/form.py:318
+#: tryton/gui/window/form.py:345
 msgid "Working now on the duplicated record(s)!"
 msgstr ""
 
-#: tryton/gui/window/form.py:325
+#: tryton/gui/window/form.py:352
 msgid "Record saved!"
 msgstr ""
 
-#: tryton/gui/window/form.py:328
+#: tryton/gui/window/form.py:355
 msgid "Invalid form!"
 msgstr ""
 
-#: tryton/gui/window/form.py:436
+#: tryton/gui/window/form.py:462
 msgid " of "
 msgstr ""
 
-#: tryton/gui/window/form.py:457
+#: tryton/gui/window/form.py:483
 msgid ""
 "This record has been modified\n"
 "do you want to save it ?"
 msgstr ""
 
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
 msgid "Action"
 msgstr ""
 
-#: tryton/gui/window/form.py:502
+#: tryton/gui/window/form.py:536
 msgid "Launch action"
 msgstr ""
 
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
 msgid "Relate"
 msgstr ""
 
-#: tryton/gui/window/form.py:503
+#: tryton/gui/window/form.py:537
 msgid "Open related records"
 msgstr ""
 
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
 msgid "Report"
 msgstr ""
 
-#: tryton/gui/window/form.py:505
+#: tryton/gui/window/form.py:539
 msgid "Open report"
 msgstr ""
 
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
 msgid "E-Mail"
 msgstr ""
 
-#: tryton/gui/window/form.py:506
+#: tryton/gui/window/form.py:540
 msgid "E-Mail report"
 msgstr ""
 
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
 msgid "Print"
 msgstr ""
 
-#: tryton/gui/window/form.py:507
+#: tryton/gui/window/form.py:541
 msgid "Print report"
 msgstr ""
 
+#: tryton/gui/window/form.py:607
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:257
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:1050
+msgid "Unknown"
+msgstr ""
+
 #: tryton/gui/window/limit.py:17
 msgid "Limit"
 msgstr ""
@@ -1245,6 +1259,18 @@ msgstr ""
 msgid "Current Password:"
 msgstr ""
 
+#: tryton/gui/window/revision.py:20
+msgid "Revision"
+msgstr ""
+
+#: tryton/gui/window/revision.py:29
+msgid "Select a revision"
+msgstr ""
+
+#: tryton/gui/window/revision.py:32
+msgid "Revision:"
+msgstr ""
+
 #: tryton/gui/window/shortcuts.py:17
 msgid "Keyboard Shortcuts"
 msgstr ""
@@ -1401,21 +1427,21 @@ msgstr ""
 msgid "Name"
 msgstr ""
 
-#: tryton/gui/window/win_export.py:306
+#: tryton/gui/window/win_export.py:309
 msgid "What is the name of this export?"
 msgstr ""
 
-#: tryton/gui/window/win_export.py:429
+#: tryton/gui/window/win_export.py:436
 #, python-format
 msgid "%d record saved!"
 msgstr ""
 
-#: tryton/gui/window/win_export.py:431
+#: tryton/gui/window/win_export.py:438
 #, python-format
 msgid "%d records saved!"
 msgstr ""
 
-#: tryton/gui/window/win_export.py:434
+#: tryton/gui/window/win_export.py:441
 #, python-format
 msgid ""
 "Operation failed!\n"
@@ -1427,26 +1453,26 @@ msgstr ""
 msgid "Link"
 msgstr ""
 
-#: tryton/gui/window/win_form.py:134
+#: tryton/gui/window/win_form.py:136
 msgid "Add"
 msgstr ""
 
-#: tryton/gui/window/win_form.py:147
+#: tryton/gui/window/win_form.py:149
 msgid "Remove <Del>"
 msgstr ""
 
-#: tryton/gui/window/win_form.py:162
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:73
+#: tryton/gui/window/win_form.py:164
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:75
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:86
 msgid "Create a new record <F3>"
 msgstr ""
 
-#: tryton/gui/window/win_form.py:174
+#: tryton/gui/window/win_form.py:176
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:106
 msgid "Delete selected record <Del>"
 msgstr ""
 
-#: tryton/gui/window/win_form.py:188
+#: tryton/gui/window/win_form.py:190
 #: tryton/gui/window/view_form/view/form_gtk/one2many.py:116
 msgid "Undelete selected record <Ins>"
 msgstr ""
@@ -1469,10 +1495,10 @@ msgstr ""
 
 #: tryton/gui/window/win_import.py:111
 #: tryton/gui/window/view_form/view/form_gtk/binary.py:57
-#: tryton/gui/window/view_form/view/form_gtk/binary.py:111
+#: tryton/gui/window/view_form/view/form_gtk/binary.py:118
 #: tryton/gui/window/view_form/view/form_gtk/image.py:62
 #: tryton/gui/window/view_form/view/form_gtk/image.py:131
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:624
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:650
 msgid "Open..."
 msgstr ""
 
@@ -1496,19 +1522,19 @@ msgstr ""
 msgid "Lines to Skip:"
 msgstr ""
 
-#: tryton/gui/window/win_import.py:184 tryton/gui/window/win_import.py:189
+#: tryton/gui/window/win_import.py:185 tryton/gui/window/win_import.py:190
 msgid "Field name"
 msgstr ""
 
-#: tryton/gui/window/win_import.py:249
+#: tryton/gui/window/win_import.py:251
 msgid "You must select an import file first!"
 msgstr ""
 
-#: tryton/gui/window/win_import.py:260
+#: tryton/gui/window/win_import.py:262
 msgid "Error opening CSV file"
 msgstr ""
 
-#: tryton/gui/window/win_import.py:287
+#: tryton/gui/window/win_import.py:289
 #, python-format
 msgid "Error processing the file at field %s."
 msgstr ""
@@ -1523,20 +1549,7 @@ msgstr ""
 msgid "%d records imported!"
 msgstr ""
 
-#: tryton/gui/window/win_import.py:371
-msgid "Importation Error!"
-msgstr ""
-
-#: tryton/gui/window/win_import.py:372
-#, python-format
-msgid ""
-"Error importing record %(record)s\n"
-"%(error_title)s\n"
-"\n"
-"%(traceback)s"
-msgstr ""
-
-#: tryton/gui/window/wizard.py:291
+#: tryton/gui/window/wizard.py:286
 msgid "Wizard"
 msgstr ""
 
@@ -1545,39 +1558,35 @@ msgstr ""
 msgid "No String Attr."
 msgstr ""
 
-#: tryton/gui/window/view_form/screen/screen.py:135
+#: tryton/gui/window/view_form/screen/screen.py:129
 msgid "ID"
 msgstr ""
 
-#: tryton/gui/window/view_form/screen/screen.py:136
+#: tryton/gui/window/view_form/screen/screen.py:130
 msgid "Creation User"
 msgstr ""
 
-#: tryton/gui/window/view_form/screen/screen.py:137
+#: tryton/gui/window/view_form/screen/screen.py:131
 msgid "Creation Date"
 msgstr ""
 
-#: tryton/gui/window/view_form/screen/screen.py:138
+#: tryton/gui/window/view_form/screen/screen.py:132
 msgid "Modification User"
 msgstr ""
 
-#: tryton/gui/window/view_form/screen/screen.py:139
+#: tryton/gui/window/view_form/screen/screen.py:133
 msgid "Modification Date"
 msgstr ""
 
-#: tryton/gui/window/view_form/screen/screen.py:634
+#: tryton/gui/window/view_form/screen/screen.py:631
 msgid "Unable to get view tree state"
 msgstr ""
 
-#: tryton/gui/window/view_form/screen/screen.py:671
+#: tryton/gui/window/view_form/screen/screen.py:668
 msgid "Unable to set view tree state"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/list.py:651
-msgid "You must select a record to use the relation!"
-msgstr ""
-
-#: tryton/gui/window/view_form/view/screen_container.py:25
+#: tryton/gui/window/view_form/view/screen_container.py:23
 msgid ".."
 msgstr ""
 
@@ -1585,19 +1594,19 @@ msgstr ""
 msgid "F_ilters"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/screen_container.py:149
+#: tryton/gui/window/view_form/view/screen_container.py:147
 msgid "Show bookmarks of filters"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/screen_container.py:314
+#: tryton/gui/window/view_form/view/screen_container.py:312
 msgid "Remove this bookmark"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/screen_container.py:321
+#: tryton/gui/window/view_form/view/screen_container.py:319
 msgid "Bookmark this filter"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/screen_container.py:380
+#: tryton/gui/window/view_form/view/screen_container.py:384
 msgid "Bookmark Name:"
 msgstr ""
 
@@ -1625,24 +1634,24 @@ msgstr ""
 msgid "Select a File..."
 msgstr ""
 
-#: tryton/gui/window/view_form/view/form_gtk/char.py:157
+#: tryton/gui/window/view_form/view/form_gtk/char.py:161
 msgid "Show plain text"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:349
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:348
 msgid "Add value"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:459
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:461
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:199
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:201
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:458
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:460
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:202
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:204
 #: tryton/gui/window/view_form/view/form_gtk/parser.py:255
 #: tryton/gui/window/view_form/view/form_gtk/parser.py:259
 msgid ":"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:471
+#: tryton/gui/window/view_form/view/form_gtk/dictionary.py:470
 #, python-format
 msgid "Remove \"%s\""
 msgstr ""
@@ -1659,23 +1668,23 @@ msgstr ""
 msgid "Images"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:175
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:178
 msgid "Translation"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:231
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:234
 msgid "Edit"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:236
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:239
 msgid "Fuzzy"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:305
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:308
 msgid "You need to save the record before adding translations!"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/form_gtk/interface.py:316
+#: tryton/gui/window/view_form/view/form_gtk/interface.py:319
 msgid "No other language available!"
 msgstr ""
 
@@ -1688,12 +1697,12 @@ msgstr ""
 msgid "Remove selected record <Del>"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:74
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:351
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:76
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:356
 msgid "Open a record <F2>"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/form_gtk/many2one.py:354
+#: tryton/gui/window/view_form/view/form_gtk/many2one.py:359
 msgid "Search a record <F2>"
 msgstr ""
 
@@ -1785,15 +1794,10 @@ msgstr ""
 msgid "Image size too large!"
 msgstr ""
 
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:245
+#: tryton/gui/window/view_form/view/list_gtk/parser.py:244
 msgid ": "
 msgstr ""
 
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:258
-#: tryton/gui/window/view_form/view/list_gtk/parser.py:1023
-msgid "Unknown"
-msgstr ""
-
 #: tryton/plugins/translation/__init__.py:18
 msgid "Translate view"
 msgstr ""
diff --git a/tryton.desktop b/tryton.desktop
index e1bf1d1..c7d0b24 100644
--- a/tryton.desktop
+++ b/tryton.desktop
@@ -21,7 +21,8 @@ Comment[fr]=Accéder au serveur Tryton
 Comment[ru]=Подключение к серверу Tryton
 Comment[sl]=Dostop do Tryton strežnika
 Keywords=Business;Management;Enterprise;ERP;Framework;Client;
-Exec=tryton
+Exec=tryton %u
 Icon=tryton-icon
 Terminal=false
+MimeType=application/tryton
 Categories=Office;Finance;
diff --git a/tryton.egg-info/PKG-INFO b/tryton.egg-info/PKG-INFO
index 6c6833d..b05d04d 100644
--- a/tryton.egg-info/PKG-INFO
+++ b/tryton.egg-info/PKG-INFO
@@ -1,12 +1,12 @@
 Metadata-Version: 1.1
 Name: tryton
-Version: 3.0.3
+Version: 3.2.0
 Summary: Tryton client
 Home-page: http://www.tryton.org/
 Author: Tryton
-Author-email: UNKNOWN
+Author-email: issue_tracker at tryton.org
 License: GPL-3
-Download-URL: http://downloads.tryton.org/3.0/
+Download-URL: http://downloads.tryton.org/3.2/
 Description: tryton
         ======
         
@@ -65,7 +65,8 @@ Description: tryton
         
           http://www.tryton.org/
         
-Platform: UNKNOWN
+Keywords: business application ERP
+Platform: any
 Classifier: Development Status :: 5 - Production/Stable
 Classifier: Environment :: X11 Applications :: GTK
 Classifier: Framework :: Tryton
@@ -84,6 +85,5 @@ Classifier: Natural Language :: Slovak
 Classifier: Natural Language :: Slovenian
 Classifier: Natural Language :: Japanese
 Classifier: Operating System :: OS Independent
-Classifier: Programming Language :: Python :: 2.6
 Classifier: Programming Language :: Python :: 2.7
 Classifier: Topic :: Office/Business
diff --git a/tryton.egg-info/SOURCES.txt b/tryton.egg-info/SOURCES.txt
index 8f1ad7c..136190b 100644
--- a/tryton.egg-info/SOURCES.txt
+++ b/tryton.egg-info/SOURCES.txt
@@ -141,6 +141,7 @@ tryton/version.py
 tryton.egg-info/PKG-INFO
 tryton.egg-info/SOURCES.txt
 tryton.egg-info/dependency_links.txt
+tryton.egg-info/not-zip-safe
 tryton.egg-info/requires.txt
 tryton.egg-info/top_level.txt
 tryton/action/__init__.py
@@ -162,6 +163,7 @@ tryton/common/date_widget.py
 tryton/common/datetime_strftime.py
 tryton/common/domain_inversion.py
 tryton/common/domain_parser.py
+tryton/common/entry_position.py
 tryton/common/environment.py
 tryton/common/focus.py
 tryton/common/placeholder_entry.py
@@ -182,6 +184,7 @@ tryton/gui/window/form.py
 tryton/gui/window/limit.py
 tryton/gui/window/nomodal.py
 tryton/gui/window/preference.py
+tryton/gui/window/revision.py
 tryton/gui/window/shortcuts.py
 tryton/gui/window/tabcontent.py
 tryton/gui/window/tips.py
@@ -228,6 +231,7 @@ tryton/gui/window/view_form/view/form_gtk/integer.py
 tryton/gui/window/view_form/view/form_gtk/interface.py
 tryton/gui/window/view_form/view/form_gtk/many2many.py
 tryton/gui/window/view_form/view/form_gtk/many2one.py
+tryton/gui/window/view_form/view/form_gtk/multiselection.py
 tryton/gui/window/view_form/view/form_gtk/one2many.py
 tryton/gui/window/view_form/view/form_gtk/one2one.py
 tryton/gui/window/view_form/view/form_gtk/parser.py
diff --git a/tryton.egg-info/not-zip-safe b/tryton.egg-info/not-zip-safe
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/tryton.egg-info/not-zip-safe
@@ -0,0 +1 @@
+
diff --git a/tryton.egg-info/requires.txt b/tryton.egg-info/requires.txt
index 391fde6..f3de687 100644
--- a/tryton.egg-info/requires.txt
+++ b/tryton.egg-info/requires.txt
@@ -3,9 +3,6 @@ python-dateutil
 [cdecimal]
 cdecimal
 
-[timezone]
-pytz
-
 [calendar]
 GooCalendar
 
diff --git a/tryton/action/main.py b/tryton/action/main.py
index d06afb0..00ae9d9 100644
--- a/tryton/action/main.py
+++ b/tryton/action/main.py
@@ -8,8 +8,7 @@ import gettext
 import tempfile
 import os
 import webbrowser
-from tryton.pyson import PYSONEncoder
-from tryton.common import RPCProgress, RPCExecute, RPCException
+from tryton.common import RPCProgress, RPCExecute, RPCException, slugify
 
 _ = gettext.gettext
 
@@ -40,10 +39,9 @@ class Action(object):
         if not print_p and direct_print:
             print_p = True
         dtemp = tempfile.mkdtemp(prefix='tryton_')
+
         fp_name = os.path.join(dtemp,
-            name.replace(os.sep, '_').replace(os.altsep or os.sep, '_')
-            + os.extsep
-            + type.replace(os.sep, '_').replace(os.altsep or os.sep, '_'))
+            slugify(name) + os.extsep + slugify(type))
         with open(fp_name, 'wb') as file_d:
             file_d.write(data)
         if email_print:
@@ -56,23 +54,31 @@ class Action(object):
 
     @staticmethod
     def execute(act_id, data, action_type=None, context=None):
-        if not action_type:
-            res = False
+        def get_action_type(actions):
             try:
-                res, = RPCExecute('model', 'ir.action', 'read', [act_id],
-                    ['type'], context=context)
+                action, = actions()
             except RPCException:
                 return
-            if not res:
-                raise Exception('ActionNotFound')
-            action_type = res['type']
-        try:
-            res, = RPCExecute('model', action_type, 'search_read',
+            action_type = action['type']
+            exec_action(action_type)
+
+        def exec_action(action_type):
+            def callback(actions):
+                try:
+                    action, = actions()
+                except RPCException:
+                    return
+                Action._exec_action(action, data)
+
+            RPCExecute('model', action_type, 'search_read',
                 [('action', '=', act_id)], 0, 1, None, None,
-                context=context)
-        except RPCException:
-            return
-        Action._exec_action(res, data)
+                context=context, callback=callback)
+
+        if not action_type:
+            RPCExecute('model', 'ir.action', 'read', [act_id],
+                ['type'], context=context, callback=get_action_type)
+        else:
+            exec_action(action_type)
 
     @staticmethod
     def _exec_action(action, data=None, context=None):
@@ -85,6 +91,7 @@ class Action(object):
         if 'type' not in (action or {}):
             return
 
+        data['action_id'] = action['id']
         if action['type'] == 'ir.action.act_window':
             view_ids = False
             view_mode = None
@@ -97,7 +104,7 @@ class Action(object):
             action.setdefault('pyson_domain', '[]')
             ctx = {
                 'active_model': data.get('res_model'),
-                'active_id': data.get('id', False),
+                'active_id': data.get('id'),
                 'active_ids': data.get('ids', []),
             }
             ctx.update(rpc.CONTEXT)
@@ -106,6 +113,7 @@ class Action(object):
             action_ctx = decoder.decode(action.get('pyson_context') or '{}')
             ctx.update(action_ctx)
             ctx.update(context)
+            action_ctx.update(context)
 
             ctx['context'] = ctx
             decoder = PYSONDecoder(ctx)
@@ -124,7 +132,6 @@ class Action(object):
             Window.create(view_ids, res_model, res_id, domain,
                     action_ctx, order, view_mode, name=name,
                     limit=action.get('limit'),
-                    auto_refresh=action.get('auto_refresh'),
                     search_value=search_value,
                     icon=(action.get('icon.rec_name') or ''),
                     tab_domain=tab_domain)
@@ -176,25 +183,12 @@ class Action(object):
         Evaluate the action with the record.
         '''
         action = action.copy()
-        if atype in ('print', 'action'):
-            email = {}
-            if 'pyson_email' in action:
-                email = record.expr_eval(action['pyson_email'])
-                if not email:
-                    email = {}
-            if 'subject' not in email:
-                email['subject'] = action['name'].replace('_', '')
-            action['email'] = email
-        elif atype == 'relate':
-            encoder = PYSONEncoder()
-            if 'pyson_domain' in action:
-                action['pyson_domain'] = encoder.encode(
-                    record.expr_eval(action['pyson_domain']))
-            if 'pyson_context' in action:
-                action['pyson_context'] = encoder.encode(
-                    record.expr_eval(action['pyson_context']))
-
-        else:
-            raise NotImplementedError("Action type '%s' is not supported" %
-                atype)
+        email = {}
+        if 'pyson_email' in action:
+            email = record.expr_eval(action['pyson_email'])
+            if not email:
+                email = {}
+        if 'subject' not in email:
+            email['subject'] = action['name'].replace('_', '')
+        action['email'] = email
         return action
diff --git a/tryton/client.py b/tryton/client.py
index 82d0583..6c4f2ae 100644
--- a/tryton/client.py
+++ b/tryton/client.py
@@ -116,8 +116,7 @@ class TrytonClient(object):
                 gtk.main()
         except KeyboardInterrupt:
             CONFIG.save()
-            if hasattr(gtk, 'accel_map_save'):
-                gtk.accel_map_save(os.path.join(get_config_dir(), 'accel.map'))
+            gtk.accel_map_save(os.path.join(get_config_dir(), 'accel.map'))
 
 if __name__ == "__main__":
     CLIENT = TrytonClient()
diff --git a/tryton/common/__init__.py b/tryton/common/__init__.py
index 68979ed..dda9261 100644
--- a/tryton/common/__init__.py
+++ b/tryton/common/__init__.py
@@ -3,5 +3,5 @@
 from common import *
 from datetime_strftime import *
 from domain_inversion import domain_inversion, eval_domain, localize_domain, \
-        unlocalize_domain, merge, inverse_leaf
+        merge, inverse_leaf, concat, simplify
 from environment import EvalEnvironment
diff --git a/tryton/common/common.py b/tryton/common/common.py
index 1c12017..efc39ae 100644
--- a/tryton/common/common.py
+++ b/tryton/common/common.py
@@ -10,10 +10,10 @@ import os
 import subprocess
 import re
 import logging
+import unicodedata
 from functools import partial
 from tryton.config import CONFIG
 from tryton.config import TRYTON_ICON, PIXMAPS_DIR
-import time
 import sys
 import xmlrpclib
 try:
@@ -38,10 +38,7 @@ try:
 except ImportError:
     ssl = None
 from threading import Lock
-try:
-    import pytz
-except ImportError:
-    pytz = None
+import dateutil.tz
 
 from tryton.exceptions import (TrytonServerError, TrytonError,
     TrytonServerUnavailable)
@@ -171,8 +168,25 @@ class ModelAccess(object):
 MODELACCESS = ModelAccess()
 
 
+class ModelHistory(object):
+    _models = set()
+
+    def load_history(self):
+        self._models.clear()
+        try:
+            self._models.update(rpc.execute('model', 'ir.model',
+                    'list_history', rpc.CONTEXT))
+        except TrytonServerError:
+            pass
+
+    def __contains__(self, model):
+        return model in self._models
+
+MODELHISTORY = ModelHistory()
+
+
 class ViewSearch(object):
-    searches = None
+    searches = {}
 
     def load_searches(self):
         try:
@@ -435,7 +449,11 @@ def file_selection(title, filename='',
     win.set_icon(TRYTON_ICON)
     win.set_current_folder(CONFIG['client.default_path'])
     if filename:
-        win.set_current_name(filename)
+        if action in (gtk.FILE_CHOOSER_ACTION_SAVE,
+                gtk.FILE_CHOOSER_ACTION_CREATE_FOLDER):
+            win.set_current_name(filename)
+        else:
+            win.set_filename(filename)
     win.set_select_multiple(multi)
     win.set_default_response(gtk.RESPONSE_OK)
     if filters is not None:
@@ -493,6 +511,18 @@ def file_selection(title, filename='',
         return filenames
 
 
+_slugify_strip_re = re.compile(r'[^\w\s-]')
+_slugify_hyphenate_re = re.compile(r'[-\s]+')
+
+
+def slugify(value):
+    if not isinstance(value, unicode):
+        value = unicode(value)
+    value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore')
+    value = unicode(_slugify_strip_re.sub('', value).strip().lower())
+    return _slugify_hyphenate_re.sub('-', value)
+
+
 def file_open(filename, type, print_p=False):
     def save():
         save_name = file_selection(_('Save As...'),
@@ -623,12 +653,8 @@ class WarningDialog(UniqueDialog):
     def build_dialog(self, parent, message, title, buttons=gtk.BUTTONS_OK):
         dialog = gtk.MessageDialog(parent, gtk.DIALOG_DESTROY_WITH_PARENT,
             gtk.MESSAGE_WARNING, buttons)
-        if hasattr(dialog, 'format_secondary_markup'):
-            dialog.set_markup('<b>%s</b>' % (to_xml(title)))
-            dialog.format_secondary_markup(to_xml(message))
-        else:
-            dialog.set_markup(
-                '<b>%s</b>\n%s' % (to_xml(title), to_xml(message)))
+        dialog.set_markup('<b>%s</b>' % (to_xml(title)))
+        dialog.format_secondary_markup(to_xml(message))
         return dialog
 
 warning = WarningDialog()
@@ -982,10 +1008,15 @@ def send_bugtracker(title, msg):
                 title = '[no title]'
             issue_id = None
             msg_ids = server.filter('msg', None, {'summary': str(msg_md5)})
-            if msg_ids:
-                issue_ids = server.filter('issue', None, {'messages': msg_ids})
-                if issue_ids:
-                    issue_id = issue_ids[0]
+            for msg_id in msg_ids:
+                summary = server.display(
+                    'msg%s' % msg_id, 'summary')['summary']
+                if summary == msg_md5:
+                    issue_ids = server.filter(
+                        'issue', None, {'messages': msg_id})
+                    if issue_ids:
+                        issue_id = issue_ids[0]
+                        break
             if issue_id:
                 # issue to same message already exists, add user to nosy-list
                 server.set('issue' + str(issue_id), *['nosy=+' + user])
@@ -1261,42 +1292,55 @@ class RPCProgress(object):
             self.error = True
             self.res = False
             self.exception = exception
-            return True
-        if not self.res:
-            self.error = True
+        else:
+            if not self.res:
+                self.error = True
+        if self.callback:
+            # Post to GTK queue to be run by the main thread
+            gobject.idle_add(self.process)
         return True
 
-    def run(self, process_exception_p=True, main_iteration_p=True):
-        session = rpc._SESSION
-        thread.start_new_thread(self.start, ())
-
-        watch = None
-        i = 0
-        while (not self.res) and (not self.error):
-            i += 1
-            if i > 1:
-                watch = gtk.gdk.Cursor(gtk.gdk.WATCH)
-                self.parent.window.set_cursor(watch)
-                if main_iteration_p:
-                    with gtk.gdk.lock:
-                        while gtk.events_pending():
-                            gtk.main_iteration()
-            time.sleep(0.1)
+    def run(self, process_exception_p=True, callback=None):
+        self.process_exception_p = process_exception_p
+        self.callback = callback
+        self.session = rpc._SESSION
+        if self.parent.window:
+            watch = gtk.gdk.Cursor(gtk.gdk.WATCH)
+            self.parent.window.set_cursor(watch)
+
+        if callback:
+            thread.start_new_thread(self.start, ())
+            return
+        else:
+            self.start()
+            return self.process()
+
+    def process(self):
         if self.parent.window:
             self.parent.window.set_cursor(None)
         if self.exception:
-            if process_exception_p:
+            if self.process_exception_p:
                 def rpc_execute(*args):
                     return RPCProgress('execute',
-                        args).run(process_exception_p, main_iteration_p)
+                        args).run(self.process_exception_p)
                 result = process_exception(self.exception, *self.args,
-                    rpc_execute=rpc_execute, session=session)
+                    rpc_execute=rpc_execute, session=self.session)
                 if result is False:
-                    raise RPCException(self.exception)
-                return result
-            else:
+                    self.exception = RPCException(self.exception)
+                else:
+                    self.exception = None
+                    self.res = result
+
+        def return_():
+            if self.exception:
                 raise self.exception
-        return self.res
+            else:
+                return self.res
+
+        if self.callback:
+            self.callback(return_)
+        else:
+            return return_()
 
 
 def RPCExecute(*args, **kwargs):
@@ -1305,8 +1349,19 @@ def RPCExecute(*args, **kwargs):
         rpc_context.update(kwargs['context'])
     args = args + (rpc_context,)
     process_exception = kwargs.get('process_exception', True)
-    main_iteration = kwargs.get('main_iteration', True)
-    return RPCProgress('execute', args).run(process_exception, main_iteration)
+    callback = kwargs.get('callback')
+    return RPCProgress('execute', args).run(process_exception, callback)
+
+
+def RPCContextReload(callback=None):
+    def update(context):
+        rpc.CONTEXT.clear()
+        rpc.CONTEXT.update(context())
+        if callback:
+            callback()
+    # Use RPCProgress to not send rpc.CONTEXT
+    RPCProgress('execute', ('model', 'res.user', 'get_preferences', True, {})
+        ).run(True, update)
 
 
 class Tooltips(object):
@@ -1463,15 +1518,11 @@ def filter_domain(domain):
 
 
 def timezoned_date(date, reverse=False):
-    if pytz and rpc.CONTEXT.get('timezone') and rpc.TIMEZONE:
-        lzone = pytz.timezone(rpc.CONTEXT['timezone'])
-        szone = pytz.timezone(rpc.TIMEZONE)
-        if reverse:
-            lzone, szone = szone, lzone
-        sdt = szone.localize(date, is_dst=True)
-        ldt = sdt.astimezone(lzone)
-        date = ldt
-    return date
+    lzone = dateutil.tz.tzlocal()
+    szone = dateutil.tz.tzutc()
+    if reverse:
+        lzone, szone = szone, lzone
+    return date.replace(tzinfo=szone).astimezone(lzone)
 
 
 def untimezoned_date(date):
diff --git a/tryton/common/completion.py b/tryton/common/completion.py
index 2f5b3d7..057c5d3 100644
--- a/tryton/common/completion.py
+++ b/tryton/common/completion.py
@@ -17,8 +17,7 @@ def get_completion():
     completion.set_match_func(lambda *a: True)
     completion.set_model(gtk.ListStore(str, int))
     completion.set_text_column(0)
-    if hasattr(completion.props, 'popup_set_width'):
-        completion.props.popup_set_width = False
+    completion.props.popup_set_width = False
     completion.insert_action_markup(0, _('<i>Search...</i>'))
     completion.insert_action_markup(1, _('<i>Create...</i>'))
     return completion
@@ -27,6 +26,8 @@ def get_completion():
 def update_completion(entry, record, field, model, domain=None):
     "Update entry completion"
     def update(search_text, domain):
+        if not entry.props.window:
+            return False
         if search_text != entry.get_text().decode('utf-8'):
             return False
         completion_model = entry.get_completion().get_model()
@@ -40,20 +41,23 @@ def update_completion(entry, record, field, model, domain=None):
             domain = field.domain_get(record)
         context = field.context_get(record)
         domain = [('rec_name', 'ilike', '%' + search_text + '%'), domain]
-        try:
-            results = RPCExecute('model', model, 'search_read', domain, 0,
-                CONFIG['client.limit'], None, ['rec_name'], context=context,
-                process_exception=False)
-        except (TrytonError, TrytonServerError):
-            results = []
-        if search_text != entry.get_text().decode('utf-8'):
-            return False
-        completion_model.clear()
-        for result in results:
-            completion_model.append([result['rec_name'], result['id']])
-        completion_model.search_text = search_text
-        # Force display of popup
-        entry.emit('changed')
+
+        def callback(results):
+            try:
+                results = results()
+            except (TrytonError, TrytonServerError):
+                results = []
+            if search_text != entry.get_text().decode('utf-8'):
+                return False
+            completion_model.clear()
+            for result in results:
+                completion_model.append([result['rec_name'], result['id']])
+            completion_model.search_text = search_text
+            # Force display of popup
+            entry.emit('changed')
+        RPCExecute('model', model, 'search_read', domain, 0,
+            CONFIG['client.limit'], None, ['rec_name'], context=context,
+            process_exception=False, callback=callback)
         return False
     search_text = entry.get_text().decode('utf-8')
     gobject.timeout_add(300, update, search_text, domain)
diff --git a/tryton/common/date_widget.py b/tryton/common/date_widget.py
index ded569d..20b4f23 100644
--- a/tryton/common/date_widget.py
+++ b/tryton/common/date_widget.py
@@ -28,6 +28,7 @@ MAPPING = {
     '%M': ('__', '([_ 0-9][_ 0-9])'),
     '%S': ('__', '([_ 0-9][_ 0-9])'),
     '%p': ('__', '([_ AP][_ M])'),
+    '%f': ('______', '([_0-9][_0-9][_0-9][_0-9][_0-9][_0-9])'),
     }
 OPERATORS = {
     gtk.keysyms.S: relativedelta(seconds=-1),
@@ -61,11 +62,10 @@ class DateEntry(gtk.Entry):
         self.connect('focus-in-event', self._focus_in)
         self.connect('focus-out-event', self._focus_out)
 
-        if hasattr(self, 'set_icon_from_stock'):
-            self.set_icon_from_stock(gtk.ENTRY_ICON_SECONDARY, 'tryton-find')
-            self.set_icon_tooltip_text(gtk.ENTRY_ICON_SECONDARY,
-                _('Open the calendar <F2>'))
-            self.connect('icon-press', DateEntry.cal_open)
+        self.set_icon_from_stock(gtk.ENTRY_ICON_SECONDARY, 'tryton-find')
+        self.set_icon_tooltip_text(gtk.ENTRY_ICON_SECONDARY,
+            _('Open the calendar <F2>'))
+        self.connect('icon-press', DateEntry.cal_open)
 
         self._interactive_input = True
         self.idle_set_position(0)
@@ -154,7 +154,11 @@ class DateEntry(gtk.Entry):
     def set_text(self, text):
         self._interactive_input = False
         try:
+            # Force position as _on_insert_text use it
+            position = self.get_position()
+            self.set_position(0)
             gtk.Entry.set_text(self, text)
+            self.idle_set_position(position)
         finally:
             self._interactive_input = True
 
@@ -217,7 +221,7 @@ class DateEntry(gtk.Entry):
         res = None
         date = self.compute_date(self.get_text())
         try:
-            res = datetime.datetime(*time.strptime(date, self.format)[:6])
+            res = datetime.datetime.strptime(date, self.format)
         except ValueError:
             return None
         if set_text:
diff --git a/tryton/common/domain_inversion.py b/tryton/common/domain_inversion.py
index e6942f7..c730de6 100644
--- a/tryton/common/domain_inversion.py
+++ b/tryton/common/domain_inversion.py
@@ -8,7 +8,10 @@ import datetime
 
 def in_(a, b):
     if isinstance(a, (list, tuple)):
-        return any(operator.contains(b, x) for x in a)
+        if isinstance(b, (list, tuple)):
+            return any(operator.contains(b, x) for x in a)
+        else:
+            return operator.contains(a, b)
     else:
         return operator.contains(b, a)
 
@@ -20,7 +23,7 @@ OPERATORS = {
     '>=': operator.ge,
     '!=': operator.ne,
     'in': in_,
-    'not in': lambda a, b: not in_(b, a),
+    'not in': lambda a, b: not in_(a, b),
     # Those operators are not supported (yet ?)
     'like': lambda a, b: True,
     'ilike': lambda a, b: True,
@@ -31,9 +34,9 @@ OPERATORS = {
 }
 
 
-def locale_part(expression, field_name):
+def locale_part(expression, field_name, locale_name='id'):
     if expression == field_name:
-        return 'id'
+        return locale_name
     if '.' in expression:
         fieldname, local = expression.split('.', 1)
         return local
@@ -80,6 +83,13 @@ def eval_leaf(part, context, boolop=operator.and_):
             context_field = '%s,%s' % context_field
         except TypeError:
             pass
+    if (operand in ('=', '!=')
+            and isinstance(context_field, (list, tuple))
+            and isinstance(value, (int, long))):
+        operand = {
+            '=': 'in',
+            '!=': 'not in',
+            }[operand]
     return OPERATORS[operand](context_field, value)
 
 
@@ -124,20 +134,15 @@ def localize_domain(domain, field_name=None):
                 return domain
             else:
                 return [domain[3]] + list(domain[1:-1])
-        return [locale_part(domain[0], field_name)] + list(domain[1:])
+        locale_name = 'id'
+        if isinstance(domain[2], basestring):
+            locale_name = 'rec_name'
+        return [locale_part(domain[0], field_name, locale_name)] \
+            + list(domain[1:])
     else:
         return [localize_domain(part, field_name) for part in domain]
 
 
-def unlocalize_domain(domain, fieldname):
-    if domain in ('AND', 'OR', True, False):
-        return domain
-    elif is_leaf(domain):
-        return ['%s.%s' % (fieldname, domain[0])] + list(domain[1:])
-    else:
-        return [unlocalize_domain(part, fieldname) for part in domain]
-
-
 def simplify(domain):
     "remove unused domain delimiter"
     if is_leaf(domain):
@@ -170,6 +175,17 @@ def merge(domain, domoperator=None):
         return [merge(domain)]
 
 
+def concat(*domains, **kwargs):
+    domoperator = kwargs.get('domoperator')
+    result = []
+    if domoperator:
+        result.append(domoperator)
+    for domain in domains:
+        if domain:
+            result.append(domain)
+    return simplify(merge(result))
+
+
 def parse(domain):
     if is_leaf(domain):
         return domain
@@ -441,6 +457,17 @@ def test_merge():
         ['d', '=', 5], ['e', '=', 6], ['f', '=', 7]]
 
 
+def test_concat():
+    domain1 = [['a', '=', 1]]
+    domain2 = [['b', '=', 2]]
+    assert concat(domain1, domain2) == ['AND', ['a', '=', 1], ['b', '=', 2]]
+    assert concat([], domain1) == domain1
+    assert concat(domain2, []) == domain2
+    assert concat([], []) == []
+    assert concat(domain1, domain2, domoperator='OR') == [
+        'OR', [['a', '=', 1]], [['b', '=', 2]]]
+
+
 def test_evaldomain():
     domain = [['x', '>', 5]]
     assert eval_domain(domain, {'x': 6})
@@ -462,6 +489,13 @@ def test_evaldomain():
     assert eval_domain(domain, {'x': [3, 4]})
     assert not eval_domain(domain, {'x': [1, 2]})
 
+    domain = [['x', 'not in', [3, 5]]]
+    assert not eval_domain(domain, {'x': 3})
+    assert eval_domain(domain, {'x': 4})
+    assert not eval_domain(domain, {'x': [3]})
+    assert not eval_domain(domain, {'x': [3, 4]})
+    assert eval_domain(domain, {'x': [1, 2]})
+
     domain = ['OR', ['x', '>', 10], ['x', '<', 0]]
     assert eval_domain(domain, {'x': 11})
     assert eval_domain(domain, {'x': -4})
@@ -494,6 +528,10 @@ def test_evaldomain():
     assert not eval_domain(domain, {'x': ('test', 2)})
     assert not eval_domain(domain, {'x': 'test,2'})
 
+    domain = [['x', '=', 1]]
+    assert eval_domain(domain, {'x': [1, 2]})
+    assert not eval_domain(domain, {'x': [2]})
+
 
 def test_localize():
     domain = [['x', '=', 5]]
@@ -502,6 +540,10 @@ def test_localize():
     domain = [['x', '=', 5], ['x.code', '=', 7]]
     assert localize_domain(domain, 'x') == [['id', '=', 5], ['code', '=', 7]]
 
+    domain = [['x', 'ilike', 'foo%'], ['x.code', '=', 'test']]
+    assert localize_domain(domain, 'x') == \
+        [['rec_name', 'ilike', 'foo%'], ['code', '=', 'test']]
+
     domain = ['OR', ['AND', ['x', '>', 7], ['x', '<', 15]], ['x.code', '=', 8]]
     assert localize_domain(domain, 'x') == \
         ['OR', ['AND', ['id', '>', 7], ['id', '<', 15]], ['code', '=', 8]]
diff --git a/tryton/common/domain_parser.py b/tryton/common/domain_parser.py
index 3fbccd6..935b245 100644
--- a/tryton/common/domain_parser.py
+++ b/tryton/common/domain_parser.py
@@ -9,7 +9,7 @@ from decimal import Decimal
 import datetime
 import time
 import io
-import collections
+from collections import OrderedDict
 
 from tryton.translate import date_format
 from tryton.common import untimezoned_date, datetime_strftime
@@ -159,7 +159,8 @@ def append_ending_clause(domain, clause, deep):
 
 def default_operator(field):
     "Return default operator for field"
-    if field['type'] in ('char', 'text', 'many2one', 'many2many', 'one2many'):
+    if field['type'] in ('char', 'text', 'many2one', 'many2many', 'one2many',
+            'reference'):
         return 'ilike'
     else:
         return '='
@@ -179,6 +180,38 @@ def time_format(field):
     return PYSONDecoder({}).decode(field['format'])
 
 
+def split_target_value(field, value):
+    "Split the reference value into target and value"
+    assert field['type'] == 'reference'
+    target = None
+    if isinstance(value, basestring):
+        for key, text in field['selection']:
+            if value.lower().startswith(text.lower() + ','):
+                target = key
+                value = value[len(text) + 1:]
+                break
+    return target, value
+
+
+def test_split_target_value():
+    field = {
+        'type': 'reference',
+        'selection': [
+            ('spam', 'Spam'),
+            ('ham', 'Ham'),
+            ('e', 'Eggs'),
+            ]
+        }
+    for value, result in (
+            ('Spam', (None, 'Spam')),
+            ('foo', (None, 'foo')),
+            ('Spam,', ('spam', '')),
+            ('Ham,bar', ('ham', 'bar')),
+            ('Eggs,foo', ('e', 'foo')),
+            ):
+        assert split_target_value(field, value) == result
+
+
 def convert_value(field, value):
     "Convert value for field"
 
@@ -328,13 +361,18 @@ def test_convert_selection():
             ('female', 'Female'),
             ],
         }
+    field_with_empty = field.copy()
+    field_with_empty['selection'] = (field_with_empty['selection']
+        + [('', '')])
     for value, result in (
             ('Male', 'male'),
             ('male', 'male'),
             ('test', 'test'),
             (None, None),
+            ('', ''),
             ):
         assert convert_value(field, value) == result
+        assert convert_value(field_with_empty, value) == result
 
 
 def test_convert_datetime():
@@ -344,7 +382,8 @@ def test_convert_datetime():
         }
     for value, result in (
             ('12/04/2002', datetime.datetime(2002, 12, 4)),
-            ('12/04/2002 12:30:00', datetime.datetime(2002, 12, 4, 12, 30)),
+            ('12/04/2002 12:30:00', untimezoned_date(
+                    datetime.datetime(2002, 12, 4, 12, 30))),
             ('test', None),
             (None, None),
             ):
@@ -376,7 +415,7 @@ def test_convert_time():
         assert convert_value(field, value) == result
 
 
-def format_value(field, value):
+def format_value(field, value, target=None):
     "Format value for field"
 
     def format_boolean():
@@ -402,6 +441,12 @@ def format_value(field, value):
         selections = dict(field['selection'])
         return selections.get(value, value) or ''
 
+    def format_reference():
+        if not target:
+            return format_selection()
+        selections = dict(field['selection'])
+        return '%s,%s' % (selections.get(target, target), value)
+
     def format_datetime():
         if not value:
             return ''
@@ -432,7 +477,7 @@ def format_value(field, value):
         'float': format_float,
         'numeric': format_float,
         'selection': format_selection,
-        'reference': format_selection,
+        'reference': format_reference,
         'datetime': format_datetime,
         'date': format_date,
         'time': format_time,
@@ -513,13 +558,18 @@ def test_format_selection():
             ('female', 'Female'),
             ],
         }
+    field_with_empty = field.copy()
+    field_with_empty['selection'] = (field_with_empty['selection']
+        + [('', '')])
     for value, result in (
             ('male', 'Male'),
             ('test', 'test'),
             (False, ''),
             (None, ''),
+            ('', ''),
             ):
         assert format_value(field, value) == result
+        assert format_value(field_with_empty, value) == result
 
 
 def test_format_datetime():
@@ -575,6 +625,7 @@ def complete_value(field, value):
         test_value = value if value is not None else ''
         if isinstance(value, list):
             test_value = value[-1]
+        test_value = test_value.strip('%')
         for svalue, test in field['selection']:
             if test.lower().startswith(test_value.lower()):
                 if isinstance(value, list):
@@ -582,6 +633,18 @@ def complete_value(field, value):
                 else:
                     yield svalue
 
+    def complete_reference():
+        test_value = value if value is not None else ''
+        if isinstance(value, list):
+            test_value = value[-1]
+        test_value = test_value.strip('%')
+        for svalue, test in field['selection']:
+            if test.lower().startswith(test_value.lower()):
+                if isinstance(value, list):
+                    yield value[:-1] + [svalue]
+                else:
+                    yield likify(svalue)
+
     def complete_datetime():
         yield datetime.date.today()
         yield datetime.datetime.now()
@@ -595,7 +658,7 @@ def complete_value(field, value):
     completes = {
         'boolean': complete_boolean,
         'selection': complete_selection,
-        'reference': complete_selection,
+        'reference': complete_reference,
         'datetime': complete_datetime,
         'date': complete_date,
         'time': complete_time,
@@ -620,6 +683,18 @@ def test_complete_selection():
             ):
         assert list(complete_value(field, value)) == result
 
+    field_with_empty = field.copy()
+    field_with_empty['selection'] = (field_with_empty['selection']
+        + [('', '')])
+    for value, result in (
+            ('m', ['male']),
+            ('test', []),
+            ('', ['male', 'female', '']),
+            (None, ['male', 'female', '']),
+            (['male', 'f'], [['male', 'female']]),
+            ):
+        assert list(complete_value(field_with_empty, value)) == result
+
 
 def parenthesize(tokens):
     "Nest tokens according to parenthesis"
@@ -721,11 +796,7 @@ class DomainParser(object):
     "A parser for domain"
 
     def __init__(self, fields):
-        if hasattr(collections, 'OrderedDict'):
-            odict = collections.OrderedDict
-        else:
-            odict = dict
-        self.fields = odict((name, f)
+        self.fields = OrderedDict((name, f)
             for name, f in fields.iteritems()
             if f.get('searchable', True))
         self.strings = dict((f['string'].lower(), f)
@@ -772,46 +843,53 @@ class DomainParser(object):
         def string_(clause):
             if not clause:
                 return ''
-            if (isinstance(clause[0], basestring)
-                    and (clause[0] in self.fields
-                    or clause[0] == 'rec_name')):
-                name, operator, value = clause
-                if name not in self.fields:
-                    escaped = value.replace('%%', '__')
-                    if escaped.startswith('%') and escaped.endswith('%'):
-                        value = value[1:-1]
-                    return quote(value)
-                field = self.fields[name]
-                if 'ilike' in operator:
-                    escaped = value.replace('%%', '__')
-                    if escaped.startswith('%') and escaped.endswith('%'):
-                        value = value[1:-1]
-                    elif '%' not in escaped:
-                        if operator == 'ilike':
-                            operator = '='
-                        else:
-                            operator = '!'
-                        value = value.replace('%%', '%')
-                def_operator = default_operator(field)
-                if (def_operator == operator.strip()
-                        or (def_operator in operator
-                            and 'not' in operator)):
-                    operator = operator.rstrip(def_operator
-                        ).replace('not', '!').strip()
-                if operator.endswith('in'):
-                    if operator == 'not in':
-                        operator = '!'
-                    else:
-                        operator = ''
-                formatted_value = format_value(field, value)
-                if (operator in OPERATORS and
-                        field['type'] in ('char', 'text', 'sha', 'selection')
-                        and value == ''):
-                    formatted_value = '""'
-                return '%s: %s%s' % (quote(field['string']), operator,
-                    formatted_value)
-            else:
+            if (not isinstance(clause[0], basestring)
+                    or clause[0] in ('AND', 'OR')):
                 return '(%s)' % self.string(clause)
+            name, operator, value = clause[:3]
+            if name.endswith('.rec_name'):
+                name = name[:-9]
+            if name not in self.fields:
+                escaped = value.replace('%%', '__')
+                if escaped.startswith('%') and escaped.endswith('%'):
+                    value = value[1:-1]
+                return quote(value)
+            field = self.fields[name]
+
+            if len(clause) > 3:
+                target = clause[3]
+            else:
+                target = None
+
+            if 'ilike' in operator:
+                escaped = value.replace('%%', '__')
+                if escaped.startswith('%') and escaped.endswith('%'):
+                    value = value[1:-1]
+                elif '%' not in escaped:
+                    if operator == 'ilike':
+                        operator = '='
+                    else:
+                        operator = '!'
+                    value = value.replace('%%', '%')
+            def_operator = default_operator(field)
+            if (def_operator == operator.strip()
+                    or (def_operator in operator
+                        and ('not' in operator
+                            or '!' in operator))):
+                operator = operator.rstrip(def_operator
+                    ).replace('not', '!').strip()
+            if operator.endswith('in'):
+                if operator == 'not in':
+                    operator = '!'
+                else:
+                    operator = ''
+            formatted_value = format_value(field, value, target)
+            if (operator in OPERATORS and
+                    field['type'] in ('char', 'text', 'selection')
+                    and value == ''):
+                formatted_value = '""'
+            return '%s: %s%s' % (quote(field['string']), operator,
+                formatted_value)
 
         if not domain:
             return ''
@@ -862,8 +940,13 @@ class DomainParser(object):
         "Return all completion for the clause"
         if len(clause) == 1:
             name, = clause
-        else:
+        elif len(clause) == 3:
             name, operator, value = clause
+        else:
+            name, operator, value, target = clause
+            if name.endswith('.rec_name'):
+                name = name[:-9]
+            value = target
         if name == 'rec_name':
             if operator == 'ilike':
                 escaped = value.replace('%%', '__')
@@ -974,6 +1057,14 @@ class DomainParser(object):
                 else:
                     name, operator, value = clause
                     field = self.strings[name.lower()]
+                    field_name = field['name']
+
+                    target = None
+                    if field['type'] == 'reference':
+                        target, value = split_target_value(field, value)
+                        if target:
+                            field_name += '.rec_name'
+
                     if operator is None:
                         operator = default_operator(field)
                     if isinstance(value, list):
@@ -983,8 +1074,6 @@ class DomainParser(object):
                             operator = 'in'
                     if operator == '!':
                         operator = negate_operator(default_operator(field))
-                    if 'like' in operator:
-                        value = likify(value)
                     if field['type'] in ('integer', 'float', 'numeric',
                             'datetime', 'date', 'time'):
                         if value and '..' in value:
@@ -992,15 +1081,23 @@ class DomainParser(object):
                             lvalue = convert_value(field, lvalue)
                             rvalue = convert_value(field, rvalue)
                             yield iter([
-                                    (field['name'], '>=', lvalue),
-                                    (field['name'], '<', rvalue),
+                                    (field_name, '>=', lvalue),
+                                    (field_name, '<', rvalue),
                                     ])
                             continue
                     if isinstance(value, list):
                         value = [convert_value(field, v) for v in value]
+                        if field['type'] in ('many2one', 'one2many',
+                                'many2many', 'one2one'):
+                            field_name += '.rec_name'
                     else:
                         value = convert_value(field, value)
-                    yield field['name'], operator, value
+                    if 'like' in operator:
+                        value = likify(value)
+                    if target:
+                        yield (field_name, operator, value, target)
+                    else:
+                        yield field_name, operator, value
 
 
 def test_stringable():
@@ -1034,6 +1131,28 @@ def test_string():
                 'string': 'Date',
                 'type': 'date',
                 },
+            'selection': {
+                'string': 'Selection',
+                'type': 'selection',
+                'selection': [
+                    ('male', 'Male'),
+                    ('female', 'Female'),
+                    ('', ''),
+                    ],
+                },
+            'reference': {
+                'string': 'Reference',
+                'type': 'reference',
+                'selection': [
+                    ('spam', 'Spam'),
+                    ('ham', 'Ham'),
+                    ]
+                },
+            'many2one': {
+                'string': 'Many2One',
+                'name': 'many2one',
+                'type': 'many2one',
+                },
             })
     assert dom.string([('name', '=', 'Doe')]) == 'Name: =Doe'
     assert dom.string([('name', '=', None)]) == 'Name: ='
@@ -1066,6 +1185,20 @@ def test_string():
     assert dom.string([('surname', 'ilike', '%Doe%')]) == '"(Sur)Name": Doe'
     assert dom.string([('date', '>=', datetime.date(2012, 10, 24))]) == \
         'Date: >=10/24/2012'
+    assert dom.string([('selection', '=', '')]) == 'Selection: '
+    assert dom.string([('selection', '=', None)]) == 'Selection: '
+    assert dom.string([('selection', '!=', '')]) == 'Selection: !""'
+    assert dom.string([('selection', '=', 'male')]) == 'Selection: Male'
+    assert dom.string([('selection', '!=', 'male')]) == 'Selection: !Male'
+    assert dom.string([('reference', 'ilike', '%foo%')]) == \
+        'Reference: foo'
+    assert dom.string([('reference.rec_name', 'ilike', '%bar%', 'spam')]) == \
+        'Reference: Spam,bar'
+    assert dom.string([('reference', 'in', ['foo', 'bar'])]) == \
+        'Reference: foo;bar'
+    assert dom.string([('many2one', 'ilike', '%John%')]) == 'Many2One: John'
+    assert dom.string([('many2one.rec_name', 'in', ['John', 'Jane'])]) == \
+        'Many2One: John;Jane'
 
 
 def test_group():
@@ -1174,6 +1307,20 @@ def test_parse_clause():
                     ('female', 'Female'),
                     ],
                 },
+            'reference': {
+                'string': 'Reference',
+                'name': 'reference',
+                'type': 'reference',
+                'selection': [
+                    ('spam', 'Spam'),
+                    ('ham', 'Ham'),
+                    ]
+                },
+            'many2one': {
+                'string': 'Many2One',
+                'name': 'many2one',
+                'type': 'many2one',
+                },
             })
     assert rlist(dom.parse_clause([('John',)])) == [
         ('rec_name', 'ilike', '%John%')]
@@ -1193,6 +1340,12 @@ def test_parse_clause():
     assert rlist(dom.parse_clause([('Name', '!', ['John', 'Jane'])])) == [
         ('name', 'not in', ['John', 'Jane']),
         ]
+    assert rlist(dom.parse_clause([('Selection', None, None)])) == [
+        ('selection', '=', None),
+        ]
+    assert rlist(dom.parse_clause([('Selection', None, '')])) == [
+        ('selection', '=', ''),
+        ]
     assert rlist(dom.parse_clause([('Selection', None, ['Male', 'Female'])])) \
         == [
             ('selection', 'in', ['male', 'female'])
@@ -1204,3 +1357,21 @@ def test_parse_clause():
             ('integer', '>=', 3),
             ('integer', '<', 5),
             ]]
+    assert rlist(dom.parse_clause([('Reference', None, 'foo')])) == [
+        ('reference', 'ilike', '%foo%'),
+        ]
+    assert rlist(dom.parse_clause([('Reference', None, 'Spam')])) == [
+        ('reference', 'ilike', '%spam%'),
+        ]
+    assert rlist(dom.parse_clause([('Reference', None, 'Spam,bar')])) == [
+        ('reference.rec_name', 'ilike', '%bar%', 'spam'),
+        ]
+    assert rlist(dom.parse_clause([('Reference', None, ['foo', 'bar'])])) == [
+        ('reference', 'in', ['foo', 'bar']),
+        ]
+    assert rlist(dom.parse_clause([('Many2One', None, 'John')])) == [
+        ('many2one', 'ilike', '%John%'),
+        ]
+    assert rlist(dom.parse_clause([('Many2One', None, ['John', 'Jane'])])) == [
+        ('many2one.rec_name', 'in', ['John', 'Jane']),
+        ]
diff --git a/tryton/common/entry_position.py b/tryton/common/entry_position.py
new file mode 100644
index 0000000..5f92c36
--- /dev/null
+++ b/tryton/common/entry_position.py
@@ -0,0 +1,58 @@
+#This file is part of Tryton.  The COPYRIGHT file at the top level of
+#this repository contains the full copyright notices and license terms.
+import string
+
+import gtk
+
+
+class PositionManager(object):
+    position = None
+
+    def reset_position(self, entry):
+        if entry.get_alignment() <= 0.5:
+            entry.set_position(0)
+        else:
+            entry.set_position(-1)
+
+    def focus_out(self, entry, event):
+        self.position = entry.get_position()
+        self.reset_position(entry)
+
+    def focus_in(self, entry, event):
+        if self.position is None:
+            self.reset_position(entry)
+        else:
+            entry.set_position(self.position)
+
+    def changed(self, entry):
+        if not entry.has_focus():
+            self.reset_position(entry)
+
+
+def manage_entry_position(entry):
+    manager = PositionManager()
+    entry.connect('focus-out-event', manager.focus_out)
+    entry.connect('focus-in-event', manager.focus_in)
+    entry.connect('changed', manager.changed)
+
+
+if __name__ == '__main__':
+    win = gtk.Window()
+    win.set_title('Manage Entry Position')
+    win.connect('delete-event', lambda *a: gtk.main_quit())
+    vbox = gtk.VBox()
+    win.add(vbox)
+
+    entry1 = gtk.Entry()
+    vbox.pack_start(entry1, expand=False, fill=False)
+    manage_entry_position(entry1)
+    entry1.set_text(string.ascii_letters)
+
+    entry2 = gtk.Entry()
+    entry2.set_alignment(1.0)
+    vbox.pack_start(entry2, expand=False, fill=False)
+    manage_entry_position(entry2)
+    entry2.set_text(string.ascii_letters)
+
+    win.show_all()
+    gtk.main()
diff --git a/tryton/common/popup_menu.py b/tryton/common/popup_menu.py
index 4b4e743..df44569 100644
--- a/tryton/common/popup_menu.py
+++ b/tryton/common/popup_menu.py
@@ -11,7 +11,7 @@ from tryton.gui.window.attachment import Attachment
 _ = gettext.gettext
 
 
-def populate(menu, model, record, title=''):
+def populate(menu, model, record, title='', field=None):
     '''
     Fill menu with the actions of model for the record.
     If title is filled, the actions will be put in a submenu.
@@ -23,10 +23,6 @@ def populate(menu, model, record, title=''):
             return
     elif record.id < 0:
         return
-    try:
-        toolbar = RPCExecute('model', model, 'view_toolbar_get')
-    except RPCException:
-        return
 
     def load(record):
         if isinstance(record, (int, long)):
@@ -54,6 +50,11 @@ def populate(menu, model, record, title=''):
     def attachment(menuitem):
         Attachment(record, None)
 
+    def edit(menuitem):
+        with Window(hide_current=True, allow_similar=True):
+            Window.create(field.attrs.get('view_ids'), model, record,
+                mode=['form'])
+
     if title:
         if len(menu):
             menu.append(gtk.SeparatorMenuItem())
@@ -67,36 +68,47 @@ def populate(menu, model, record, title=''):
 
     if len(action_menu):
         action_menu.append(gtk.SeparatorMenuItem())
+    if field:
+        edit_item = gtk.MenuItem(_('Edit...'))
+        edit_item.connect('activate', edit)
+        action_menu.append(edit_item)
+        action_menu.append(gtk.SeparatorMenuItem())
     attachment_item = gtk.ImageMenuItem('tryton-attachment')
     attachment_item.set_label(_('Attachments...'))
     action_menu.append(attachment_item)
     attachment_item.connect('activate', attachment)
 
-    for atype, icon, label, flavor in (
-            ('action', 'tryton-executable', _('Actions...'), None),
-            ('relate', 'tryton-go-jump', _('Relate...'), None),
-            ('print', 'tryton-print-open', _('Report...'), 'open'),
-            ('print', 'tryton-print-email', _('E-Mail...'), 'email'),
-            ('print', 'tryton-print', _('Print...'), 'print'),
-            ):
-        if len(action_menu):
-            action_menu.append(gtk.SeparatorMenuItem())
-        title_item = gtk.ImageMenuItem(icon)
-        title_item.set_label(label)
-        action_menu.append(title_item)
-        if not toolbar[atype]:
-            title_item.set_sensitive(False)
-            continue
-        submenu = gtk.Menu()
-        title_item.set_submenu(submenu)
-        for action in toolbar[atype]:
-            action = action.copy()
-            item = gtk.MenuItem(action['name'])
-            submenu.append(item)
-            if flavor == 'print':
-                action['direct_print'] = True
-            elif flavor == 'email':
-                action['email_print'] = True
-            item.connect('activate', activate, action, atype)
-
+    def set_toolbar(toolbar):
+        try:
+            toolbar = toolbar()
+        except RPCException:
+            return
+        for atype, icon, label, flavor in (
+                ('action', 'tryton-executable', _('Actions...'), None),
+                ('relate', 'tryton-go-jump', _('Relate...'), None),
+                ('print', 'tryton-print-open', _('Report...'), 'open'),
+                ('print', 'tryton-print-email', _('E-Mail...'), 'email'),
+                ('print', 'tryton-print', _('Print...'), 'print'),
+                ):
+            if len(action_menu):
+                action_menu.append(gtk.SeparatorMenuItem())
+            title_item = gtk.ImageMenuItem(icon)
+            title_item.set_label(label)
+            action_menu.append(title_item)
+            if not toolbar[atype]:
+                title_item.set_sensitive(False)
+                continue
+            submenu = gtk.Menu()
+            title_item.set_submenu(submenu)
+            for action in toolbar[atype]:
+                action = action.copy()
+                item = gtk.MenuItem(action['name'])
+                submenu.append(item)
+                if flavor == 'print':
+                    action['direct_print'] = True
+                elif flavor == 'email':
+                    action['email_print'] = True
+                item.connect('activate', activate, action, atype)
+            menu.show_all()
+    RPCExecute('model', model, 'view_toolbar_get', callback=set_toolbar)
     menu.show_all()
diff --git a/tryton/common/selection.py b/tryton/common/selection.py
index 88fd848..a05ed71 100644
--- a/tryton/common/selection.py
+++ b/tryton/common/selection.py
@@ -1,15 +1,20 @@
 #This file is part of Tryton.  The COPYRIGHT file at the top level of
 #this repository contains the full copyright notices and license terms.
 import operator
+import math
+
 import gtk
+import gobject
 
 from tryton.common import RPCExecute, RPCException
+from tryton.common import eval_domain
 
 
 class SelectionMixin(object):
 
     def __init__(self, *args, **kwargs):
         super(SelectionMixin, self).__init__(*args, **kwargs)
+        self.nullable_widget = True
         self.selection = None
         self.inactive_selection = []
         self._last_domain = None
@@ -43,13 +48,20 @@ class SelectionMixin(object):
         if not field:
             return
 
+        domain = field.domain_get(record)
+        if field.attrs['type'] == 'reference':
+            # The domain on reference field is not only based on the selection
+            # so the selection can not be filtered.
+            domain = []
         if 'relation' not in self.attrs:
             change_with = self.attrs.get('selection_change_with') or []
-            key = record._get_on_change_args(change_with).items()
+            args = record._get_on_change_args(change_with)
+            del args['id']
+            key = args.items()
             key.sort()
             self.init_selection(tuple(key))
+            self.filter_selection(domain, record, field)
         else:
-            domain = field.domain_get(record)
             context = record[self.field_name].context_get(record)
             domain_cache_key = str(domain) + str(context)
             if domain_cache_key in self._domain_cache:
@@ -66,7 +78,8 @@ class SelectionMixin(object):
                 result = False
             if isinstance(result, list):
                 selection = [(x['id'], x['rec_name']) for x in result]
-                selection.append((None, ''))
+                if self.nullable_widget:
+                    selection.append((None, ''))
                 self._last_domain = (domain, context)
                 self._domain_cache[domain_cache_key] = selection
             else:
@@ -75,6 +88,14 @@ class SelectionMixin(object):
             self.selection = selection[:]
             self.inactive_selection = []
 
+    def filter_selection(self, domain, record, field):
+        if not domain:
+            return
+        test = lambda value: eval_domain(domain, {
+                self.field_name: value[0],
+                })
+        self.selection = filter(test, self.selection)
+
     def get_inactive_selection(self, value):
         if 'relation' not in self.attrs:
             return ''
@@ -100,3 +121,72 @@ def selection_shortcuts(entry):
             widget.popup()
     entry.connect('key_press_event', key_press)
     return entry
+
+
+class PopdownMixin(object):
+
+    def set_popdown(self, selection, entry):
+        if not entry.child:  # entry is destroyed
+            return
+        model, lengths = self.get_popdown_model(selection)
+        entry.set_model(model)
+        # GTK 2.24 and above use a ComboBox instead of a ComboBoxEntry
+        if hasattr(entry, 'set_text_column'):
+            entry.set_text_column(0)
+        else:
+            entry.set_entry_text_column(0)
+        completion = gtk.EntryCompletion()
+        completion.set_inline_selection(True)
+        completion.set_model(model)
+        entry.child.set_completion(completion)
+        if lengths:
+            pop = sorted(lengths, reverse=True)
+            average = sum(pop) / len(pop)
+            deviation = int(math.sqrt(sum((x - average) ** 2 for x in pop) /
+                    len(pop)))
+            width = max(next((x for x in pop if x < (deviation * 4)), 10), 10)
+        else:
+            width = 10
+        entry.child.set_width_chars(width)
+        if lengths:
+            entry.child.set_max_length(max(lengths))
+        completion.set_text_column(0)
+        completion.connect('match-selected', self.match_selected, entry)
+
+    def get_popdown_model(self, selection):
+        model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_PYOBJECT)
+        lengths = []
+        for (value, name) in selection:
+            name = str(name)
+            model.append((name, value))
+            lengths.append(len(name))
+        return model, lengths
+
+    def match_selected(self, completion, model, iter_, entry):
+        value, = model.get(iter_, 1)
+        model = entry.get_model()
+        for i, values in enumerate(model):
+            if values[1] == value:
+                entry.set_active(i)
+                break
+
+    def get_popdown_value(self, entry):
+        active = entry.get_active()
+        if active < 0:
+            return None
+        else:
+            model = entry.get_model()
+            return model[active][1]
+
+    def set_popdown_value(self, entry, value):
+        active = -1
+        model = entry.get_model()
+        for i, selection in enumerate(model):
+            if selection[1] == value:
+                active = i
+                break
+        else:
+            if value:
+                return False
+        entry.set_active(active)
+        return True
diff --git a/tryton/config.py b/tryton/config.py
index a20aba8..f6a6d58 100644
--- a/tryton/config.py
+++ b/tryton/config.py
@@ -179,15 +179,9 @@ else:
     CURRENT_DIR = os.path.abspath(os.path.normpath(os.path.join(
         unicode(os.path.dirname(__file__), sys.getfilesystemencoding()),
         '..')))
-PREFIX = os.path.abspath(os.path.normpath(os.path.join(
-    os.path.realpath(os.path.dirname(sys.argv[0])), '..')))
 PIXMAPS_DIR = os.path.join(CURRENT_DIR, 'share', 'pixmaps', 'tryton')
 if not os.path.isdir(PIXMAPS_DIR):
-    PIXMAPS_DIR = os.path.join(PREFIX, 'share', 'pixmaps', 'tryton')
-    if not os.path.isdir(PIXMAPS_DIR):
-        PREFIX = os.path.abspath(os.path.normpath(
-            os.path.dirname(sys.argv[0])))
-        PIXMAPS_DIR = os.path.join(PREFIX, 'share', 'pixmaps', 'tryton')
+    PIXMAPS_DIR = os.path.join(sys.prefix, 'share', 'pixmaps', 'tryton')
 
 TRYTON_ICON = gtk.gdk.pixbuf_new_from_file(
         os.path.join(PIXMAPS_DIR, 'tryton-icon.png').encode('utf-8'))
@@ -196,6 +190,6 @@ TRYTON_ICON = gtk.gdk.pixbuf_new_from_file(
 def _data_dir():
     data_dir = os.path.join(CURRENT_DIR, 'share', 'tryton')
     if not os.path.isdir(data_dir):
-        data_dir = os.path.join(PREFIX, 'share', 'tryton')
+        data_dir = os.path.join(sys.prefix, 'share', 'tryton')
     return data_dir
 DATA_DIR = _data_dir()
diff --git a/tryton/gui/main.py b/tryton/gui/main.py
index 1f1791c..c7c3d42 100644
--- a/tryton/gui/main.py
+++ b/tryton/gui/main.py
@@ -13,8 +13,10 @@ try:
 except ImportError:
     import json
 import webbrowser
+import threading
+
 import tryton.rpc as rpc
-from tryton.common import RPCExecute, RPCException
+from tryton.common import RPCExecute, RPCException, RPCContextReload
 from tryton.config import CONFIG, TRYTON_ICON, get_config_dir
 import tryton.common as common
 from tryton.pyson import PYSONDecoder
@@ -130,8 +132,7 @@ class Main(object):
         gtk.accel_map_add_entry('<tryton>/Form/Search', gtk.keysyms.F,
             gtk.gdk.CONTROL_MASK)
 
-        if hasattr(gtk, 'accel_map_load'):
-            gtk.accel_map_load(os.path.join(get_config_dir(), 'accel.map'))
+        gtk.accel_map_load(os.path.join(get_config_dir(), 'accel.map'))
 
         self.tooltips = common.Tooltips()
 
@@ -293,8 +294,7 @@ class Main(object):
         text_cell = gtk.CellRendererText()
         global_search_completion.pack_start(text_cell)
         global_search_completion.add_attribute(text_cell, "markup", 1)
-        if hasattr(global_search_completion.props, 'popup_set_width'):
-            global_search_completion.props.popup_set_width = True
+        global_search_completion.props.popup_set_width = True
         self.global_search_entry.set_completion(global_search_completion)
         self.global_search_entry.set_icon_from_stock(gtk.ENTRY_ICON_PRIMARY,
             'gtk-find')
@@ -315,41 +315,52 @@ class Main(object):
 
         global_search_completion.connect('match-selected', match_selected)
 
-        def update(widget, search_text):
-            if search_text != widget.get_text().decode('utf-8'):
+        def update(widget, search_text, callback=None):
+            def end():
+                if callback:
+                    callback()
                 return False
+            if search_text != widget.get_text().decode('utf-8'):
+                return end()
             gmodel = global_search_completion.get_model()
             if not search_text or not gmodel:
                 gmodel.clear()
                 gmodel.search_text = search_text
-                return False
+                return end()
             if getattr(gmodel, 'search_text', None) == search_text:
-                return False
-            try:
-                result = RPCExecute('model', 'ir.model', 'global_search',
+                return end()
+
+            def set_result(result):
+                try:
+                    result = result()
+                except RPCException:
+                    result = []
+                if search_text != widget.get_text().decode('utf-8'):
+                    if callback:
+                        callback()
+                    return False
+                gmodel.clear()
+                for r in result:
+                    _, model, model_name, record_id, record_name, icon = r
+                    if icon:
+                        text = common.to_xml(record_name)
+                        common.ICONFACTORY.register_icon(icon)
+                        pixbuf = widget.render_icon(stock_id=icon,
+                            size=gtk.ICON_SIZE_BUTTON, detail=None)
+                    else:
+                        text = '<b>%s:</b>\n %s' % (
+                            common.to_xml(model_name),
+                            common.to_xml(record_name))
+                        pixbuf = None
+                    gmodel.append([pixbuf, text, model, record_id])
+                gmodel.search_text = search_text
+                # Force display of popup
+                widget.emit('changed')
+                end()
+
+            RPCExecute('model', 'ir.model', 'global_search',
                     search_text, CONFIG['client.limit'],
-                    self.menu_screen.model_name)
-            except RPCException:
-                result = []
-            if search_text != widget.get_text().decode('utf-8'):
-                return False
-            gmodel.clear()
-            for r in result:
-                _, model, model_name, record_id, record_name, icon = r
-                if icon:
-                    text = common.to_xml(record_name)
-                    common.ICONFACTORY.register_icon(icon)
-                    pixbuf = widget.render_icon(stock_id=icon,
-                        size=gtk.ICON_SIZE_BUTTON, detail=None)
-                else:
-                    text = '<b>%s:</b>\n %s' % (
-                        common.to_xml(model_name),
-                        common.to_xml(record_name))
-                    pixbuf = None
-                gmodel.append([pixbuf, text, model, record_id])
-            gmodel.search_text = search_text
-            # Force display of popup
-            widget.emit('changed')
+                    self.menu_screen.model_name, callback=set_result)
             return False
 
         def changed(widget):
@@ -357,13 +368,14 @@ class Main(object):
             gobject.timeout_add(300, update, widget, search_text)
 
         def activate(widget):
+            def message():
+                gmodel = global_search_completion.get_model()
+                if not len(gmodel):
+                    common.message(_('No result found.'))
+                else:
+                    widget.emit('changed')
             search_text = widget.get_text().decode('utf-8')
-            update(widget, search_text)
-            gmodel = global_search_completion.get_model()
-            if not len(gmodel):
-                common.message(_('No result found.'))
-            else:
-                widget.emit('changed')
+            update(widget, search_text, message)
 
         self.global_search_entry.connect('changed', changed)
         self.global_search_entry.connect('activate', activate)
@@ -841,36 +853,54 @@ class Main(object):
         page = self.notebook.get_current_page()
         self.notebook.set_current_page(page - 1)
 
-    def sig_user_preferences(self, widget):
-        if not self.close_pages():
-            return False
-
-        def callback():
-            rpc.context_reload()
+    def get_preferences(self):
+        def _set_preferences(prefs):
             try:
-                prefs = RPCExecute('model', 'res.user', 'get_preferences',
-                    False)
+                prefs = prefs()
             except RPCException:
-                prefs = None
+                prefs = {}
+            threads = []
+            for target in (
+                    common.ICONFACTORY.load_icons,
+                    common.MODELACCESS.load_models,
+                    common.MODELHISTORY.load_history,
+                    common.VIEW_SEARCH.load_searches,
+                    ):
+                t = threading.Thread(target=target)
+                threads.append(t)
+                t.start()
+            for t in threads:
+                t.join()
             if prefs and 'language_direction' in prefs:
                 translate.set_language_direction(prefs['language_direction'])
                 CONFIG['client.language_direction'] = \
                     prefs['language_direction']
+            self.sig_win_menu(prefs=prefs)
+            for action_id in prefs.get('actions', []):
+                Action.execute(action_id, {})
             self.set_title(prefs.get('status_bar', ''))
             if prefs and 'language' in prefs:
                 translate.setlang(prefs['language'], prefs.get('locale'))
                 if CONFIG['client.lang'] != prefs['language']:
                     self.set_menubar()
                     self.favorite_unset()
-                    self.sig_win_menu()
                 CONFIG['client.lang'] = prefs['language']
             CONFIG.save()
-            self.sig_win_menu()
-        Preference(rpc._USER, callback)
 
-    def sig_win_close(self, widget):
+        def _get_preferences():
+            RPCExecute('model', 'res.user', 'get_preferences', False,
+                callback=_set_preferences)
+
+        RPCContextReload(_get_preferences)
+
+    def sig_user_preferences(self, widget):
+        if not self.close_pages():
+            return False
+        Preference(rpc._USER, self.get_preferences)
+
+    def sig_win_close(self, widget=None):
         self._sig_remove_book(widget,
-                self.notebook.get_nth_page(self.notebook.get_current_page()))
+            self.notebook.get_nth_page(self.notebook.get_current_page()))
 
     def sig_login(self, widget=None, res=None):
         if not self.sig_logout(widget, disconnect=False):
@@ -889,31 +919,8 @@ class Main(object):
         except TrytonServerError, exception:
             common.process_exception(exception)
             return
-        rpc.context_reload()
         if log_response > 0:
-            try:
-                prefs = RPCExecute('model', 'res.user', 'get_preferences',
-                    False)
-            except RPCException:
-                prefs = {}
-            common.ICONFACTORY.load_icons()
-            common.MODELACCESS.load_models()
-            common.VIEW_SEARCH.load_searches()
-            if prefs and 'language_direction' in prefs:
-                translate.set_language_direction(prefs['language_direction'])
-                CONFIG['client.language_direction'] = \
-                    prefs['language_direction']
-            self.sig_win_menu(prefs=prefs)
-            for action_id in prefs.get('actions', []):
-                Action.execute(action_id, {})
-            self.set_title(prefs.get('status_bar', ''))
-            if prefs and 'language' in prefs:
-                translate.setlang(prefs['language'], prefs.get('locale'))
-                if CONFIG['client.lang'] != prefs['language']:
-                    self.set_menubar()
-                    self.favorite_unset()
-                CONFIG['client.lang'] = prefs['language']
-            CONFIG.save()
+            self.get_preferences()
         elif log_response == -1:
             common.message(_('Connection error!\n'
                     'Unable to connect to the server!'))
@@ -1071,8 +1078,12 @@ class Main(object):
                 size=gtk.ICON_SIZE_MENU, detail=None)
             cell.set_property('pixbuf', pixbuf)
         column.set_cell_data_func(favorite_renderer, favorite_setter)
+
+        def toggle_favorite(renderer, path, treeview):
+            if treeview.props.window:
+                self.toggle_favorite(renderer, path, treeview)
         favorite_renderer.connect('clicked',
-            lambda *a: gobject.idle_add(self.toggle_favorite, *a), treeview)
+            lambda *a: gobject.idle_add(toggle_favorite, *a), treeview)
         # Unset fixed height mode to add column
         treeview.set_fixed_height_mode(False)
         treeview.append_column(column)
@@ -1109,8 +1120,7 @@ class Main(object):
         CONFIG['client.default_width'] = Main.get_main()._width
         CONFIG['client.default_height'] = Main.get_main()._height
         CONFIG.save()
-        if hasattr(gtk, 'accel_map_save'):
-            gtk.accel_map_save(os.path.join(get_config_dir(), 'accel.map'))
+        gtk.accel_map_save(os.path.join(get_config_dir(), 'accel.map'))
 
         cls.tryton_client.quit_mainloop()
 
@@ -1205,8 +1215,7 @@ class Main(object):
         label_menu = gtk.Label(page.name)
         label_menu.set_alignment(0.0, 0.5)
         self.notebook.insert_page_menu(page.widget, hbox, label_menu, page_id)
-        if hasattr(self.notebook, 'set_tab_reorderable'):
-            self.notebook.set_tab_reorderable(page.widget, True)
+        self.notebook.set_tab_reorderable(page.widget, True)
         self.notebook.set_current_page(page_id)
 
     def _sig_remove_book(self, widget, page_widget):
@@ -1286,9 +1295,13 @@ class Main(object):
 
         self.current_page = self.notebook.get_current_page()
         current_form = self.get_page(self.current_page)
+
+        def set_cursor():
+            if self.current_page == self.notebook.get_current_page():
+                current_form.set_cursor()
         # Using idle_add because the gtk.TreeView grabs the focus at the
         # end of the event
-        gobject.idle_add(current_form.set_cursor)
+        gobject.idle_add(set_cursor)
         for dialog in current_form.dialogs:
             dialog.show()
 
@@ -1447,7 +1460,6 @@ class Main(object):
             try:
                 view_ids = json.loads(params.get('views', 'false'))
                 limit = json.loads(params.get('limit', 'null'))
-                auto_refresh = json.loads(params.get('auto_refresh', 'false'))
                 name = json.loads(params.get('window_name', 'false'))
                 search_value = json.loads(params.get('search_value', '{}'),
                     object_hook=object_hook)
@@ -1466,7 +1478,7 @@ class Main(object):
             try:
                 Window.create(view_ids, model, res_id=res_id, domain=domain,
                     context=context, mode=mode, name=name, limit=limit,
-                    auto_refresh=auto_refresh, search_value=search_value)
+                    search_value=search_value)
             except Exception:
                 # Prevent crashing the client
                 return
diff --git a/tryton/gui/window/attachment.py b/tryton/gui/window/attachment.py
index 1ad9d00..ea32637 100644
--- a/tryton/gui/window/attachment.py
+++ b/tryton/gui/window/attachment.py
@@ -1,6 +1,10 @@
 #This file is part of Tryton.  The COPYRIGHT file at the top level of
 #this repository contains the full copyright notices and license terms.
 "Attachment"
+import os
+import urllib
+import urlparse
+
 from tryton.gui.window.view_form.screen import Screen
 from tryton.gui.window.win_form import WinForm
 
@@ -11,11 +15,12 @@ class Attachment(WinForm):
     def __init__(self, record, callback=None):
         self.resource = '%s,%s' % (record.model_name, record.id)
         self.attachment_callback = callback
+        context = record.context_get()
+        context['resource'] = self.resource
         screen = Screen('ir.attachment', domain=[
             ('resource', '=', self.resource),
-            ], mode=['tree', 'form'], context={
-                'resource': self.resource,
-            }, exclude_field='resource')
+            ], mode=['tree', 'form'], context=context,
+            exclude_field='resource')
         screen.search_filter()
         screen.parent = record
         super(Attachment, self).__init__(screen, self.callback,
@@ -27,6 +32,19 @@ class Attachment(WinForm):
 
     def callback(self, result):
         if result:
+            resource = self.screen.group.fields['resource']
+            for record in self.screen.group:
+                resource.set_client(record, self.resource)
             self.screen.group.save()
         if self.attachment_callback:
             self.attachment_callback()
+
+    def add_uri(self, uri):
+        self.screen.switch_view('form')
+        data_field = self.screen.group.fields['data']
+        name_field = self.screen.group.fields[data_field.attrs['filename']]
+        new_record = self.screen.new()
+        file_name = os.path.basename(urlparse.urlparse(uri).path)
+        name_field.set_client(new_record, file_name)
+        data_field.set_client(new_record, urllib.urlopen(uri).read())
+        self.screen.display()
diff --git a/tryton/gui/window/board.py b/tryton/gui/window/board.py
index 2899614..406e02c 100644
--- a/tryton/gui/window/board.py
+++ b/tryton/gui/window/board.py
@@ -37,8 +37,7 @@ class Board(SignalEvent, TabContent):
             '<tryton>/Form/Close'),
     ]
 
-    def __init__(self, model, view_id, context=None, name=False,
-            auto_refresh=False):
+    def __init__(self, model, view_id, context=None, name=False):
         super(Board, self).__init__()
 
         try:
@@ -51,7 +50,6 @@ class Board(SignalEvent, TabContent):
         self.model = model
         self.view_id = view_id
         self.context = context
-        self.auto_refresh = auto_refresh
         self.dialogs = []
         if not name:
             self.name = self.board.name
@@ -81,8 +79,7 @@ class Board(SignalEvent, TabContent):
         return (self.model == value.model
             and self.view_id == value.view_id
             and self.context == value.context
-            and self.name == value.name
-            and self.auto_refresh == value.auto_refresh)
+            and self.name == value.name)
 
     def sig_win_close(self, widget):
         Main.get_main().sig_win_close(widget)
diff --git a/tryton/gui/window/dbcreate.py b/tryton/gui/window/dbcreate.py
index 68312ed..739bcf9 100644
--- a/tryton/gui/window/dbcreate.py
+++ b/tryton/gui/window/dbcreate.py
@@ -123,6 +123,8 @@ class DBCreate(object):
             entry.handler_unblock(_hid)
 
             def _move_cursor():
+                if not entry.props.window:
+                    return
                 with gtk.gdk.lock:
                     entry.set_position(_pos)
                     return False
diff --git a/tryton/gui/window/dbrestore.py b/tryton/gui/window/dbrestore.py
index d9a66a3..156435b 100644
--- a/tryton/gui/window/dbrestore.py
+++ b/tryton/gui/window/dbrestore.py
@@ -50,6 +50,8 @@ class DBRestore(object):
             entry.handler_unblock(_hid)
 
             def _move_cursor():
+                if not entry.props.window:
+                    return
                 with gtk.gdk.lock:
                     entry.set_position(_pos)
                     return False
diff --git a/tryton/gui/window/form.py b/tryton/gui/window/form.py
index eba3979..76caded 100644
--- a/tryton/gui/window/form.py
+++ b/tryton/gui/window/form.py
@@ -11,11 +11,13 @@ from tryton.gui.window import Window
 from tryton.gui.window.win_export import WinExport
 from tryton.gui.window.win_import import WinImport
 from tryton.gui.window.attachment import Attachment
+from tryton.gui.window.revision import Revision
 from tryton.signal_event import SignalEvent
 from tryton.common import message, sur, sur_3b, COLOR_SCHEMES, timezoned_date
 import tryton.common as common
 from tryton.translate import date_format
 from tryton.common import RPCExecute, RPCException
+from tryton.common.datetime_strftime import datetime_strftime
 from tryton import plugins
 
 from tabcontent import TabContent
@@ -61,6 +63,7 @@ class Form(SignalEvent, TabContent):
         (_('_Next'), 'tryton-go-next', 'sig_next', '<tryton>/Form/Next'),
         (_('_Search'), 'tryton-find', 'sig_search', '<tryton>/Form/Search'),
         (_('View _Logs...'), None, 'sig_logs', None),
+        (_('Show revisions...'), 'tryton-clock', 'revision', None),
         (None,) * 4,
         (_('_Close Tab'), 'tryton-close', 'sig_win_close',
             '<tryton>/Form/Close'),
@@ -87,7 +90,7 @@ class Form(SignalEvent, TabContent):
 
     def __init__(self, model, res_id=False, domain=None, order=None, mode=None,
             view_ids=None, context=None, name=False, limit=None,
-            auto_refresh=False, search_value=None, tab_domain=None):
+            search_value=None, tab_domain=None):
         super(Form, self).__init__()
 
         if not mode:
@@ -96,22 +99,18 @@ class Form(SignalEvent, TabContent):
             domain = []
         if view_ids is None:
             view_ids = []
-        if context is None:
-            context = {}
 
         self.model = model
         self.res_id = res_id
         self.domain = domain
         self.mode = mode
         self.context = context
-        self.auto_refresh = auto_refresh
         self.view_ids = view_ids
         self.dialogs = []
 
-        self.screen = Screen(self.model, mode=mode, context=self.context,
+        self.screen = Screen(self.model, mode=mode, context=context,
             view_ids=view_ids, domain=domain, limit=limit, order=order,
-            readonly=bool(auto_refresh), search_value=search_value,
-            tab_domain=tab_domain)
+            search_value=search_value, tab_domain=tab_domain)
         self.screen.widget.show()
 
         if not name:
@@ -119,6 +118,12 @@ class Form(SignalEvent, TabContent):
         else:
             self.name = name
 
+        if self.model not in common.MODELHISTORY:
+            self.menu_def = self.menu_def[:]
+            # Remove callback to revision
+            self.menu_def[11] = (self.menu_def[11][:2] + (None,)
+                + self.menu_def[11][3:])
+
         self.create_tabcontent()
 
         self.url_entry = url_entry = gtk.Entry()
@@ -138,6 +143,7 @@ class Form(SignalEvent, TabContent):
 
         self.screen.signal_connect(self, 'record-message',
             self._record_message)
+
         self.screen.signal_connect(self, 'record-modified',
             lambda *a: gobject.idle_add(self._record_modified, *a))
         self.screen.signal_connect(self, 'record-saved', self._record_saved)
@@ -155,13 +161,12 @@ class Form(SignalEvent, TabContent):
                     in ('tree', 'graph', 'calendar'):
                 self.screen.search_filter()
 
-        if auto_refresh and int(auto_refresh):
-            gobject.timeout_add(int(auto_refresh) * 1000, self.sig_reload)
+        self.update_revision()
 
     def get_toolbars(self):
         try:
             return RPCExecute('model', self.model, 'view_toolbar_get',
-                context=self.context)
+                context=self.screen.context)
         except RPCException:
             return {}
 
@@ -178,21 +183,13 @@ class Form(SignalEvent, TabContent):
             and self.domain == value.domain
             and self.mode == value.mode
             and self.view_ids == value.view_ids
-            and self.context == value.context
+            and self.screen.context == value.screen.context
             and self.name == value.name
             and self.screen.limit == value.screen.limit
-            and self.auto_refresh == value.auto_refresh
             and self.screen.search_value == value.screen.search_value)
 
     def destroy(self):
         self.screen.destroy()
-        self.screen = None
-        self.widget = None
-        #self.scrolledwindow.destroy()
-        #self.scrolledwindow = None
-
-    def sel_ids_get(self):
-        return self.screen.sel_ids_get()
 
     def ids_get(self):
         return self.screen.ids_get()
@@ -247,7 +244,7 @@ class Form(SignalEvent, TabContent):
 
         try:
             res = RPCExecute('model', self.model, 'read', [obj_id],
-                [x[0] for x in fields], context=self.context)
+                [x[0] for x in fields], context=self.screen.context)
         except RPCException:
             return
         message_str = ''
@@ -264,6 +261,42 @@ class Form(SignalEvent, TabContent):
         message(message_str)
         return True
 
+    def revision(self, widget=None):
+        if not self.modified_save():
+            return
+        current_id = (self.screen.current_record.id
+            if self.screen.current_record else None)
+        try:
+            revisions = RPCExecute('model', self.model, 'history_revisions',
+                [r.id for r in self.screen.selected_records])
+        except RPCException:
+            return
+        revision = self.screen.context.get('_datetime')
+        revision = Revision(revisions, revision).run()
+        if revision != self.screen.context.get('_datetime'):
+            self.screen.clear()
+            # Update root group context that will be propagated
+            self.screen.group._context['_datetime'] = revision
+            if self.screen.current_view.view_type != 'form':
+                self.screen.search_filter(
+                    self.screen.screen_container.get_text())
+            else:
+                # Test if record exist in revisions
+                self.screen.load([current_id])
+            self.screen.display(set_cursor=True)
+            self.update_revision()
+
+    def update_revision(self):
+        revision = self.screen.context.get('_datetime')
+        if revision:
+            format_ = date_format() + ' %H:%M:%S.%f'
+            revision = datetime_strftime(revision, format_)
+            self.title.set_label('%s @ %s' % (self.name, revision))
+        else:
+            self.title.set_label(self.name)
+        for button in ('new', 'save'):
+            self.buttons[button].props.sensitive = not revision
+
     def sig_remove(self, widget=None):
         if not common.MODELACCESS[self.model]['delete']:
             return
@@ -283,7 +316,7 @@ class Form(SignalEvent, TabContent):
         fields = {}
         for name, field in self.screen.group.fields.iteritems():
             fields[name] = field.attrs
-        WinImport(self.model)
+        WinImport(self.model, self.screen.context)
 
     def sig_save_as(self, widget=None):
         while self.screen.view_to_load:
@@ -291,7 +324,7 @@ class Form(SignalEvent, TabContent):
         fields = {}
         for name, field in self.screen.group.fields.iteritems():
             fields[name] = field.attrs
-        WinExport(self.model, self.ids_get(), context=self.context)
+        WinExport(self.model, self.ids_get(), context=self.screen.context)
 
     def sig_new(self, widget=None, autosave=True):
         if not common.MODELACCESS[self.model]['create']:
@@ -308,13 +341,7 @@ class Form(SignalEvent, TabContent):
             return
         if not self.modified_save():
             return
-        res_ids = self.sel_ids_get()
-        try:
-            new_ids = RPCExecute('model', self.model, 'copy', res_ids, {},
-                context=self.context)
-        except RPCException:
-            return
-        self.screen.load(new_ids)
+        self.screen.copy()
         self.message_info(_('Working now on the duplicated record(s)!'),
             'green')
 
@@ -343,18 +370,17 @@ class Form(SignalEvent, TabContent):
         self.activate_save()
 
     def sig_reload(self, test_modified=True):
-        if not hasattr(self, 'screen'):
-            return False
         if test_modified and not self.modified_save():
                 return False
         self.screen.cancel_current()
         set_cursor = False
         self.screen.save_tree_state(store=False)
+        record_id = (self.screen.current_record.id
+            if self.screen.current_record else None)
         if self.screen.current_view.view_type != 'form':
-            obj_id = self.id_get()
             self.screen.search_filter(self.screen.screen_container.get_text())
             for record in self.screen.group:
-                if record.id == obj_id:
+                if record.id == record_id:
                     self.screen.current_record = record
                     set_cursor = True
                     break
@@ -422,7 +448,7 @@ class Form(SignalEvent, TabContent):
         name = '_'
         if signal_data[0]:
             name = str(signal_data[0])
-        for button_id in ('print', 'action', 'relate', 'email', 'open', 'save',
+        for button_id in ('print', 'relate', 'email', 'open', 'save',
                 'attach'):
             button = self.buttons[button_id]
             can_be_sensitive = getattr(button, '_can_be_sensitive', True)
@@ -442,7 +468,7 @@ class Form(SignalEvent, TabContent):
     def _record_modified(self, screen, signal_data):
         # As it is called via idle_add, the form could have been destroyed in
         # the meantime.
-        if screen == self.screen:
+        if self.widget_get().props.window:
             self.activate_save()
 
     def _record_saved(self, screen, signal_data):
@@ -472,15 +498,16 @@ class Form(SignalEvent, TabContent):
         action = action.copy()
         if not self.screen.save_current():
             return
-        record_id = self.screen.id_get()
-        record_ids = self.screen.sel_ids_get()
+        record_id = (self.screen.current_record.id
+            if self.screen.current_record else None)
+        record_ids = [r.id for r in self.screen.selected_records]
         action = Action.evaluate(action, atype, self.screen.current_record)
         data = {
             'model': self.screen.model_name,
             'id': record_id,
             'ids': record_ids,
         }
-        Action._exec_action(action, data, self.context)
+        Action._exec_action(action, data, self.screen.context)
 
     def activate_save(self):
         self.buttons['save'].props.sensitive = self.screen.modified()
@@ -491,6 +518,13 @@ class Form(SignalEvent, TabContent):
     def create_toolbar(self, toolbars):
         gtktoolbar = super(Form, self).create_toolbar(toolbars)
 
+        attach_btn = self.buttons['attach']
+        attach_btn.drag_dest_set(gtk.DEST_DEFAULT_ALL, [
+                ('text/uri-list', 0, 0),
+                ], gtk.gdk.ACTION_MOVE)
+        attach_btn.connect('drag_data_received',
+            self.attach_drag_data_received)
+
         iconstock = {
             'print': 'tryton-print',
             'action': 'tryton-executable',
@@ -514,7 +548,9 @@ class Form(SignalEvent, TabContent):
                 tbutton.connect('toggled', self.action_popup)
                 self.tooltips.set_tip(tbutton, tooltip)
                 self.buttons[special_action] = tbutton
-                tbutton._can_be_sensitive = bool(tbutton._menu.get_children())
+                if action_type != 'action':
+                    tbutton._can_be_sensitive = bool(
+                        tbutton._menu.get_children())
             else:
                 tbutton = gtk.SeparatorToolItem()
             gtktoolbar.insert(tbutton, -1)
@@ -525,6 +561,9 @@ class Form(SignalEvent, TabContent):
         menu = gtk.Menu()
         menu.connect('deactivate', self._popup_menu_hide, widget)
 
+        if keyword == 'action':
+            widget.connect('toggled', self._update_action_popup, menu)
+
         for action in actions:
             new_action = action.copy()
             if special_action == 'print':
@@ -539,18 +578,6 @@ class Form(SignalEvent, TabContent):
             menuitem.connect('activate', self._popup_menu_selected, widget,
                 new_action, keyword)
             menu.add(menuitem)
-        if keyword == 'action':
-            menu.add(gtk.SeparatorMenuItem())
-            for plugin in plugins.MODULES:
-                for name, func in plugin.get_plugins(self.model):
-                    menuitem = gtk.MenuItem('_' + name)
-                    menuitem.set_use_underline(True)
-                    menuitem.connect('activate', lambda m, func: func({
-                                'model': self.model,
-                                'ids': self.id_get(),
-                                'id': self.id_get(),
-                                }), func)
-                    menu.add(menuitem)
         return menu
 
     def _popup_menu_selected(self, menuitem, togglebutton, action, keyword):
@@ -566,6 +593,52 @@ class Form(SignalEvent, TabContent):
     def _popup_menu_hide(self, menuitem, togglebutton):
         togglebutton.props.active = False
 
+    def _update_action_popup(self, tbutton, menu):
+        for item in menu.get_children():
+            if (getattr(item, '_update_action', False)
+                    or isinstance(item, gtk.SeparatorMenuItem)):
+                menu.remove(item)
+
+        buttons = self.screen.get_buttons()
+        if buttons:
+            menu.add(gtk.SeparatorMenuItem())
+        for button in buttons:
+            menuitem = gtk.ImageMenuItem(button.attrs.get('icon'))
+            menuitem.set_label('_' + button.attrs.get('string', _('Unknown')))
+            menuitem.set_use_underline(True)
+            menuitem.connect('activate',
+                lambda m, attrs: self.screen.button(attrs), button.attrs)
+            menuitem._update_action = True
+            menu.add(menuitem)
+
+        menu.add(gtk.SeparatorMenuItem())
+        for plugin in plugins.MODULES:
+            for name, func in plugin.get_plugins(self.model):
+                menuitem = gtk.MenuItem('_' + name)
+                menuitem.set_use_underline(True)
+                menuitem.connect('activate', lambda m, func: func({
+                            'model': self.model,
+                            'ids': [r.id
+                                for r in self.screen.selected_records],
+                            'id': self.id_get(),
+                            }), func)
+                menuitem._update_action = True
+                menu.add(menuitem)
+
     def set_cursor(self):
         if self.screen:
             self.screen.set_cursor(reset_view=False)
+
+    def attach_drag_data_received(self, widget, context, x, y, selection, info,
+            timestamp):
+        record = self.screen.current_record
+        if not record or record.id < 0:
+            return
+        win_attach = Attachment(record,
+            lambda: self.update_attachment_count(reload=True))
+        if info == 0:
+            for uri in selection.data.splitlines():
+                # Win32 cut&paste terminates the list with a NULL character
+                if not uri or uri == '\0':
+                    continue
+                win_attach.add_uri(uri)
diff --git a/tryton/gui/window/revision.py b/tryton/gui/window/revision.py
new file mode 100644
index 0000000..ec371b8
--- /dev/null
+++ b/tryton/gui/window/revision.py
@@ -0,0 +1,68 @@
+#This file is part of Tryton.  The COPYRIGHT file at the top level of
+#this repository contains the full copyright notices and license terms.
+import gtk
+import gettext
+
+from tryton.config import TRYTON_ICON
+from tryton.common import get_toplevel_window
+from tryton.common.date_widget import DateEntry
+from tryton.common.datetime_strftime import datetime_strftime
+from tryton.translate import date_format
+
+_ = gettext.gettext
+
+
+class Revision(object):
+    'Ask revision'
+
+    def __init__(self, revisions, revision=None):
+        self.parent = get_toplevel_window()
+        self.win = gtk.Dialog(_('Revision'), self.parent,
+            gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
+            (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+                gtk.STOCK_OK, gtk.RESPONSE_OK))
+        self.win.set_default_response(gtk.RESPONSE_OK)
+        self.win.set_icon(TRYTON_ICON)
+        self.win.set_has_separator(True)
+        self.win.vbox.set_spacing(3)
+        self.win.vbox.pack_start(gtk.Label(
+                _('Select a revision')), expand=False, fill=True)
+        self.win.vbox.pack_start(gtk.HSeparator())
+        hbox = gtk.HBox(spacing=3)
+        hbox.pack_start(gtk.Label(_('Revision:')), expand=True, fill=True)
+        format_ = date_format() + ' %H:%M:%S.%f'
+        self.entry = DateEntry(format_)
+        if revision:
+            self.entry.set_text(datetime_strftime(revision, format_))
+        list_store = gtk.ListStore(str, str)
+        list_store.append(('', ''))
+        for revision, id_, name in revisions:
+            list_store.append((datetime_strftime(revision, format_), name))
+        combobox = gtk.ComboBoxEntry(list_store)
+        combobox.add(self.entry)
+        cell = gtk.CellRendererText()
+        combobox.pack_start(cell, True)
+        combobox.add_attribute(cell, 'text', 1)
+        hbox.pack_start(combobox, expand=True, fill=True)
+        combobox.set_entry_text_column(0)
+        combobox.connect('changed', self.changed)
+        self.entry.set_property('activates_default', True)
+        self.win.vbox.pack_start(hbox, expand=True, fill=True)
+        self.win.show_all()
+
+    def changed(self, combobox):
+        # set_text must be called because DateEntry doesn't work correctly with
+        # the default insert/delete text behavior of combobox
+        model = combobox.get_model()
+        idx = combobox.get_active()
+        if idx >= 0:
+            self.entry.set_text(model[idx][0])
+
+    def run(self):
+        response = self.win.run()
+        revision = None
+        if response == gtk.RESPONSE_OK:
+            revision = self.entry.date_get()
+        self.parent.present()
+        self.win.destroy()
+        return revision
diff --git a/tryton/gui/window/tabcontent.py b/tryton/gui/window/tabcontent.py
index 9ac5dd5..401c0dc 100644
--- a/tryton/gui/window/tabcontent.py
+++ b/tryton/gui/window/tabcontent.py
@@ -43,11 +43,12 @@ class TabContent(object):
         self.widget.pack_start(self.scrolledwindow)
 
     def make_title_bar(self):
-        title = gtk.Label()
+        self.title = title = gtk.Label()
         title.modify_font(pango.FontDescription("bold 14"))
         title.set_label(self.name)
         title.set_padding(10, 4)
         title.set_alignment(0.0, 0.5)
+        title.set_size_request(0, -1)  # Allow overflow
         title.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#000000"))
         title.show()
 
diff --git a/tryton/gui/window/view_board/action.py b/tryton/gui/window/view_board/action.py
index a14b74f..77b17c0 100644
--- a/tryton/gui/window/view_board/action.py
+++ b/tryton/gui/window/view_board/action.py
@@ -140,4 +140,7 @@ class Action(SignalEvent):
         if hasattr(self, 'screen'):  # Catch early update
             # Using idle_add to prevent corruption of the event who triggered
             # the update.
-            gtk.idle_add(self.display)
+            def display():
+                if self.screen.widget.props.window:
+                    self.display()
+            gtk.idle_add(display)
diff --git a/tryton/gui/window/view_form/model/field.py b/tryton/gui/window/view_form/model/field.py
index e83543f..04734bb 100644
--- a/tryton/gui/window/view_form/model/field.py
+++ b/tryton/gui/window/view_form/model/field.py
@@ -1,11 +1,12 @@
 #This file is part of Tryton.  The COPYRIGHT file at the top level of
 #this repository contains the full copyright notices and license terms.
 import os
+from itertools import chain
 import tempfile
 import locale
 from tryton.common import datetime_strftime, \
-        domain_inversion, eval_domain, localize_domain, unlocalize_domain, \
-        merge, inverse_leaf, EvalEnvironment
+        domain_inversion, eval_domain, localize_domain, \
+        merge, inverse_leaf, concat, simplify, EvalEnvironment
 import tryton.common as common
 import time
 import datetime
@@ -23,15 +24,11 @@ class Field(object):
     set: save the value from the server
     set_client: save the value from the widget
     '''
+    _default = None
 
-    def __new__(cls, ctype):
-        klass = TYPES.get(ctype, CharField)
-        return klass
-
-
-class CharField(object):
-
-    _default = ''
+    @staticmethod
+    def get_field(ctype):
+        return TYPES.get(ctype, CharField)
 
     def __init__(self, attrs):
         self.attrs = attrs
@@ -49,7 +46,7 @@ class CharField(object):
         screen_domain = domain_inversion(record.group.domain4inversion,
             self.name, EvalEnvironment(record))
         if isinstance(screen_domain, bool) and not screen_domain:
-            screen_domain = [('id', '=', False)]
+            screen_domain = [('id', '=', None)]
         elif isinstance(screen_domain, bool) and screen_domain:
             screen_domain = []
         attr_domain = record.expr_eval(self.attrs.get('domain', []))
@@ -57,15 +54,10 @@ class CharField(object):
 
     def domain_get(self, record):
         screen_domain, attr_domain = self.domains_get(record)
-        return [localize_domain(screen_domain), attr_domain]
+        return concat(localize_domain(screen_domain), attr_domain)
 
     def validation_domains(self, record):
-        screen_domain, attr_domain = self.domains_get(record)
-        if attr_domain:
-            return (screen_domain, [screen_domain,
-                    unlocalize_domain(attr_domain, self.name)])
-        else:
-            return screen_domain, screen_domain
+        return concat(*self.domains_get(record))
 
     def context_get(self, record):
         context = record.context_get().copy()
@@ -87,27 +79,30 @@ class CharField(object):
             return True
         res = True
         self.get_state_attrs(record)['domain_readonly'] = False
-        inverted_domain, domain = self.validation_domains(record)
+        domain = simplify(self.validation_domains(record))
         if not softvalidation:
             res = res and self.check_required(record)
         if isinstance(domain, bool):
             res = res and domain
-        elif domain == [('id', '=', False)]:
+        elif domain == [('id', '=', None)]:
             res = False
         else:
-            if (isinstance(inverted_domain, list)
-                    and len(inverted_domain) == 1
-                    and inverted_domain[0][1] == '='):
+            if (isinstance(domain, list)
+                    and len(domain) == 1
+                    and domain[0][1] == '='):
                 # If the inverted domain is so constraint that only one value
                 # is possible we should use it. But we must also pay attention
                 # to the fact that the original domain might be a 'OR' domain
                 # and thus not preventing the modification of fields.
-                leftpart, _, value = inverted_domain[0][:3]
+                leftpart, _, value = domain[0][:3]
                 if value is False:
                     # XXX to remove once server domains are fixed
                     value = None
                 setdefault = True
-                original_domain = merge(record.group.domain)
+                if record.group.domain:
+                    original_domain = merge(record.group.domain)
+                else:
+                    original_domain = merge(domain)
                 domain_readonly = original_domain[0] == 'AND'
                 if '.' in leftpart:
                     recordpart, localpart = leftpart.split('.', 1)
@@ -129,7 +124,7 @@ class CharField(object):
         record.value[self.name] = value
 
     def get(self, record):
-        return record.value.get(self.name) or self._default
+        return record.value.get(self.name, self._default)
 
     def get_eval(self, record):
         return self.get(record)
@@ -152,7 +147,7 @@ class CharField(object):
             record.signal('record-changed')
 
     def get_client(self, record):
-        return record.value.get(self.name) or self._default
+        return self.get(record)
 
     def set_default(self, record, value):
         self.set(record, value)
@@ -186,7 +181,14 @@ class CharField(object):
         return {}
 
 
-class SelectionField(CharField):
+class CharField(Field):
+    _default = ''
+
+    def get(self, record):
+        return super(CharField, self).get(record) or self._default
+
+
+class SelectionField(Field):
 
     _default = None
 
@@ -194,18 +196,18 @@ class SelectionField(CharField):
         return record.value.get(self.name)
 
 
-class DateTimeField(CharField):
+class DateTimeField(Field):
 
     _default = None
 
     def set_client(self, record, value, force_change=False):
-        if not isinstance(value, datetime.datetime):
+        if not isinstance(value, datetime.datetime) and value is not None:
             try:
                 value = datetime.datetime(*time.strptime(value,
                         date_format() + ' ' + self.time_format(record))[:6])
-                value = common.untimezoned_date(value)
             except ValueError:
                 value = self._default
+        value = common.untimezoned_date(value)
         super(DateTimeField, self).set_client(record, value,
             force_change=force_change)
 
@@ -221,17 +223,20 @@ class DateTimeField(CharField):
         return record.expr_eval(self.attrs['format'])
 
 
-class DateField(CharField):
+class DateField(Field):
 
     _default = None
 
     def set_client(self, record, value, force_change=False):
-        if not isinstance(value, datetime.date):
+        if not isinstance(value, datetime.date) and value is not None:
             try:
                 value = datetime.date(*time.strptime(value,
                         date_format())[:3])
             except ValueError:
                 value = self._default
+        elif isinstance(value, datetime.datetime):
+            assert(value.time() == datetime.time())
+            value = value.date()
         super(DateField, self).set_client(record, value,
             force_change=force_change)
 
@@ -242,17 +247,19 @@ class DateField(CharField):
         return ''
 
 
-class TimeField(CharField):
+class TimeField(Field):
 
     _default = None
 
     def set_client(self, record, value, force_change=False):
-        if not isinstance(value, datetime.time):
+        if not isinstance(value, datetime.time) and value is not None:
             try:
                 value = datetime.time(*time.strptime(value,
                         self.time_format(record))[3:6])
             except ValueError:
-                value = None
+                value = self._default
+        elif isinstance(value, datetime.datetime):
+            value = value.time()
         super(TimeField, self).set_client(record, value,
             force_change=force_change)
 
@@ -266,7 +273,7 @@ class TimeField(CharField):
         return record.expr_eval(self.attrs['format'])
 
 
-class FloatField(CharField):
+class FloatField(Field):
     _default = None
     default_digits = (16, 2)
 
@@ -346,7 +353,7 @@ class IntegerField(FloatField):
         return super(IntegerField, self).get_client(record, factor=int(factor))
 
 
-class BooleanField(CharField):
+class BooleanField(Field):
 
     _default = False
 
@@ -362,7 +369,7 @@ class BooleanField(CharField):
         return bool(record.value.get(self.name))
 
 
-class M2OField(CharField):
+class M2OField(Field):
     '''
     internal = (id, name)
     '''
@@ -410,7 +417,7 @@ class M2OField(CharField):
         if not rec_name and value >= 0:
             try:
                 result, = RPCExecute('model', self.attrs['relation'], 'read',
-                    [value], ['rec_name'], main_iteration=False)
+                    [value], ['rec_name'])
             except RPCException:
                 return False
             rec_name = result['rec_name'] or ''
@@ -431,12 +438,12 @@ class M2OField(CharField):
 
     def validation_domains(self, record):
         screen_domain, attr_domain = self.domains_get(record)
-        return screen_domain, screen_domain
+        return screen_domain
 
     def domain_get(self, record):
         screen_domain, attr_domain = self.domains_get(record)
-        return [localize_domain(inverse_leaf(screen_domain), self.name),
-            attr_domain]
+        return concat(localize_domain(inverse_leaf(screen_domain), self.name),
+            attr_domain)
 
     def get_state_attrs(self, record):
         result = super(M2OField, self).get_state_attrs(record)
@@ -451,7 +458,7 @@ class O2OField(M2OField):
     pass
 
 
-class O2MField(CharField):
+class O2MField(Field):
     '''
     internal = Group of the related objects
     '''
@@ -470,10 +477,12 @@ class O2MField(CharField):
     def _group_changed(self, group, record):
         if not record.parent:
             return
-        record.parent.modified_fields.setdefault(self.name)
-        self.sig_changed(record.parent)
-        record.parent.validate(softvalidation=True)
-        record.parent.signal('record-changed')
+        # Store parent as it could be removed by validation
+        parent = record.parent
+        parent.modified_fields.setdefault(self.name)
+        self.sig_changed(parent)
+        parent.validate(softvalidation=True)
+        parent.signal('record-changed')
 
     def _group_list_changed(self, group, signal):
         if group.model_name == group.parent.model_name:
@@ -521,9 +530,11 @@ class O2MField(CharField):
             return []
         record_removed = record.value[self.name].record_removed
         record_deleted = record.value[self.name].record_deleted
-        result = [('add', [])]
+        result = []
         parent_name = self.attrs.get('relation_field', '')
+        to_add = []
         to_create = []
+        to_write = []
         for record2 in record.value[self.name]:
             if record2 in record_removed or record2 in record_deleted:
                 continue
@@ -531,18 +542,20 @@ class O2MField(CharField):
                 values = record2.get()
                 values.pop(parent_name, None)
                 if record2.modified and values:
-                    result.append(('write', [record2.id], values))
-                result[0][1].append(record2.id)
+                    to_write.extend(([record2.id], values))
+                to_add.append(record2.id)
             else:
                 values = record2.get()
                 values.pop(parent_name, None)
                 to_create.append(values)
+        if to_add:
+            result.append(('add', to_add))
         if to_create:
             result.append(('create', to_create))
-        if not result[0][1]:
-            del result[0]
+        if to_write:
+            result.append(('write',) + tuple(to_write))
         if record_removed:
-            result.append(('unlink', [x.id for x in record_removed]))
+            result.append(('remove', [x.id for x in record_removed]))
         if record_deleted:
             result.append(('delete', [x.id for x in record_deleted]))
         return result
@@ -590,15 +603,15 @@ class O2MField(CharField):
             if field_names:
                 try:
                     fields = RPCExecute('model', self.attrs['relation'],
-                        'fields_get', list(field_names),
-                        main_iteration=False, context=context)
+                        'fields_get', list(field_names), context=context)
                 except RPCException:
                     return
                 group.load_fields(fields)
 
         if mode == 'list ids':
             for old_record in group:
-                group.remove(old_record, remove=True, signal=False)
+                if old_record.id not in value:
+                    group.remove(old_record, remove=True, signal=False)
             group.load(value)
         else:
             for vals in value:
@@ -634,7 +647,23 @@ class O2MField(CharField):
         self._connect_value(group)
 
     def set_client(self, record, value, force_change=False):
-        pass
+        # domain inversion could try to set id as value
+        if isinstance(value, (int, long)):
+            value = [value]
+
+        previous_ids = [r.id for r in record.value.get(self.name) or []]
+        self._set_value(record, value)
+        # The order of the ids is not significant
+        if set(previous_ids) != set(value):
+            record.modified_fields.setdefault(self.name)
+            record.signal('record-modified')
+            self.sig_changed(record)
+            record.validate(softvalidation=True)
+            record.signal('record-changed')
+        elif force_change:
+            self.sig_changed(record)
+            record.validate(softvalidation=True)
+            record.signal('record-changed')
 
     def set_default(self, record, value):
         self.set(record, value, _default=True)
@@ -650,14 +679,14 @@ class O2MField(CharField):
         if value and (value.get('add') or value.get('update')):
             context = self.context_get(record)
             fields = record.value[self.name].fields
-            field_names = set(f for v in (
-                    value.get('add', []) + value.get('update', []))
+            values = chain(value.get('update', []),
+                (d for _, d in value.get('add', [])))
+            field_names = set(f for v in values
                 for f in v if f not in fields and f != 'id')
             if field_names:
                 try:
                     fields = RPCExecute('model', self.attrs['relation'],
-                        'fields_get', list(field_names), main_iteration=False,
-                        context=context)
+                        'fields_get', list(field_names), context=context)
                 except RPCException:
                     return False
             else:
@@ -678,9 +707,9 @@ class O2MField(CharField):
 
         if value and (value.get('add') or value.get('update', [])):
             record.value[self.name].add_fields(fields, signal=False)
-            for vals in value.get('add', []):
+            for index, vals in value.get('add', []):
                 new_record = record.value[self.name].new(default=False)
-                record.value[self.name].add(new_record)
+                record.value[self.name].add(new_record, index)
                 new_record.set_on_change(vals)
 
             for vals in value.get('update', []):
@@ -693,7 +722,7 @@ class O2MField(CharField):
 
     def validation_domains(self, record):
         screen_domain, attr_domain = self.domains_get(record)
-        return screen_domain, screen_domain
+        return screen_domain
 
     def validate(self, record, softvalidation=False):
         if self.attrs.get('readonly'):
@@ -723,7 +752,8 @@ class O2MField(CharField):
 
     def domain_get(self, record):
         screen_domain, attr_domain = self.domains_get(record)
-        return [localize_domain(inverse_leaf(screen_domain)), attr_domain]
+        return concat(localize_domain(inverse_leaf(screen_domain), self.name),
+            attr_domain)
 
 
 class M2MField(O2MField):
@@ -732,7 +762,7 @@ class M2MField(O2MField):
         return self.get_eval(record)
 
 
-class ReferenceField(CharField):
+class ReferenceField(Field):
 
     _default = None
 
@@ -780,6 +810,12 @@ class ReferenceField(CharField):
             force_change=force_change)
 
     def set(self, record, value):
+        if record.parent_name == self.name:
+            if record.parent:
+                value = '%s,%s' % (record.group.parent.model_name,
+                    record.parent.id)
+            else:
+                value = None
         if not value:
             record.value[self.name] = self._default
             return
@@ -799,24 +835,24 @@ class ReferenceField(CharField):
             if not rec_name and ref_id >= 0:
                 try:
                     result, = RPCExecute('model', ref_model, 'read', [ref_id],
-                        ['rec_name'], main_iteration=False)
+                        ['rec_name'])
                 except RPCException:
                     return
                 rec_name = result['rec_name']
         elif ref_model:
             rec_name = ''
         else:
-            rec_name = ref_id
+            rec_name = str(ref_id)
         record.value[self.name] = ref_model, ref_id
         record.value[self.name + '.rec_name'] = rec_name
 
 
-class BinaryField(CharField):
+class BinaryField(Field):
 
     _default = None
 
     def get(self, record):
-        result = record.value.get(self.name) or self._default
+        result = record.value.get(self.name, self._default)
         if isinstance(result, basestring):
             try:
                 with open(result, 'rb') as fp:
@@ -854,8 +890,7 @@ class BinaryField(CharField):
             context = record.context_get()
             try:
                 values, = RPCExecute('model', record.model_name, 'read',
-                    [record.id], [self.name], main_iteration=False,
-                    context=context)
+                    [record.id], [self.name], context=context)
             except RPCException:
                 return ''
             _, filename = tempfile.mkstemp(prefix='tryton_')
@@ -865,21 +900,24 @@ class BinaryField(CharField):
         return self.get(record)
 
 
-class DictField(CharField):
+class DictField(Field):
 
     _default = {}
 
+    def get_client(self, record):
+        return super(DictField, self).get_client(record) or self._default
+
     def validation_domains(self, record):
         screen_domain, attr_domain = self.domains_get(record)
-        return screen_domain, screen_domain
+        return screen_domain
 
     def domain_get(self, record):
         screen_domain, attr_domain = self.domains_get(record)
-        return [localize_domain(inverse_leaf(screen_domain)), attr_domain]
+        return concat(localize_domain(inverse_leaf(screen_domain)),
+            attr_domain)
 
 TYPES = {
     'char': CharField,
-    'sha': CharField,
     'float_time': FloatField,
     'integer': IntegerField,
     'biginteger': IntegerField,
diff --git a/tryton/gui/window/view_form/model/group.py b/tryton/gui/window/view_form/model/group.py
index 695513f..cea94f5 100644
--- a/tryton/gui/window/view_form/model/group.py
+++ b/tryton/gui/window/view_form/model/group.py
@@ -1,9 +1,6 @@
 #This file is part of Tryton.  The COPYRIGHT file at the top level of
 #this repository contains the full copyright notices and license terms.
-try:
-    from weakref import WeakSet
-except ImportError:
-    from weakrefset import WeakSet
+from weakref import WeakSet
 
 from record import Record
 from field import Field, O2MField
@@ -153,7 +150,7 @@ class Group(SignalEvent, list):
 
     def load_fields(self, fields):
         for name, attr in fields.iteritems():
-            field = Field(attr['type'])
+            field = Field.get_field(attr['type'])
             attr['name'] = name
             self.fields[name] = field(attr)
             if isinstance(self.fields[name], O2MField) \
@@ -206,7 +203,7 @@ class Group(SignalEvent, list):
         for fnct in self.on_write:
             try:
                 res += RPCExecute('model', self.model_name, fnct, ids,
-                    main_iteration=False, context=self.context)
+                    context=self.context)
             except RPCException:
                 return []
         return list({}.fromkeys(res))
@@ -395,7 +392,7 @@ class Group(SignalEvent, list):
         if len(new) and len(to_add):
             try:
                 values = RPCExecute('model', self.model_name, 'default_get',
-                    to_add.keys(), main_iteration=False, context=self.context)
+                    to_add.keys(), context=self.context)
             except RPCException:
                 return False
             for record in new:
@@ -419,7 +416,6 @@ class Group(SignalEvent, list):
                 pass
         self.clear()
         super(Group, self).destroy()
-        self.parent = None
 
     def get_by_path(self, path):
         'return record by path'
diff --git a/tryton/gui/window/view_form/model/record.py b/tryton/gui/window/view_form/model/record.py
index 35a08b1..3241c0c 100644
--- a/tryton/gui/window/view_form/model/record.py
+++ b/tryton/gui/window/view_form/model/record.py
@@ -118,8 +118,7 @@ class Record(SignalEvent):
             exception = None
             try:
                 values = RPCExecute('model', self.model_name, 'read',
-                    id2record.keys(), fnames, context=ctx,
-                    main_iteration=False)
+                    id2record.keys(), fnames, context=ctx)
             except RPCException, exception:
                 values = [{'id': x} for x in id2record]
                 default_values = dict((f, None) for f in fnames)
@@ -161,6 +160,13 @@ class Record(SignalEvent):
         return self.group.parent_name
 
     @property
+    def root_parent(self):
+        parent = self
+        while parent.parent:
+            parent = parent.parent
+        return parent
+
+    @property
     def depth(self):
         parent = self.parent
         i = 0
@@ -281,10 +287,12 @@ class Record(SignalEvent):
         return result
 
     def pre_validate(self):
-        values = self.get()
+        if not self.modified_fields:
+            return True
+        values = self._get_on_change_args(self.modified_fields)
         try:
             RPCExecute('model', self.model_name, 'pre_validate', values,
-                main_iteration=False, context=self.context_get())
+                context=self.context_get())
         except RPCException:
             return False
         return True
@@ -295,8 +303,7 @@ class Record(SignalEvent):
                 value = self.get()
                 try:
                     res, = RPCExecute('model', self.model_name, 'create',
-                        [value], main_iteration=False,
-                        context=self.context_get())
+                        [value], context=self.context_get())
                 except RPCException:
                     return False
                 old_id = self.id
@@ -310,8 +317,7 @@ class Record(SignalEvent):
                     context['_timestamp'] = self.get_timestamp()
                     try:
                         RPCExecute('model', self.model_name, 'write',
-                            [self.id], value, main_iteration=False,
-                            context=context)
+                            [self.id], value, context=context)
                     except RPCException:
                         return False
             self._loaded.clear()
@@ -344,7 +350,7 @@ class Record(SignalEvent):
         reload_ids = list(reload_ids)
         try:
             RPCExecute('model', record.model_name, 'delete', list(record_ids),
-                main_iteration=False, context=ctx)
+                context=ctx)
         except RPCException:
             return False
         if reload_ids:
@@ -355,8 +361,7 @@ class Record(SignalEvent):
         if len(self.group.fields):
             try:
                 vals = RPCExecute('model', self.model_name, 'default_get',
-                    self.group.fields.keys(), main_iteration=False,
-                    context=self.context_get())
+                    self.group.fields.keys(), context=self.context_get())
             except RPCException:
                 return
             if (self.parent
@@ -373,12 +378,12 @@ class Record(SignalEvent):
             if not fieldinfo.attrs.get('autocomplete'):
                 continue
             self.do_autocomplete(fieldname)
+        return vals
 
     def rec_name(self):
         try:
             return RPCExecute('model', self.model_name, 'read', [self.id],
-                ['rec_name'], main_iteration=False,
-                context=self.context_get())[0]['rec_name']
+                ['rec_name'], context=self.context_get())[0]['rec_name']
         except RPCException:
             return ''
 
@@ -415,6 +420,8 @@ class Record(SignalEvent):
         for fieldname, value in val.items():
             if fieldname not in self.group.fields:
                 continue
+            if fieldname == self.group.exclude_field:
+                continue
             if isinstance(self.group.fields[fieldname], (fields.M2OField,
                         fields.ReferenceField)):
                 field_rec_name = fieldname + '.rec_name'
@@ -514,10 +521,11 @@ class Record(SignalEvent):
             scope = values
             for i in arg.split('.'):
                 if i not in scope:
-                    scope = None
                     break
                 scope = scope[i]
-            res[arg] = scope
+            else:
+                res[arg] = scope
+        res['id'] = self.id
         return res
 
     def on_change(self, fieldname, attr):
@@ -526,8 +534,7 @@ class Record(SignalEvent):
         args = self._get_on_change_args(attr)
         try:
             res = RPCExecute('model', self.model_name, 'on_change_' +
-                fieldname, args, main_iteration=False,
-                context=self.context_get())
+                fieldname, args, context=self.context_get())
         except RPCException:
             return
         self.set_on_change(res)
@@ -558,8 +565,7 @@ class Record(SignalEvent):
         if fieldnames:
             try:
                 result = RPCExecute('model', self.model_name, 'on_change_with',
-                    values, list(fieldnames), main_iteration=False,
-                    context=self.context_get())
+                    values, list(fieldnames), context=self.context_get())
             except RPCException:
                 return
             self.set_on_change(result)
@@ -570,7 +576,7 @@ class Record(SignalEvent):
             try:
                 result = RPCExecute('model', self.model_name,
                     'on_change_with_' + fieldname, values,
-                    main_iteration=False, context=self.context_get())
+                    context=self.context_get())
             except RPCException:
                 return
             self.group.fields[fieldname].set_on_change(self, result)
@@ -588,8 +594,7 @@ class Record(SignalEvent):
         args = self._get_on_change_args(autocomplete)
         try:
             res = RPCExecute('model', self.model_name, 'autocomplete_' +
-                fieldname, args, main_iteration=False,
-                context=self.context_get())
+                fieldname, args, context=self.context_get())
         except RPCException:
             # ensure res is a list
             res = []
@@ -604,7 +609,7 @@ class Record(SignalEvent):
                     'search_count', [
                         ('resource', '=',
                             '%s,%s' % (self.model_name, self.id)),
-                        ], main_iteration=False)
+                        ], context=self.context_get())
             except RPCException:
                 return 0
         return self.attachment_count
@@ -616,8 +621,5 @@ class Record(SignalEvent):
             if hasattr(v, 'destroy'):
                 v.destroy()
         super(Record, self).destroy()
-        self.group = None
-        self.value = None
-        self.next = None
         self.destroyed = True
         pool.remove(self)
diff --git a/tryton/gui/window/view_form/screen/screen.py b/tryton/gui/window/view_form/screen/screen.py
index 37923e3..de96ddc 100644
--- a/tryton/gui/window/view_form/screen/screen.py
+++ b/tryton/gui/window/view_form/screen/screen.py
@@ -24,7 +24,7 @@ from tryton.exceptions import TrytonServerError, TrytonServerUnavailable
 from tryton.jsonrpc import JSONEncoder
 from tryton.common.domain_parser import DomainParser
 from tryton.common import RPCExecute, RPCException, MODELACCESS, \
-    node_attributes, sur
+    node_attributes, sur, RPCContextReload
 from tryton.action import Action
 import tryton.rpc as rpc
 
@@ -46,8 +46,6 @@ class Screen(SignalEvent):
             view_ids = []
         if mode is None:
             mode = ['tree', 'form']
-        if context is None:
-            context = {}
         if views_preload is None:
             views_preload = {}
         if domain is None:
@@ -69,15 +67,17 @@ class Screen(SignalEvent):
         self.size_limit = None
         self.views_preload = views_preload
         self.model_name = model_name
-        self.context = context
         self.views = []
         self.view_ids = view_ids[:]
         self.parent = None
         self.parent_name = None
         self.exclude_field = exclude_field
         self.filter_widget = None
+        self.tree_states = collections.defaultdict(
+            lambda: collections.defaultdict(lambda: None))
+        self.tree_states_done = set()
         self.__group = None
-        self.new_group()
+        self.new_group(context or {})
         self.__current_record = None
         self.current_record = None
         self.screen_container = ScreenContainer(tab_domain)
@@ -88,9 +88,6 @@ class Screen(SignalEvent):
         self.fields_view_tree = None
         self.order = order
         self.view_to_load = []
-        self.tree_states = collections.defaultdict(
-            lambda: collections.defaultdict(lambda: None))
-        self.tree_states_done = set()
         self.domain_parser = None
         self.pre_validate = False
         self.view_to_load = mode[:]
@@ -126,11 +123,8 @@ class Screen(SignalEvent):
                 xml_fields = [node_attributes(node).get('name')
                     for node in root_node.childNodes
                     if node.nodeName == 'field']
-                if hasattr(collections, 'OrderedDict'):
-                    odict = collections.OrderedDict
-                else:
-                    odict = dict
-                fields = odict((name, fields[name]) for name in xml_fields)
+                fields = collections.OrderedDict(
+                    (name, fields[name]) for name in xml_fields)
                 for name, string, type_ in (
                         ('id', _('ID'), 'integer'),
                         ('create_uid', _('Creation User'), 'many2one'),
@@ -233,6 +227,10 @@ class Screen(SignalEvent):
         self.load(ids)
         return bool(ids)
 
+    @property
+    def context(self):
+        return self.group.context
+
     def __get_group(self):
         return self.__group
 
@@ -242,6 +240,7 @@ class Screen(SignalEvent):
             self.group.signal_unconnect(self)
             for name, field in self.group.fields.iteritems():
                 fields[name] = field.attrs
+        self.tree_states_done.clear()
         self.__group = group
         self.parent = group.parent
         self.parent_name = group.parent_name
@@ -262,9 +261,10 @@ class Screen(SignalEvent):
 
     group = property(__get_group, __set_group)
 
-    def new_group(self):
+    def new_group(self, context=None):
+        context = context if context is not None else self.context
         self.group = Group(self.model_name, {}, domain=self.domain,
-            context=self.context, readonly=self.readonly)
+            context=context, readonly=self.readonly)
 
     def _group_cleared(self, group, signal):
         for view in self.views:
@@ -326,11 +326,6 @@ class Screen(SignalEvent):
         for view in self.views:
             view.destroy()
         super(Screen, self).destroy()
-        self.parent = None
-        self.__group = None
-        self.__current_record = None
-        self.screen_container = None
-        self.widget = None
 
     def default_row_activate(self):
         if (self.current_view.view_type == 'tree' and
@@ -376,7 +371,6 @@ class Screen(SignalEvent):
                 elif self.current_view.view_type == view_type:
                     break
         self.screen_container.set(self.current_view.widget)
-        self.current_view.cancel()
         self.display()
         self.set_cursor()
 
@@ -477,8 +471,6 @@ class Screen(SignalEvent):
             self.current_record.cancel()
             if self.current_record.id < 0:
                 self.remove()
-        if self.current_view:
-            self.current_view.cancel()
 
     def save_current(self):
         if not self.current_record:
@@ -499,11 +491,11 @@ class Screen(SignalEvent):
             self.set_cursor()
             self.current_view.display()
             return False
-        self.signal('record-saved')
         if path and obj_id:
             path = path[:-1] + ((path[-1][0], obj_id),)
         self.current_record = self.group.get_by_path(path)
         self.display()
+        self.signal('record-saved')
         return obj_id
 
     def __get_current_view(self):
@@ -550,20 +542,16 @@ class Screen(SignalEvent):
         if written:
             self.group.written(ids)
         if self.parent:
-            self.parent.reload()
+            self.parent.root_parent.reload()
         self.display()
 
     def unremove(self):
-        records = self.current_view.selected_records()
+        records = self.selected_records
         for record in records:
             self.group.unremove(record)
 
     def remove(self, delete=False, remove=False, force_remove=False):
-        records = None
-        if self.current_view.view_type == 'form' and self.current_record:
-            records = [self.current_record]
-        elif self.current_view.view_type == 'tree':
-            records = self.current_view.selected_records()
+        records = self.selected_records
         if not records:
             return
         if delete:
@@ -609,6 +597,15 @@ class Screen(SignalEvent):
         self.display()
         return True
 
+    def copy(self):
+        ids = [r.id for r in self.selected_records]
+        try:
+            new_ids = RPCExecute('model', self.model_name, 'copy', ids, {},
+                context=self.context)
+        except RPCException:
+            return
+        self.load(new_ids)
+
     def set_tree_state(self):
         view = self.current_view
         if (not CONFIG['client.save_tree_state']
@@ -743,7 +740,7 @@ class Screen(SignalEvent):
                     record = group[idx]
                     break
                 parent = record.parent
-                if not parent:
+                if not parent or record.model_name != parent.model_name:
                     break
                 next = parent.next.get(id(parent.group))
                 while not next:
@@ -808,7 +805,7 @@ class Screen(SignalEvent):
                         record = children[-1]
             else:
                 parent = record.parent
-                if parent:
+                if parent and record.model_name == parent.model_name:
                     record = parent
             self.current_record = record
         elif view.view_type == 'calendar':
@@ -837,8 +834,9 @@ class Screen(SignalEvent):
         self.set_cursor(reset_view=False)
         view.display()
 
-    def sel_ids_get(self):
-        return self.current_view.sel_ids_get()
+    @property
+    def selected_records(self):
+        return self.current_view.selected_records
 
     def id_get(self):
         if not self.current_record:
@@ -856,6 +854,23 @@ class Screen(SignalEvent):
         self.current_record.on_change(fieldname, attr)
         self.display()
 
+    def get_buttons(self):
+        'Return active buttons for the current view'
+        def is_active(record, button):
+            states = record.expr_eval(button.attrs.get('states', {}))
+            return not (states.get('invisible') or states.get('readonly'))
+
+        if not self.selected_records:
+            return []
+
+        buttons = self.current_view.get_buttons()
+
+        for record in self.selected_records:
+            buttons = [b for b in buttons if is_active(record, b)]
+            if not buttons:
+                break
+        return buttons
+
     def button(self, button):
         'Execute button on the current record'
         if button.get('confirm', False) and not sur(button['confirm']):
@@ -863,19 +878,52 @@ class Screen(SignalEvent):
         record = self.current_record
         if not record.save(force_reload=False):
             return
-        context = record.context_get()
+        ids = [r.id for r in self.selected_records]
         try:
-            action_id = RPCExecute('model', self.model_name, button['name'],
-                [record.id], context=context)
+            action = RPCExecute('model', self.model_name, button['name'],
+                ids, context=self.context)
         except RPCException:
-            action_id = None
-        if action_id:
-            Action.execute(action_id, {
+            action = None
+        self.reload(ids, written=True)
+        if isinstance(action, basestring):
+            self.client_action(action)
+        elif action:
+            Action.execute(action, {
                     'model': self.model_name,
                     'id': record.id,
-                    'ids': [record.id],
-                    }, context=context)
-        self.reload([record.id], written=True)
+                    'ids': ids,
+                    }, context=self.context)
+
+    def client_action(self, action):
+        access = MODELACCESS[self.model_name]
+        if action == 'new':
+            if access['create']:
+                self.new()
+        elif action == 'delete':
+            if access['delete']:
+                self.remove(delete=not self.parent,
+                    force_remove=not self.parent)
+        elif action == 'remove':
+            if access['write'] and access['read'] and self.parent:
+                self.remove(remove=True)
+        elif action == 'copy':
+            if access['create']:
+                self.copy()
+        elif action == 'next':
+            self.display_next()
+        elif action == 'previous':
+            self.display_prev()
+        elif action == 'close':
+            from tryton.gui import Main
+            Main.get_main().sig_win_close()
+        elif action.startswith('switch'):
+            _, view_type = action.split(None, 1)
+            self.switch_view(view_type=view_type)
+        elif action == 'reload menu':
+            from tryton.gui import Main
+            RPCContextReload(Main.get_main().sig_win_menu)
+        elif action == 'reload context':
+            RPCContextReload()
 
     def get_url(self):
         query_string = []
diff --git a/tryton/gui/window/view_form/view/calendar_.py b/tryton/gui/window/view_form/view/calendar_.py
index ec56ba2..93d4c74 100644
--- a/tryton/gui/window/view_form/view/calendar_.py
+++ b/tryton/gui/window/view_form/view/calendar_.py
@@ -47,9 +47,6 @@ class ViewCalendar(ParserView):
             # No need to load any record as nothing will be shown
             return [('id', '=', -1)]
 
-    def cancel(self):
-        pass
-
     def set_value(self):
         pass
 
diff --git a/tryton/gui/window/view_form/view/calendar_gtk/calendar_.py b/tryton/gui/window/view_form/view/calendar_gtk/calendar_.py
index 0b2c334..bc799ab 100644
--- a/tryton/gui/window/view_form/view/calendar_gtk/calendar_.py
+++ b/tryton/gui/window/view_form/view/calendar_gtk/calendar_.py
@@ -21,9 +21,6 @@ class Calendar_(goocalendar.Calendar):
         self.event_store = event_store
         self.current_domain_period = self.get_displayed_period()
 
-    def destroy(self):
-        super(Calendar_, self).destroy()
-
     def set_default_date(self, record, selected_date):
         attrs = common.node_attributes(self.root_node)
         dtstart = attrs.get('dtstart')
diff --git a/tryton/gui/window/view_form/view/form.py b/tryton/gui/window/view_form/view/form.py
index a333b45..62a18f0 100644
--- a/tryton/gui/window/view_form/view/form.py
+++ b/tryton/gui/window/view_form/view/form.py
@@ -20,9 +20,8 @@ class ViewForm(ParserView):
         self.view_type = 'form'
         self.editable = True
 
-        for widget in self.state_widgets:
-            if isinstance(widget, gtk.Button):
-                widget.connect('clicked', self.button_clicked)
+        for button in self.get_buttons():
+            button.connect('clicked', self.button_clicked)
 
         # Force to display the first time it switches on a page
         # This avoids glitch in position of widgets
@@ -62,17 +61,7 @@ class ViewForm(ParserView):
         for widget_name in self.widgets.keys():
             for widget in self.widgets[widget_name]:
                 widget.destroy()
-            del self.widgets[widget_name]
         self.widget.destroy()
-        self.widget = None
-        self.widgets = None
-        self.screen = None
-        self.state_widgets = None
-
-    def cancel(self):
-        for widgets in self.widgets.itervalues():
-            for widget in widgets:
-                widget.cancel()
 
     def set_value(self, focused_widget=False):
         record = self.screen.current_record
@@ -87,11 +76,7 @@ class ViewForm(ParserView):
                                     and widget.widget.get_focus_child())):
                             widget.set_value(record, field)
 
-    def sel_ids_get(self):
-        if self.screen.current_record:
-            return [self.screen.current_record.id]
-        return []
-
+    @property
     def selected_records(self):
         if self.screen.current_record:
             return [self.screen.current_record]
@@ -102,6 +87,9 @@ class ViewForm(ParserView):
         return any(w.modified for widgets in self.widgets.itervalues()
             for w in widgets)
 
+    def get_buttons(self):
+        return [b for b in self.state_widgets if isinstance(b, gtk.Button)]
+
     def reset(self):
         record = self.screen.current_record
         if record:
@@ -142,16 +130,15 @@ class ViewForm(ParserView):
         return True
 
     def set_cursor(self, new=False, reset_view=True):
-        if reset_view:
-            for notebook in self.notebooks:
-                notebook.set_current_page(0)
+        focus_widget = None
+        if reset_view or not self.widget.has_focus():
+            if reset_view:
+                for notebook in self.notebooks:
+                    notebook.set_current_page(0)
             if self.cursor_widget in self.widgets:
-                self.widgets[self.cursor_widget][0].grab_focus()
-        elif not self.widget.has_focus():
-            self.widgets[self.cursor_widget][0].grab_focus()
+                focus_widget = self.widgets[self.cursor_widget][0]
         record = self.screen.current_record
         position = reduce(lambda x, y: x + len(y), self.widgets, 0)
-        focus_widget = None
         if record:
             for name, widgets in self.widgets.iteritems():
                 for widget in widgets:
diff --git a/tryton/gui/window/view_form/view/form_gtk/binary.py b/tryton/gui/window/view_form/view/form_gtk/binary.py
index 2f6a4b4..26f704a 100644
--- a/tryton/gui/window/view_form/view/form_gtk/binary.py
+++ b/tryton/gui/window/view_form/view/form_gtk/binary.py
@@ -5,7 +5,7 @@ import gettext
 import os
 import tempfile
 from tryton.common import common
-from tryton.common import file_selection, Tooltips, file_open
+from tryton.common import file_selection, Tooltips, file_open, slugify
 from interface import WidgetInterface
 
 _ = gettext.gettext
@@ -78,6 +78,8 @@ class Binary(WidgetInterface):
         self.tooltips.set_tip(self.but_remove, _('Clear'))
         self.widget.pack_start(self.but_remove, expand=False, fill=False)
 
+        self.last_open_file = None
+
         self.tooltips.enable()
 
     @property
@@ -108,7 +110,12 @@ class Binary(WidgetInterface):
             return self.wid_size.grab_focus()
 
     def sig_new(self, widget=None):
-        filename = file_selection(_('Open...'))
+        filename = ''
+        if self.last_open_file:
+            last_id, last_filename = self.last_open_file
+            if last_id == self.record.id:
+                filename = last_filename
+        filename = file_selection(_('Open...'), filename=filename)
         if filename and self.field:
             self.field.set_client(self.record, open(filename, 'rb').read())
             if self.filename_field:
@@ -119,17 +126,22 @@ class Binary(WidgetInterface):
         if not self.filename_field:
             return
         dtemp = tempfile.mkdtemp(prefix='tryton_')
-        filename = self.filename_field.get(self.record).replace(
-                os.sep, '_').replace(os.altsep or os.sep, '_')
+        filename = self.filename_field.get(self.record)
         if not filename:
             return
+        root, ext = os.path.splitext(filename)
+        filename = ''.join([slugify(root), os.extsep, slugify(ext)])
         file_path = os.path.join(dtemp, filename)
         with open(file_path, 'wb') as fp:
-            fp.write(self.field.get_data(self.record))
+            if hasattr(self.field, 'get_data'):
+                fp.write(self.field.get_data(self.record))
+            else:
+                fp.write(self.field.get(self.record))
         root, type_ = os.path.splitext(filename)
         if type_:
             type_ = type_[1:]
         file_open(file_path, type_)
+        self.last_open_file = (self.record.id, file_path)
 
     def sig_save_as(self, widget=None):
         filename = ''
@@ -139,7 +151,10 @@ class Binary(WidgetInterface):
             action=gtk.FILE_CHOOSER_ACTION_SAVE)
         if filename:
             with open(filename, 'wb') as fp:
-                fp.write(self.field.get_data(self.record))
+                if hasattr(self.field, 'get_data'):
+                    fp.write(self.field.get_data(self.record))
+                else:
+                    fp.write(self.field.get(self.record))
 
     def sig_remove(self, widget=None):
         self.field.set_client(self.record, False)
@@ -169,10 +184,14 @@ class Binary(WidgetInterface):
             return False
         if self.wid_text:
             self.wid_text.set_text(self.filename_field.get(record) or '')
-        self.wid_size.set_text(common.humanize(field.get_size(record) or 0))
+        if hasattr(field, 'get_size'):
+            size = field.get_size(record)
+        else:
+            size = len(field.get(record))
+        self.wid_size.set_text(common.humanize(size or 0))
         if self.but_open:
-            self.but_open.set_sensitive(bool(field.get_size(record)))
-        self.but_save_as.set_sensitive(bool(field.get_size(record)))
+            self.but_open.set_sensitive(bool(size))
+        self.but_save_as.set_sensitive(bool(size))
         return True
 
     def set_value(self, record, field):
diff --git a/tryton/gui/window/view_form/view/form_gtk/calendar.py b/tryton/gui/window/view_form/view/form_gtk/calendar.py
index 7292c7e..bfab553 100644
--- a/tryton/gui/window/view_form/view/form_gtk/calendar.py
+++ b/tryton/gui/window/view_form/view/form_gtk/calendar.py
@@ -48,8 +48,7 @@ class Calendar(WidgetInterface):
         return self.entry.grab_focus()
 
     def set_value(self, record, field):
-        field.set_client(record, self.entry.get_text())
-        return True
+        field.set_client(record, self.get_value())
 
     def get_value(self):
         return self.entry.date_get(set_text=False)
@@ -89,8 +88,7 @@ class Time(Calendar):
 
     def __init__(self, field_name, model_name, attrs=None):
         super(Time, self).__init__(field_name, model_name, attrs=attrs)
-        if hasattr(self.entry, 'set_icon_from_stock'):
-            self.entry.set_icon_from_stock(gtk.ENTRY_ICON_SECONDARY, None)
+        self.entry.set_icon_from_stock(gtk.ENTRY_ICON_SECONDARY, None)
 
     def get_format(self, record, field):
         return field.time_format(record)
diff --git a/tryton/gui/window/view_form/view/form_gtk/char.py b/tryton/gui/window/view_form/view/form_gtk/char.py
index 50fbad4..ae25a91 100644
--- a/tryton/gui/window/view_form/view/form_gtk/char.py
+++ b/tryton/gui/window/view_form/view/form_gtk/char.py
@@ -6,6 +6,7 @@ import gobject
 import gtk
 from interface import WidgetInterface, TranslateMixin
 from tryton.common import Tooltips
+from tryton.common.entry_position import manage_entry_position
 
 _ = gettext.gettext
 
@@ -36,6 +37,7 @@ class Char(WidgetInterface, TranslateMixin):
         focus_entry.connect('activate', self.sig_activate)
         focus_entry.connect('focus-out-event', lambda x, y: self._focus_out())
         focus_entry.connect('key-press-event', self.send_modified)
+        manage_entry_position(focus_entry)
         expand, fill = True, True
         if attrs.get('size'):
             expand, fill = False, False
@@ -148,10 +150,10 @@ class Char(WidgetInterface, TranslateMixin):
             self.widget.set_focus_chain([self.entry])
 
 
-class Sha(Char):
+class Password(Char):
 
     def __init__(self, field_name, model_name, attrs=None):
-        super(Sha, self).__init__(field_name, model_name, attrs=attrs)
+        super(Password, self).__init__(field_name, model_name, attrs=attrs)
         self.entry.props.visibility = False
 
         self.visibility_checkbox = gtk.CheckButton()
diff --git a/tryton/gui/window/view_form/view/form_gtk/dictionary.py b/tryton/gui/window/view_form/view/form_gtk/dictionary.py
index 42090b8..f958067 100644
--- a/tryton/gui/window/view_form/view/form_gtk/dictionary.py
+++ b/tryton/gui/window/view_form/view/form_gtk/dictionary.py
@@ -104,8 +104,7 @@ class DictSelectionEntry(DictEntry):
         widget.set_text_column(0)
         widget.child.set_width_chars(width)
         completion = gtk.EntryCompletion()
-        if hasattr(completion, 'set_inline_selection'):
-            completion.set_inline_selection(True)
+        completion.set_inline_selection(True)
         completion.set_model(model)
         widget.child.set_completion(completion)
         completion.set_text_column(0)
diff --git a/tryton/gui/window/view_form/view/form_gtk/image.py b/tryton/gui/window/view_form/view/form_gtk/image.py
index dc30c03..ba5bdd0 100644
--- a/tryton/gui/window/view_form/view/form_gtk/image.py
+++ b/tryton/gui/window/view_form/view/form_gtk/image.py
@@ -5,7 +5,7 @@ import glib
 import gettext
 import os
 import tempfile
-from tryton.common import file_selection, Tooltips, file_open
+from tryton.common import file_selection, Tooltips, file_open, slugify
 from tryton.config import PIXMAPS_DIR
 from interface import WidgetInterface
 import urllib
@@ -141,8 +141,11 @@ class Image(WidgetInterface):
         if not self.filename_field:
             return
         dtemp = tempfile.mkdtemp(prefix='tryton_')
-        filename = self.filename_field.get(self.record).replace(
-                os.sep, '_').replace(os.altsep or os.sep, '_')
+        filename = self.filename_field.get(self.record)
+        if not filename:
+            return
+        root, ext = os.path.splitext(filename)
+        filename = ''.join([slugify(root), os.extsep, slugify(ext)])
         file_path = os.path.join(dtemp, filename)
         with open(file_path, 'wb') as fp:
             fp.write(self.field.get_data(self.record))
diff --git a/tryton/gui/window/view_form/view/form_gtk/interface.py b/tryton/gui/window/view_form/view/form_gtk/interface.py
index 5604e17..22ef029 100644
--- a/tryton/gui/window/view_form/view/form_gtk/interface.py
+++ b/tryton/gui/window/view_form/view/form_gtk/interface.py
@@ -67,10 +67,14 @@ class WidgetInterface(object):
 
     def send_modified(self, *args):
         def send(value):
+            if not self.widget.props.window:
+                return
             if self.record and self.get_value() == value:
                 self.record.signal('record-modified')
 
         def get_value():
+            if not self.widget.props.window:
+                return
             gobject.timeout_add(300, send, self.get_value())
         # Wait the current event is finished to retreive the value
         gobject.idle_add(get_value)
@@ -146,10 +150,12 @@ class WidgetInterface(object):
             self._readonly_set(self.attrs.get('readonly', True))
             self.invisible_set(self.attrs.get('invisible', False))
             return
-        self._readonly_set(self.attrs.get('readonly',
-            field.get_state_attrs(record).get('readonly', False)))
-        if self.attrs.get('readonly',
-                field.get_state_attrs(record).get('readonly', False)):
+        readonly = self.attrs.get('readonly',
+            field.get_state_attrs(record).get('readonly', False))
+        if self.view.screen.readonly:
+            readonly = True
+        self._readonly_set(readonly)
+        if readonly:
             self.color_set('readonly')
         elif not field.get_state_attrs(record).get('valid', True):
             self.color_set('invalid')
@@ -163,9 +169,6 @@ class WidgetInterface(object):
     def set_value(self, record, field):
         pass
 
-    def cancel(self):
-        pass
-
 
 class TranslateDialog(NoModal):
 
diff --git a/tryton/gui/window/view_form/view/form_gtk/many2many.py b/tryton/gui/window/view_form/view/form_gtk/many2many.py
index 0076610..fbc0dd6 100644
--- a/tryton/gui/window/view_form/view/form_gtk/many2many.py
+++ b/tryton/gui/window/view_form/view/form_gtk/many2many.py
@@ -130,8 +130,6 @@ class Many2Many(WidgetInterface):
 
     def destroy(self):
         self.screen.destroy()
-        self.widget.destroy()
-        del self.widget
 
     def color_set(self, name):
         super(Many2Many, self).color_set(name)
@@ -146,6 +144,9 @@ class Many2Many(WidgetInterface):
         if not self.focus_out:
             return
         domain = self.field.domain_get(self.record)
+        add_remove = self.record.expr_eval(self.attrs.get('add_remove'))
+        if add_remove:
+            domain = [domain, add_remove]
         context = self.field.context_get(self.record)
         value = self.wid_text.get_text()
 
@@ -185,13 +186,26 @@ class Many2Many(WidgetInterface):
         self._sig_edit()
 
     def _sig_edit(self):
-        if self.screen.current_record:
-            def callback(result):
-                if result:
-                    self.screen.current_record.save()
-                else:
-                    self.screen.current_record.cancel()
-            WinForm(self.screen, callback)
+        if not self.screen.current_record:
+            return
+        # Create a new screen that is not linked to the parent otherwise on the
+        # save of the record will trigger the save of the parent
+        domain = self.field.domain_get(self.record)
+        add_remove = self.record.expr_eval(self.attrs.get('add_remove'))
+        if add_remove:
+            domain = [domain, add_remove]
+        screen = Screen(self.attrs['relation'], domain=domain,
+            view_ids=self.attrs.get('view_ids', '').split(','),
+            mode=['form'], views_preload=self.attrs.get('views', {}),
+            readonly=self.attrs.get('readonly', False))
+        screen.load([self.screen.current_record.id])
+
+        def callback(result):
+            if result:
+                screen.current_record.save()
+                # Force a reload on next display
+                self.screen.current_record.cancel()
+        WinForm(screen, callback)
 
     def _readonly_set(self, value):
         self._readonly = value
@@ -233,7 +247,6 @@ class Many2Many(WidgetInterface):
         return True
 
     def set_value(self, record, field):
-        self.screen.save_tree_state()
         self.screen.current_view.set_value()
         return True
 
@@ -263,6 +276,9 @@ class Many2Many(WidgetInterface):
         elif index == 1:
             model = self.attrs['relation']
             domain = self.field.domain_get(self.record)
+            add_remove = self.record.expr_eval(self.attrs.get('add_remove'))
+            if add_remove:
+                domain = [domain, add_remove]
             context = self.field.context_get(self.record)
 
             screen = Screen(model, domain, context=context, mode=['form'])
diff --git a/tryton/gui/window/view_form/view/form_gtk/many2one.py b/tryton/gui/window/view_form/view/form_gtk/many2one.py
index 0bf12fe..5b14610 100644
--- a/tryton/gui/window/view_form/view/form_gtk/many2one.py
+++ b/tryton/gui/window/view_form/view/form_gtk/many2one.py
@@ -12,6 +12,7 @@ from tryton.config import CONFIG
 from tryton.common.popup_menu import populate
 from tryton.common import RPCExecute, RPCException
 from tryton.common.completion import get_completion, update_completion
+from tryton.common.entry_position import manage_entry_position
 
 _ = gettext.gettext
 
@@ -33,6 +34,7 @@ class Many2One(WidgetInterface):
         self.wid_text.connect('focus-out-event',
             lambda x, y: self._focus_out())
         self.wid_text.connect_after('changed', self.sig_changed)
+        manage_entry_position(self.wid_text)
         self.changed = True
         self.focus_out = True
 
@@ -195,7 +197,8 @@ class Many2One(WidgetInterface):
         context = self.field.context_get(self.record)
         return Screen(self.get_model(), domain=domain, context=context,
             mode=['form'], view_ids=self.attrs.get('view_ids', '').split(','),
-            views_preload=self.attrs.get('views', {}), readonly=self._readonly)
+            views_preload=self.attrs.get('views', {}), readonly=self._readonly,
+            exclude_field=self.attrs.get('relation_field'))
 
     def sig_new(self, *args):
         model = self.get_model()
@@ -307,6 +310,8 @@ class Many2One(WidgetInterface):
         value = self.field.get(self.record)
         if self.has_target(value):
             def clean():
+                if not self.wid_text.props.window:
+                    return
                 text = self.wid_text.get_text()
                 position = self.wid_text.get_position()
                 self.field.set_client(self.record,
@@ -359,7 +364,7 @@ class Many2One(WidgetInterface):
         if self.has_target(value):
             # Delay filling of popup as it can take time
             gobject.idle_add(populate, menu, self.get_model(),
-                self.id_from_value(value))
+                self.id_from_value(value), '', self.field)
         return True
 
     def _completion_match_selected(self, completion, model, iter_):
@@ -377,7 +382,8 @@ class Many2One(WidgetInterface):
             return
         if not self.record:
             return
-        if self.field.get(self.record) is not None:
+        id_ = self.id_from_value(self.field.get(self.record))
+        if id_ is not None and id_ >= 0:
             return
         model = self.get_model()
         update_completion(self.wid_text, self.record, self.field, model)
diff --git a/tryton/gui/window/view_form/view/form_gtk/multiselection.py b/tryton/gui/window/view_form/view/form_gtk/multiselection.py
new file mode 100644
index 0000000..0e44673
--- /dev/null
+++ b/tryton/gui/window/view_form/view/form_gtk/multiselection.py
@@ -0,0 +1,99 @@
+# This file is part of Tryton.  The COPYRIGHT file at the top level of this
+# repository contains the full copyright notices and license terms.
+import gtk
+import gobject
+
+from .interface import WidgetInterface
+from tryton.common.selection import SelectionMixin
+
+MOVEMENT_KEYS = {gtk.keysyms.Up, gtk.keysyms.Down, gtk.keysyms.space,
+    gtk.keysyms.Left, gtk.keysyms.KP_Left,
+    gtk.keysyms.Right, gtk.keysyms.KP_Right,
+    gtk.keysyms.Home, gtk.keysyms.KP_Home,
+    gtk.keysyms.End, gtk.keysyms.KP_End}
+
+
+class MultiSelection(WidgetInterface, SelectionMixin):
+
+    def __init__(self, field_name, model_name, attrs=None):
+        super(MultiSelection, self).__init__(field_name, model_name,
+            attrs=attrs)
+
+        self.widget = viewport = gtk.Viewport()
+        viewport.set_shadow_type(gtk.SHADOW_ETCHED_IN)
+        scroll = gtk.ScrolledWindow()
+        scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+        scroll.set_placement(gtk.CORNER_TOP_LEFT)
+        viewport.add(scroll)
+
+        self.model = gtk.ListStore(gobject.TYPE_INT, gobject.TYPE_STRING)
+        self.tree = gtk.TreeView()
+        self.tree.set_model(self.model)
+        self.tree.set_search_column(1)
+        self.tree.connect('focus-out-event', lambda *a: self._focus_out())
+        self.tree.connect('button-press-event', self.__button_press)
+        self.tree.connect('key_press_event', self.__key_press)
+        selection = self.tree.get_selection()
+        selection.set_mode(gtk.SELECTION_MULTIPLE)
+        selection.connect('changed', self.send_modified)
+        scroll.add(self.tree)
+        name_column = gtk.TreeViewColumn(attrs.get('string', ''))
+        name_cell = gtk.CellRendererText()
+        name_column.pack_start(name_cell)
+        name_column.add_attribute(name_cell, 'text', 1)
+        self.tree.append_column(name_column)
+
+        self.nullable_widget = False
+        self.init_selection()
+        self.id2path = {}
+
+    def _color_widget(self):
+        return self.tree
+
+    def grab_focus(self):
+        self.tree.grab_focus()
+
+    @property
+    def modified(self):
+        if self.record and self.field:
+            group = set(r.id for r in self.field.get_client(self.record))
+            value = set(self.get_value())
+            return value != group
+        return False
+
+    def send_modified(self, *args):
+        if self.record:
+            self.record.signal('record-modified')
+
+    def get_value(self):
+        model, paths = self.tree.get_selection().get_selected_rows()
+        return [model[path][0] for path in paths]
+
+    def set_value(self, record, field):
+        field.set_client(record, self.get_value())
+
+    def display(self, record, field):
+        self.update_selection(record, field)
+        super(MultiSelection, self).display(record, field)
+        self.model.clear()
+        if field is None:
+            return
+        id2path = {}
+        for idx, (value, name) in enumerate(self.selection):
+            self.model.append((value, name))
+            id2path[value] = idx
+        selection = self.tree.get_selection()
+        selection.unselect_all()
+        group = field.get_client(record)
+        for element in group:
+            if (element not in group.record_removed
+                    and element not in group.record_deleted):
+                selection.select_path(id2path[element.id])
+
+    def __button_press(self, treeview, event):
+        if event.button == 1:
+            event.state |= gtk.gdk.CONTROL_MASK
+
+    def __key_press(self, treeview, event):
+        if event.keyval in MOVEMENT_KEYS:
+            event.state |= gtk.gdk.CONTROL_MASK
diff --git a/tryton/gui/window/view_form/view/form_gtk/one2many.py b/tryton/gui/window/view_form/view/form_gtk/one2many.py
index 36e29a7..ca9f02c 100644
--- a/tryton/gui/window/view_form/view/form_gtk/one2many.py
+++ b/tryton/gui/window/view_form/view/form_gtk/one2many.py
@@ -178,6 +178,7 @@ class One2Many(WidgetInterface):
             view_ids=attrs.get('view_ids', '').split(','),
             views_preload=attrs.get('views', {}),
             row_activate=self._on_activate,
+            readonly=self.attrs.get('readonly', False),
             exclude_field=attrs.get('relation_field', None))
         self.screen.pre_validate = bool(int(attrs.get('pre_validate', 0)))
         self.screen.signal_connect(self, 'record-message', self._sig_label)
@@ -321,8 +322,11 @@ class One2Many(WidgetInterface):
         ctx = {}
         ctx.update(self.field.context_get(self.record))
         sequence = None
-        if self.screen.current_view.view_type == 'tree':
-            sequence = self.screen.current_view.widget_tree.sequence
+        for view in self.screen.views:
+            if view.view_type == 'tree':
+                sequence = view.widget_tree.sequence
+                if sequence:
+                    break
 
         def update_sequence():
             if sequence:
@@ -465,7 +469,6 @@ class One2Many(WidgetInterface):
         return True
 
     def set_value(self, record, field):
-        self.screen.save_tree_state()
         self.screen.current_view.set_value()
         if self.screen.modified():  # TODO check if required
             record.modified_fields.setdefault(field.name)
diff --git a/tryton/gui/window/view_form/view/form_gtk/parser.py b/tryton/gui/window/view_form/view/form_gtk/parser.py
index 133a62d..9c8205e 100644
--- a/tryton/gui/window/view_form/view/form_gtk/parser.py
+++ b/tryton/gui/window/view_form/view/form_gtk/parser.py
@@ -522,7 +522,7 @@ from calendar import Calendar, DateTime, Time
 from float import Float
 from integer import Integer
 from selection import Selection
-from char import Char, Sha
+from char import Char, Password
 from float_time import FloatTime
 from checkbox import CheckBox
 from reference import Reference
@@ -537,6 +537,7 @@ from progressbar import ProgressBar
 from one2one import One2One
 from richtextbox import RichTextBox
 from dictionary import DictWidget
+from multiselection import MultiSelection
 
 
 WIDGETS_TYPE = {
@@ -549,7 +550,7 @@ WIDGETS_TYPE = {
     'biginteger': (Integer, 1, False, False),
     'selection': (Selection, 1, False, False),
     'char': (Char, 1, False, False),
-    'sha': (Sha, 1, False, False),
+    'password': (Password, 1, False, False),
     'float_time': (FloatTime, 1, False, False),
     'boolean': (CheckBox, 1, False, False),
     'reference': (Reference, 1, False, False),
@@ -567,4 +568,5 @@ WIDGETS_TYPE = {
     'one2one': (One2One, 1, False, False),
     'richtext': (RichTextBox, 1, True, True),
     'dict': (DictWidget, 1, False, False),
+    'multiselection': (MultiSelection, 1, True, True),
 }
diff --git a/tryton/gui/window/view_form/view/form_gtk/reference.py b/tryton/gui/window/view_form/view/form_gtk/reference.py
index 367dc5f..1a9381c 100644
--- a/tryton/gui/window/view_form/view/form_gtk/reference.py
+++ b/tryton/gui/window/view_form/view/form_gtk/reference.py
@@ -4,8 +4,7 @@ import gtk
 import gettext
 
 from many2one import Many2One
-from .selection import PopdownMixin
-from tryton.common.selection import SelectionMixin
+from tryton.common.selection import SelectionMixin, PopdownMixin
 
 _ = gettext.gettext
 
@@ -32,9 +31,12 @@ class Reference(Many2One, SelectionMixin, PopdownMixin):
         return self.widget_combo.grab_focus()
 
     def get_model(self):
-        child = self.widget_combo.get_child()
-        res = child.get_text()
-        return self._selection.get(res, False)
+        active = self.widget_combo.get_active()
+        if active < 0:
+            return ''
+        else:
+            model = self.widget_combo.get_model()
+            return model[active][1]
 
     def _readonly_set(self, value):
         super(Reference, self)._readonly_set(value)
@@ -116,15 +118,14 @@ class Reference(Many2One, SelectionMixin, PopdownMixin):
         else:
             model, value = None, None
         super(Reference, self).set_text(value)
-        child = self.widget_combo.get_child()
-        reverse_selection = dict((v, k)
-            for k, v in self._selection.iteritems())
-        if model:
-            child.set_text(reverse_selection[model])
-            child.set_position(len(reverse_selection[model]))
-        else:
-            child.set_text('')
-            child.set_position(0)
+
+        active = -1
+        combo_model = self.widget_combo.get_model()
+        for i, selection in enumerate(combo_model):
+            if selection[1] == model:
+                active = i
+                break
+        self.widget_combo.set_active(active)
 
     def display(self, record, field):
         self.update_selection(record, field)
diff --git a/tryton/gui/window/view_form/view/form_gtk/selection.py b/tryton/gui/window/view_form/view/form_gtk/selection.py
index 8eb24f4..09a977b 100644
--- a/tryton/gui/window/view_form/view/form_gtk/selection.py
+++ b/tryton/gui/window/view_form/view/form_gtk/selection.py
@@ -2,52 +2,10 @@
 #this repository contains the full copyright notices and license terms.
 import gtk
 import gobject
-import math
-from interface import WidgetInterface
-from tryton.common.selection import SelectionMixin, selection_shortcuts
-
-
-class PopdownMixin(object):
-
-    def __init__(self, *args, **kwargs):
-        super(PopdownMixin, self).__init__()
-        self._selection = {}
 
-    def set_popdown(self, selection, entry):
-        if not entry.child:  # entry is destroyed
-            return
-        # Don't update popdown if not changed
-        if (list(x[0] for x in entry.get_model() or [])
-                == [x[1] for x in selection]):
-            return
-        model = gtk.ListStore(gobject.TYPE_STRING)
-        self._selection.clear()
-        for (value, name) in selection:
-            name = str(name)
-            self._selection[name] = value
-            model.append((name,))
-        entry.set_model(model)
-        entry.set_text_column(0)
-        completion = gtk.EntryCompletion()
-        #Only available in PyGTK 2.6 and above.
-        if hasattr(completion, 'set_inline_selection'):
-            completion.set_inline_selection(True)
-        completion.set_model(model)
-        entry.child.set_completion(completion)
-        if self._selection:
-            pop = sorted((len(x) for x in self._selection), reverse=True)
-            average = sum(pop) / len(pop)
-            deviation = int(math.sqrt(sum((x - average) ** 2 for x in pop) /
-                    len(pop)))
-            width = max(next((x for x in pop if x < (deviation * 4)), 10), 10)
-        else:
-            width = 10
-        entry.child.set_width_chars(width)
-        if self._selection:
-            entry.child.set_max_length(
-                max(len(x) for x in self._selection))
-        completion.set_text_column(0)
-        completion.connect('match-selected', lambda *a: self._focus_out())
+from interface import WidgetInterface
+from tryton.common.selection import SelectionMixin, selection_shortcuts, \
+    PopdownMixin
 
 
 class Selection(WidgetInterface, SelectionMixin, PopdownMixin):
@@ -63,20 +21,24 @@ class Selection(WidgetInterface, SelectionMixin, PopdownMixin):
         child.set_width_chars(10)
 
         selection_shortcuts(self.entry)
-        child.connect('key_press_event', self.sig_key_press)
-        child.connect('activate', self.sig_activate)
-        child.connect_after('focus-out-event', self.sig_activate)
-        child.connect('changed', self.send_modified)
-        self.entry.connect('notify::active', lambda *a: self._focus_out())
+        child.connect('activate', lambda *a: self._focus_out())
+        child.connect('focus-out-event', lambda *a: self._focus_out())
+        self.entry.connect('changed', self.changed)
         self.widget.pack_start(self.entry)
         self.widget.set_focus_chain([child])
 
-        self._selection = {}
         self.selection = attrs.get('selection', [])[:]
         self.attrs = attrs
         self.init_selection()
         self.set_popdown(self.selection, self.entry)
 
+    def changed(self, combobox):
+        def focus_out():
+            if combobox.props.window:
+                self._focus_out()
+        # Must be deferred because it triggers a display of the form
+        gobject.idle_add(focus_out)
+
     def grab_focus(self):
         return self.entry.grab_focus()
 
@@ -90,30 +52,7 @@ class Selection(WidgetInterface, SelectionMixin, PopdownMixin):
     def get_value(self):
         if not self.entry.child:  # entry is destroyed
             return
-        text = self.entry.child.get_text()
-        value = None
-        if text:
-            for txt, val in self._selection.items():
-                if not val:
-                    continue
-                if txt[:len(text)].lower() == text.lower():
-                    value = val
-                    if len(txt) == len(text):
-                        break
-            if not value:
-                for val, txt in self.inactive_selection:
-                    if txt == text:
-                        value = val
-                        break
-        return value
-
-    def sig_key_press(self, widget, event):
-        self.send_modified()
-
-    def sig_activate(self, widget, event=None):
-        if not self.field:
-            return
-        self.field.set_client(self.record, self.get_value())
+        return self.get_popdown_value(self.entry)
 
     @property
     def modified(self):
@@ -122,47 +61,23 @@ class Selection(WidgetInterface, SelectionMixin, PopdownMixin):
         return False
 
     def set_value(self, record, field):
-        field.set_client(record, self.get_value())
-
-    def _menu_sig_default_set(self, reset=False):
-        self.set_value(self.record, self.field)
-        super(Selection, self)._menu_sig_default_set(reset=reset)
+        value = self.get_value()
+        if 'relation' in self.attrs and value:
+            value = (value, self.entry.get_active_text())
+        field.set_client(record, value)
 
     def display(self, record, field):
         self.update_selection(record, field)
         self.set_popdown(self.selection, self.entry)
-        child = self.entry.child
         if not field:
-            child.set_text('')
-            return False
+            self.entry.set_active(-1)
+            return
         super(Selection, self).display(record, field)
         value = field.get(record)
         if isinstance(value, (list, tuple)):
             # Compatibility with Many2One
             value = value[0]
-        if not value:
-            child.set_text('')
-        else:
-            found = False
-            for long_text, sel_value in self._selection.items():
-                if str(sel_value) == str(value):
-                    child.set_text(long_text)
-                    found = True
-                    break
-            if not found:
-                for sel_value, long_text in self.selection:
-                    if str(sel_value) == str(value):
-                        self._selection[long_text] = sel_value
-                        model = self.entry.get_model()
-                        i = model.append()
-                        model.set(i, 0, long_text)
-                        child.set_text(long_text)
-                        found = True
-                        break
-            if not found:
-                text = self.get_inactive_selection(value)
-                if text:
-                    child.set_text(text)
-                    found = True
-            if not found:
-                child.set_text('')
+
+        if not self.set_popdown_value(self.entry, value):
+            self.get_inactive_selection(value)
+            self.set_popdown_value(self.entry, value)
diff --git a/tryton/gui/window/view_form/view/graph.py b/tryton/gui/window/view_form/view/graph.py
index c91ff67..850d608 100644
--- a/tryton/gui/window/view_form/view/graph.py
+++ b/tryton/gui/window/view_form/view/graph.py
@@ -21,19 +21,10 @@ class ViewGraph(ParserView):
         for widget in self.widgets.keys():
             self.widgets[widget].destroy()
             del self.widgets[widget]
-        self.widget = None
-        self.screen = None
-        self.state_widgets = None
-
-    def cancel(self):
-        pass
 
     def set_value(self):
         pass
 
-    def sel_ids_get(self):
-        return []
-
     def reset(self):
         pass
 
diff --git a/tryton/gui/window/view_form/view/interface.py b/tryton/gui/window/view_form/view/interface.py
index dbee8d6..051beb5 100644
--- a/tryton/gui/window/view_form/view/interface.py
+++ b/tryton/gui/window/view_form/view/interface.py
@@ -32,9 +32,16 @@ class ParserView(object):
         self.children_field = children_field
         self.view_id = None
 
+    @property
+    def selected_records(self):
+        return []
+
     def get_fields(self):
         return self.children.keys()
 
+    def get_buttons(self):
+        return []
+
     @property
     def modified(self):
         return False
diff --git a/tryton/gui/window/view_form/view/list.py b/tryton/gui/window/view_form/view/list.py
index 1b61eaf..177a945 100644
--- a/tryton/gui/window/view_form/view/list.py
+++ b/tryton/gui/window/view_form/view/list.py
@@ -9,13 +9,10 @@ except ImportError:
     import json
 import locale
 from interface import ParserView
-from tryton.action import Action
-from tryton.common import message
 import gettext
 from tryton.config import CONFIG
 from tryton.common.cellrendererbutton import CellRendererButton
 from tryton.common.cellrenderertoggle import CellRendererToggle
-from tryton.pyson import PYSONEncoder
 from tryton.gui.window import Window
 from tryton.common.popup_menu import populate
 from tryton.common import RPCExecute, RPCException
@@ -61,9 +58,6 @@ class AdaptModelGroup(gtk.GenericTreeModel):
                 iter_ = self.get_iter(path)
                 self.row_has_child_toggled(path, iter_)
 
-    def cancel(self):
-        pass
-
     def removed(self, group, record):
         if (group is self.group
                 and (record.group is self.group
@@ -340,6 +334,10 @@ class ViewList(ParserView):
     def get_fields(self):
         return [col.name for col in self.widget_tree.get_columns() if col.name]
 
+    def get_buttons(self):
+        return [b for b in self.state_widgets
+            if isinstance(b.renderer, CellRendererButton)]
+
     def on_keypress(self, widget, event):
         if (event.keyval == gtk.keysyms.c
                 and event.state & gtk.gdk.CONTROL_MASK):
@@ -474,10 +472,21 @@ class ViewList(ParserView):
         if col in columns:
             idx = columns.index(col)
             columns = columns[idx:]
-        record = self.screen.current_record
-        group = record.group
-        idx = group.index(record)
+        if self.screen.current_record:
+            record = self.screen.current_record
+            group = record.group
+            idx = group.index(record)
+        else:
+            group = self.screen.group
+            idx = len(group)
+        default = None
         for line in data:
+            if idx >= len(group):
+                record = group.new(default=False)
+                if default is None:
+                    default = record.default_get()
+                record.set_default(default)
+                group.add(record)
             record = group[idx]
             for col, value in zip(columns, line):
                 cell = self.widget_tree.cells[col.name]
@@ -490,9 +499,6 @@ class ViewList(ParserView):
             if not record.validate():
                 break
             idx += 1
-            if idx >= len(group):
-                # TODO create new record
-                break
         self.screen.current_record = record
         self.screen.display(set_cursor=True)
 
@@ -544,6 +550,15 @@ class ViewList(ParserView):
                     return
         if not selection.data:
             return
+
+        # Don't received if the treeview was editing because it breaks the
+        # internal state of the cursor.
+        cursor, column = treeview.get_cursor()
+        if column:
+            for renderer in column.get_cell_renderers():
+                if renderer.props.editing:
+                    return
+
         store = treeview.get_model()
         try:
             data = json.loads(selection.data)
@@ -635,7 +650,7 @@ class ViewList(ParserView):
                     if not model:
                         continue
                     label = field.attrs['string']
-                    populate(menu, model, record_id, title=label)
+                    populate(menu, model, record_id, title=label, field=field)
                 menu.show_all()
             # Delay filling of popup as it can take time
             gobject.idle_add(pop, menu, group, record)
@@ -646,35 +661,6 @@ class ViewList(ParserView):
             return True
         return False
 
-    def click_and_relate(self, action, value, path):
-        data = {}
-        context = {}
-        act = action.copy()
-        if not(value):
-            message(_('You must select a record to use the relation!'))
-            return False
-        from tryton.gui.window.view_form.screen import Screen
-        screen = Screen(self.screen.group.fields[
-            path[1].name].attrs['relation'])
-        screen.load([value])
-        encoder = PYSONEncoder()
-        act['domain'] = encoder.encode(screen.current_record.expr_eval(
-            act.get('domain', [])))
-        act['context'] = encoder.encode(screen.current_record.expr_eval(
-            act.get('context', {})))
-        data['model'] = self.screen.model_name
-        data['id'] = value
-        data['ids'] = [value]
-        return Action._exec_action(act, data, context)
-
-    def click_and_action(self, atype, value, path):
-        return Action.exec_keyword(atype, {
-            'model': self.screen.group.fields[
-                path[1].name].attrs['relation'],
-            'id': value or False,
-            'ids': [value],
-            }, alwaysask=True)
-
     def group_list_changed(self, group, signal):
         if self.store is not None:
             if signal[0] == 'record-added':
@@ -683,9 +669,6 @@ class ViewList(ParserView):
                 self.store.removed(group, signal[1])
         self.display()
 
-    def cancel(self):
-        pass
-
     def __str__(self):
         return 'ViewList (%d)' % id(self)
 
@@ -722,9 +705,6 @@ class ViewList(ParserView):
     def destroy(self):
         self.save_width_height()
         self.widget_tree.destroy()
-        self.screen = None
-        self.widget_tree = None
-        self.widget = None
 
     def __sig_switch(self, treeview, path, column):
         if column._type == 'button':
@@ -800,6 +780,7 @@ class ViewList(ParserView):
     # self.widget.set_model(self.store) could be removed if the store
     # has not changed -> better ergonomy. To test
     def display(self):
+        current_record = self.screen.current_record
         if (self.reload
                 or not self.widget_tree.get_model()
                 or (self.screen.group !=
@@ -807,12 +788,16 @@ class ViewList(ParserView):
             self.store = AdaptModelGroup(self.screen.group,
                     self.children_field)
             self.widget_tree.set_model(self.store)
+            # __select_changed resets current_record to None
+            self.screen.current_record = current_record
+            if current_record:
+                selection = self.widget_tree.get_selection()
+                path = self.store.on_get_path(current_record)
+                selection.select_path(path)
         self.reload = False
-        if not self.screen.current_record:
-            # Should find a simpler solution to do something like
-            #self.widget.set_cursor(None,None,False)
-            if self.store:
-                self.widget_tree.set_model(self.store)
+        if not current_record:
+            selection = self.widget_tree.get_selection()
+            selection.unselect_all()
         self.widget_tree.queue_draw()
         if self.editable:
             self.set_state()
@@ -827,7 +812,7 @@ class ViewList(ParserView):
                     field.state_set(record)
 
     def update_children(self):
-        ids = self.sel_ids_get()
+        selected_records = self.selected_records
         for child in self.children:
             value = 0
             value_selected = 0
@@ -840,7 +825,7 @@ class ViewList(ParserView):
                 field_value = record.fields_get()[child_fieldname].get(record)
                 if field_value is not None:
                     value += field_value
-                    if record.id in ids or not ids:
+                    if record in selected_records or not selected_records:
                         value_selected += field_value
 
             if loaded:
@@ -870,17 +855,7 @@ class ViewList(ParserView):
             if (current_path != path and path not in selected_path) or new:
                 self.widget_tree.set_cursor(path, focus_column, new)
 
-    def sel_ids_get(self):
-        def _func_sel_get(store, path, iter, ids):
-            record = store.on_get_iter(path)
-            if record and record.id >= 0:
-                ids.append(record.id)
-        ids = []
-        sel = self.widget_tree.get_selection()
-        if sel:
-            sel.selected_foreach(_func_sel_get, ids)
-        return ids
-
+    @property
     def selected_records(self):
         def _func_sel_get(store, path, iter, records):
             records.append(store.on_get_iter(path))
diff --git a/tryton/gui/window/view_form/view/list_gtk/editabletree.py b/tryton/gui/window/view_form/view/list_gtk/editabletree.py
index 50b660c..2a566f4 100644
--- a/tryton/gui/window/view_form/view/list_gtk/editabletree.py
+++ b/tryton/gui/window/view_form/view/list_gtk/editabletree.py
@@ -104,6 +104,7 @@ class EditableTreeView(TreeView):
         self.grab_focus()
         if focus_column and (focus_column._type in ('boolean')):
             start_editing = False
+        self.scroll_to_cell(path, focus_column, use_align=False)
         super(EditableTreeView, self).set_cursor(path, focus_column,
                 start_editing)
 
diff --git a/tryton/gui/window/view_form/view/list_gtk/parser.py b/tryton/gui/window/view_form/view/list_gtk/parser.py
index 847f780..2dacf90 100644
--- a/tryton/gui/window/view_form/view/list_gtk/parser.py
+++ b/tryton/gui/window/view_form/view/list_gtk/parser.py
@@ -2,7 +2,6 @@
 #this repository contains the full copyright notices and license terms.
 
 import os
-import gobject
 import tempfile
 import gtk
 import locale
@@ -18,7 +17,7 @@ from tryton.gui.window.win_form import WinForm
 from tryton.gui.window.view_form.screen import Screen
 import tryton.rpc as rpc
 from tryton.common import COLORS, node_attributes, \
-        file_selection, file_open
+        file_selection, file_open, slugify
 import tryton.common as common
 from tryton.common.cellrendererbutton import CellRendererButton
 from tryton.common.cellrendererdate import CellRendererDate
@@ -34,7 +33,7 @@ from tryton.common.cellrendererclickablepixbuf import \
 from tryton.translate import date_format
 from tryton.common import RPCExecute, RPCException
 from tryton.common.completion import get_completion, update_completion
-from tryton.common.selection import SelectionMixin
+from tryton.common.selection import SelectionMixin, PopdownMixin
 
 _ = gettext.gettext
 
@@ -68,7 +67,7 @@ def sort_model(column, treeview, screen):
     store = treeview.get_model()
     unsaved_records = [x for x in store.group if x.id < 0]
     search_string = screen.screen_container.get_text() or None
-    if screen.search_count == len(store) or unsaved_records:
+    if screen.search_count == len(store) or unsaved_records or screen.parent:
         ids = screen.search_filter(search_string=search_string, only_ids=True)
         store.sort(ids)
     else:
@@ -258,6 +257,7 @@ class ParserTree(ParserInterface):
                 string = node_attrs.get('string', _('Unknown'))
                 col = gtk.TreeViewColumn(string, renderer)
                 col.name = None
+                col.set_visible(not node_attrs.get('tree_invisible', False))
 
                 label = gtk.Label(string)
                 label.show()
@@ -606,6 +606,7 @@ class Binary(Char):
         self.renderer.connect('open', self.open_binary)
         self.renderer.connect('save', self.save_binary)
         self.renderer.connect('clear', self.clear_binary)
+        self.last_open_file = None
 
     def get_textual_value(self, record):
         pass
@@ -617,12 +618,36 @@ class Binary(Char):
     @realized
     def setter(self, column, cell, store, iter):
         record = store.get_value(iter, 0)
-        size = record[self.field_name].get_size(record)
+        field = record[self.field_name]
+        if hasattr(field, 'get_size'):
+            size = field.get_size(record)
+        else:
+            size = len(field.get(record))
         cell.set_property('size', common.humanize(size) if size else '')
 
+        states = ('invisible',)
+        if getattr(self.treeview, 'editable', False):
+            states = ('readonly', 'required', 'invisible')
+
+        field.state_set(record, states=states)
+        invisible = field.get_state_attrs(record).get('invisible', False)
+        cell.set_property('visible', not invisible)
+
+        if getattr(self.treeview, 'editable', False):
+            readonly = self.attrs.get('readonly',
+                field.get_state_attrs(record).get('readonly', False))
+            if invisible:
+                readonly = True
+            cell.set_property('editable', not readonly)
+
     def new_binary(self, renderer, path):
-        filename = file_selection(_('Open...'))
         record, field = self._get_record_field(path)
+        filename = ''
+        if self.last_open_file:
+            last_id, last_filename = self.last_open_file
+            if last_id == record.id:
+                filename = last_filename
+        filename = file_selection(_('Open...'), filename=filename)
         if filename:
             field.set_client(record, open(filename, 'rb').read())
             if self.filename:
@@ -635,17 +660,22 @@ class Binary(Char):
         dtemp = tempfile.mkdtemp(prefix='tryton_')
         record, field = self._get_record_field(path)
         filename_field = record.group.fields.get(self.filename)
-        filename = filename_field.get(record).replace(
-            os.sep, '_').replace(os.altsep or os.sep, '_')
+        filename = filename_field.get(record)
         if not filename:
             return
+        root, ext = os.path.splitext(filename)
+        filename = ''.join([slugify(root), os.extsep, slugify(ext)])
         file_path = os.path.join(dtemp, filename)
         with open(file_path, 'wb') as fp:
-            fp.write(field.get_data(record))
+            if hasattr(field, 'get_data'):
+                fp.write(field.get_data(record))
+            else:
+                fp.write(field.get(record))
         root, type_ = os.path.splitext(filename)
         if type_:
             type_ = type_[1:]
         file_open(file_path, type_)
+        self.last_open_file = (record.id, file_path)
 
     def save_binary(self, renderer, path):
         filename = ''
@@ -657,7 +687,10 @@ class Binary(Char):
             action=gtk.FILE_CHOOSER_ACTION_SAVE)
         if filename:
             with open(filename, 'wb') as fp:
-                fp.write(field.get_data(record))
+                if hasattr(field, 'get_data'):
+                    fp.write(field.get_data(record))
+                else:
+                    fp.write(field.get(record))
 
     def clear_binary(self, renderer, path):
         record, field = self._get_record_field(path)
@@ -889,40 +922,26 @@ class M2M(O2M):
             context=context)
 
 
-class Selection(Char, SelectionMixin):
+class Selection(Char, SelectionMixin, PopdownMixin):
 
     def __init__(self, *args):
         super(Selection, self).__init__(*args)
         self.renderer = CellRendererCombo()
         self.renderer.connect('editing-started', self.editing_started)
         self.init_selection()
-        self.renderer.set_property('model', self.get_model(self.selection))
+        self.renderer.set_property('model', self.get_popdown_model(self.selection)[0])
         self.renderer.set_property('text-column', 0)
 
-    def get_model(self, selection):
-        model = gtk.ListStore(gobject.TYPE_STRING)
-        self._selection = {}
-        lst = []
-        for (value, name) in selection:
-            name = str(name)
-            lst.append(name)
-            self._selection[name] = value
-            i = model.append()
-            model.set(i, 0, name)
-        return model
-
     def get_textual_value(self, record):
         field = record[self.field_name]
         self.update_selection(record, field)
-        value = record[self.field_name].get(record)
+        value = field.get(record)
         text = dict(self.selection).get(value, '')
         if value and not text:
             text = self.get_inactive_selection(value)
         return text
 
     def value_from_text(self, record, text, callback=None):
-        field = record[self.field_name]
-        field.set_client(record, self._selection.get(text, False))
         if callback:
             callback()
 
@@ -931,19 +950,26 @@ class Selection(Char, SelectionMixin):
         store = self.treeview.get_model()
         record = store.get_value(store.get_iter(path), 0)
         field = record[self.field_name]
+
+        set_value = lambda *a: self.set_value(editable, record, field)
+        editable.child.connect('activate', set_value)
+        editable.child.connect('focus-out-event', set_value)
+        editable.connect('changed', set_value)
+
         self.update_selection(record, field)
-        model = self.get_model(self.selection)
-        editable.set_model(model)
-        # GTK 2.24 and above use a ComboBox instead of a ComboBoxEntry
-        if hasattr(editable, 'set_text_column'):
-            editable.set_text_column(0)
-        completion = gtk.EntryCompletion()
-        #Only available in PyGTK 2.6 and above.
-        if hasattr(completion, 'set_inline_selection'):
-            completion.set_inline_selection(True)
-        completion.set_model(model)
-        editable.get_child().set_completion(completion)
-        completion.set_text_column(0)
+        self.set_popdown(self.selection, editable)
+
+        value = field.get(record)
+        if not self.set_popdown_value(editable, value):
+            self.get_inactive_selection(value)
+            self.set_popdown_value(editable, value)
+        return False
+
+    def set_value(self, editable, record, field):
+        value = self.get_popdown_value(editable)
+        if 'relation' in self.attrs and value:
+            value = (value, editable.get_active_text())
+        field.set_client(record, value)
         return False
 
 
@@ -954,16 +980,17 @@ class Reference(Char, SelectionMixin):
         super(Reference, self).__init__(field_name, model_name, treeview,
             attrs=attrs, renderer=renderer)
         self.init_selection()
-        self._selection = dict(self.selection)
 
     def get_textual_value(self, record):
-        value = record[self.field_name].get_client(record)
+        field = record[self.field_name]
+        self.update_selection(record, field)
+        value = field.get_client(record)
         if not value:
             model, name = '', ''
         else:
             model, name = value
         if model:
-            return self._selection.get(model, model) + ',' + name
+            return dict(self.selection).get(model, model) + ',' + name
         else:
             return name
 
diff --git a/tryton/gui/window/view_form/view/screen_container.py b/tryton/gui/window/view_form/view/screen_container.py
index ec17416..295d7c4 100644
--- a/tryton/gui/window/view_form/view/screen_container.py
+++ b/tryton/gui/window/view_form/view/screen_container.py
@@ -2,9 +2,7 @@
 #this repository contains the full copyright notices and license terms.
 import gtk
 import gettext
-import operator
 import gobject
-import collections
 
 import tryton.common as common
 from tryton.common.domain_parser import quote
@@ -63,6 +61,8 @@ class Selection(gtk.ScrolledWindow):
     def get_value(self):
         values = []
         model, paths = self.treeview.get_selection().get_selected_rows()
+        if not paths:
+            return
         for path in paths:
             iter_ = model.get_iter(path)
             values.append(model.get_value(iter_, 0))
@@ -102,11 +102,9 @@ class ScreenContainer(object):
         self.completion = gtk.EntryCompletion()
         self.completion.set_model(gtk.ListStore(str))
         self.completion.set_text_column(0)
-        self.completion.props.inline_completion = True
-        if hasattr(self.completion.props, 'inline_selection'):
-            self.completion.props.inline_selection = True
-        if hasattr(self.completion.props, 'popup_set_width'):
-            self.completion.props.popup_set_width = False
+        self.completion.props.inline_selection = True
+        self.completion.props.popup_set_width = False
+        self.completion.set_match_func(lambda *a: True)
         self.completion.connect('match-selected', self.match_selected)
         self.search_entry.connect('activate', self.activate)
         self.search_entry.set_completion(self.completion)
@@ -350,6 +348,8 @@ class ScreenContainer(object):
 
     def match_selected(self, completion, model, iter):
         def callback():
+            if not self.search_entry.props.window:
+                return
             self.update()
             self.search_entry.emit('changed')
         gobject.idle_add(callback)
@@ -366,8 +366,12 @@ class ScreenContainer(object):
             self.search_entry.grab_focus()
 
     def key_press(self, widget, event):
-        gobject.idle_add(self.update)
-        gobject.idle_add(self.bookmark_match)
+        def keypress():
+            if not self.search_entry.props.window:
+                return
+            self.update()
+            self.bookmark_match()
+        gobject.idle_add(keypress)
 
     def icon_press(self, widget, icon_pos, event):
         if icon_pos == 1:
@@ -406,13 +410,13 @@ class ScreenContainer(object):
             text = ''
             for label, entry in self.search_table.fields:
                 if isinstance(entry, gtk.ComboBox):
-                    value = quote(entry.get_active_text())
+                    value = quote(entry.get_active_text()) or None
                 elif isinstance(entry, (Dates, Selection)):
                     value = entry.get_value()
                 else:
-                    value = quote(entry.get_text())
-                if value:
-                    text += label + ' ' + value + ' '
+                    value = quote(entry.get_text()) or None
+                if value is not None:
+                    text += quote(label) + ': ' + value + ' '
             self.set_text(text)
             self.last_search_text = self.get_text()
             self.do_search()
@@ -430,16 +434,11 @@ class ScreenContainer(object):
             self.search_window.set_title('Tryton')
             self.search_window.set_icon(TRYTON_ICON)
             self.search_window.set_decorated(False)
-            if hasattr(self.search_window, 'set_deletable'):
-                self.search_window.set_deletable(False)
+            self.search_window.set_deletable(False)
             self.search_window.connect('key-press-event', key_press)
             vbox = gtk.VBox()
             fields = [f for f in self.screen.domain_parser.fields.itervalues()
                 if f.get('searchable', True)]
-            if (not hasattr(collections, 'OrderedDict')
-                    or not isinstance(self.screen.domain_parser.fields,
-                        collections.OrderedDict)):
-                fields.sort(key=operator.itemgetter('string'))
             self.search_table = gtk.Table(rows=len(fields), columns=2)
             self.search_table.set_homogeneous(False)
             self.search_table.set_border_width(5)
@@ -481,11 +480,12 @@ class ScreenContainer(object):
                     entry.connect('activate', lambda *a: search())
                 self.search_table.attach(entry, 1, 2, i, i + 1,
                     yoptions=yoptions)
-                self.search_table.fields.append((field['string'] + ':', entry))
+                self.search_table.fields.append((field['string'], entry))
 
             scrolled = gtk.ScrolledWindow()
             scrolled.add_with_viewport(self.search_table)
             scrolled.set_shadow_type(gtk.SHADOW_NONE)
+            scrolled.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
             vbox.pack_start(scrolled, expand=True, fill=True)
             find_button = gtk.Button(_('Find'))
             find_button.connect('clicked', lambda *a: search())
@@ -500,26 +500,19 @@ class ScreenContainer(object):
             self.search_window.add(vbox)
             vbox.show_all()
 
-            # Disable scrolling:
-            scrolled.set_policy(gtk.POLICY_NEVER, gtk.POLICY_NEVER)
-            # See what changed:
-            new_size = self.search_window.size_request()
-            # Reenable scrolling:
-            scrolled.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+            new_size = map(sum, zip(self.search_table.size_request(),
+                    scrolled.size_request()))
             self.search_window.set_default_size(*new_size)
 
         parent = button.get_toplevel()
-        button_x, button_y = button.translate_coordinates(parent,
-            *parent.window.get_origin())
+        button_x, button_y = button.translate_coordinates(parent, 0, 0)
         button_allocation = button.get_allocation()
 
-        # Resize the window to not be out of the screen
+        # Resize the window to not be out of the parent
         width, height = self.search_window.get_default_size()
-        screen = self.search_window.get_screen()
-        screen_width = screen.get_width()
-        screen_height = screen.get_height()
-        delta_width = screen_width - (button_x + width)
-        delta_height = screen_height - (button_y + button_allocation.height
+        allocation = parent.get_allocation()
+        delta_width = allocation.width - (button_x + width)
+        delta_height = allocation.height - (button_y + button_allocation.height
             + height)
         if delta_width < 0:
             width += delta_width
@@ -528,8 +521,8 @@ class ScreenContainer(object):
         self.search_window.resize(width, height)
 
         # Move the window under the button
-        self.search_window.move(button_x,
-            button_y + button_allocation.height)
+        x, y = button.window.get_origin()
+        self.search_window.move(x, y + button_allocation.height)
 
         from tryton.gui.main import Main
         page = Main.get_main().get_page()
diff --git a/tryton/gui/window/win_export.py b/tryton/gui/window/win_export.py
index 636df5e..c70164e 100644
--- a/tryton/gui/window/win_export.py
+++ b/tryton/gui/window/win_export.py
@@ -241,7 +241,8 @@ class WinExport(NoModal):
 
     def _get_fields(self, model):
         try:
-            return RPCExecute('model', model, 'fields_get', None)
+            return RPCExecute('model', model, 'fields_get', None,
+                context=self.context)
         except RPCException:
             return ''
 
@@ -279,17 +280,19 @@ class WinExport(NoModal):
     def fill_predefwin(self):
         try:
             export_ids = RPCExecute('model', 'ir.export', 'search',
-                [('resource', '=', self.model)], 0, None, None)
+                [('resource', '=', self.model)], 0, None, None,
+                context=self.context)
         except RPCException:
             return
         try:
             exports = RPCExecute('model', 'ir.export', 'read', export_ids,
-                None)
+                None, context=self.context)
         except RPCException:
             return
         try:
             lines = RPCExecute('model', 'ir.export.line', 'read',
-                sum((x['export_fields'] for x in exports), []), None)
+                sum((x['export_fields'] for x in exports), []), None,
+                context=self.context)
         except RPCException:
             return
         id2lines = {}
@@ -319,7 +322,7 @@ class WinExport(NoModal):
                     'export_fields': [('create', [{
                                         'name': x,
                                         } for x in fields])],
-                    }])
+                    }], context=self.context)
         except RPCException:
             return
         self.predef_model.append((
@@ -337,7 +340,8 @@ class WinExport(NoModal):
             return None
         export_id = model.get_value(i, 0)
         try:
-            RPCExecute('model', 'ir.export', 'delete', [export_id])
+            RPCExecute('model', 'ir.export', 'delete', [export_id],
+                context=self.context)
         except RPCException:
             return
         for i in range(len(self.predef_model)):
@@ -389,8 +393,11 @@ class WinExport(NoModal):
                 iter = self.model2.iter_next(iter)
             action = self.wid_action.get_active()
             self.destroy()
-            result = self.datas_read(self.ids, self.model, fields,
-                    context=self.context)
+            try:
+                result = RPCExecute('model', self.model, 'export_data',
+                    self.ids, fields, context=self.context)
+            except RPCException:
+                result = []
 
             if action == 0:
                 fileno, fname = tempfile.mkstemp('.csv', 'tryton_')
@@ -434,11 +441,3 @@ class WinExport(NoModal):
             common.warning(_("Operation failed!\nError message:\n%s")
                 % (exception.faultCode,), _('Error'))
             return False
-
-    def datas_read(self, ids, model, fields, context=None):
-        try:
-            datas = RPCExecute('model', model, 'export_data', ids, fields,
-                context=context)
-        except RPCException:
-            return []
-        return datas
diff --git a/tryton/gui/window/win_form.py b/tryton/gui/window/win_form.py
index 314bff6..dcfef89 100644
--- a/tryton/gui/window/win_form.py
+++ b/tryton/gui/window/win_form.py
@@ -38,14 +38,15 @@ class WinForm(NoModal):
         self.win.set_position(gtk.WIN_POS_CENTER_ON_PARENT)
         self.win.set_icon(TRYTON_ICON)
         self.win.set_has_separator(False)
-        if hasattr(self.win, 'set_deletable'):
-            self.win.set_deletable(False)
+        self.win.set_deletable(False)
         self.win.connect('close', self.close)
         self.win.connect('response', self.response)
 
         self.accel_group = gtk.AccelGroup()
         self.win.add_accel_group(self.accel_group)
 
+        readonly = self.screen.readonly or self.screen.group.readonly
+
         self.but_ok = None
         self.but_new = None
 
@@ -85,6 +86,7 @@ class WinForm(NoModal):
         title.set_label(self.screen.current_view.title)
         title.set_padding(20, 3)
         title.set_alignment(0.0, 0.5)
+        title.set_size_request(0, -1)  # Allow overflow
         title.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#000000"))
         title.show()
 
@@ -140,7 +142,7 @@ class WinForm(NoModal):
                 self.but_add.add(img_add)
                 self.but_add.set_relief(gtk.RELIEF_NONE)
                 hbox.pack_start(self.but_add, expand=False, fill=False)
-                if not access['read']:
+                if not access['read'] or readonly:
                     self.but_add.set_sensitive(False)
 
                 self.but_remove = gtk.Button()
@@ -153,7 +155,7 @@ class WinForm(NoModal):
                 self.but_remove.add(img_remove)
                 self.but_remove.set_relief(gtk.RELIEF_NONE)
                 hbox.pack_start(self.but_remove, expand=False, fill=False)
-                if not access['read']:
+                if not access['read'] or readonly:
                     self.but_remove.set_sensitive(False)
 
                 hbox.pack_start(gtk.VSeparator(), expand=False, fill=True)
@@ -167,7 +169,7 @@ class WinForm(NoModal):
             self.but_new.add(img_new)
             self.but_new.set_relief(gtk.RELIEF_NONE)
             hbox.pack_start(self.but_new, expand=False, fill=False)
-            if not access['create']:
+            if not access['create'] or readonly:
                 self.but_new.set_sensitive(False)
 
             self.but_del = gtk.Button()
@@ -180,7 +182,7 @@ class WinForm(NoModal):
             self.but_del.add(img_del)
             self.but_del.set_relief(gtk.RELIEF_NONE)
             hbox.pack_start(self.but_del, expand=False, fill=False)
-            if not access['delete']:
+            if not access['delete'] or readonly:
                 self.but_del.set_sensitive(False)
 
             self.but_undel = gtk.Button()
@@ -194,6 +196,8 @@ class WinForm(NoModal):
             self.but_undel.add(img_undel)
             self.but_undel.set_relief(gtk.RELIEF_NONE)
             hbox.pack_start(self.but_undel, expand=False, fill=False)
+            if not access['delete'] or readonly:
+                self.but_undel.set_sensitive(False)
 
             hbox.pack_start(gtk.VSeparator(), expand=False, fill=True)
 
@@ -355,9 +359,10 @@ class WinForm(NoModal):
 
     def _sig_label(self, screen, signal_data):
         name = '_'
+        access = common.MODELACCESS[screen.model_name]
+        readonly = screen.group.readonly
         if signal_data[0] >= 1:
             name = str(signal_data[0])
-            self.but_del.set_sensitive(True)
             if self.domain is not None:
                 self.but_remove.set_sensitive(True)
             if signal_data[0] < signal_data[1]:
@@ -368,8 +373,9 @@ class WinForm(NoModal):
                 self.but_pre.set_sensitive(True)
             else:
                 self.but_pre.set_sensitive(False)
-            self.but_del.set_sensitive(True)
-            self.but_undel.set_sensitive(True)
+            if access['delete'] and not readonly:
+                self.but_del.set_sensitive(True)
+                self.but_undel.set_sensitive(True)
         else:
             self.but_del.set_sensitive(False)
             self.but_undel.set_sensitive(False)
@@ -395,7 +401,9 @@ class WinForm(NoModal):
         validate = False
         cancel_responses = (gtk.RESPONSE_CANCEL, gtk.RESPONSE_DELETE_EVENT)
         self.screen.current_view.set_value()
+        readonly = self.screen.group.readonly
         if (response_id not in cancel_responses
+                and not readonly
                 and self.screen.current_record is not None):
             validate = self.screen.current_record.validate(
                 self.screen.current_view.get_fields())
@@ -421,6 +429,7 @@ class WinForm(NoModal):
                 self.new()
                 return
         if (self.screen.current_record
+                and not readonly
                 and response_id in cancel_responses):
             if (self.screen.current_record.id < 0
                     or self.save_current):
diff --git a/tryton/gui/window/win_import.py b/tryton/gui/window/win_import.py
index dfd4fed..ede68c7 100644
--- a/tryton/gui/window/win_import.py
+++ b/tryton/gui/window/win_import.py
@@ -15,7 +15,7 @@ _ = gettext.gettext
 class WinImport(NoModal):
     "Window import"
 
-    def __init__(self, model):
+    def __init__(self, model, context):
         super(WinImport, self).__init__()
         self.dialog = gtk.Dialog(title=_("Import from CSV"),
             parent=self.parent, flags=gtk.DIALOG_DESTROY_WITH_PARENT)
@@ -166,6 +166,7 @@ class WinImport(NoModal):
         self.dialog.vbox.pack_start(dialog_vbox)
 
         self.model = model
+        self.context = context
         self.fields_data = {}
 
         self.import_csv_file.set_current_folder(CONFIG['client.default_path'])
@@ -230,7 +231,8 @@ class WinImport(NoModal):
 
     def _get_fields(self, model):
         try:
-            return RPCExecute('model', model, 'fields_get', None)
+            return RPCExecute('model', model, 'fields_get', None,
+                context=self.context)
         except RPCException:
             return ''
 
@@ -337,11 +339,9 @@ class WinImport(NoModal):
             }
             self.destroy()
             if csv_data['fname']:
-                return self.import_csv(csv_data, fields, self.model)
-            return False
+                self.import_csv(csv_data, fields, self.model)
         else:
             self.destroy()
-            return False
 
     def import_csv(self, csv_data, fields, model):
         # TODO: make it works with references
@@ -356,20 +356,11 @@ class WinImport(NoModal):
             datas.append([x.decode(csv_data['combo']).encode('utf-8')
                     for x in line])
         try:
-            res = RPCExecute('model', model, 'import_data', fields, datas)
+            count = RPCExecute('model', model, 'import_data', fields, datas,
+                context=self.context)
         except RPCException:
-            return False
-        if res[0] >= 0:
-            if res[0] == 1:
-                common.message(_('%d record imported!') % res[0])
-            else:
-                common.message(_('%d records imported!') % res[0])
+            return
+        if count == 1:
+            common.message(_('%d record imported!') % count)
         else:
-            buf = ''
-            for key, val in res[1].items():
-                buf += ('\t%s: %s\n' % (str(key), str(val)))
-            common.error(_('Importation Error!'),
-                _('Error importing record %(record)s\n'
-                    '%(error_title)s\n\n%(traceback)s') %
-                {'record': buf, 'error_title': res[2], 'traceback': res[3]})
-        return True
+            common.message(_('%d records imported!') % count)
diff --git a/tryton/gui/window/win_search.py b/tryton/gui/window/win_search.py
index cc5e1cb..c8d2026 100644
--- a/tryton/gui/window/win_search.py
+++ b/tryton/gui/window/win_search.py
@@ -107,7 +107,7 @@ class WinSearch(NoModal):
     def response(self, win, response_id):
         res = None
         if response_id == gtk.RESPONSE_OK:
-            res = self.screen.sel_ids_get()
+            res = [r.id for r in self.screen.selected_records]
         elif response_id == gtk.RESPONSE_APPLY:
             self.screen.search_filter(self.screen.screen_container.get_text())
             return
diff --git a/tryton/gui/window/window.py b/tryton/gui/window/window.py
index 41dfc02..c073c6b 100644
--- a/tryton/gui/window/window.py
+++ b/tryton/gui/window/window.py
@@ -21,7 +21,7 @@ class Window(object):
     @staticmethod
     def create(view_ids, model, res_id=False, domain=None,
             context=None, order=None, mode=None, name=False, limit=None,
-            auto_refresh=False, search_value=None, icon=None, tab_domain=None):
+            search_value=None, icon=None, tab_domain=None):
         from tryton.gui import Main
         if context is None:
             context = {}
@@ -30,12 +30,11 @@ class Window(object):
             from form import Form
             win = Form(model, res_id, domain, order=order, mode=mode,
                 view_ids=(view_ids or []), context=context, name=name,
-                limit=limit, auto_refresh=auto_refresh,
-                search_value=search_value, tab_domain=tab_domain)
+                limit=limit, search_value=search_value, tab_domain=tab_domain)
         else:
             from board import Board
             win = Board(model, view_ids and view_ids[0] or None,
-                context=context, name=name, auto_refresh=auto_refresh)
+                context=context, name=name)
         win.icon = icon
         Main.get_main().win_add(win, hide_current=Window.hide_current,
             allow_similar=Window.allow_similar)
diff --git a/tryton/gui/window/wizard.py b/tryton/gui/window/wizard.py
index 869ec06..42d625e 100644
--- a/tryton/gui/window/wizard.py
+++ b/tryton/gui/window/wizard.py
@@ -3,17 +3,16 @@
 import gtk
 import pango
 import gettext
-import socket
 
 from tryton.signal_event import SignalEvent
-import tryton.rpc as rpc
 import tryton.common as common
 from tryton.gui.window.view_form.screen import Screen
 from tryton.gui import Main
-from tryton.exceptions import TrytonServerError, TrytonServerUnavailable
+from tryton.exceptions import TrytonServerError
 from tryton.gui.window.nomodal import NoModal
 from tryton.common.button import Button
-from tryton.common import RPCExecute, RPCException, TRYTON_ICON
+from tryton.common import RPCExecute, RPCException
+from tryton.common import TRYTON_ICON
 _ = gettext.gettext
 
 
@@ -28,6 +27,7 @@ class Wizard(object):
         self.id = None
         self.ids = None
         self.action = None
+        self.action_id = None
         self.direct_print = False
         self.email_print = False
         self.email = False
@@ -46,6 +46,7 @@ class Wizard(object):
     def run(self, action, data, direct_print=False, email_print=False,
             email=None, context=None):
         self.action = action
+        self.action_id = data.get('action_id')
         self.id = data.get('id')
         self.ids = data.get('ids')
         self.model = data.get('model')
@@ -53,84 +54,77 @@ class Wizard(object):
         self.email_print = email_print
         self.email = email
         self.context = context
-        try:
-            result = RPCExecute('wizard', action, 'create')
-        except RPCException:
-            return
-        self.session_id, self.start_state, self.end_state = result
-        self.state = self.start_state
-        self.process()
+
+        def callback(result):
+            try:
+                result = result()
+            except RPCException:
+                return
+            self.session_id, self.start_state, self.end_state = result
+            self.state = self.start_state
+            self.process()
+        RPCExecute('wizard', action, 'create', callback=callback)
 
     def process(self):
         from tryton.action import Action
         if self.__processing or self.__waiting_response:
             return
-        try:
-            self.__processing = True
-            while self.state != self.end_state:
-                ctx = self.context.copy()
-                ctx['active_id'] = self.id
-                ctx['active_ids'] = self.ids
-                ctx['active_model'] = self.model
-                if self.screen:
-                    data = {
-                        self.screen_state: self.screen.get_on_change_value(),
-                        }
-                else:
-                    data = {}
-                try:
-                    result = RPCExecute('wizard', self.action, 'execute',
-                        self.session_id, data, self.state, context=ctx)
-                except RPCException, rpc_exception:
-                    if (not isinstance(rpc_exception.exception,
-                            TrytonServerError)
-                            or not self.screen):
-                        self.state = self.end_state
-                    break
-
-                if 'view' in result:
-                    self.clean()
-                    view = result['view']
-                    self.update(view['fields_view'], view['defaults'],
-                        view['buttons'])
-                    self.screen_state = view['state']
-                    self.__waiting_response = True
-                else:
+        self.__processing = True
+
+        ctx = self.context.copy()
+        ctx['active_id'] = self.id
+        ctx['active_ids'] = self.ids
+        ctx['active_model'] = self.model
+        ctx['action_id'] = self.action_id
+        if self.screen:
+            data = {
+                self.screen_state: self.screen.get_on_change_value(),
+                }
+        else:
+            data = {}
+
+        def callback(result):
+            try:
+                result = result()
+            except RPCException, rpc_exception:
+                if (not isinstance(rpc_exception.exception,
+                        TrytonServerError)
+                        or not self.screen):
                     self.state = self.end_state
+                    self.end()
+                self.__processing = False
+                return
+
+            if 'view' in result:
+                self.clean()
+                view = result['view']
+                self.update(view['fields_view'], view['defaults'],
+                    view['buttons'])
+                self.screen_state = view['state']
+                self.__waiting_response = True
+            else:
+                self.state = self.end_state
 
-                if 'actions' in result:
-                    sensitive_widget = self.widget.get_toplevel()
-                    if not 'view' in result:
-                        self.end()
-                    for action in result['actions']:
-                        Action._exec_action(*action, context=ctx)
-                    if (not 'view' in result
-                            or (action[0]['type'] == 'ir.action.wizard'
-                                and not sensitive_widget.props.sensitive)):
-                        return
-                if self.__waiting_response:
-                    break
+            def execute_actions():
+                for action in result.get('actions', []):
+                    Action._exec_action(*action, context=self.context.copy())
 
             if self.state == self.end_state:
-                self.end()
-        finally:
+                self.end(execute_actions)
+            else:
+                execute_actions()
             self.__processing = False
 
+        RPCExecute('wizard', self.action, 'execute', self.session_id, data,
+            self.state, context=ctx, callback=callback)
+
     def destroy(self):
         if self.screen:
             self.screen.destroy()
-            del self.screen
-        del self.widget
-
-    def end(self):
-        try:
-            RPCExecute('wizard', self.action, 'delete', self.session_id,
-                process_exception=False)
-            if self.action == 'ir.module.module.config_wizard':
-                rpc.context_reload()
-                Main.get_main().sig_win_menu()
-        except (TrytonServerError, socket.error, TrytonServerUnavailable):
-            pass
+
+    def end(self, callback=None):
+        RPCExecute('wizard', self.action, 'delete', self.session_id,
+            process_exception=False, callback=callback)
 
     def clean(self):
         for widget in self.widget.get_children():
@@ -177,6 +171,7 @@ class Wizard(object):
         title.set_label(self.screen.current_view.title)
         title.set_padding(20, 4)
         title.set_alignment(0.0, 0.5)
+        title.set_size_request(0, -1)  # Allow overflow
         title.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#000000"))
         title.show()
 
@@ -275,8 +270,8 @@ class WizardForm(Wizard, SignalEvent):
             self.toolbar_box.remove(toolbar)
         super(WizardForm, self).destroy()
 
-    def end(self):
-        super(WizardForm, self).end()
+    def end(self, callback=None):
+        super(WizardForm, self).end(callback=callback)
         Main.get_main()._win_del(self.widget)
 
     def set_cursor(self):
@@ -295,11 +290,9 @@ class WizardDialog(Wizard, NoModal):
             gtk.DIALOG_DESTROY_WITH_PARENT)
         self.dia.set_position(gtk.WIN_POS_CENTER_ON_PARENT)
         self.dia.set_icon(TRYTON_ICON)
-        if hasattr(self.dia, 'set_deletable'):
-            self.dia.set_deletable(False)
+        self.dia.set_deletable(False)
         self.dia.connect('close', self.close)
         self.dia.connect('response', self.response)
-        self.dia.connect('state-changed', self.state_changed)
 
         self.accel_group = gtk.AccelGroup()
         self.dia.add_accel_group(self.accel_group)
@@ -334,7 +327,7 @@ class WizardDialog(Wizard, NoModal):
         self.dia.show()
         common.center_window(self.dia, self.parent, self.sensible_widget)
 
-    def destroy(self):
+    def destroy(self, action=None):
         super(WizardDialog, self).destroy()
         self.dia.destroy()
         NoModal.destroy(self)
@@ -348,7 +341,7 @@ class WizardDialog(Wizard, NoModal):
             dialog = self.page.dialogs[-1]
         else:
             dialog = self.page
-        if (hasattr(dialog, 'screen')
+        if (getattr(dialog, 'screen', None)
                 and dialog.screen.current_record
                 and self.sensible_widget != main.window):
             if dialog.screen.model_name == self.model:
@@ -357,13 +350,20 @@ class WizardDialog(Wizard, NoModal):
                 # Wizard run from a children record so reload parent record
                 ids = [dialog.screen.current_record.id]
             dialog.screen.reload(ids, written=True)
+            if action:
+                dialog.screen.client_action(action)
 
-    def end(self):
-        super(WizardDialog, self).end()
-        self.destroy()
+    def end(self, callback=None):
+        def end_callback(action):
+            self.destroy(action=action())
+            if callback:
+                callback()
+        super(WizardDialog, self).end(callback=end_callback)
 
     def close(self, widget, event=None):
         widget.emit_stop_by_name('close')
+        if self.end_state in self.states:
+            self.states[self.end_state].clicked()
         return True
 
     def show(self):
@@ -371,7 +371,3 @@ class WizardDialog(Wizard, NoModal):
 
     def hide(self):
         self.dia.hide()
-
-    def state_changed(self, widget, state):
-        if self.dia.props.sensitive and state == gtk.STATE_INSENSITIVE:
-            self.process()
diff --git a/tryton/jsonrpc.py b/tryton/jsonrpc.py
index 5bbe927..9e259e2 100644
--- a/tryton/jsonrpc.py
+++ b/tryton/jsonrpc.py
@@ -13,11 +13,13 @@ import socket
 import gzip
 import StringIO
 import hashlib
-import sys
 import base64
+import threading
+from functools import partial
+from contextlib import contextmanager
 
 __all__ = ["ResponseError", "Fault", "ProtocolError", "Transport",
-    "ServerProxy"]
+    "ServerProxy", "ServerPool"]
 CONNECT_TIMEOUT = 5
 DEFAULT_TIMEOUT = None
 
@@ -47,11 +49,12 @@ def object_hook(dct):
     if '__class__' in dct:
         if dct['__class__'] == 'datetime':
             return datetime.datetime(dct['year'], dct['month'], dct['day'],
-                    dct['hour'], dct['minute'], dct['second'])
+                dct['hour'], dct['minute'], dct['second'], dct['microsecond'])
         elif dct['__class__'] == 'date':
             return datetime.date(dct['year'], dct['month'], dct['day'])
         elif dct['__class__'] == 'time':
-            return datetime.time(dct['hour'], dct['minute'], dct['second'])
+            return datetime.time(dct['hour'], dct['minute'], dct['second'],
+                dct['microsecond'])
         elif dct['__class__'] == 'buffer':
             return buffer(base64.decodestring(dct['base64']))
         elif dct['__class__'] == 'Decimal':
@@ -76,6 +79,7 @@ class JSONEncoder(json.JSONEncoder):
                         'hour': obj.hour,
                         'minute': obj.minute,
                         'second': obj.second,
+                        'microsecond': obj.microsecond,
                         }
             return {'__class__': 'date',
                     'year': obj.year,
@@ -87,6 +91,7 @@ class JSONEncoder(json.JSONEncoder):
                 'hour': obj.hour,
                 'minute': obj.minute,
                 'second': obj.second,
+                'microsecond': obj.microsecond,
                 }
         elif isinstance(obj, buffer):
             return {'__class__': 'buffer',
@@ -228,52 +233,6 @@ class Transport(xmlrpclib.Transport, xmlrpclib.SafeTransport):
         self._connection[1].sock.settimeout(DEFAULT_TIMEOUT)
         return self._connection[1]
 
-    if sys.version_info[:2] <= (2, 6):
-
-        def request(self, host, handler, request_body, verbose=0):
-            h = self.make_connection(host)
-            if verbose:
-                h.set_debuglevel(1)
-
-            self.send_request(h, handler, request_body)
-            self.send_host(h, host)
-            self.send_user_agent(h)
-            self.send_content(h, request_body)
-
-            response = h.getresponse()
-
-            if response.status != 200:
-                raise ProtocolError(
-                    host + handler,
-                    response.status,
-                    response.reason,
-                    response.getheaders()
-                    )
-
-            self.verbose = verbose
-
-            try:
-                sock = h._conn.sock
-            except AttributeError:
-                sock = None
-
-            if response.getheader("Content-Encoding", "") == "gzip":
-                response = gzip.GzipFile(mode="rb",
-                    fileobj=StringIO.StringIO(response.read()))
-                sock = None
-
-            return self._parse_response(response, sock)
-
-        def send_request(self, connection, handler, request_body):
-            xmlrpclib.Transport.send_request(self, connection, handler,
-                request_body)
-            connection.putheader("Accept-Encoding", "gzip")
-
-        def close(self):
-            if self._connection[1]:
-                self._connection[1].close()
-                self._connection = (None, None)
-
 
 class ServerProxy(xmlrpclib.ServerProxy):
     __id = 0
@@ -331,3 +290,43 @@ class ServerProxy(xmlrpclib.ServerProxy):
     def ssl(self):
         return isinstance(self.__transport.make_connection(self.__host),
             httplib.HTTPSConnection)
+
+
+class ServerPool(object):
+
+    def __init__(self, *args, **kwargs):
+        self.ServerProxy = partial(ServerProxy, *args, **kwargs)
+        self._lock = threading.Lock()
+        self._pool = []
+        self._used = {}
+
+    def getconn(self):
+        with self._lock:
+            if self._pool:
+                conn = self._pool.pop()
+            else:
+                conn = self.ServerProxy()
+            self._used[id(conn)] = conn
+            return conn
+
+    def putconn(self, conn):
+        with self._lock:
+            self._pool.append(conn)
+            del self._used[id(conn)]
+
+    def close(self):
+        with self._lock:
+            for conn in self._pool + self._used.values():
+                conn.close()
+
+    @property
+    def ssl(self):
+        for conn in self._pool + self._used.values():
+            return conn.ssl
+        return False
+
+    @contextmanager
+    def __call__(self):
+        conn = self.getconn()
+        yield conn
+        self.putconn(conn)
diff --git a/tryton/pyson.py b/tryton/pyson.py
index 5b7bf46..9f637a5 100644
--- a/tryton/pyson.py
+++ b/tryton/pyson.py
@@ -537,6 +537,31 @@ class DateTime(Date):
             )
 
 
+class Len(PYSON):
+
+    def __init__(self, value):
+        super(Len, self).__init__()
+        if isinstance(value, PYSON):
+            assert value.types().issubset(set([dict, list, str])), \
+                'value must be a dict or a list or a string'
+        else:
+            assert type(value) in [dict, list, str], \
+                'value must be a dict or list or a string'
+        self._value = value
+
+    def pyson(self):
+        return {
+            '__class__': 'Len',
+            'v': self._value,
+            }
+
+    def types(self):
+        return set([int, long])
+
+    @staticmethod
+    def eval(dct, context):
+        return len(dct['v'])
+
 CONTEXT = {
     'Eval': Eval,
     'Not': Not,
@@ -551,4 +576,5 @@ CONTEXT = {
     'In': In,
     'Date': Date,
     'DateTime': DateTime,
+    'Len': Len,
 }
diff --git a/tryton/rpc.py b/tryton/rpc.py
index 4e06a8b..b0af1a4 100644
--- a/tryton/rpc.py
+++ b/tryton/rpc.py
@@ -4,9 +4,8 @@ import httplib
 import logging
 import socket
 import os
-from threading import Semaphore
 from functools import partial
-from tryton.jsonrpc import ServerProxy, Fault
+from tryton.jsonrpc import ServerProxy, ServerPool, Fault
 from tryton.fingerprints import Fingerprints
 from tryton.config import get_config_dir
 from tryton.ipc import Server as IPCServer
@@ -24,8 +23,6 @@ CONTEXT = {}
 _VIEW_CACHE = {}
 _TOOLBAR_CACHE = {}
 _KEYWORD_CACHE = {}
-TIMEZONE = 'utc'
-_SEMAPHORE = Semaphore()
 _CA_CERTS = os.path.join(get_config_dir(), 'ca_certs')
 if not os.path.isfile(_CA_CERTS):
     _CA_CERTS = None
@@ -33,6 +30,8 @@ _FINGERPRINTS = Fingerprints()
 
 ServerProxy = partial(ServerProxy, fingerprints=_FINGERPRINTS,
     ca_certs=_CA_CERTS)
+ServerPool = partial(ServerPool, fingerprints=_FINGERPRINTS,
+    ca_certs=_CA_CERTS)
 
 
 def db_list(host, port):
@@ -79,17 +78,14 @@ def login(username, password, host, port, database):
     _TOOLBAR_CACHE = {}
     _KEYWORD_CACHE = {}
     try:
-        _SEMAPHORE.acquire()
-        try:
-            if CONNECTION is not None:
-                CONNECTION.close()
-            CONNECTION = ServerProxy(host, port, database)
-            logging.getLogger(__name__).info('common.db.login(%s, %s)' %
-                (username, 'x' * 10))
-            result = CONNECTION.common.db.login(username, password)
-            logging.getLogger(__name__).debug(repr(result))
-        finally:
-            _SEMAPHORE.release()
+        if CONNECTION is not None:
+            CONNECTION.close()
+        CONNECTION = ServerPool(host, port, database)
+        logging.getLogger(__name__).info('common.db.login(%s, %s)' %
+            (username, 'x' * 10))
+        with CONNECTION() as conn:
+            result = conn.common.db.login(username, password)
+        logging.getLogger(__name__).debug(repr(result))
     except socket.error:
         _USER = None
         _SESSION = ''
@@ -114,15 +110,13 @@ def logout():
     if IPCServer.instance:
         IPCServer.instance.stop()
     if CONNECTION is not None:
-        _SEMAPHORE.acquire()
         try:
             logging.getLogger(__name__).info('common.db.logout(%s, %s)' %
                 (_USER, _SESSION))
-            CONNECTION.common.db.logout(_USER, _SESSION)
+            with CONNECTION() as conn:
+                conn.common.db.logout(_USER, _SESSION)
         except (Fault, socket.error, httplib.CannotSendRequest):
             pass
-        finally:
-            _SEMAPHORE.release()
         CONNECTION.close()
         CONNECTION = None
     _USER = None
@@ -136,24 +130,6 @@ def logout():
     _KEYWORD_CACHE = {}
 
 
-def context_reload():
-    global CONTEXT, TIMEZONE, _HOST, _PORT
-    try:
-        context = execute('model', 'res.user', 'get_preferences', True, {})
-    except Fault:
-        return
-    CONTEXT = {}
-    for i in context:
-        value = context[i]
-        CONTEXT[i] = value
-        if i == 'timezone':
-            try:
-                connection = ServerProxy(_HOST, _PORT)
-                TIMEZONE = connection.common.server.timezone_get(None, None)
-            except Fault:
-                pass
-
-
 def _execute(blocking, *args):
     global CONNECTION, _USER, _SESSION
     if CONNECTION is None:
@@ -174,18 +150,14 @@ def _execute(blocking, *args):
             key = str(args)
             if key in _KEYWORD_CACHE:
                 return _KEYWORD_CACHE[key]
-    res = _SEMAPHORE.acquire(blocking)
-    if not res:
-        return
     try:
         name = '.'.join(args[:3])
         args = (_USER, _SESSION) + args[3:]
         logging.getLogger(__name__).info('%s%s' % (name, args))
-        result = getattr(CONNECTION, name)(*args)
+        with CONNECTION() as conn:
+            result = getattr(conn, name)(*args)
     except (httplib.CannotSendRequest, socket.error), exception:
         raise TrytonServerUnavailable(*exception.args)
-    finally:
-        _SEMAPHORE.release()
     if not CONFIG['dev']:
         if key and method == 'fields_view_get':
             _VIEW_CACHE[key] = result
diff --git a/tryton/translate.py b/tryton/translate.py
index 909b0e8..7073039 100644
--- a/tryton/translate.py
+++ b/tryton/translate.py
@@ -5,7 +5,7 @@ import os
 import locale
 import gettext
 from version import PACKAGE
-from tryton.config import CURRENT_DIR, PREFIX
+from tryton.config import CURRENT_DIR
 import logging
 import gtk
 import sys
@@ -157,7 +157,7 @@ def setlang(lang=None, locale_dict=None):
     "Set language"
     locale_dir = os.path.join(CURRENT_DIR, 'share/locale')
     if not os.path.isdir(locale_dir):
-        locale_dir = os.path.join(PREFIX, 'share/locale')
+        locale_dir = os.path.join(sys.prefix, 'share/locale')
     if lang:
         encoding = locale.getdefaultlocale()[1]
         if not encoding:
diff --git a/tryton/version.py b/tryton/version.py
index 0158ec3..e46e927 100644
--- a/tryton/version.py
+++ b/tryton/version.py
@@ -1,6 +1,6 @@
 #This file is part of Tryton.  The COPYRIGHT file at the top level of
 #this repository contains the full copyright notices and license terms.
 PACKAGE = "tryton"
-VERSION = "3.0.3"
+VERSION = "3.2.0"
 LICENSE = "GPL-3"
 WEBSITE = "http://www.tryton.org/"
-- 
tryton-client



More information about the tryton-debian-vcs mailing list