diff --git a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSite_createUser.xml b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSite_createUser.xml
new file mode 100644
index 0000000000000000000000000000000000000000..dc7bdea88a420db862ce961f68239655329e6069
--- /dev/null
+++ b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSite_createUser.xml
@@ -0,0 +1,198 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <tuple>
+        <tuple>
+          <string>Products.PythonScripts.PythonScript</string>
+          <string>PythonScript</string>
+        </tuple>
+        <none/>
+      </tuple>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>Python_magic</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>Script_magic</string> </key>
+            <value> <int>3</int> </value>
+        </item>
+        <item>
+            <key> <string>__ac_local_roles__</string> </key>
+            <value>
+              <none/>
+            </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>_body</string> </key>
+            <value> <string>"""\n
+  This script is part of erp5_web.\n
+  It\'s a sample script sceleton  which can be used to create user (Person object) \n
+  for web interface and sets Person\'s details (address, email, assignment and career). \n
+  \n
+  Notes:\n
+    - This script is normally executed by anonymous user with Manager proxy roles which \n
+      you have to turn on after adjusting this script to your needs.\n
+    - this script should be called from respective form which will handle all validation\n
+    - you have to decide if assignment should be opened automatically or \n
+      verified and opened by administrator first\n
+"""\n
+\n
+person_module = context.getPortalObject().person_module\n
+person = person_module.newContent(portal_type = \'Person\', \n
+                                  reference = kw[\'email\'],\n
+                                  default_email_text = kw[\'email\'],\n
+                                  first_name = kw[\'first_name\'], \n
+                                  last_name = kw[\'last_name\'])\n
+# create default career\n
+career = person.newContent(portal_type=\'Career\', \n
+                           id=\'default_career\', \n
+                           group=kw[\'group\'], \n
+                           function=kw[\'function\'], \n
+                           role=\'internal\')\n
+# create assignment\n
+assignment = person.newContent(portal_type=\'Assignment\', \n
+                               group=kw[\'group\'], \n
+                               function=kw[\'function\'], \n
+                               site=kw[\'site\'])\n
+return person\n
+</string> </value>
+        </item>
+        <item>
+            <key> <string>_code</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_filepath</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_owner</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_params</string> </key>
+            <value> <string>**kw</string> </value>
+        </item>
+        <item>
+            <key> <string>_proxy_roles</string> </key>
+            <value>
+              <tuple>
+                <string>Assignor</string>
+                <string>Author</string>
+              </tuple>
+            </value>
+        </item>
+        <item>
+            <key> <string>errors</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>func_code</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="FuncCode" module="Shared.DC.Scripts.Signature"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>co_argcount</string> </key>
+                        <value> <int>0</int> </value>
+                    </item>
+                    <item>
+                        <key> <string>co_varnames</string> </key>
+                        <value>
+                          <tuple>
+                            <string>kw</string>
+                            <string>_getattr_</string>
+                            <string>context</string>
+                            <string>person_module</string>
+                            <string>_getitem_</string>
+                            <string>person</string>
+                            <string>career</string>
+                            <string>assignment</string>
+                          </tuple>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>func_defaults</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>WebSite_createUser</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string>Create web site user</string> </value>
+        </item>
+        <item>
+            <key> <string>warnings</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSite_generatePassword.xml b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSite_generatePassword.xml
new file mode 100644
index 0000000000000000000000000000000000000000..255485ec41e5b31df51fff43da15d7b8c03ac711
--- /dev/null
+++ b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSite_generatePassword.xml
@@ -0,0 +1,230 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <tuple>
+        <tuple>
+          <string>Products.PythonScripts.PythonScript</string>
+          <string>PythonScript</string>
+        </tuple>
+        <none/>
+      </tuple>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>Python_magic</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>Script_magic</string> </key>
+            <value> <int>3</int> </value>
+        </item>
+        <item>
+            <key> <string>__ac_local_roles__</string> </key>
+            <value>
+              <none/>
+            </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>_body</string> </key>
+            <value> <string encoding="cdata"><![CDATA[
+
+"""\n
+  This script is part of erp5_web. It generates a human readable random\n
+  password in the form \'word\'+digits+\'word\'.\n
+  This method can be overloaded on a per Web Site basis by storing a \n
+  different script inside each Web Site.\n
+  \n
+  from http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/410076\n
+\n
+  parameters: number of \'characters\' , number of \'digits\'\n
+  Pradeep Kishore Gowda <pradeep at btbytes.com >\n
+  License : GPL \n
+  Date : 2005.April.15\n
+  Revision 1.2 \n
+  ChangeLog: \n
+  1.1 - fixed typos \n
+  1.2 - renamed functions _apart & _npart to a_part & n_part as zope does not allow functions to \n
+  start with _\n
+"""\n
+\n
+import string, random\n
+vowels = [\'a\',\'e\',\'i\',\'o\',\'u\']\n
+consonants = [a for a in string.ascii_lowercase if a not in vowels]\n
+digits = string.digits\n
+\n
+def a_part(slen):\n
+    ret = \'\'\n
+    for i in range(slen):\t\t\t\n
+        if i%2 ==0:\n
+            randid = random.randint(0,20) #number of consonants\n
+            ret += consonants[randid]\n
+        else:\n
+            randid = random.randint(0,4) #number of vowels\n
+            ret += vowels[randid]\n
+    return ret\n
+\n
+def n_part(slen):\n
+    ret = \'\'\n
+    for i in range(slen):\n
+        randid = random.randint(0,9) #number of digits\n
+        ret += digits[randid]\n
+    return ret\n
+\n
+fpl = alpha/2\t\t\n
+if alpha % 2 :\n
+    fpl = int(alpha/2) + 1 \t\t\t\t\t\n
+lpl = alpha - fpl\t\n
+\n
+start = a_part(fpl)\n
+mid = n_part(numeric)\n
+end = a_part(lpl)\n
+newpass = "%s%s%s" % (start,mid,end)\n
+return newpass\n
+
+
+]]></string> </value>
+        </item>
+        <item>
+            <key> <string>_code</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_filepath</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_owner</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_params</string> </key>
+            <value> <string>alpha=6, numeric=2</string> </value>
+        </item>
+        <item>
+            <key> <string>errors</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+        <item>
+            <key> <string>func_code</string> </key>
+            <value>
+              <object>
+                <klass>
+                  <global name="FuncCode" module="Shared.DC.Scripts.Signature"/>
+                </klass>
+                <tuple/>
+                <state>
+                  <dictionary>
+                    <item>
+                        <key> <string>co_argcount</string> </key>
+                        <value> <int>2</int> </value>
+                    </item>
+                    <item>
+                        <key> <string>co_varnames</string> </key>
+                        <value>
+                          <tuple>
+                            <string>alpha</string>
+                            <string>numeric</string>
+                            <string>string</string>
+                            <string>random</string>
+                            <string>vowels</string>
+                            <string>append</string>
+                            <string>$append0</string>
+                            <string>_getiter_</string>
+                            <string>_getattr_</string>
+                            <string>a</string>
+                            <string>consonants</string>
+                            <string>digits</string>
+                            <string>a_part</string>
+                            <string>n_part</string>
+                            <string>fpl</string>
+                            <string>int</string>
+                            <string>lpl</string>
+                            <string>start</string>
+                            <string>mid</string>
+                            <string>end</string>
+                            <string>newpass</string>
+                          </tuple>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>func_defaults</string> </key>
+            <value>
+              <tuple>
+                <int>6</int>
+                <int>2</int>
+              </tuple>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>WebSite_generatePassword</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string>Generate human readable random password</string> </value>
+        </item>
+        <item>
+            <key> <string>warnings</string> </key>
+            <value>
+              <tuple/>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSite_login.xml b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSite_login.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5e9e58d8b8625536bc00dd2bc6454f676a5ee719
--- /dev/null
+++ b/bt5/erp5_web/SkinTemplateItem/portal_skins/erp5_web/WebSite_login.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <tuple>
+        <tuple>
+          <string>Products.PageTemplates.ZopePageTemplate</string>
+          <string>ZopePageTemplate</string>
+        </tuple>
+        <none/>
+      </tuple>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>__ac_local_roles__</string> </key>
+            <value>
+              <none/>
+            </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_subpath</string> </key>
+                                <value> <string>traverse_subpath</string> </value>
+                            </item>
+                          </dictionary>
+                        </value>
+                    </item>
+                  </dictionary>
+                </state>
+              </object>
+            </value>
+        </item>
+        <item>
+            <key> <string>_owner</string> </key>
+            <value>
+              <none/>
+            </value>
+        </item>
+        <item>
+            <key> <string>_text</string> </key>
+            <value> <string encoding="cdata"><![CDATA[
+
+<tal:block tal:condition="here/portal_skins/updateSkinCookie | nothing"\n
+           tal:define="dummy here/setupCurrentSkin;" />\n
+<tal:block tal:define="response request/RESPONSE;\n
+                       mtool here/portal_membership;\n
+                       isAnon mtool/isAnonymousUser|nothing;">\n
+  <tal:block tal:condition="isAnon">\n
+    <tal:block tal:define="dummy python: response.expireCookie(\'__ac\', path=\'/\');\n
+                           url python: \'%s?came_from=%s&portal_status_message=%s\' % (request[\'came_from\'], request[\'came_from\'], here.getPortalObject().Localizer.translate(\'ui\', \'Sorry,+the+email+adress and/or+the+password+that+you+provided+are+incorrect.\'));\n
+                           dummy python: response.redirect(url);"/>\n
+  </tal:block>\n
+  <tal:block tal:condition="not: isAnon">\n
+    <tal:block tal:define="came_from python: \'%s/group_section\' % request.get(\'came_from\') or here.portal_url() + \'/view\';\n
+                           dummy python: response.redirect(came_from);" />\n
+  </tal:block>\n
+</tal:block>
+
+]]></string> </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>WebSite_login</string> </value>
+        </item>
+        <item>
+            <key> <string>title</string> </key>
+            <value> <string>Login Page Template used by login and resitration main page</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>