diff --git a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/gadget_field_zuite/testSaveAndLoad.zpt b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/gadget_field_zuite/testSaveAndLoad.zpt
index 82c5ba6192f7b41ac76cdc8aad6487a50ef387ee..21beeb8b84fd73b0da868ceab3dce9a8cbc41c85 100644
--- a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/gadget_field_zuite/testSaveAndLoad.zpt
+++ b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/gadget_field_zuite/testSaveAndLoad.zpt
@@ -56,7 +56,7 @@
 <!-- Initialize -->
 <tr>
   <td>waitForElementPresent</td>
-  <td>//input[@title='field_my_description']</td>
+  <td>//textarea[@title='field_my_description']</td>
   <td></td>
 </tr>
 
@@ -64,7 +64,7 @@
 
 <tr>
   <td>type</td>
-  <td>//input[@title='field_my_description']</td>
+  <td>//textarea[@title='field_my_description']</td>
   <td>123</td>
 </tr>
 
@@ -84,14 +84,14 @@
 
 <tr>
   <td>waitForElementPresent</td>
-  <td>//input[@title='field_my_description']</td>
+  <td>//textarea[@title='field_my_description']</td>
   <td></td>
 </tr>
 
 
 <tr>
   <td>verifyValue</td>
-  <td>//input[@title='field_my_description']</td>
+  <td>//textarea[@title='field_my_description']</td>
   <td>123</td>
 </tr>
 
diff --git a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/gadget_field_zuite/testSaveAndLoadMultiline.xml b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/gadget_field_zuite/testSaveAndLoadMultiline.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6ef90a3d1cc1fe280edec5928492662d66350ee7
--- /dev/null
+++ b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/gadget_field_zuite/testSaveAndLoadMultiline.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_bind_names</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_asgns</string> </key>
+                        <value>
+                          <dictionary>
+                            <item>
+                                <key> <string>name_subpath</string> </key>
+                                <value> <string>traverse_subpath</string> </value>
+                            </item>
+                          </dictionary>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>text/html</string> </value>
+        </item>
+        <item>
+            <key> <string>expand</string> </key>
+            <value> <int>0</int> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>testSaveAndLoadMultiline</string> </value>
+        </item>
+        <item>
+            <key> <string>output_encoding</string> </key>
+            <value> <string>utf-8</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <unicode></unicode> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/gadget_field_zuite/testSaveAndLoadMultiline.zpt b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/gadget_field_zuite/testSaveAndLoadMultiline.zpt
new file mode 100644
index 0000000000000000000000000000000000000000..fd84469294fd72e48708299ed1b315bf087be004
--- /dev/null
+++ b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/gadget_field_zuite/testSaveAndLoadMultiline.zpt
@@ -0,0 +1,115 @@
+<html xmlns:tal="http://xml.zope.org/namespaces/tal"
+      xmlns:metal="http://xml.zope.org/namespaces/metal">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Test Gadget Field</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">Test Gadget Field</td></tr>
+</thead><tbody>
+<tal:block metal:use-macro="here/Zuite_CommonTemplate/macros/init" />
+
+ <tr>
+   <td>open</td>
+   <td>${base_url}/bar_module/ListBoxZuite_reset</td>
+   <td></td>
+</tr>
+    
+<tr>
+  <td>assertTextPresent</td>
+  <td>Reset Successfully.</td>
+   <td></td>
+</tr>
+
+<tr>
+  <td>open</td>
+  <td>${base_url}/bar_module/FooModule_createObjects?num:int=1;portal_type=Bar</td>
+  <td></td>
+</tr>
+<tr>
+  <td>assertTextPresent</td>
+  <td>Created Successfully.</td>
+  <td></td>
+</tr>
+
+<tr>
+  <td>open</td>
+  <td>${base_url}/bar_module/Zuite_waitForActivities</td>
+  <td></td>
+</tr>
+<tr>
+  <td>assertTextPresent</td>
+  <td>Done.</td>
+  <td></td>
+</tr>
+
+<tr>
+  <td>open</td>
+  <td>${base_url}/bar_module/0/Bar_viewGadgetField</td>
+  <td></td>
+</tr>
+
+
+
+<!-- Initialize -->
+<tr>
+  <td>waitForElementPresent</td>
+  <td>//textarea[@title='field_my_description']</td>
+  <td></td>
+</tr>
+
+
+
+<tr>
+  <td>type</td>
+  <td>//textarea[@title='field_my_description']</td>
+  <td>123
+456</td>
+</tr>
+
+
+
+<tr>
+  <td>clickAndWait</td>
+  <td>//button[@title='Save']</td>
+  <td></td>
+</tr>
+<tr>
+  <td>verifyPortalStatusMessage</td>
+  <td>Data updated.</td>
+  <td></td>
+</tr>
+
+
+<tr>
+  <td>waitForElementPresent</td>
+  <td>//textarea[@title='field_my_description']</td>
+  <td></td>
+</tr>
+
+
+<tr>
+  <td>verifyValue</td>
+  <td>//textarea[@title='field_my_description']</td>
+  <td>123
+456</td>
+</tr>
+
+ <tr>
+   <td>open</td>
+   <td>${base_url}/bar_module/0/Bar_representDescription</td>
+   <td></td>
+</tr>
+    
+<tr>
+  <td>assertTextPresent</td>
+  <td>'123\n456'</td>
+   <td></td>
+</tr>
+
+
+</tbody></table>
+</body>
+</html>
\ No newline at end of file
diff --git a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/gadget_field_zuite/testSaveAndLoadWithRelationField.zpt b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/gadget_field_zuite/testSaveAndLoadWithRelationField.zpt
index 330ddd2996f11ac4794747af1f61ad3fdf54daee..f3bc1b7f99d7d92c8bcbb7891f734981e6cc0d63 100644
--- a/bt5/erp5_ui_test/PathTemplateItem/portal_tests/gadget_field_zuite/testSaveAndLoadWithRelationField.zpt
+++ b/bt5/erp5_ui_test/PathTemplateItem/portal_tests/gadget_field_zuite/testSaveAndLoadWithRelationField.zpt
@@ -117,7 +117,7 @@
 
 <tr>
   <td>waitForElementPresent</td>
