diff --git a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/Base_viewKnowledgePadMacroLibrary.xml b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/Base_viewKnowledgePadMacroLibrary.xml
index a9b13a0c97011a1c2add6cb97d6927962a2175a8..292bae0d5d1dcd02be6a3caf6e45394587464d39 100644
--- a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/Base_viewKnowledgePadMacroLibrary.xml
+++ b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/Base_viewKnowledgePadMacroLibrary.xml
@@ -37,27 +37,25 @@
             <value> <unicode encoding="cdata"><![CDATA[
 
 <tal:block metal:define-macro="global_definitions">\n
-  <tal:block  \n
-    tal:define="global mode python: options.get(\'mode\', request.get(\'gadget_mode\', \'erp5_front\'));\n
-                global default_pad_group python: options.get(\'default_pad_group\', request.get(\'gadget_default_pad_group\', \'\'));\n
-                global default_pad_group python: test(default_pad_group!=\'\', context.WebSection_getDefaultPadGroup(default_pad_group), default_pad_group);\n
-                kw python: dict(mode=mode, default_pad_group=default_pad_group);\n
-                global isAnonymousKnowledgePadUsed python: options.get(\'use_anonymous_knowledge_pad\',request.get(\'use_anonymous_knowledge_pad\', False));\n
-                dummy python: request.set(\'is_anonymous_knowledge_pad_used\', isAnonymousKnowledgePadUsed);\n
-                struct python: here.ERP5Site_getActiveKnowledgePadForUser(**kw);\n
-                global active_knowledge_pad python: struct[0];\n
-                global knowledge_pads python: struct[1];\n
-                global columns python: options.get(\'columns\', 3);\n
-                global hasUserActivity python:  here.ERP5Site_hasUserActivity(active_knowledge_pad, **kw);\n
-                global isAnon python: here.portal_membership.isAnonymousUser();\n
-                global waitForActivitiesOnServer python: active_knowledge_pad is None and hasUserActivity;\n
-                global isUserAllowedToCreateKnowledgePads context/Base_isUserAllowedToUseKnowledgePad;\n
-                global isKnowledgePadTemplateUsed python: request.get(\'is_knowledge_pad_template_used\', 0);               \n
-                global createDefaultPadForUser python: options.get(\'create_default_pad\', False) and \n
-                                                         len(knowledge_pads)==0 and not hasUserActivity;\n
-                global make_security_check python: options.get(\'make_security_check\', False);\n
-                global pad_column python: options.get(\'pad_column\', 0);\n
-                global cancel_url here/absolute_url;"></tal:block>\n
+  <tal:block define="\n
+    global mode options/mode | request/gadget_mode | string:erp5_front;\n
+    global default_pad_group options/default_pad_group | request/gadget_default_pad_group | string:;\n
+    global default_pad_group python: default_pad_group and context.WebSection_getDefaultPadGroup(default_pad_group);\n
+    global isAnonymousKnowledgePadUsed options/use_anonymous_knowledge_pad | python: request.get(\'use_anonymous_knowledge_pad\', False);\n
+    dummy python: request.set(\'is_anonymous_knowledge_pad_used\', isAnonymousKnowledgePadUsed);\n
+    struct python: here.ERP5Site_getActiveKnowledgePadForUser(mode=mode,\n
+      default_pad_group=default_pad_group or None,\n
+      create_default_pad=options.get(\'create_default_pad\', False));\n
+    global active_knowledge_pad python: struct[0];\n
+    global knowledge_pads python: struct[1];\n
+    global columns python: options.get(\'columns\', 3);\n
+    global isAnon python: here.portal_membership.isAnonymousUser();\n
+    global isUserAllowedToCreateKnowledgePads context/Base_isUserAllowedToUseKnowledgePad;\n
+    global isKnowledgePadTemplateUsed python: request.get(\'is_knowledge_pad_template_used\', 0);\n
+    global make_security_check python: options.get(\'make_security_check\', False);\n
+    global pad_column python: options.get(\'pad_column\', 0);\n
+    global cancel_url here/absolute_url;\n
+    " />\n
 </tal:block>\n
 \n
 <tal:block metal:define-macro="disable_server_integration">\n
@@ -86,15 +84,15 @@
 \n
 </tal:block> \n
 \n
-<tal:block metal:define-macro="add_new_gadget"\n
-           tal:define="active_knowledge_pad_relative_url active_knowledge_pad/getRelativeUrl;">\n
-  <a tal:condition="not: isKnowledgePadTemplateUsed"\n
-     tal:attributes="href string:Base_viewGadgetListDialog?reset=1&amp;cancel_url=${cancel_url}&amp;mode=${mode}&amp;active_pad_relative_url=${active_knowledge_pad_relative_url}"\n
-     title="Add gadgets"\n
-     i18n:domain="ui"\n
-     i18n:attributes="title"\n
-     id="add-gadgets"><span i18n:translate="">Add gadgets</span></a>\n
-</tal:block>\n
+<a metal:define-macro="add_new_gadget"\n
+   tal:condition="python:active_knowledge_pad is not None and not isKnowledgePadTemplateUsed"\n
+   tal:attributes="href string:Base_viewGadgetListDialog?reset=1&amp;cancel_url=${cancel_url}&amp;mode=${mode}&amp;active_pad_relative_url=${active_knowledge_pad/getRelativeUrl}"\n
+   title="Add gadgets"\n
+   i18n:domain="ui"\n
+   i18n:attributes="title"\n
+   id="add-gadgets">\n
+  <span i18n:translate="">Add gadgets</span>\n
+</a>\n
 \n
 <tal:block metal:define-macro="stick">\n
   <tal:block\n
@@ -268,37 +266,6 @@
 </tal:block>\n
 \n
 \n
-<tal:block metal:define-macro="create_default_pad">\n
-  <!-- Create (asynch) default pad. -->\n
-  <div tal:condition="python: not waitForActivitiesOnServer and \n
-                              isUserAllowedToCreateKnowledgePads and\n
-                              createDefaultPadForUser">\n
-    <div class="wait_block">\n
-      <h2 i18n:translate="" i18n:domain="ui"> \n
-        Please wait while your home area is being prepared.\n
-      </h2>\n
-      <p i18n:translate="" i18n:domain="ui"> You will be automatically redirected.</p>\n
-      <script type="text/javascript"\n
-              tal:content="string: createDefaultPadOnServer(5000, \'${default_pad_group}\', \'view\', \'${mode}\');"/>\n
-      </div>\n
-  </div>\n
-</tal:block>\n
-\n
-\n
-<tal:block metal:define-macro="create_default_pad_started">\n
-\n
-  <!-- Show message that default pad is being prepared. -->\n
-  <div tal:condition="python: waitForActivitiesOnServer and isUserAllowedToCreateKnowledgePads">\n
-    <div class="wait_block">\n
-      <h2 i18n:translate="" i18n:domain="ui"> \n
-        Please wait while your home area is being updated.</h2>\n
-      <p i18n:translate="" i18n:domain="ui"> You\'ll be automatically redirected.</p>\n
-      <script type="text/javascript" \n
-              tal:content="string: checkForActivitiesOnServer(5000, \'view\', \'${mode}\', \'${default_pad_group}\');"/>\n
-      </div>\n
-  </div>\n
-</tal:block>\n
-\n
 <tal:block metal:define-macro="loading_message">\n
   <div id="loading-wrapper" style="display:none;">\n
     <img src="ajax-loader.gif" title="Loading" alt="Loading"/>\n
diff --git a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_addNewKnowledgePad.xml b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_addNewKnowledgePad.xml
index 8be714017643486840ae6807d3ab9a0c46610dac..2073e92807b99e3a304cd7e48d4e3536e617419a 100644
--- a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_addNewKnowledgePad.xml
+++ b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_addNewKnowledgePad.xml
@@ -61,8 +61,11 @@ if mode in (\'web_front\', \'web_section\',):\n
 # set it as active\n
 context.ERP5Site_toggleActiveKnowledgePad(pad, mode=mode, redirect=False)\n
 \n
-if redirect_url is not None:\n
-  context.REQUEST.RESPONSE.redirect(\'%s?active_pad_url=%s\' %(redirect_url, pad.getRelativeUrl()))\n
+# See ERP5Site_createDefaultKnowledgePadListForUser\n
+pad.immediateReindexObject()\n
+\n
+if redirect_url:\n
+  return context.REQUEST.RESPONSE.redirect(redirect_url)\n
 else:\n
   # adding is done though either AJAX call or programatically\n
   return pad.getRelativeUrl()\n
diff --git a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_createDefaultKnowledgePadListForUser.xml b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_createDefaultKnowledgePadListForUser.xml
index 578a945ff9b35444c1b356bcfa834ca0fc373e49..c5a7db5a3290835ee114c9c58b53d8b6691bc36d 100644
--- a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_createDefaultKnowledgePadListForUser.xml
+++ b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_createDefaultKnowledgePadListForUser.xml
@@ -50,39 +50,31 @@
         </item>
         <item>
             <key> <string>_body</string> </key>
-            <value> <string>from json import dumps\n
-\n
-knowledge_pad = None\n
+            <value> <string>knowledge_pad = None\n
 portal = context.getPortalObject()\n
 system_pref = context.portal_preferences.getActiveSystemPreference()\n
 user_pref = context.Base_getActiveGlobalKnowledgePadPreference()\n
-tag = \'%s_%s_%s\' %(portal.portal_membership.getAuthenticatedMember(),\n
-                   mode,\n
-                   default_pad_group)\n
-activate_kw = {\'tag\': tag}\n
 \n
 is_web_mode = mode in (\'web_front\', \'web_section\',)\n
+if not is_web_mode:\n
+  # leave only those not having a publication_section\n
+  filter_pad = lambda x: x.getPublicationSection() is None and x.getGroup() is None\n
+elif default_pad_group:\n
+  filter_pad = lambda x: x.getGroup() == default_pad_group\n
+else:\n
+  # find from preferences for the same context(site, section, page)\n
+  filter_pad = lambda x: context in x.getPublicationSectionValueList()\n
+\n
 # try to find template KnowledgePad from System Preference (and user Preference\n
 # for backward compatibility only).\n
 for pref in (system_pref, user_pref):\n
-  if pref is None:\n
-    continue\n
-  # use template from preferences \n
-  pref_pads = pref.contentValues(portal_type=\'Knowledge Pad\')\n
-  if not is_web_mode:\n
-    # leave only those not having a publication_section\n
-    pref_pads = filter(lambda x: x.getPublicationSection() is None and x.getGroup() is None, \n
-                       pref_pads)\n
-  else:\n
-    if default_pad_group in (\'\', None):\n
-      # find from preferences for the same context(site, section, page)\n
-      pref_pads = filter(lambda x: context in x.getPublicationSectionValueList(), \n
-                       pref_pads)\n
+  if pref is not None:\n
+    # use template from preferences\n
+    for pref_pad in pref.objectValues(portal_type=\'Knowledge Pad\'):\n
+      if filter_pad(pref_pad):\n
+        break\n
     else:\n
-      pref_pads = filter(lambda x: x.getGroup()==default_pad_group, \n
-                       pref_pads)\n
-  if len(pref_pads):\n
-    pref_pad = pref_pads[0]\n
+      continue\n
     cp = pref.manage_copyObjects(ids=[pref_pad.getId()])\n
     new_id = context.knowledge_pad_module.manage_pasteObjects(\n
                                    cb_copy_data=cp)[0][\'new_id\']\n
@@ -93,17 +85,16 @@ for pref in (system_pref, user_pref):\n
     # pad\'s visibility is fixed in ERP5Site_toggleActiveKnowledgePad()\n
     for box in knowledge_pad.contentValues(portal_type=\'Knowledge Box\'):\n
       box.visible()\n
-\n
-if knowledge_pad is None:\n
+    break\n
+else:\n
   # created empty one because no template found\n
   knowledge_pad = context.knowledge_pad_module.newContent(\n
                             portal_type = \'Knowledge Pad\',\n
-                            title = context.Base_translateString(\'Tab 1\'),\n
-                            activate_kw = activate_kw)\n
+                            title = context.Base_translateString(\'Tab 1\'))\n
 if is_web_mode:\n
   # in Web Mode we can have a temporary Web Site objects created based on current language\n
   real_context = context.Base_getRealContext()\n
-  if real_context.getPortalType() == \'Web Site\' and default_pad_group in (\'\', None,):\n
+  if real_context.getPortalType() == \'Web Site\' and not default_pad_group:\n
     # script is called within Front Page Gadgets view\n
     knowledge_pad.setPublicationSectionValue(real_context)\n
 \n
@@ -121,14 +112,22 @@ if owner is not None:\n
   knowledge_pad.reindexObject()\n
 \n
 # set default gadgets\n
-context.ERP5Site_createDefaultKnowledgeBox(knowledge_pad, activate_kw=activate_kw)\n
+context.ERP5Site_createDefaultKnowledgeBox(knowledge_pad)\n
+\n
+# Calling immediateReindexObject explicitly is a coding crime.\n
+# But it\'s safe for newly created objects and this script should\n
+# be called rarely enough to not cause any performance issue.\n
+# Any other solution would be more complicated.\n
+# See also ERP5Site_addNewKnowledgePad\n
+knowledge_pad.immediateReindexObject()\n
 \n
-return dumps({\'knowledge_pad_relative_url\': knowledge_pad.getRelativeUrl()})\n
+if REQUEST is None:\n
+  return knowledge_pad\n
 </string> </value>
         </item>
         <item>
             <key> <string>_params</string> </key>
-            <value> <string>default_pad_group=None, mode=None, owner=None</string> </value>
+            <value> <string>default_pad_group=None, mode=None, owner=None, REQUEST=None</string> </value>
         </item>
         <item>
             <key> <string>id</string> </key>
diff --git a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_deleteKnowledgePad.xml b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_deleteKnowledgePad.xml
index 04e86a5bb064488863235cac950ef15cd8f45b84..3546237877a0d587ba55ded7b9e7a92d2438b4f3 100644
--- a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_deleteKnowledgePad.xml
+++ b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_deleteKnowledgePad.xml
@@ -50,42 +50,24 @@
         </item>
         <item>
             <key> <string>_body</string> </key>
-            <value> <string encoding="cdata"><![CDATA[
-
-method_mapping = {\'erp5_front\': \'view\',\n
-                  \'web_front\': \'view\',\n
-                  \'web_section\': \'view\'}\n
-keep_items = {}\n
-pad = context.restrictedTraverse(knowledge_pad_relative_url)\n
-all_knowledge_pads = context.ERP5Site_getKnowledgePadListForUser(mode=mode)\n
-next_active_pad = None\n
-if len(all_knowledge_pads)>1:\n
-  # determine next active pad (first one)\n
-  for item in all_knowledge_pads:\n
-    if item.getObject() != pad:\n
-      next_active_pad = item\n
-      break\n
+            <value> <string>pad = context.restrictedTraverse(knowledge_pad_relative_url)\n
+try:\n
+  # If the current active pad is deleted, activate last one.\n
+  for other_pad in context.ERP5Site_getKnowledgePadListForUser(mode=mode):\n
+    if other_pad != pad:\n
+      if other_pad.getValidationState() != \'invisible\':\n
+        break\n
+      invisible = other_pad\n
+  else:\n
+    invisible.visible()\n
   pad.delete()\n
-  pad.activate(\n
-     after_path = knowledge_pad_relative_url).ERP5Site_toggleActiveKnowledgePad(\n
-                      next_active_pad.getRelativeUrl(),\n
-                      mode = mode,\n
-                      redirect = False)\n
   msg = \'Pad removed.\'\n
-  # pass temporary ids of new_active and deleted pad\n
-  # this will help next view determine them correctly \n
-  # (i.e. overriding inconsistent catalog results)\n
-  keep_items[\'override_catalog\'] = \'%s|%s\' \\\n
-                         %(next_active_pad.getId(), pad.getId())\n
-else:\n
+except UnboundLocalError:\n
   msg = \'Can not remove the only one pad.\'\n
 \n
-keep_items[\'portal_status_message\'] = context.Base_translateString(msg)\n
-context.Base_redirect(method_mapping.get(mode, \'view\'),\n
-                      keep_items)\n
-
-
-]]></string> </value>
+return context.Base_redirect(form_id="view", keep_items={\n
+  "portal_status_message": context.Base_translateString(msg)})\n
+</string> </value>
         </item>
         <item>
             <key> <string>_params</string> </key>
diff --git a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_getActiveKnowledgePadForUser.xml b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_getActiveKnowledgePadForUser.xml
index 13233b6e5ef21cdf20079ff5d6de09b4fd6002c0..18e35c7fb141a635f90f636b28144e78595fd45d 100644
--- a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_getActiveKnowledgePadForUser.xml
+++ b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_getActiveKnowledgePadForUser.xml
@@ -50,56 +50,47 @@
         </item>
         <item>
             <key> <string>_body</string> </key>
-            <value> <string>MARKER = (\'\', None,)\n
-visible_state_list = [\'visible\', \'public\']\n
-\n
-knowledge_pads = context.ERP5Site_getKnowledgePadListForUser(mode=mode,\n
-                                                             default_pad_group=default_pad_group)\n
-# use info from REQUEST\n
-active_pad, knowledge_pads = \\\n
-    context.ERP5Site_getActiveKnowledgePadForUserFromRequest(knowledge_pads,\n
-                                                             \'active_pad_url\')\n
-if active_pad is not None and active_pad.getValidationState() in visible_state_list:\n
-  return active_pad, knowledge_pads\n
-\n
-# use info from REQUEST\n
-active_knowledge_pad, knowledge_pads = \\\n
-     context.ERP5Site_getActiveKnowledgePadForUserFromRequest(knowledge_pads,\n
-                                                              \'override_catalog\')\n
-if active_knowledge_pad is not None:\n
-  return active_knowledge_pad, knowledge_pads\n
-\n
+            <value> <string>knowledge_pads = context.ERP5Site_getKnowledgePadListForUser(\n
+  mode=mode, default_pad_group=default_pad_group)\n
 real_context = context.Base_getRealContext()\n
 real_context_url = real_context.getRelativeUrl()\n
 \n
+visible_pads = [x for x in knowledge_pads\n
+  if x.getValidationState() in (\'visible\', \'public\')]\n
+\n
 # first filter if we have a custom Pad for the context\n
-for knowledge_pad in knowledge_pads:\n
-  pad_state = knowledge_pad.getValidationState()\n
+for knowledge_pad in visible_pads:\n
   publication_section_list = knowledge_pad.getPublicationSectionList()\n
-  if real_context_url in publication_section_list and pad_state in visible_state_list:\n
-    if real_context.getPortalType() == \'Web Site\' and default_pad_group in MARKER:\n
+  if real_context_url in publication_section_list:\n
+    if real_context.getPortalType() == \'Web Site\' and not default_pad_group:\n
       # ERP5 Web Site front gadget\n
       return knowledge_pad, knowledge_pads\n
-    elif real_context_url in publication_section_list and knowledge_pad.getGroup() == default_pad_group:\n
+    if knowledge_pad.getGroup() == default_pad_group:\n
       # some Web Section can have a customized EXPLICILY "sticked" Pad\n
       return knowledge_pad, knowledge_pads\n
-  elif len(publication_section_list) == 0 and default_pad_group in MARKER and pad_state in visible_state_list:\n
+  elif not publication_section_list and not default_pad_group:\n
     # ERP5 Site front gadget \n
     return knowledge_pad, knowledge_pads\n
 \n
 # no customized version found for this context so\n
 # try finding pad by group\n
-for knowledge_pad in knowledge_pads:\n
-  if knowledge_pad.getGroup() == default_pad_group and \\\n
-    knowledge_pad.getValidationState() in visible_state_list:\n
-    return knowledge_pad, knowledge_pads\n
+for knowledge_pad in visible_pads:\n
+  if knowledge_pad.getGroup() == default_pad_group:\n
+    break\n
+else:\n
+  if create_default_pad and context.Base_isUserAllowedToUseKnowledgePad():\n
+    knowledge_pad = context.ERP5Site_createDefaultKnowledgePadListForUser(\n
+      default_pad_group=default_pad_group, mode=mode)\n
+    knowledge_pads.append(knowledge_pad)\n
+  else:\n
+    knowledge_pad = None\n
 \n
-return None, knowledge_pads\n
+return knowledge_pad, knowledge_pads\n
 </string> </value>
         </item>
         <item>
             <key> <string>_params</string> </key>
-            <value> <string>mode = None, default_pad_group=None</string> </value>
+            <value> <string>mode = None, default_pad_group=None, create_default_pad=False</string> </value>
         </item>
         <item>
             <key> <string>id</string> </key>
diff --git a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_getActiveKnowledgePadForUserFromRequest.xml b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_getActiveKnowledgePadForUserFromRequest.xml
deleted file mode 100644
index e2c81d8cab9b6d8a03c1553dd95dbf191b7c44d4..0000000000000000000000000000000000000000
--- a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_getActiveKnowledgePadForUserFromRequest.xml
+++ /dev/null
@@ -1,98 +0,0 @@
-<?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>_body</string> </key>
-            <value> <string>"""\n
-  Get active pad from REQUEST and remove old (deleted) pad \n
-  from list of available pads.\n
-  This is done in order to provide an instant view of pads\n
-  without waiting for reindexing to be finished.\n
-"""\n
-if request_variable == \'override_catalog\':\n
-  path_pattern = \'knowledge_pad_module/%s\'\n
-  override_catalog = context.REQUEST.get(request_variable, None)\n
-  if override_catalog is not None:\n
-    new_pad_id, old_pad_id = override_catalog.split(\'|\')\n
-    new_pad = context.restrictedTraverse(path_pattern %new_pad_id, None)\n
-    old_pad = context.restrictedTraverse(path_pattern %old_pad_id, None)\n
-    if new_pad is not None and old_pad is not None:\n
-      # remove old deleted pad\n
-      knowledge_pads = filter(lambda x: x.getObject() != old_pad, knowledge_pads)\n
-      #for pad in knowledge_pads:\n
-      #  if pad.getObject() == old_pad:\n
-      #    #knowledge_pads.remove(pad)\n
-      #    knowledge_pads.pop(pad)\n
-      return new_pad, knowledge_pads\n
-  else:\n
-    return None, knowledge_pads\n
-else:\n
-  active_pad = context.REQUEST.get(request_variable, None)\n
-  if active_pad is not None:\n
-    active_pad = context.restrictedTraverse(active_pad, None)\n
-  return active_pad, knowledge_pads\n
-</string> </value>
-        </item>
-        <item>
-            <key> <string>_params</string> </key>
-            <value> <string>knowledge_pads=[], request_variable=\'override_catalog\'</string> </value>
-        </item>
-        <item>
-            <key> <string>id</string> </key>
-            <value> <string>ERP5Site_getActiveKnowledgePadForUserFromRequest</string> </value>
-        </item>
-        <item>
-            <key> <string>title</string> </key>
-            <value> <string></string> </value>
-        </item>
-      </dictionary>
-    </pickle>
-  </record>
-</ZopeData>
diff --git a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_getKnowledgePadListForUser.xml b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_getKnowledgePadListForUser.xml
index e901465b549927014f5c926bcb62a16e48ea827d..2d3fee7a442cde0dbb3e7ce1a1b94b3867074a51 100644
--- a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_getKnowledgePadListForUser.xml
+++ b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_getKnowledgePadListForUser.xml
@@ -50,85 +50,52 @@
         </item>
         <item>
             <key> <string>_body</string> </key>
-            <value> <string>request = context.REQUEST\n
-isAnon = context.portal_membership.isAnonymousUser()\n
-isAnonymousKnowledgePadUsed = request.get(\'is_anonymous_knowledge_pad_used\', 0);\n
+            <value> <string>portal = context.getPortalObject()\n
 \n
-def filterKnowledgePadListForContext(results, mode, \n
-                                     default_pad_group):\n
+# in Web Mode we can have a temporary object created based on current language, document by reference\n
+real_context_url = context.Base_getRealContext().getRelativeUrl()\n
+if mode == \'web_front\':\n
+  # Web Site must at least one Pad referenced by context\n
+  filter_pad = lambda x: real_context_url in x.getPublicationSectionList() and x.getGroup() is None\n
+elif mode == \'web_section\':\n
+  # Web Sections, Web Pages can "reuse" tabs\n
+  filter_pad = lambda x: real_context_url in x.getPublicationSectionList() or x.getGroup() == default_pad_group\n
+elif mode == \'erp5_front\':\n
+  # leave only those not having a publication_section as \n
+  # this means belonging to root\n
+  filter_pad = lambda x: x.getPublicationSection() is None and x.getGroup() is None\n
+else:\n
+  filter_pad = lambda x: 1\n
+\n
+results = []\n
+def search(container, *states, **kw):\n
   # call getObject() explicitly so that further getter methods do not\n
   # invoke getObject().\n
-  results = [x.getObject() for x in results]\n
-
-  # in Web Mode we can have a temporary object created based on current language, document by reference\n
-  real_context = context.Base_getRealContext()\n
-  real_context_url = real_context.getRelativeUrl()\n
-  if mode == \'erp5_front\':\n
-    # leave only those not having a publication_section as \n
-    # this means belonging to root\n
-    results = filter(lambda x: x.getPublicationSection() is None and \\\n
-                              x.getGroup() is None, results)\n
-  elif mode == \'web_front\':\n
-    # Web Site must at least one Pad referenced by context\n
-    results = filter(lambda x: real_context_url in x.getPublicationSectionList() and \\\n
-                              x.getGroup() is None, results)\n
-  elif mode == \'web_section\':\n
-    # Web Sections, Web Pages can "reuse" tabs\n
-    results = filter(lambda x: real_context_url in x.getPublicationSectionList() or \\\n
-                                x.getGroup() == default_pad_group, results)\n
-  return results\n
-\n
-\n
-kw = {\'portal_type\': \'Knowledge Pad\',\n
-      \'sort_on\': ((\'creation_date\', \'ascending\',),),\n
-      \'limit\': 50,}\n
+  for pad in container.searchFolder(validation_state=states,\n
+                                    portal_type="Knowledge Pad",\n
+                                    sort_on=(("creation_date", "ascending"),),\n
+                                    limit=50, **kw):\n
+    try:\n
+      pad = pad.getObject()\n
+      if filter_pad(pad) and pad.getValidationState() in states:\n
+        results.append(pad)\n
+    except Exception:\n
+      pass\n
 \n
 # first for context\n
-results = context.knowledge_pad_module.searchFolder(\n
-                                validation_state = (\'visible\', \'invisible\',),\n
-                                local_roles = \'Owner\',\n
-                                **kw)\n
-\n
-if len(results)==0 and (isAnon and isAnonymousKnowledgePadUsed):\n
-  # try to get default pads for anonymous users if allowed on site\n
-  results = context.knowledge_pad_module.searchFolder(\n
-                                validation_state = (\'public\',),\n
-                                **kw)\n
-\n
-# use REQUEST to show immediately newly created pad\n
-# without waiting for reindex to be over\n
-active_pad, results = \\\n
-       context.ERP5Site_getActiveKnowledgePadForUserFromRequest(results,\n
-                                                         \'active_pad_url\')\n
-if active_pad is not None and active_pad.getValidationState() != \'deleted\':\n
-  found = False\n
-  new_results = []\n
-  active_pad_path = active_pad.getPath()\n
-  for brain in results:\n
-    new_results.append(brain)\n
-    if brain.getPath() == active_pad_path:\n
-      found = True\n
-  results = new_results\n
-  if not found:\n
-    # append it only if not from Catalog results\n
-    results.append(active_pad)\n
-\n
-# filter\n
-results = filterKnowledgePadListForContext(results, mode, \n
-                                     default_pad_group)\n
-\n
-if not len(results) and not isAnon:\n
-  # try getting default knowledge pads for user from global site preference\n
-  user_pref = context.Base_getActiveGlobalKnowledgePadPreference()\n
-\n
-  if user_pref is not None:\n
-    # use template from user\'s preferences \n
-    results = user_pref.searchFolder(validation_state = (\'public\',),\n
-                                     **kw)\n
-    # filter\n
-    results = filterKnowledgePadListForContext(results, mode, \n
-                                     default_pad_group)\n
-    if len(results):\n
+search(portal.knowledge_pad_module, \'visible\', \'invisible\', local_roles=\'Owner\')\n
+if not results:\n
+  request = portal.REQUEST\n
+  if request.get(\'is_anonymous_knowledge_pad_used\', 1):\n
+    # try to get default pads for anonymous users if allowed on site\n
+    search(portal.knowledge_pad_module, \'public\')\n
+  if not portal.portal_membership.isAnonymousUser():\n
+    # try getting default knowledge pads for user from global site preference\n
+    user_pref = context.Base_getActiveGlobalKnowledgePadPreference()\n
+    if user_pref is not None:\n
+      # use template from user\'s preferences \n
+      search(user_pref, \'public\')\n
+    if results:\n
       # set a REQUEST variable (this can be used in HTML views)\n
       request.set(\'is_knowledge_pad_template_used\', 1)\n
 \n
diff --git a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_hasUserActivity.xml b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_hasUserActivity.xml
deleted file mode 100644
index 9a648b7f6e2fc5917c0b2d753da48a42c5d0bd30..0000000000000000000000000000000000000000
--- a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_hasUserActivity.xml
+++ /dev/null
@@ -1,97 +0,0 @@
-<?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>_body</string> </key>
-            <value> <string>from json import dumps\n
-portal = context.getPortalObject()\n
-\n
-if active_knowledge_pad is None and js_call:\n
-  # only for asynchronous checks\n
-  active_knowledge_pad, knowledge_pads = context.ERP5Site_getActiveKnowledgePadForUser(\n
-                                                   mode=mode, \n
-                                                   default_pad_group=default_pad_group)\n
-\n
-if active_knowledge_pad is None:\n
-  # no pad but it may be reindexed in an activity now, check by tag\n
-  tag = \'%s_%s_%s\' %(portal.portal_membership.getAuthenticatedMember(),\n
-                     mode,\n
-                     default_pad_group)\n
-  is_pending_create_activities  = portal.portal_activities.countMessageWithTag(tag)\n
-  if js_call:\n
-    return str(is_pending_create_activities)\n
-  else:\n
-    return is_pending_create_activities\n
-\n
-# we have an active pad, check if it has pending activities\n
-is_pending_create_activities = active_knowledge_pad.hasActivity()\n
-\n
-if js_call:\n
-  return dumps({\'result\':str(is_pending_create_activities)})\n
-\n
-return is_pending_create_activities\n
-</string> </value>
-        </item>
-        <item>
-            <key> <string>_params</string> </key>
-            <value> <string>active_knowledge_pad=None, mode=None, default_pad_group=None, js_call=0</string> </value>
-        </item>
-        <item>
-            <key> <string>id</string> </key>
-            <value> <string>ERP5Site_hasUserActivity</string> </value>
-        </item>
-        <item>
-            <key> <string>title</string> </key>
-            <value> <string></string> </value>
-        </item>
-      </dictionary>
-    </pickle>
-  </record>
-</ZopeData>
diff --git a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_toggleActiveKnowledgePad.xml b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_toggleActiveKnowledgePad.xml
index 3748c09e5510ed412e6d6bfe0c7cd6cad7b09a25..66da8af5eaae0afeca8fcf09b1578a0b7c6053ba 100644
--- a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_toggleActiveKnowledgePad.xml
+++ b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_toggleActiveKnowledgePad.xml
@@ -65,7 +65,7 @@ if toggable_pad is not None:\n
     if pad.getObject()!=toggable_pad and pad.getValidationState()==\'visible\':\n
       pad.invisible()\n
 if redirect:\n
-  context.Base_redirect(\'view\')\n
+  context.Base_redirect(form_id="view")\n
 </string> </value>
         </item>
         <item>
diff --git a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_viewHomeAreaRenderer.xml b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_viewHomeAreaRenderer.xml
index f8f2d5748faa9c8e0bd82cead16a45ff82d90f18..9716ba750a418788c325f12e3c2605e022ed7379 100644
--- a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_viewHomeAreaRenderer.xml
+++ b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/ERP5Site_viewHomeAreaRenderer.xml
@@ -39,10 +39,6 @@
 <span metal:use-macro="container/Base_viewKnowledgePadMacroLibrary/macros/global_definitions"/>\n
 \n
 <div id="gadget_area_wrapper">\n
-\n
-  <tal:block tal:condition="python: not createDefaultPadForUser and \n
-                                    not waitForActivitiesOnServer and\n
-                                    active_knowledge_pad is not None">\n
 \n
     <tal:block tal:condition="python:not (isAnon or isAnonymousKnowledgePadUsed)"> \n
       <div id="pad-navigation-wrapper">\n
@@ -63,14 +59,6 @@
     </div>\n
     <!-- Hidden dialogs -->\n
     <span metal:use-macro="container/Base_viewKnowledgePadMacroLibrary/macros/hidden_dialogs"/>\n
-      \n
-  </tal:block>\n
-     \n
-  <!-- Show message that default pad is being prepared. -->\n
-  <span metal:use-macro="container/Base_viewKnowledgePadMacroLibrary/macros/create_default_pad_started"/>\n
-\n
-  <!-- Create (asynch) default pad. -->\n
-  <span metal:use-macro="container/Base_viewKnowledgePadMacroLibrary/macros/create_default_pad"/>\n
 \n
 </div>
 
diff --git a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/WebSection_stickKnowledgePad.xml b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/WebSection_stickKnowledgePad.xml
index d44d13e5df16d8636a7e86263682a97ae9318fad..1a316fe6608702e599dde0baf0f028e6431560f5 100644
--- a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/WebSection_stickKnowledgePad.xml
+++ b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/WebSection_stickKnowledgePad.xml
@@ -50,9 +50,7 @@
         </item>
         <item>
             <key> <string>_body</string> </key>
-            <value> <string encoding="cdata"><![CDATA[
-
-knowledge_pad = context.restrictedTraverse(knowledge_pad_url)\n
+            <value> <string>knowledge_pad = context.restrictedTraverse(knowledge_pad_url)\n
 knowledge_pad_module = knowledge_pad.getParentValue()\n
 \n
 # copy/paste\n
@@ -67,21 +65,16 @@ new_knowledge_pad.visible()\n
 \n
 # because workflow state(i.e. visibility is set to default(invisible)\n
 # set manually with respect to original\n
-for original_box in knowledge_pad.contentValues(\n
-                         filter={\'portal_type\':\'Knowledge Box\'}):\n
+for original_box in knowledge_pad.objectValues(portal_type="Knowledge Box"):\n
   destination_box = new_knowledge_pad[original_box.getId()]\n
   if original_box.getValidationState() == \'visible\':\n
     destination_box.visible()\n
   elif original_box.getValidationState() == \'deleted\':\n
     destination_box.delete()\n
 \n
-url = "%s?portal_status_message=%s&active_pad_url=%s"   %(cancel_url, \n
-         context.Base_translateString(\'Sticked.\'), \n
-         new_knowledge_pad.getRelativeUrl())\n
-context.REQUEST.RESPONSE.redirect(url)\n
-
-
-]]></string> </value>
+return context.Base_redirect(cancel_url, keep_items={\n
+  "portal_status_message": context.Base_translateString(\'Sticked.\')})\n
+</string> </value>
         </item>
         <item>
             <key> <string>_params</string> </key>
diff --git a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/WebSection_unStickKnowledgePad.xml b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/WebSection_unStickKnowledgePad.xml
index bea5c23993710a9d7e4ca65b99fe91fd2ba8f3cc..e3f669f779a1841389e4d6c79b33da3bbbd654a1 100644
--- a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/WebSection_unStickKnowledgePad.xml
+++ b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/WebSection_unStickKnowledgePad.xml
@@ -53,9 +53,8 @@
             <value> <string>knowledge_pad = context.restrictedTraverse(knowledge_pad_url)\n
 knowledge_pad.delete()\n
 \n
-url = "%s?portal_status_message=%s"   %(cancel_url, \n
-         context.Base_translateString(\'Unsticked.\'))\n
-context.REQUEST.RESPONSE.redirect(url)\n
+return context.Base_redirect(cancel_url, keep_items={\n
+  "portal_status_message": context.Base_translateString(\'Unsticked.\')})\n
 </string> </value>
         </item>
         <item>
diff --git a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/WebSection_viewKnowledgePadColumn.xml b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/WebSection_viewKnowledgePadColumn.xml
index f199c83dd8beb8bafb9138eea22b44b9b38595bd..bafc96ed9a843eab277a89e2823ed8abc5a0ccbb 100644
--- a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/WebSection_viewKnowledgePadColumn.xml
+++ b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/WebSection_viewKnowledgePadColumn.xml
@@ -44,37 +44,25 @@
                   test(current_web_section.getPortalType()==\'Web Site\', here, current_web_section);\n
               current_web_section_url python: current_web_section.absolute_url();\n
               cancel_url string:${current_web_section_url}/view">\n
-\n
-    <tal:block tal:condition="python: not createDefaultPadForUser and \n
-                                      not waitForActivitiesOnServer and\n
-                                      active_knowledge_pad is not None">\n
 \n
       <span metal:use-macro="container/Base_viewKnowledgePadMacroLibrary/macros/disable_server_integration"/>\n
 \n
-      <div class="portal-column" \n
+      <div class="portal-column"\n
+           tal:condition="python:active_knowledge_pad is not None"\n
            tal:attributes="class python: test(isAnon or isAnonymousKnowledgePadUsed, \n
                                               \'portal-column-undraggable\', \n
                                               \'portal-column\');\n
-                           id python: \'portal-column-%s\' %pad_column"\n
-           tal:define="layout active_knowledge_pad/KnowledgePad_getBoxColumnLayout;">\n
+                           id python: \'portal-column-%s\' %pad_column">\n
 \n
-        <span tal:condition="python: len(layout)>=pad_column+1"\n
-              tal:replace="structure python:\n
+        <tal:block define="layout active_knowledge_pad/KnowledgePad_getBoxColumnLayout"\n
+                   condition="python: len(layout)>=pad_column+1"\n
+                   replace="structure python:\n
                   active_knowledge_pad.KnowledgePad_viewColumnWidget(section_layout=layout[pad_column],  \n
                                                                      real_context=here,\n
                                                                      cancel_url=cancel_url)"/>\n
     </div>\n
 \n
-    </tal:block>\n
-\n
-    <!-- Create (asynch) default pad. -->\n
-    <span metal:use-macro="container/Base_viewKnowledgePadMacroLibrary/macros/create_default_pad"/>\n
-\n
-     <tal:block tal:condition="make_security_check">\n
-       <span metal:use-macro="container/Base_viewKnowledgePadMacroLibrary/macros/knowledge_pad_security_check"/>\n
-    </tal:block>\n
-    \n
-  </tal:block>
+</tal:block>
 
 ]]></unicode> </value>
         </item>
diff --git a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/erp5_knowledge_box.js.xml b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/erp5_knowledge_box.js.xml
index ba51851350c47d1730b0ce06b58a9e8e8cb688c9..edde1218a2d03a0b9def4d80bf08f117df0560ef 100644
--- a/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/erp5_knowledge_box.js.xml
+++ b/bt5/erp5_knowledge_pad/SkinTemplateItem/portal_skins/erp5_knowledge_pad/erp5_knowledge_box.js.xml
@@ -12,7 +12,7 @@
         </item>
         <item>
             <key> <string>_EtagSupport__etag</string> </key>
-            <value> <string>ts67855922.32</string> </value>
+            <value> <string>ts95081712.83</string> </value>
         </item>
         <item>
             <key> <string>__name__</string> </key>
@@ -40,7 +40,6 @@ var is_knowledge_template_used = 0;\n
 var invisible_gadgets={};\n
 \n
 var create_default_knowledge_pad_script_id = "ERP5Site_createDefaultKnowledgePadListForUser";\n
-var check_for_activities_on_server_script_id = "ERP5Site_hasUserActivity";\n
 var knowledge_box_edit_script_id = "KnowledgeBox_baseEdit";\n
 var knowledge_pad_save_layout_script_id = "KnowledgePad_saveBoxColumnLayout";\n
 var knowledge_pad_delete_box_script_id = "KnowledgePad_deleteBox";\n
@@ -55,8 +54,7 @@ function createCustomKnowledgePadOnServer(){\n
   $.ajax({url:create_default_knowledge_pad_script_id, \n
           data:{mode: mode,\n
                 default_pad_group: default_pad_group},\n
-          dataType: "json",\n
-          success:function(data){window.location=cancel_url + "/view?active_pad_url=" + data.knowledge_pad_relative_url;}});\n
+          success:function(data){window.location=cancel_url;}});\n
 }\n
 \n
 function showCreateDefaultKnowledgePadWarningMessage(){\n
@@ -151,30 +149,6 @@ function updater(url, box_relative_url, dom_id, \n
   }\n
 }\n
 \n
-\n
-function checkForActivitiesOnServer(timeout, return_url, mode, default_pad_group){\n
-  /* check if activities are over and refresh current page */\n
-  window.setInterval(\n
-    function () {\n
-      $.ajax({url:check_for_activities_on_server_script_id,\n
-              data: {js_call: 1,\n
-                     mode: mode,\n
-                     default_pad_group: default_pad_group},\n
-              dataType: "json",\n
-              success:  function (data){if(data.result=="False"){window.location=return_url;}}\n
-              });},\n
-    timeout);\n
-}\n
-\n
-function createDefaultPadOnServer(timeout, default_pad_group, return_url, mode){\n
-  /* create default tab on server and then check if \n
-     activities are over and refresh current page */\n
-  $.ajax({url: create_default_knowledge_pad_script_id, \n
-          data: {default_pad_group: default_pad_group,\n
-                 mode: mode},\n
-          success: function(data){checkForActivitiesOnServer(timeout, return_url, mode, default_pad_group);}});\n
-}\n
-\n
 function submitGadgetPreferenceFormOnEnter(event, \n
                                            form_fields_main_prefix, \n
                                            box_relative_url, \n
@@ -511,7 +485,7 @@ $(document).ready(initialize);
         </item>
         <item>
             <key> <string>size</string> </key>
-            <value> <int>19272</int> </value>
+            <value> <int>18130</int> </value>
         </item>
         <item>
             <key> <string>title</string> </key>
diff --git a/product/ERP5/tests/testKM.py b/product/ERP5/tests/testKM.py
index 4805cd0d74e62b364f316c266361765573dd539c..33a714d3bb6930f56fbd96e16bd09fce53c7453b 100644
--- a/product/ERP5/tests/testKM.py
+++ b/product/ERP5/tests/testKM.py
@@ -134,6 +134,8 @@ class TestKM(TestKMMixIn):
                                                        mode = 'web_section')    
     self.web_section_content_knowledge_pad = portal.restrictedTraverse(
                                           self.web_section_content_knowledge_pad_relative_url)
+    self.web_front_knowledge_pad.visible()
+    self.web_section_knowledge_pad.visible()
     self.tic()
     # Publish all knowledge pad gadgets
     for gadget in self.portal.portal_gadgets.objectValues():
@@ -149,8 +151,8 @@ class TestKM(TestKMMixIn):
  
   def test_02(self):
     """ Check Gadgets """
-    portal = self.getPortal()
-    knowledge_pad_module = getattr(portal, 'knowledge_pad_module')
+    portal = self.portal
+    knowledge_pad_module = portal.knowledge_pad_module
     # remove created by login method pads
     knowledge_pad_module.manage_delObjects(list(knowledge_pad_module.objectIds()))
     self.tic()
@@ -422,11 +424,8 @@ class TestKM(TestKMMixIn):
 
   def test_04WebFrontGadgets(self):
     """ Check different Web / KM Gadgets """
-    portal = self.getPortal()
-    request = self.app.REQUEST
-
     # all known so far gadgets 
-    portal_gadgets = portal.portal_gadgets
+    portal_gadgets = self.portal.portal_gadgets
     km_my_tasks_gadget = portal_gadgets.km_my_tasks
     km_my_documents_gadget = portal_gadgets.km_my_documents
     km_my_contacts_gadget = portal_gadgets.km_my_contacts
@@ -439,9 +438,9 @@ class TestKM(TestKMMixIn):
     # Web Front gadgets
     web_front_gadgets = [km_my_tasks_gadget,  km_my_documents_gadget,  km_my_contacts_gadget]
     for gadget in web_front_gadgets:
-      self.web_front_knowledge_pad.KnowledgePad_addBoxList(**{'uids':[gadget.getUid()]})
+      self.web_front_knowledge_pad.KnowledgePad_addBoxList(uids=[gadget.getUid()])
     self.tic()
-    
+
     # check that gadgets are added to web front page view
     response = self.publish(url, self.auth)
     for gadget in web_front_gadgets:
@@ -453,7 +452,7 @@ class TestKM(TestKMMixIn):
     km_my_tasks_gadget = portal.portal_gadgets.km_my_tasks
     
     # add gadget
-    self.web_front_knowledge_pad.KnowledgePad_addBoxList(**{'uids':[km_my_tasks_gadget.getUid()]})
+    self.web_front_knowledge_pad.KnowledgePad_addBoxList(uids=[km_my_tasks_gadget.getUid()])
     
     # "My Tasks" gadget (add a new document which should be shown shown in it)
     project = portal.project_module.newContent(portal_type = 'Project', \
@@ -492,7 +491,7 @@ class TestKM(TestKMMixIn):
     km_my_documents_gadget = portal.portal_gadgets.km_my_documents
     
     # add gadget
-    self.web_front_knowledge_pad.KnowledgePad_addBoxList(**{'uids':[km_my_documents_gadget.getUid()]})
+    self.web_front_knowledge_pad.KnowledgePad_addBoxList(uids=[km_my_documents_gadget.getUid()])
     
     # "My Documents" gadget (add a new document which should be shown shown in it)
     web_page = portal.web_page_module.newContent( \
@@ -535,7 +534,7 @@ class TestKM(TestKMMixIn):
     km_my_contacts_gadget = portal.portal_gadgets.km_my_contacts
     
     # add gadget
-    self.web_front_knowledge_pad.KnowledgePad_addBoxList(**{'uids':[km_my_contacts_gadget.getUid()]})
+    self.web_front_knowledge_pad.KnowledgePad_addBoxList(uids=[km_my_contacts_gadget.getUid()])
     
     # "My Contacts" gadget (add a new document which should be shown shown in it)
     person = portal.person_module.newContent(portal_type = 'Person',
@@ -567,25 +566,22 @@ class TestKM(TestKMMixIn):
     
   def test_08WebSectionGadget(self):
     """ Check Web Section Gadgets """
-    portal = self.getPortal()
-    km_subsection_gadget = portal.portal_gadgets.km_subsection
-    km_latest_documents_gadget = portal.portal_gadgets.km_latest_documents
-    km_assigned_member_gadget = portal.portal_gadgets.km_assigned_member
-    km_document_relations_gadget = portal.portal_gadgets.km_document_relations
-    
-    web_section_gadgets = [km_subsection_gadget,  
-                           km_latest_documents_gadget,  
-                           km_assigned_member_gadget]
+    portal_gadgets = self.portal.portal_gadgets
+    pad = self.web_section_knowledge_pad
+    web_section_gadgets = (portal_gadgets.km_subsection,
+                           portal_gadgets.km_latest_documents,
+                           portal_gadgets.km_assigned_member)
     for gadget in web_section_gadgets:
-      self.web_section_knowledge_pad.KnowledgePad_addBoxList(**{'uids':[gadget.getUid()]})
+      pad.KnowledgePad_addBoxList(uids=[gadget.getUid()])
+    self.portal.ERP5Site_toggleActiveKnowledgePad(pad)
     self.tic()
-    
+
     # check that gadgets are added to web section page view
-    response = self.publish('%s/WebSection_viewKnowledgePadColumn?active_pad_url=%s' \
-                               %(self.web_section_url, self.web_section_knowledge_pad.getRelativeUrl()), self.auth)
+    response = self.publish(
+      self.web_section_url + '/WebSection_viewKnowledgePadColumn?gadget_mode=', self.auth)
    
     for gadget in web_section_gadgets:
-      self.assertTrue(gadget.getTitle() in response.getBody())     
+      self.assertTrue(gadget.getTitle() in response.getBody())
 
   def test_10LatestContentGadget(self):
     """ Check Latest Content Gadgets """
@@ -595,7 +591,7 @@ class TestKM(TestKMMixIn):
 
     # add gadget
     self.web_section_knowledge_pad.KnowledgePad_addBoxList(
-                               **{'uids':[km_latest_documents_gadget.getUid()]})
+                               uids=[km_latest_documents_gadget.getUid()])
 
     # "Latest Content" gadget
     gadget_view_form_id  = km_latest_documents_gadget.view_form_id
@@ -626,7 +622,7 @@ class TestKM(TestKMMixIn):
     presentation.publish()
     self.tic()
     self.changeSkin('KM')
-    self.assertTrue(presentation.getTitle() in 
+    self.assertTrue(presentation.getTitle() in
           self.publish(self.base_url_pattern 
                     %(self.web_section_url+'/%s' %latest_docs_subsection.getId(),  
                       gadget_view_form_id, 
@@ -637,12 +633,11 @@ class TestKM(TestKMMixIn):
   def test_11AssignedMembersGadget(self):
     """ Check Assigned Members Gadgets """
     portal = self.getPortal()
-    request = self.app.REQUEST
     km_assigned_member_gadget = portal.portal_gadgets.km_assigned_member
     
     # add gadget
     self.web_section_knowledge_pad.KnowledgePad_addBoxList(
-                               **{'uids':[km_assigned_member_gadget.getUid()]})
+                               uids=[km_assigned_member_gadget.getUid()])
     gadget_view_form_id  = km_assigned_member_gadget.view_form_id
     project = portal.project_module.newContent(
                                    portal_type = 'Project',  
@@ -655,7 +650,7 @@ class TestKM(TestKMMixIn):
                                           self.web_section_knowledge_pad,  
                                           km_assigned_member_gadget)
     self.changeSkin('KM') 
-    self.assertTrue('No result' in 
+    self.assertTrue('No result' in
           self.publish(self.base_url_pattern 
             %(self.web_section_url+'/%s' %assigned_members_subsection.getId(),  
               gadget_view_form_id, 
@@ -669,7 +664,7 @@ class TestKM(TestKMMixIn):
     assignment =  person.newContent(portal_type = 'Assignment')
     self.tic()
     self.changeSkin('KM')
-    self.assertTrue(person.getTitle() in 
+    self.assertTrue(person.getTitle() in
                     self.publish(self.base_url_pattern 
             %(self.web_section_url+'/%s' %assigned_members_subsection.getId(),  
               gadget_view_form_id, 
@@ -682,18 +677,17 @@ class TestKM(TestKMMixIn):
     
   def test_11WebSectionContentGadget(self):
     """ Check  Web Section Content Gadgets """
-    portal = self.getPortal()
-    request = self.app.REQUEST
-
-    km_document_relations_gadget = portal.portal_gadgets.km_document_relations    
-    web_section_content_gadgets = [km_document_relations_gadget]
+    pad = self.web_section_content_knowledge_pad
+    web_section_content_gadgets = (
+      self.portal.portal_gadgets.km_document_relations,)
     for gadget in web_section_content_gadgets:
-      self.web_section_content_knowledge_pad.KnowledgePad_addBoxList(**{'uids':[gadget.getUid()]})
+      pad.KnowledgePad_addBoxList(uids=[gadget.getUid()])
+    self.portal.ERP5Site_toggleActiveKnowledgePad(pad)
     self.tic()
 
     # check that gadgets are added to web section page view
-    response = self.publish('%s/WebSection_viewKnowledgePadColumn?active_pad_url=%s' \
-                               %(self.web_page_url,self.web_section_content_knowledge_pad.getRelativeUrl()), self.auth)
+    response = self.publish(
+      self.web_section_url + '/WebSection_viewKnowledgePadColumn?gadget_mode=', self.auth)
 
     for gadget in web_section_content_gadgets:
       self.assertTrue(gadget.getTitle() in response.getBody())
@@ -706,7 +700,7 @@ class TestKM(TestKMMixIn):
     
     # add gadget
     self.web_section_content_knowledge_pad.KnowledgePad_addBoxList(
-                               **{'uids':[km_document_relations_gadget.getUid()]})
+                               uids=[km_document_relations_gadget.getUid()])
     self.tic()
 
     # "Relation" gadget
@@ -757,7 +751,6 @@ class TestKM(TestKMMixIn):
       nothing is raised but a message is shown to user.
     """
     portal = self.getPortal()
-    request = self.app.REQUEST
     portal_gadgets = portal.portal_gadgets
 
     url = '%s/ERP5Site_viewHomeAreaRenderer?gadget_mode=web_front' %self.web_site_url
@@ -765,7 +758,7 @@ class TestKM(TestKMMixIn):
     self.assertTrue(self.web_front_knowledge_pad.getTitle() in response.getBody())
 
     gadget = portal_gadgets.km_latest_documents
-    self.web_front_knowledge_pad.KnowledgePad_addBoxList(**{'uids':[gadget.getUid()]})
+    self.web_front_knowledge_pad.KnowledgePad_addBoxList(uids=[gadget.getUid()])
     self.tic()
 
     # check that gadgets are added to web front page view
@@ -798,7 +791,7 @@ class TestKM(TestKMMixIn):
     web_site_browser_gadget = portal.portal_gadgets.web_site_browser
 
     # add gadget
-    self.web_front_knowledge_pad.KnowledgePad_addBoxList(**{'uids':[web_site_browser_gadget.getUid()]})
+    self.web_front_knowledge_pad.KnowledgePad_addBoxList(uids=[web_site_browser_gadget.getUid()])
     self.tic()
 
     self.changeSkin('KM')
@@ -815,14 +808,14 @@ class TestKM(TestKMMixIn):
                                   gadget_view_form_id, 
                                   self.website.getRelativeUrl(),  
                                   box_url)    
-    self.assertTrue(subsection.getTitle() not in 
+    self.assertTrue(subsection.getTitle() not in
                     self.publish(url, self.auth).getBody())
 
     # make section visible
     subsection.edit(visible=True)
     self.tic()
     self.changeSkin('KM')
-    self.assertTrue(subsection.getTitle() in 
+    self.assertTrue(subsection.getTitle() in
                     self.publish(url, self.auth).getBody())
 
   def test_17AddGadgets(self):
@@ -833,7 +826,7 @@ class TestKM(TestKMMixIn):
     km_my_contacts_gadget = portal.portal_gadgets.km_my_contacts
     
     # test directly adding a gadget
-    self.web_front_knowledge_pad.KnowledgePad_addBoxList(**{'uids':[km_my_contacts_gadget.getUid()]})
+    self.web_front_knowledge_pad.KnowledgePad_addBoxList(uids=[km_my_contacts_gadget.getUid()])
     self.tic()
     self.assertSameSet([km_my_contacts_gadget],
                         [x.getSpecialiseValue() for x in self.web_front_knowledge_pad.objectValues()])
@@ -847,7 +840,7 @@ class TestKM(TestKMMixIn):
     selection_name = 'gadget_tool_view_gadget_add_dialog'
     self.app.REQUEST.set('list_selection_name', selection_name)
     portal.portal_selections.setSelectionParamsFor(selection_name, {'uids':[km_my_documents_gadget.getUid()]})
-    self.web_front_knowledge_pad.KnowledgePad_addBoxList(**{'uids':[km_my_contacts_gadget.getUid()]})
+    self.web_front_knowledge_pad.KnowledgePad_addBoxList(uids=[km_my_contacts_gadget.getUid()])
     self.tic()
     # now even though we explicitly add only one gadget KnowledgePad_addBoxList should check and add one
     # in listbox selection as well