diff --git a/.gitignore b/.gitignore
index 1df050ab2ada4afcb1ffe416173f550c683c967f..d8c19c05f8c009993afbb291cd421e5c56b55486 100755
--- a/.gitignore
+++ b/.gitignore
@@ -8,6 +8,7 @@ databases/
 errors/
 private/
 sessions/
+static/plugin_ace/
 static/plugin_dbui/dbui-debug.js
 static/plugin_dbui/dbui-min.js
 static/plugin_extjs/
diff --git a/controllers/plugin_dbui.py b/controllers/plugin_dbui.py
index e88fa76b9d8b7ecedbd38da95167b443f95a390f..33671cc979e52f794fa0dbd3b29650369cdca958 100644
--- a/controllers/plugin_dbui.py
+++ b/controllers/plugin_dbui.py
@@ -163,9 +163,12 @@ def debug():
     # css files
     response.files.extend(dbui.get_file_paths(plugin.extjs_css, ext='.css'))
     response.files.extend(dbui.get_file_paths(plugin.dbui_css, ext='.css'))
+    response.files.extend(dbui.get_file_paths(plugin.ace_css, ext='.css'))
     response.files.extend(dbui.get_file_paths(plugin.app_css, ext='.css'))
 
     # debug version of the javascript libraries
+    response.files.extend(dbui.get_file_paths(plugin.ace_libmin, ext='.js'))
+    
     response.files.extend(dbui.get_file_paths(plugin.mathjax_libmin, ext='.js'))
     response.files.extend(dbui.get_file_paths(plugin.extjs_js, ext='.js'))
     response.files.extend(dbui.get_file_paths(plugin.dbui_js, ext='.js'))
@@ -217,9 +220,12 @@ def index():
     # css files
     response.files.extend(dbui.get_file_paths(plugin.extjs_css, ext='.css'))
     response.files.extend(dbui.get_file_paths(plugin.dbui_css, ext='.css'))
+    response.files.extend(dbui.get_file_paths(plugin.ace_css, ext='.css'))
     response.files.extend(dbui.get_file_paths(plugin.app_css, ext='.css'))
 
     # compressed version of the javascript libraries
+    response.files.extend(dbui.get_file_paths(plugin.ace_libmin, ext='.js'))
+
     response.files.extend(dbui.get_file_paths(plugin.mathjax_libmin, ext='.js'))
     response.files.extend(dbui.get_file_paths(plugin.extjs_libmin, ext='.js'))
     response.files.extend(dbui.get_file_paths(plugin.dbui_libmin, ext='.js'))
diff --git a/languages/fr-fr.py b/languages/fr-fr.py
index 9cf0428796bbec89e88520a06d426bbd613457c2..1dab3aab4189e9b60f8ed5a9da17eb4b8ea36328 100644
--- a/languages/fr-fr.py
+++ b/languages/fr-fr.py
@@ -73,6 +73,7 @@
 'publications': 'publications',
 'Publisher': 'Éditeur',
 'publishers': 'éditeur',
+'Python Code': 'Python Code',
 'Ratio': 'Ratio',
 'Report': 'Rapport',
 'Report Numbers': 'Numéro du rapport',
diff --git a/models/db_core.py b/models/db_core.py
index c05efceaf07d22f1d1e9b9db1906962ac17bb7f8..3cd8cb255ec6c5922dff8db76a3877debadd832a 100644
--- a/models/db_core.py
+++ b/models/db_core.py
@@ -167,6 +167,7 @@ db.define_table("new_fields",
     Field("string", "string"),
     Field("list_string", "list:string"),
     Field("dictionary", "json"),
+    Field("python_code", "text"),
     migrate="new_fields.table")
 
 # NOTE: if we remove the json validator its seem to work ?