-  <td>//input[@title='field_my_description']</td>
+  <td>//textarea[@title='field_my_description']</td>
   <td></td>
 </tr>
 
@@ -129,7 +129,7 @@
 
 <tr>
   <td>type</td>
-  <td>//input[@title='field_my_description']</td>
+  <td>//textarea[@title='field_my_description']</td>
   <td>relationFieldTest</td>
 </tr>
 
@@ -149,7 +149,7 @@
 
 <tr>
   <td>waitForElementPresent</td>
-  <td>//input[@title='field_my_description']</td>
+  <td>//textarea[@title='field_my_description']</td>
   <td></td>
 </tr>
 
@@ -161,14 +161,14 @@
 
 <tr>
   <td>verifyValue</td>
-  <td>//input[@title='field_my_description']</td>
+  <td>//textarea[@title='field_my_description']</td>
   <td>relationFieldTest</td>
 </tr>
 
 
 <tr>
   <td>type</td>
-  <td>//input[@title='field_my_description']</td>
+  <td>//textarea[@title='field_my_description']</td>
   <td>relationFieldTestSuite</td>
 </tr>
 
@@ -199,7 +199,7 @@
 
 <tr>
   <td>waitForElementPresent</td>
-  <td>//input[@title='field_my_description']</td>
+  <td>//textarea[@title='field_my_description']</td>
   <td></td>
 </tr>
 
@@ -211,7 +211,7 @@
 
 <tr>
   <td>verifyValue</td>
-  <td>//input[@title='field_my_description']</td>
+  <td>//textarea[@title='field_my_description']</td>
   <td>relationFieldTestSuite</td>
 </tr>
 
diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_representDescription.py b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_representDescription.py
new file mode 100644
index 0000000000000000000000000000000000000000..4c9da44c80e0928cb2f58f6da09bc9a594d0a970
--- /dev/null
+++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_representDescription.py
@@ -0,0 +1 @@
+return '%r' % context.getDescription()
diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_representDescription.xml b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_representDescription.xml
new file mode 100644
index 0000000000000000000000000000000000000000..69915b804e6decc83599919a09c9069237399d24
--- /dev/null
+++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_representDescription.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>Script_magic</string> </key>
+            <value> <int>3</int> </value>
+        </item>
+        <item>
+            <key> <string>_bind_names</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>_asgns</string> </key>
+                        <value>
+                          <dictionary>
+                            <item>
+                                <key> <string>name_container</string> </key>
+                                <value> <string>container</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_context</string> </key>
+                                <value> <string>context</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_m_self</string> </key>
+                                <value> <string>script</string> </value>
+                            </item>
+                            <item>
+                                <key> <string>name_subpath</string> </key>
+                                <value> <string>traverse_subpath</string> </value>
+                            </item>
+                          </dictionary>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>_params</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>Bar_representDescription</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField.xml b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField.xml
index 095983a60e0b4ce5dab6d60b5952172e2cafe7f1..c29459a6e7171745dd8bb5f030086616102fd4e3 100644
--- a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField.xml
+++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField.xml
@@ -67,7 +67,10 @@
                 <item>
                     <key> <string>hidden</string> </key>
                     <value>
-                      <list/>
+                      <list>
+                        <string>textarea_validator</string>
+                        <string>stringfield_validator</string>
+                      </list>
                     </value>
                 </item>
                 <item>
diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_description.xml b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_description.xml
index 568ae37ec3b4f14225f54bd083cdb07797ece3fc..5f01704a3e61b53e2dcab2adff57828095072484 100644
--- a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_description.xml
+++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_description.xml
@@ -10,8 +10,9 @@
             <key> <string>delegated_list</string> </key>
             <value>
               <list>
-                <string>title</string>
                 <string>gadget_url</string>
+                <string>title</string>
+                <string>validator_field_id</string>
               </list>
             </value>
         </item>
@@ -71,6 +72,10 @@
                     <key> <string>target</string> </key>
                     <value> <string></string> </value>
                 </item>
+                <item>
+                    <key> <string>title</string> </key>
+                    <value> <string></string> </value>
+                </item>
               </dictionary>
             </value>
         </item>
@@ -86,6 +91,10 @@
                     <key> <string>form_id</string> </key>
                     <value> <string>Base_viewFieldLibrary</string> </value>
                 </item>
+                <item>
+                    <key> <string>gadget_url</string> </key>
+                    <value> <string></string> </value>
+                </item>
                 <item>
                     <key> <string>target</string> </key>
                     <value> <string>Click to edit the target</string> </value>
@@ -94,6 +103,10 @@
                     <key> <string>title</string> </key>
                     <value> <string>Description</string> </value>
                 </item>
+                <item>
+                    <key> <string>validator_field_id</string> </key>
+                    <value> <string>textarea_validator</string> </value>
+                </item>
               </dictionary>
             </value>
         </item>
@@ -108,7 +121,7 @@
       <dictionary>
         <item>
             <key> <string>_text</string> </key>
