diff --git a/product/ERP5Form/POSBox.py b/product/ERP5Form/POSBox.py
new file mode 100755
index 0000000000000000000000000000000000000000..92f492eae23028c212e0dea303d6d452fbcfbd3b
--- /dev/null
+++ b/product/ERP5Form/POSBox.py
@@ -0,0 +1,291 @@
+##############################################################################
+#
+# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved.
+#                    Mikael Barbero <mikael@emu-france.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsability of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# garantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+##############################################################################
+
+from Products.Formulator import Widget, Validator
+from Products.Formulator.Field import ZMIField
+from Products.Formulator.DummyField import fields
+from Products.ERP5Type.Utils import convertToUpperCase
+from Products.CMFCore.utils import getToolByName
+
+from Products.PageTemplates.PageTemplateFile import PageTemplateFile
+
+from Globals import get_request
+from Products.PythonScripts.Utility import allow_class
+
+from Products.PythonScripts.standard import url_quote_plus
+
+import string
+
+from zLOG import LOG
+
+class POSBoxWidget(Widget.Widget):
+  """
+  A widget that display a point of sales UI.
+  """
+  
+  property_names = Widget.Widget.property_names + [
+    'html_ZPT', \
+    'javascript_ZPT', \
+    'css_ZPT', \
+    'getResourceByReference_ZPT', \
+    'createOrder_script', \
+    'portal_types', \
+    'display_fastResourceEntry', \
+    'portal_type_fastResourceEntry', \
+    'resource_category_fastResourceEntry', \
+    'barcodeStartString', \
+    'pos_layout', \
+    'barcodeStopString', \
+    'display_bgcolor', \
+    'display_txtcolor', \
+    'order_summary_aLine', \
+    'order_summary_anotherLine'
+  ]
+
+  default = fields.StringField(
+                                'default',
+                                title='Default',
+                                description=(
+    "Default value of the text in the widget."),
+                                default="",
+                                required=0)
+
+  html_ZPT = fields.StringField(
+                                'html_ZPT',
+                                title='Page Template for HTML',
+                                description=(
+    "Page Template for generating POSBox UI HTML"),
+                                default="POSBox",
+                                required=1)
+                                
+  javascript_ZPT = fields.StringField(
+                                'javascript_ZPT',
+                                title='Page Template for JavaScript',
+                                description=(
+    "Page Template for generating JavaScript's options"),
+                                default="POSBox_js",
+                                required=1)
+
+  css_ZPT = fields.StringField(
+                                'css_ZPT',
+                                title="Page Template for CSS",
+                                description=(
+      "Page Template for generating dynamic CSS"),
+                                default="POSBox_css",
+                                required=1)
+  
+  getResourceByReference_ZPT = fields.StringField(
+                                'getResourceByReference_ZPT',
+		    		                    title="Page Template for generating resource's XML",
+                                description=(
+    "Page template which generates the XML of the resource when asking for a referencce"),
+                                default="getResourceByReference",
+                                required=1)
+
+  createOrder_script = fields.StringField(
+                                'createOrder_script',
+                                title="Python script for creating the order",
+                                description=(
+    "Python script which create the order from the XML sended by POS"),
+                                default="createOrder",
+                                required=1)
+  
+  display_fastResourceEntry = fields.ListField(
+                                'display_fastResourceEntry',
+                                title='Display Fast Resource Entry Block',
+                                description=(
+    "Is the fast resource entry block displayed ?"),
+                                default='False',
+                                items=['True', 'False'],
+                                size=1,
+                                required=1,
+                                group="Fast Product Entry")
+  
+  portal_type_fastResourceEntry = fields.StringField(
+                                'portal_type_fastResourceEntry',
+                                title='Portal Type of resources',
+                                description=(
+    "What is the portal type of resources in fast resource entry block"),
+                                default='',
+                                required=0,
+                                group="Fast Product Entry")
+                                
+  
+  portal_types = fields.ListTextAreaField(
+                                'portal_types',
+                                title='Portal Types',
+                                description=(
+    "The allowed resource to be requested by reference. Required."),
+                                default=[],
+                                required=1)
+
+  resource_category_fastResourceEntry = fields.StringField(
+                                'resource_category_fastResourceEntry',
+                                title='Top level Resource Category',
+                                description=(
+    "The ProductLine that is a the top level of fast resource entry"),
+                                default='',
+                                required=0,
+                                group="Fast Product Entry")
+  
+  pos_layout = fields.ListField(
+                                'pos_layout',
+                                title='Layout',
+                                description=(
+    "How is the layout organised"),
+                                default='',
+                                items=[
+                                    'Summary of the order on the left' 
+                                    , 'Summary of the order on the right'
+                                  , ],
+                                size=1,
+                                required=1)
+    
+  barcodeStartString = fields.StringField(
+                                'barcodeStartString',
+                                title='Barcode Prefix String',
+                                description=(
+    "The string which is prefixed by the barcode while reading"),
+                                default="#",
+                                required=1,
+                                group="barcode")
+
+  barcodeStopString = fields.StringField(
+                                'barcodeStopString',
+                                title='Barcode Suffix String',
+                                description=(
+    "The string which is prefixed by the barcode while reading"),
+                                default="#",
+                                required=1,
+                                group="barcode")
+
+  display_bgcolor = fields.StringField(
+                                'display_bgcolor',
+                                title='Background color',
+                                description=(
+    "Color in html hex format (#000000 by ex.)"),
+                                default="#ffffcc",
+                                required=0,
+                                group="display area")
+
+  display_txtcolor = fields.StringField(
+                                'display_txtcolor',
+                                title='Text color',
+                                description=(
+    "Color in html hex format (#000000 by ex.)"),
+                                default="#000000",
+                                required=0,
+                                group="display area")
+
+  order_summary_aLine = fields.StringField(
+                                'order_summary_aLine',
+                                title="Order line background color 1",
+                                description=(
+    "Background color of a order line in order summary view"),
+                                default="#e3e3e3",
+                                required=0,
+                                group="order summary")
+    
+  order_summary_anotherLine = fields.StringField(
+                                'order_summary_anotherLine',
+                                title="Order line background color 2",
+                                description=(        
+    "Background color of another order line in order summary view"),
+                                default="#ffffff",
+                                required=0,
+                                group="order summary")
+ 
+  def render(self, field, key, value, REQUEST):
+    """
+      Render point of sales widget.
+    """
+    here = REQUEST['here']
+    page_template = getattr(here,field.get_value("html_ZPT"))
+
+    return "<!-- Generated by render -->\n%s" % page_template()
+
+  def render_css(self, field, key, value, REQUEST):
+    here = REQUEST['here']
+    page_template = getattr(here,field.get_value("css_ZPT"))
+    
+    return "<!-- Generated by render_css  -->\n%s" % page_template(
+        display_txtcolor = field.get_value("display_txtcolor"),
+        display_bgcolor = field.get_value("display_bgcolor"),
+        pos_layout_left = (field.get_value("pos_layout") == 'Summary of the order on the left'),
+        order_summary_aLine = field.get_value("order_summary_aLine"),
+        order_summary_anotherLine = field.get_value("order_summary_anotherLine"),
+        fastResourceEntry_display = field.get_value("display_fastResourceEntry"),
+        )
+
+  def render_javascript(self, field, key, value, REQUEST):
+    here = REQUEST['here']
+    page_template = getattr(here,field.get_value("javascript_ZPT"))
+
+    
+
+    return "<!-- Generated by render_javascript -->\n%s" % page_template(
+        getResourceByReference_ZPT = field.get_value('getResourceByReference_ZPT'),
+        createOrder_script = field.get_value('createOrder_script'),
+        portal_types = "portal_type:list=" + "&portal_type:list=".join([url_quote_plus(x[0]) for x in field.get_value('portal_types')]),
+        barcodeStartString = field.get_value('barcodeStartString'),
+        barcodeStopString = field.get_value('barcodeStopString'),
+        fastResourceEntry_display = field.get_value("display_fastResourceEntry"),
+        portal_type_fastResourceEntry = field.get_value('portal_type_fastResourceEntry'),
+        resource_category_fastResourceEntry = field.get_value('resource_category_fastResourceEntry')
+        ) 
+
+  def render_view(self, field, value):
+    """ 
+      Render point of sales widget
+    """
+    return "<p>Generated by render_view</p>"
+
+class POSBoxValidator(Validator.Validator):
+  """
+    No need to validate POSBox as input is controlled by client side's javascript
+  """
+  property_names = Validator.Validator.property_names
+
+  def validate(self, field, key, REQUEST):
+    return None
+
+POSBoxWidgetInstance = POSBoxWidget()
+POSBoxValidatorInstance = POSBoxValidator()
+
+class POSBox(ZMIField):
+  meta_type = "POSBox"
+
+  widget = POSBoxWidgetInstance
+  validator = POSBoxValidatorInstance
+
+  def render_css(self, value=None, REQUEST=None):
+    return self.widget.render_css(self,'',value,REQUEST)
+
+  def render_javascript(self, value=None, REQUEST=None):
+    return self.widget.render_javascript(self,'',value,REQUEST)
+