diff --git a/models/plugin_dbui.py b/models/plugin_dbui.py
index 652eda490ef28dd8242b2e56945448578d21e850..41c5d006af92a9a5f68a57ed1bb5f97a97e63e51 100644
--- a/models/plugin_dbui.py
+++ b/models/plugin_dbui.py
@@ -42,6 +42,9 @@ plugins = PluginManager('dbui',
                         dbui_libmin='static/plugin_dbui/dbui-min.js',
                         dbui_script='static/plugin_dbui/main.js',
                         
+                        ace_libmin='static/plugin_ace/src-min-noconflict/ace.js',
+                        ace_css='static/plugin_ace/css/editor.css',
+                        
                         extjs_css='static/plugin_extjs/resources/css/ext-all.css',
                         extjs_js=['static/plugin_extjs/adapter/ext/ext-base.js',
                                   'static/plugin_extjs/ext-all-debug-w-comments.js'],
diff --git a/models/widgets_fields.py b/models/widgets_fields.py
index 4bbb923db46068bceb2717f626a510d6572ce58a..a23facd81281571529b82a663bb3a1ce01653771 100644
--- a/models/widgets_fields.py
+++ b/models/widgets_fields.py
@@ -20,6 +20,9 @@ fieldsModifier.configure_field('dictionary', dictCfg={"string": "test",
                                                       "float": 0.01,
                                                       "date": "not implemented"})
 
+fieldsModifier.configure_field('python_code', height=120,
+                                              xtype='xaceeditorfield',)
+
 #
 # publications
 #
diff --git a/models/widgets_forms.py b/models/widgets_forms.py
index 0d66efc1b7352b1afbdea1276e02be880f90fdc0..02708d6e01d66dd2f223aafc07e1005573dee4b0 100644
--- a/models/widgets_forms.py
+++ b/models/widgets_forms.py
@@ -32,6 +32,14 @@ formModifier.link_comboboxes(master=virtdb.harvester_selector.id_projects,
                              slave=virtdb.harvester_selector.id_teams,
                              masterHasSlaveData='harvesters')
 
+#
+# new fields
+#
+formModifier = dbui.FormModifier('new_fields')
+formModifier.configure(width=400,
+                       defaults={'width': 270})
+
+
 #
 # Create fieldSet for the publication form
 #
diff --git a/static/plugin_dbui/CHANGELOG b/static/plugin_dbui/CHANGELOG
index bd5d69bae9b07451f795af2b20958523f96c056e..a5e58454bf656218466b836de6511e7ba722d86f 100644
--- a/static/plugin_dbui/CHANGELOG
+++ b/static/plugin_dbui/CHANGELOG
@@ -1,7 +1,7 @@
 --------------------------------- CHANGE LOG ----------------------------------
 
 HEAD
-  - New widget Ext.Form.DictField
+  - New widget Ext.Form.DictField, Ext.form.AceEditorField
 
 0.4.14.1 (Sep 2013)
   - The viewport can open a tab at startup.
diff --git a/static/plugin_dbui/src/editorfield.js b/static/plugin_dbui/src/editorfield.js
new file mode 100644
index 0000000000000000000000000000000000000000..69bb639abeb0911bbf16c96bc139e0f921a265b6
--- /dev/null
+++ b/static/plugin_dbui/src/editorfield.js
@@ -0,0 +1,109 @@
+/**
+ * The AceEditorField is a wrapping of the ACE editor
+ * (http://http://ace.c9.io/#nav=about)
+ *
+ * NOTE: The Ext.form.SliderField is a good example to understand
+ * how to build the custom field.
+ *
+ * The type of this component is xaceeditorfield.
+ *
+ * @extends Ext.form.Field
+ * @version
+ *
+ */
+Ext.namespace('App.form');
+
+/**
+ * @class App.form.AceEditorField
+ *
+ */
+App.form.AceEditorField = Ext.extend(Ext.form.Field, {
+
+    /**
+     * @cfg {integer} fontSize the font size in pixels
+     */
+    fontSize: 10,
+
+    /**
+     * @cfg {string} language the programming language javascript, python, ....
+     */
+    language: 'python',
+
+    /**
+     * @cfg {string} theme
+     */
+    theme: 'crimson_editor',
+
+    /**
+     * private attributes
+     */
+    editor: null,
+
+    /**
+     * private method requests by the component model of ExtJS
+     */
+    beforeDestroy: function () {
+
+        "use strict";
+
+        Ext.destroyMembers(this, 'editor');
+        App.form.AceEditorField.superclass.beforeDestroy.call(this);
+    },
+
+    /**
+     * Return the value of this field
+     */
+    getValue: function () {
+
+        "use strict";
+
+        if (this.editor) {
+            return this.editor.getValue();
+        }
+
+        return undefined;
+    },
+
+    /**
+     * private hanlder to render the editor super seeding the base class method
+     *
+     * @param {Ext.Element} ct The container to render to.
+     * @param {Object} position The position in the container to render to.
+     */
+    onRender: function (ct, position) {
+
+        "use strict";
+
+        App.form.AceEditorField.superclass.onRender.call(this, ct, position);
+
+        this.wrap = this.el.wrap({cls: 'x-form-text'});
+        this.resizeEl = this.positionEl = this.wrap;
+
+        this.editor = ace.edit(this.wrap.id);
+        this.editor.getSession().setMode('ace/mode/' + this.language);
+        this.editor.setFontSize(this.fontSize);
+
+        if (this.theme) {
+            this.editor.setTheme('ace/theme/' + this.theme);
+        }
+    },
+
+    /**
+     * Set the value for this field
+     * @param {Object} value
+     */
+    setValue: function (value) {
+
+        "use strict";
+
+        App.form.AceEditorField.superclass.setValue.call(this, value);
+
+        if (this.editor) {
+            this.editor.setValue(value);
+            this.editor.clearSelection();
+            this.editor.moveCursorTo(0, 0);
+        }
+    }
+});
+
+Ext.reg('xaceeditorfield', App.form.AceEditorField);
\ No newline at end of file