-            <value> <string>python: field.restrictedTraverse(\'gadget_stringfield.html\').absolute_url()</string> </value>
+            <value> <string>python: field.restrictedTraverse(\'gadget_textareafield.html\').absolute_url()</string> </value>
         </item>
       </dictionary>
     </pickle>
diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_file.xml b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_file.xml
index 8f7886bffc81609d7fdeba88d32d23067bc6c0b8..f4421c09a8eb65dca741e3d892f8e49d4ca20e7d 100644
--- a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_file.xml
+++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_file.xml
@@ -188,6 +188,10 @@
                     <key> <string>title</string> </key>
                     <value> <string>File</string> </value>
                 </item>
+                <item>
+                    <key> <string>validator_field_id</string> </key>
+                    <value> <string>stringfield_validator</string> </value>
+                </item>
               </dictionary>
             </value>
         </item>
diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_language.xml b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_language.xml
index 5a10cd9b43b00ac64908fa40963f142507d820a5..7fd70039618a3000b92b527cd3cbd8b03ef7b008 100644
--- a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_language.xml
+++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_language.xml
@@ -184,6 +184,18 @@
                     <key> <string>js_sandbox</string> </key>
                     <value> <string></string> </value>
                 </item>
+                <item>
+                    <key> <string>max_length</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_linelength</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_lines</string> </key>
+                    <value> <string></string> </value>
+                </item>
                 <item>
                     <key> <string>required</string> </key>
                     <value> <int>0</int> </value>
@@ -192,6 +204,18 @@
                     <key> <string>title</string> </key>
                     <value> <string>Language</string> </value>
                 </item>
+                <item>
+                    <key> <string>unicode</string> </key>
+                    <value> <int>0</int> </value>
+                </item>
+                <item>
+                    <key> <string>validator_field_id</string> </key>
+                    <value> <string>stringfield_validator</string> </value>
+                </item>
+                <item>
+                    <key> <string>whitespace_preserve</string> </key>
+                    <value> <int>0</int> </value>
+                </item>
               </dictionary>
             </value>
         </item>
diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_right.xml b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_right.xml
index 0bc6b7b6fef65811fd53749b425242f7ff9e44a5..20133e3800777d1b80b00c4eb9803fb2259b3d1f 100644
--- a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_right.xml
+++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/my_right.xml
@@ -136,6 +136,10 @@
                     <key> <string>css_class</string> </key>
                     <value> <string></string> </value>
                 </item>
+                <item>
+                    <key> <string>data_url</string> </key>
+                    <value> <int>0</int> </value>
+                </item>
                 <item>
                     <key> <string>default</string> </key>
                     <value> <string></string> </value>
@@ -160,6 +164,10 @@
                     <key> <string>enabled</string> </key>
                     <value> <int>1</int> </value>
                 </item>
+                <item>
+                    <key> <string>external_validator</string> </key>
+                    <value> <string></string> </value>
+                </item>
                 <item>
                     <key> <string>extra</string> </key>
                     <value> <string></string> </value>
@@ -180,6 +188,10 @@
                     <key> <string>title</string> </key>
                     <value> <string>Right</string> </value>
                 </item>
+                <item>
+                    <key> <string>validator_field_id</string> </key>
+                    <value> <string>stringfield_validator</string> </value>
+                </item>
               </dictionary>
             </value>
         </item>
diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/stringfield_validator.xml b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/stringfield_validator.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d6b5bb1db1472ba139b45383c296c124f69acf19
--- /dev/null
+++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/stringfield_validator.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>delegated_list</string> </key>
+            <value>
+              <list/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>stringfield_validator</string> </value>
+        </item>
+        <item>
+            <key> <string>message_values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>external_validator_failed</string> </key>
+                    <value> <string>The input failed the external validator.</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>overrides</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>tales</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string>my_view_mode_title</string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string>Base_viewFieldLibrary</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/textarea_validator.xml b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/textarea_validator.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c0aa03df1bbf016d3d7a88bde617e07d0b67c543
--- /dev/null
+++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/Bar_viewGadgetField/textarea_validator.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>delegated_list</string> </key>
+            <value>
+              <list/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>textarea_validator</string> </value>
+        </item>
+        <item>
+            <key> <string>message_values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>external_validator_failed</string> </key>
+                    <value> <string>The input failed the external validator.</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>overrides</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>tales</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string>my_view_mode_description</string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string>Base_viewFieldLibrary</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_create_manual_dataurl.html.html b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_create_manual_dataurl.html.html
index 09e890dce78cd39ce4fa1e6b860a22c1b246847f..b4294d35b60125361cdde975d4b74ae875d57e75 100644
--- a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_create_manual_dataurl.html.html
+++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_create_manual_dataurl.html.html
@@ -10,7 +10,5 @@
     <script src="gadget_create_manual_dataurl.js" type="text/javascript"></script>
 
   </head>
-  <body>
-    <input type='text'/>
-  </body>
+  <body><input type='text'/></body>
 </html>
\ No newline at end of file
diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_create_manual_dataurl.js.js b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_create_manual_dataurl.js.js
index ea5b96d0976382d5760f712866138200302f1c6e..5e971a0850a6c073e6b5842aca155ef2cfc44ce4 100644
--- a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_create_manual_dataurl.js.js
+++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_create_manual_dataurl.js.js
@@ -4,29 +4,19 @@
   "use strict";
 
   rJS(window)
-    .ready(function (g) {
-      g.props = {};
-    })
-    .ready(function (g) {
-      return g.getElement()
-        .push(function (element) {
-          g.props.element = element;
-        });
-    })
     .declareMethod('render', function (options) {
       var gadget = this;
-      gadget.props.key = options.key || "";
-      gadget.props.element.querySelector('input').value = options.value;
-      gadget.props.element.querySelector('input').title = options.key;
+      gadget.element.querySelector('input').key = options.key || "";
+      gadget.element.querySelector('input').value = options.value;
+      gadget.element.querySelector('input').title = options.key;
     })
 
     .declareMethod('getContent', function () {
-      var input = this.props.element.querySelector('input'),
+      var input = this.element.querySelector('input'),
         form_gadget = this,
         result = {};
       if (input.value) {
-        result[form_gadget.props.key] = "data:text/plain;base64,"
-                                                 + btoa(input.value);
+        result[input.key] = "data:text/plain;base64," + btoa(input.value);
       }
       return result;
     });
diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_stringfield.html.html b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_stringfield.html.html
index 2663d2017774d9fdf0d0028131368e1c886cc8f1..57c3a10abef6266ee257a5b7d5ae534c977669cc 100644
--- a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_stringfield.html.html
+++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_stringfield.html.html
@@ -12,7 +12,5 @@
     <script src="gadget_stringfield.js" type="text/javascript"></script>
 
   </head>
-  <body>
-    <input type='text'/>
-  </body>
+  <body><input type='text'/></body>
 </html>
\ No newline at end of file
diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_stringfield.js.js b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_stringfield.js.js
index 1c58b710256b9818bd1c9581a66eef020b55d29f..c474544f6c5c1b3ac5b6b4a94aff99649539ae11 100644
--- a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_stringfield.js.js
+++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_stringfield.js.js
@@ -4,26 +4,18 @@
   "use strict";
 
   rJS(window)
-    .ready(function (g) {
-      g.props = {};
-    })
-    .ready(function (g) {
-      return g.getElement()
-        .push(function (element) {
-          g.props.element = element;
-        });
-    })
     .declareMethod('render', function (options) {
-      this.props.key = options.key || "";
-      this.props.element.querySelector('input').value = options.value || "";
-      this.props.element.querySelector('input').title = options.key;
+      this.element.firstChild.value = options.value || "";
+      this.element.firstChild.title = options.key;
+      this.element.firstChild.setAttribute('data-name',
+                                           options.key || "");
     })
 
     .declareMethod('getContent', function () {
-      var input = this.props.element.querySelector('input'),
+      var input = this.element.firstChild,
         form_gadget = this,
         result = {};
-      result[form_gadget.props.key] = input.value;
+      result[input.getAttribute('data-name')] = input.value;
       return result;
     });
 
diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_textareafield.html.html b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_textareafield.html.html
new file mode 100644
index 0000000000000000000000000000000000000000..553ffba545e8e492cb4027845d1fb85ffd904261
--- /dev/null
+++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_textareafield.html.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+    <meta name="viewport" content="width=device-width, user-scalable=no" />
+    <title>ERP5 Textareafield</title>
+
+    <!-- renderjs -->
+    <script src="rsvp.js" type="text/javascript"></script>
+    <script src="renderjs.js" type="text/javascript"></script>
+    <!-- custom script -->
+    <script src="gadget_textareafield.js" type="text/javascript"></script>
+
+  </head>
+  <body><textarea></textarea></body>
+</html>
\ No newline at end of file
diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_textareafield.html.xml b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_textareafield.html.xml
new file mode 100644
index 0000000000000000000000000000000000000000..406aa649544e05ab6718a685a382ca092ad1da86
--- /dev/null
+++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_textareafield.html.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="File" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>gadget_textareafield.html</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>text/html</string> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_textareafield.js.js b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_textareafield.js.js
new file mode 100644
index 0000000000000000000000000000000000000000..c474544f6c5c1b3ac5b6b4a94aff99649539ae11
--- /dev/null
+++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_textareafield.js.js
@@ -0,0 +1,22 @@
+/*global window, rJS*/
+/*jslint nomen: true, maxlen:80, indent:2*/
+(function (rJS) {
+  "use strict";
+
+  rJS(window)
+    .declareMethod('render', function (options) {
+      this.element.firstChild.value = options.value || "";
+      this.element.firstChild.title = options.key;
+      this.element.firstChild.setAttribute('data-name',
+                                           options.key || "");
+    })
+
+    .declareMethod('getContent', function () {
+      var input = this.element.firstChild,
+        form_gadget = this,
+        result = {};
+      result[input.getAttribute('data-name')] = input.value;
+      return result;
+    });
+
+}(rJS));
\ No newline at end of file
diff --git a/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_textareafield.js.xml b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_textareafield.js.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fce38274fac55bfd831ac5f6d6476038a8103b05
--- /dev/null
+++ b/bt5/erp5_ui_test/SkinTemplateItem/portal_skins/erp5_ui_test/gadget_textareafield.js.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <global name="File" module="OFS.Image"/>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_Cacheable__manager_id</string> </key>
+            <value> <string>http_cache</string> </value>
+        </item>
+        <item>
+            <key> <string>__name__</string> </key>
+            <value> <string>gadget_textareafield.js</string> </value>
+        </item>
+        <item>
+            <key> <string>content_type</string> </key>
+            <value> <string>application/javascript</string> </value>
+        </item>
+        <item>
+            <key> <string>precondition</string> </key>
+            <value> <string></string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string></string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/product/ERP5Form/GadgetField.py b/product/ERP5Form/GadgetField.py
index 9167ad6243a92f50984fc134ea268e8b4281d9be..ae755ac4597cdb2c60c1f107e35a0735f0db5d71 100644
--- a/product/ERP5Form/GadgetField.py
+++ b/product/ERP5Form/GadgetField.py
@@ -28,7 +28,7 @@ class GadgetWidget(Widget.Widget):
                           required=0)
 
   def render(self, field, key, value, REQUEST, render_prefix=None):
-      return self.render_view(field, value, REQUEST, render_prefix, key)
+    return self.render_view(field, value, REQUEST, render_prefix, key)
 
   def render_view(self, field, value, REQUEST=None, render_prefix=None, key=None):
     kw = {
@@ -56,7 +56,10 @@ class GadgetWidget(Widget.Widget):
 
 class GadgetFieldValidator(Validator.Validator):
 
-    property_names = Validator.Validator.property_names + ['data_url']
+    property_names = Validator.Validator.property_names + [
+      'data_url',
+      'validator_field_id'
+    ]
 
     data_url = fields.CheckBoxField('data_url',
                                 title='Data Url',
@@ -64,8 +67,38 @@ class GadgetFieldValidator(Validator.Validator):
                                   "Checked if gadget return data url."),
                                 default=0)
 
+    validator_field_id = fields.StringField(
+      'validator_field_id',
+      title='Field ID',
+      description= "Field used to validate REQUEST form data.",
+      default="",
+      display_width=40,
+      required=0
+    )
+
+    message_names = Validator.Validator.message_names + ['no_validator']
+
+    no_validator = 'Does not support this operation.'
+
+    def getValidatorField(self, field):
+      """Get an external validator field located in the same form.
+      """
+      field_id = field.id
+      validator_field_id = field.get_value('validator_field_id')
+      if validator_field_id:
+        if field.aq_parent.has_field(validator_field_id,
+                                     include_disabled=1):
+          return field.aq_parent.get_field(validator_field_id,
+                                           include_disabled=1)
+      return None
+
     def validate(self, field, key, REQUEST):
-        value = REQUEST.get(key, None)
+      validator_field = self.getValidatorField(field)
+      if validator_field is None:
+        # not editable if no validator
+        self.raise_error('no_validator', field)
+      else:
+        value = validator_field._validate_helper(key, REQUEST)
         if value is not None:
           if field.get_value('data_url'):
             value=value.split(",")[1]