Index: qPloneDropDownMenu/trunk/DropDownMenuTool.py
===================================================================
--- qPloneDropDownMenu/trunk/DropDownMenuTool.py	(revision 3713)
+++ qPloneDropDownMenu/trunk/DropDownMenuTool.py	(revision 1)
@@ -5,6 +5,6 @@
 from Products.CMFCore.utils import UniqueObject, getToolByName
 
-from utils import updateMenu
-from config import MANAGE_PERMISSION, PROJECT_NAME, UNIQUE_ID
+from Products.qPloneDropDownMenu.Extensions.Install import updateMenu
+from config import VIEW_PERMISSION, PROJECT_NAME, UNIQUE_ID
 
 
@@ -17,8 +17,7 @@
     security = ClassSecurityInfo()
 
-    security.declareProtected(MANAGE_PERMISSION, 'regenerateMenu')
+    security.declareProtected(VIEW_PERMISSION, 'regenerateMenu')
     def regenerateMenu(self):
-        portal = getToolByName(self, 'portal_url').getPortalObject()
-        updateMenu(portal)
+        updateMenu(self)
 
 InitializeClass(DropDownMenuTool)
Index: qPloneDropDownMenu/trunk/Extensions/Install.py
===================================================================
--- qPloneDropDownMenu/trunk/Extensions/Install.py	(revision 1)
+++ qPloneDropDownMenu/trunk/Extensions/Install.py	(revision 1)
@@ -0,0 +1,165 @@
+import string
+from cStringIO import StringIO
+
+from Products.CMFCore.utils import getToolByName
+from Products.CMFCore.DirectoryView import addDirectoryViews
+
+from Products.CMFPlone.migrations.migration_util import safeEditProperty
+from Products.CMFCore.Expression import Expression, createExprContext
+
+from Products.qPloneDropDownMenu.config import *
+
+configlets = ({'id':PROJECT_NAME,
+    'name':'Drop Down Menu',
+    'action':'string:${portal_url}/prefs_dropdownmenu_edit_form',
+    'condition':'',
+    'category':'Products',
+    'visible':1,
+    'appId':PROJECT_NAME,
+    'permission':VIEW_PERMISSION,
+    'imageUrl':'qplonedropdownmenu.gif'},
+   {'id':'csshover',
+    'name':'CSS Hover',
+    'action':'string:${portal_url}/prefs_csshover_edit_form',
+    'condition':'',
+    'category':'Products',
+    'visible':1,
+    'appId':'csshover',
+    'permission':VIEW_PERMISSION},)
+
+def registerCSS(self, out):
+
+    qi = getToolByName(self, 'portal_quickinstaller', None)
+    if qi is not None:
+        try:
+            if not qi.isProductInstalled('ResourceRegistries'):
+                qi.installProduct('ResourceRegistries', locked=0)
+            cssreg = getToolByName(self, 'portal_css', None)
+            if cssreg is not None:
+                stylesheet_ids = cssreg.getResourceIds()
+
+                if 'drop_down.css' not in stylesheet_ids:
+                    cssreg.registerStylesheet('drop_down.css',
+                                               expression="python:portal.portal_dropdownmenu")
+                    out.write('Register drop_down.css... \n')
+                else:
+                    out.write('drop_down.css already exists... \n')
+        except:
+            pass
+
+def unregisterCSS(self, out):
+
+    qi = getToolByName(self, 'portal_quickinstaller', None)
+    if qi is not None:
+        try:
+            if not qi.isProductInstalled('ResourceRegistries'):
+                qi.installProduct('ResourceRegistries', locked=0)
+            cssreg = getToolByName(self, 'portal_css', None)
+            if cssreg is not None:
+                stylesheet_ids = cssreg.getResourceIds()
+
+                if 'drop_down.css' in stylesheet_ids:
+                    cssreg.unregisterResource('drop_down.css')
+                    out.write('Unregister drop_down.css... \n')
+        except:
+            pass
+
+def updateMenu(self):
+    out = ''
+
+    pu = getToolByName(self, 'plone_utils')
+
+    if hasattr(pu, 'createTopLevelTabs'):
+        pactions = getToolByName(self, 'portal_actions').listFilteredActionsFor(self)
+        tl_tabs = pu.createTopLevelTabs(pactions)
+
+        for act in tl_tabs:
+                out += '<li id="portaltab-%s" class="plain"><a href="%s" accesskey="t">' % \
+                    (act['id'], act['url']) + act['name'] + '</a></li>\n'
+    else:
+        portal = getToolByName(self, 'portal_url').getPortalObject()
+
+        portal_act = getToolByName(self, 'portal_actions')
+        actions=portal_act._cloneActions()
+
+        for act in actions:
+            if act.category == 'portal_tabs':
+                out += '<li id="portaltab-%s" class="plain"><a href="%s" accesskey="t">%s</a></li>\n' % \
+                    (act.id, \
+                     Expression(act.getActionExpression())(createExprContext(portal, portal, portal)), \
+                     act.title)
+
+    portal_props = getToolByName(self, 'portal_properties')
+    if not hasattr(portal_props, PROPERTY_SHEET):
+        portal_props.addPropertySheet(PROPERTY_SHEET, 'DropDown Menu Properties')
+    ap = getattr(portal_props, PROPERTY_SHEET)
+    safeEditProperty(ap, 'menu', out, 'text')
+
+def setupSkin(self, out, skinFolder):
+
+    skinstool=getToolByName(self, 'portal_skins')
+
+    addDirectoryViews(skinstool, SKINS_DIR, GLOBALS)
+
+    for skin in skinstool.getSkinSelections():
+        path = skinstool.getSkinPath(skin)
+        path = map( string.strip, string.split( path,',' ) )
+
+        if not skinFolder in path:
+            try:
+                path.insert( path.index( 'custom')+1, skinFolder )
+            except ValueError:
+                path.append(skinFolder)
+            path = string.join( path, ', ' )
+            skinstool.addSkinSelection( skin, path )
+            out.write('  %s layer sucessfully installed into skin %s.\n' % (skinFolder, skin))
+        else:
+            out.write('  %s layer was already installed into skin %s.\n' % (skinFolder, skin))
+
+def setupTool(self):
+
+    portal_url = getToolByName(self, 'portal_url')
+    p = portal_url.getPortalObject()
+    x = p.manage_addProduct[PROJECT_NAME].manage_addTool(type='DropDownMenu Tool')
+
+def install(self):
+    out = StringIO()
+
+    registerCSS(self, out)
+
+    configTool = getToolByName(self, 'portal_controlpanel', None)
+    if configTool:
+        for conf in configlets:
+            configTool.registerConfiglet(**conf)
+            out.write('Added configlet %s\n' % conf['id'])
+
+    if hasattr(self, UNIQUE_ID):
+        self.manage_delObjects([UNIQUE_ID])
+        out.write('Deleting old %s\n' % (UNIQUE_ID))
+    setupTool(self)
+    out.write('Added %s to the portal root folder\n' % (UNIQUE_ID))
+
+    portal_props = getToolByName(self, 'portal_properties')
+    if not hasattr(portal_props, PROPERTY_SHEET):
+        out.write('updateMenu... \n')
+        updateMenu(self)
+    else:
+        out.write('skipping updateMenu... \n')
+
+    out.write('setupSkin... \n')
+    setupSkin(self, out, 'qPloneDropDownMenu')
+
+    return out.getvalue()
+
+def uninstall(self):
+    out = StringIO()
+
+    unregisterCSS(self, out)
+
+    configTool = getToolByName(self, 'portal_controlpanel', None)
+    if configTool:
+        for conf in configlets:
+            configTool.unregisterConfiglet(conf['id'])
+            out.write('Removed configlet %s\n' % conf['id'])
+
+    return out.getvalue()
Index: qPloneDropDownMenu/trunk/Extensions/__init__.py
===================================================================
--- qPloneDropDownMenu/trunk/Extensions/__init__.py	(revision 1)
+++ qPloneDropDownMenu/trunk/Extensions/__init__.py	(revision 1)
@@ -0,0 +1,1 @@
+# I'm a package ;-)
Index: qPloneDropDownMenu/trunk/HISTORY.txt
===================================================================
--- qPloneDropDownMenu/trunk/HISTORY.txt	(revision 3713)
+++ qPloneDropDownMenu/trunk/HISTORY.txt	(revision 1)
@@ -1,15 +1,2 @@
-0.2.1
-
-  * fix string encoding issues during product installation and menu regeneration
-    for details: http://talk.quintagroup.com/forums/plone-drop-down-menu/237707814
-
-0.2
-
-  * fixed documentation
-
-  * some minor fixes to portal status messages and validation stuff
-
-  * compatible with plone 3
-
 0.1.12
 
Index: qPloneDropDownMenu/trunk/README.txt
===================================================================
--- qPloneDropDownMenu/trunk/README.txt	(revision 3713)
+++ qPloneDropDownMenu/trunk/README.txt	(revision 1)
@@ -7,5 +7,5 @@
   "Download":http://sourceforge.net/projects/quintagroup
 
-  (c) "Quintagroup":http://quintagroup.com/ , 2008. 
+  (c) "Quintagroup":http://quintagroup.com/ , 2005. 
 
   support@quintagroup.com * quintessence of modern business
@@ -13,5 +13,7 @@
 Requires
 
-  Plone 3.0+
+  Plone 2.0+
+  CMF 1.4.7+
+  Zope 2.7+
 
 Install
@@ -39,5 +41,5 @@
        <ul>
            <li><a href="http://example.com/Members/jdoe">John Doe</a><li>
-           <li><a href="http://example.com/Members/mmajor">Mary Major</a></li>
+           <li><a href="http://example.com/Members/mmajor">Mary Major</a><li>
        </ul>
    </li>
@@ -77,3 +79,5 @@
 Authors
 
+  * Myroslav Opyr
+
   * Vitaliy Podoba
Index: qPloneDropDownMenu/trunk/TODO.txt
===================================================================
--- qPloneDropDownMenu/trunk/TODO.txt	(revision 1)
+++ qPloneDropDownMenu/trunk/TODO.txt	(revision 1)
@@ -0,0 +1,2 @@
+
+# * next optimization of csshover.htc script
Index: qPloneDropDownMenu/trunk/__init__.py
===================================================================
--- qPloneDropDownMenu/trunk/__init__.py	(revision 3713)
+++ qPloneDropDownMenu/trunk/__init__.py	(revision 1)
@@ -1,14 +1,19 @@
 from AccessControl import allow_module
-from Products.CMFCore.utils import ToolInit
+from Products.CMFCore import utils
+from Products.CMFCore.DirectoryView import registerDirectory
 
 from Products.qPloneDropDownMenu.DropDownMenuTool import DropDownMenuTool
-from Products.qPloneDropDownMenu.config import PROJECT_NAME
+from Products.qPloneDropDownMenu.config import PROJECT_NAME, SKINS_DIR, GLOBALS, VIEW_PERMISSION
 
 allow_module('Products.qPloneDropDownMenu.utils')
 
+registerDirectory(SKINS_DIR, GLOBALS)
+ 
 tools = (DropDownMenuTool,)
  
 def initialize(context):
-    ToolInit(PROJECT_NAME,
-             tools=tools,
-             icon='tool.gif').initialize(context)
+    utils.ToolInit( PROJECT_NAME,
+                    tools = tools,
+                    product_name = PROJECT_NAME,
+                    icon='tool.gif'
+                    ).initialize(context)
Index: qPloneDropDownMenu/trunk/config.py
===================================================================
--- qPloneDropDownMenu/trunk/config.py	(revision 3713)
+++ qPloneDropDownMenu/trunk/config.py	(revision 1)
@@ -1,12 +1,52 @@
-try:
-    from Products.CMFCore import permissions
-except ImportError:
-    from Products.CMFCore import CMFCorePermissions as permissions
+from Products.CMFCore import CMFCorePermissions
  
-MANAGE_PERMISSION = permissions.ManagePortal
+VIEW_PERMISSION = CMFCorePermissions.ManagePortal
 
 PROJECT_NAME = 'qPloneDropDownMenu'
 UNIQUE_ID = "portal_dropdownmenu"
+SKINS_DIR = 'skins'
+
+GLOBALS = globals()
 
 PROPERTY_SHEET = 'dropdownmenu_properties'
-PROPERTY_FIELD = 'menu'
+MENU_HTML = '''<ul><li><a class="first-item" href="http://www.bmc.com">Home</a></li><li><a href="http://www.bmc.com/products/">Solutions &amp; Products</a><ul>
+        <li><a href="http://www.bmc.com/BMC/Common/Templates/hou_generic_tab/0,,19052_34957721,00.html">Business Service Management</a></li>
+        <li><a href="http://www.bmc.com/BMC/Common/Templates/hou_generic_tab/0,,19052_34829607,00.html">Best Practices &amp; Compliance</a></li>
+        <li><a href="http://www.bmc.com/BMC/Common/Templates/hou_generic_tab/0,,19052_34830527,00.html">Small &amp; Mid-Sized Business </a></li>
+        <li><a href="http://www.bmc.comBMC/Common/Templates/hou_generic_tab/0,3846,19052_34818399,00.html">Industry Solutions</a></li>
+        <li><a href="http://www.bmc.com/BMC/Products/CDA/hou_Products_Index/0,2830,19052_23655657,00.html">Product Families</a></li>
+        <li><a href="http://www.bmc.com/BMC/Common/CDA/hou_Page_Generic/0,3465,19052_19432,00.html">Services</a></li>
+        <li><a href="http://www.bmc.com/products/productlist/0,,19052,00.html">Product List A to Z</a></li>
+        <li><a href="http://www.bmc.com/BMC/Products/CDA/hou_Products_Index/0,2830,19052_23655660,00.html">Downloads &amp; Resources</a></li>
+        <li><a href="http://www.bmc.com/pricelist/">Global Pricing</a></li>  	  
+      </ul></li><li><a href="http://www.bmc.com/partners/">Partners</a><ul>
+        <li><a href="http://www.bmc.com/BMC/Partners/CDA/hou_Partner_Generic/0,3319,5377102_5379132,00.html">Find a Partner</a></li>
+        <li><a href="http://www.bmc.com/BMC/Partners/CDA/hou_Partner_Generic/0,3319,5377102_5379134,00.html">Become a Partner</a></li>
+        <li><a href="http://www.bmc.com/BMC/Partners/CDA/hou_Partner_Generic/0,3317,5377102_5379136,00.html">Find a Market Zone Product</a></li>
+      </ul></li><li><a href="http://www.bmc.com/support_home">Support</a><ul>
+        <li><a href="http://www.bmc.com/info_center_support/overview/0,3252,19097_4736148,00.html">Case Tracking &amp; Reporting</a></li>
+        <li><a href="http://www.bmc.com/support/vantive_bridge.cfm?path=http://selfserve.bmc.com/support/Forms/frmResolutionSearch.asp">Knowledge Database</a></li>
+        <li><a href="http://www.bmc.com/info_center_support/overview/0,3252,19097_4736152,00.html">My Support Admin</a></li>
+        <li><a href="http://www.bmc.com/info_center_support/overview/0,3252,19097_4736150,00.html">PTFs, FTP &amp; Installation</a></li>
+        <li><a href="http://www.bmc.com/info_center_support/overview/0,3252,19097_4736154,00.html">Policies &amp; Guidelines</a></li>
+        <li><a href="http://www.bmc.com/info_center_support/overview/0,3252,19097_4736144,00.html">Product Lists &amp; Manuals</a></li>
+        <li><a href="http://www.bmc.com/info_center_support/overview/0,3252,19097_4718041,00.html">Support Contacts</a></li>
+        <li><a href="http://www.bmc.com/info_center_support/All_News/0,2560,19097,00.html">Support News</a></li>
+      </ul></li><li><a href="http://shop.bmc.com/">Store</a><ul>
+        <li><a href="http://shop.bmc.com/shopping_support.cfm">Shopping Support</a></li>
+        <li><a href="http://shop.bmc.com/licensing.cfm">Licensing Information</a></li>
+        <li><a href="http://shop.bmc.com/download.cfm">Download Facility</a></li>
+        <li><a href="http://shop.bmc.com/retrieve_cart.cfm">Retrieve Your Quote</a></li>
+      </ul></li><li><a href="http://www.bmc.com/BMC/Common/CDA/hou_Page_Generic/0,,11629550_11650861_11651561,00.html?c=products_header&amp;n=education_linksupport_homet=11503">Education</a><ul>
+        <li><a href="http://www.bmc.com/BMC/Common/CDA/hou_Page_Generic/0,3465,11629550_11650863,00.html">Certification Program</a></li>
+        <li><a href="http://www.bmc.com/BMC/Common/CDA/hou_Page_Generic/0,3465,11629550_11681301,00.html">Placement Tests</a></li>
+        <li><a href="http://www.bmc.com/BMC/Common/CDA/hou_Page_Generic/0,3465,11629550_11651556,00.html">Product Education</a></li>
+      </ul></li><li><a href="http://www.bmc.com/BMC/Common/CDA/hou_Page_Detail/0,3464,9926222_10667925,00.html">Communities</a><ul>
+        <li><a href="http://www.bmc.com/BMC/Common/CDA/hou_Page_Detail/0,3464,9926222_10636326,00.html">Thought Leadership Council</a></li>
+        <li><a href="http://www.bmc.com/BMC/Common/CDA/hou_Page_Generic/0,3465,9926222_33961809,00.html">Enterprise Leadership</a></li>
+        <li><a href="http://talk.bmc.com/">Blogs &amp; Podcasts @TalkBMC</a></li>
+        <li><a href="http://www.bmc.com/BMC/Common/CDA/hou_Page_Detail/0,3464,9926222_33455235,00.html">External Communities</a></li>
+        <li><a href="http://www.bmc.com/BMC/Common/CDA/hou_Page_Detail/0,3464,9926222_10636328,00.html">User Groups</a></li>
+        <li><a href="http://devcon.bmc.com/">Developer Connection</a></li>
+        <li><a href="http://www.bmc.com/BMC/Common/Views/hou_vw_redirect_url/0,3411,9926222_34207904,00.html">Partner Network Login</a></li>
+      </ul></li></ul>'''
Index: qPloneDropDownMenu/trunk/configure.zcml
===================================================================
--- qPloneDropDownMenu/trunk/configure.zcml	(revision 3713)
+++ 	(revision )
@@ -1,20 +1,0 @@
-<configure
-    xmlns="http://namespaces.zope.org/zope"
-    xmlns:cmf="http://namespaces.zope.org/cmf"
-    xmlns:genericsetup="http://namespaces.zope.org/genericsetup"
-    i18n_domain="qPloneDropDownMenu">
-
-    <!-- Register the installation GenericSetup extension profile -->
-    <genericsetup:registerProfile
-      name="default"
-      title="qPloneDropDownMenu"
-      directory="profiles/default"
-      description="Allows Plone websites to update multilevel portal dropdown menu"
-      provides="Products.GenericSetup.interfaces.EXTENSION"
-      />
-
-    <cmf:registerDirectory name="qPloneDropDownMenu"/>
-
-    <include package=".browser" />
-
-</configure>
Index: qPloneDropDownMenu/trunk/setuphandlers.py
===================================================================
--- qPloneDropDownMenu/trunk/setuphandlers.py	(revision 3713)
+++ 	(revision )
@@ -1,21 +1,0 @@
-from Products.CMFCore.utils import getToolByName
-
-from utils import updateMenu
-from config import PROPERTY_SHEET, PROPERTY_FIELD
-
-def installMenu(context):
-
-    if context.readDataFile('qplonedropdownmenu_various.txt') is None:
-        return
-
-    site = context.getSite()
-    portal_props = getToolByName(site, 'portal_properties')
-
-    # skip adding property if it already exists
-    prop_sheet = getattr(portal_props.aq_base, PROPERTY_SHEET, None)
-    if prop_sheet is not None:
-        prop_field = getattr(prop_sheet.aq_base, PROPERTY_FIELD, None)
-        if prop_field is not None:
-            return
-
-    updateMenu(site)
Index: qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/csshover_save.cpy
===================================================================
--- qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/csshover_save.cpy	(revision 3713)
+++ qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/csshover_save.cpy	(revision 1)
@@ -38,5 +38,3 @@
     message += "For activating csshover.css customize ploneCustom.css and add <dtml-var csshover.css> line before <dtml-var drop_down.css>"
 
-context.plone_utils.addPortalMessage(message)
-
-return state.set(status='success')
+return state.set(status='success', portal_status_message=message)
Index: qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/drop_down.css.dtml
===================================================================
--- qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/drop_down.css.dtml	(revision 3713)
+++ qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/drop_down.css.dtml	(revision 1)
@@ -78,5 +78,5 @@
 }
 
-/*     ------   Make-up --------            */
+/*     ------   Make-up	--------            */
 
 #portal-globalnav li.invisibleHeightKeeper {
@@ -85,7 +85,28 @@
 }
 
+/*#portal-globalnav {
+        height: 1.25em;
+}*/
+
+#portal-globalnav .csshover ul li:hover a {
+        background-color: &dtml-globalBackgroundColor;;
+}
+
+#portal-globalnav .csshover ul li:hover ul a {
+        background-color: &dtml-backgroundColor;;
+}
+
+
 #portal-globalnav .csshover ul li ul li a:hover,
 #portal-globalnav .csshover ul li ul li:hover a {
         color: &dtml-globalFontColor;;
+        background-color: &dtml-globalBackgroundColor;;
+}
+
+
+#portal-globalnav .csshover ul li:hover ul li a:hover,
+#portal-globalnav .csshover ul li:hover ul li.selected a,
+#portal-globalnav .csshover ul li:hover ul li:hover a {
+        background-color: &dtml-globalBackgroundColor;;
 }
 
@@ -99,9 +120,15 @@
         padding-bottom: 1px;
         overflow: hidden;
+        background-color: &dtml-globalBackgroundColor;;
 }
 
 #portal-globalnav .csshover ul li:hover ul li:hover ul  a {
+        background-color: &dtml-backgroundColor;;
         color: &dtml-globalFontColor;;
 }
+
+
+
+
 
 /* latest changes */
@@ -121,7 +148,13 @@
 #portal-globalnav ul li.selected a,
 #portal-globalnav .csshover ul li a:hover {
-        background-color:&dtml-globalBackgroundColor;;
+
         color:&dtml-globalFontColor;;
 }
+
+
+#portal-globalnav .csshover ul li:hover a {
+        background-color:&dtml-globalBackgroundColor;;
+}
+
 
 #portal-globalnav .csshover ul li:hover ul {
@@ -133,4 +166,5 @@
 
 #portal-globalnav .csshover ul li:hover ul li {
+        background-color: &dtml-backgroundColor; !important;
         padding:0;
         margin:0;
@@ -139,4 +173,5 @@
 #portal-globalnav .csshover ul li:hover ul li a {
         color: &dtml-globalFontColor; !important;
+        background-color: &dtml-backgroundColor; !important;
         margin:0;
         line-height:normal;
@@ -145,4 +180,5 @@
 
 #portal-globalnav .csshover ul li ul li a:hover {
+        background-color: &dtml-globalBackgroundColor; !important;
         background-image:none;
 }
Index: qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/dropdownmenu_edit.cpy
===================================================================
--- qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/dropdownmenu_edit.cpy	(revision 3713)
+++ qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/dropdownmenu_edit.cpy	(revision 1)
@@ -6,26 +6,12 @@
 ##bind state=state
 ##bind subpath=traverse_subpath
-##parameters=menu
+##parameters=menu=None, RESPONSE=None
 ##title=
 ##
 
-from Products.CMFCore.utils import getToolByName
+REQUEST=context.REQUEST
 
-# some checks whether dropdown properties exist
-pp = getToolByName(context, 'portal_properties')
-if 'dropdownmenu_properties' not in pp.objectIds():
-    context.plone_utils.addPortalMessage('Dropdown menu property sheet does not exist. Please, firstly regenerate menu before editing it.',
-                                         type='error')
-    return state.set(status='failure')
+properties = context.portal_properties.dropdownmenu_properties
+properties.manage_editProperties(REQUEST)
 
-
-properties = pp.dropdownmenu_properties
-if not properties.hasProperty('menu'):
-    context.plone_utils.addPortalMessage('menu field does not exist in dropdown menu property sheet. Please, firstly regenerate menu before editing it.',
-                                         type='error')
-    return state.set(status='failure')
-
-# do actual work
-properties.manage_changeProperties(menu=menu)
-context.plone_utils.addPortalMessage('DropDown Menu updated.')
-return state.set(status='success')
+return state.set(status='success', portal_status_message='DropDown Menu updated.')
Index: qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/dropdownmenu_update.cpy
===================================================================
--- qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/dropdownmenu_update.cpy	(revision 3713)
+++ qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/dropdownmenu_update.cpy	(revision 1)
@@ -9,8 +9,8 @@
 ##title=
 ##
+request = container.REQUEST
+RESPONSE =  request.RESPONSE
 
-from Products.CMFCore.utils import getToolByName
+context.portal_dropdownmenu.regenerateMenu()
 
-getToolByName(context, 'portal_dropdownmenu').regenerateMenu()
-context.plone_utils.addPortalMessage('DropDown Menu regenerated.')
-return state.set(status='success')
+return state.set(status='success', portal_status_message='DropDown Menu regenerated.')
Index: qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/dropdownmenu_update.cpy.metadata
===================================================================
--- qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/dropdownmenu_update.cpy.metadata	(revision 3713)
+++ qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/dropdownmenu_update.cpy.metadata	(revision 1)
Index: qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/global_sections.pt
===================================================================
--- qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/global_sections.pt	(revision 1)
+++ qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/global_sections.pt	(revision 1)
@@ -0,0 +1,21 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
+      i18n:domain="plone">
+
+<body>
+
+  <!-- THE SECTION TABS DEFINITION -->
+
+   <div metal:define-macro="portal_tabs"
+        tal:omit-tag="">
+      <h5 class="hiddenStructure" i18n:translate="heading_sections">Sections</h5>
+     <div id="portal-globalnav">
+       <div class="csshover">
+         <ul>
+           <span tal:replace="structure portal/portal_properties/dropdownmenu_properties/menu | string:qPloneDropDownMenu broken" />
+           <li class="invisibleHeightKeeper">&nbsp;</li>
+         </ul>
+       </div>
+     </div>
+   </div>
+</body>
+</html>
Index: qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/prefs_csshover_edit_form.cpt.metadata
===================================================================
--- qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/prefs_csshover_edit_form.cpt.metadata	(revision 3713)
+++ qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/prefs_csshover_edit_form.cpt.metadata	(revision 1)
@@ -7,5 +7,3 @@
 [actions]
 action.success..Save=traverse_to:string:csshover_save
-action.success=traverse_to:string:csshover_save
 action.failure..Save=traverse_to:string:prefs_csshover_edit_form
-action.failure=traverse_to:string:prefs_csshover_edit_form
Index: qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/prefs_dropdownmenu_edit_form.cpt
===================================================================
--- qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/prefs_dropdownmenu_edit_form.cpt	(revision 3713)
+++ qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/prefs_dropdownmenu_edit_form.cpt	(revision 1)
@@ -18,15 +18,16 @@
        tal:attributes="href string: $portal_url/plone_control_panel"
        i18n:translate="label_up_to_plone_setup">
-      Up to Plone Setup
+    Up to Plone Setup
     </a>
 
     <div class="documentDescription"
          i18n:translate="description_plonedropdownmenu">
-      Plone Drop Down Menu ...
+    Plone Drop Down Menu ...
     </div>
 
     <h2>Post-install instructions</h2>
 
-    <p>Congratulations, you've installed Plone Drop Down Menu product from Quintagroup.</p>
+    <p>Congratulations, you've installed Plone Drop Down Menu product from 
+    Quintagroup.</p>
 
     <p>In case you have some problems following editing DropDown Menu you
@@ -39,49 +40,42 @@
           tal:attributes="action string:${here/absolute_url}/${template/getId}" >
 
-      <div class="formControls" align="right"
-           tal:define="process_creation request/process_creation|nothing;">
-          <input class="context"
-                 tabindex=""
-                 type="submit"
-                 value="Regenerate Menu"
-                 name="form.button.Regenerate"
-                 i18n:attributes="value"
-                 tal:attributes="tabindex tabindex/next" />
-      </div>
+     <div class="formControls" align="right"
+             tal:define="process_creation request/process_creation|nothing;">
+         <input class="context"
+                tabindex=""
+                type="submit"
+                value="Regenerate Menu"
+                name="form.button.Regenerate"
+                i18n:attributes="value"
+                tal:attributes="tabindex tabindex/next" />
+     </div>
 
-      <dl class="portalMessage warning"
-          tal:condition="not: portal/portal_properties/dropdownmenu_properties/menu|nothing">
-        <dt>Warning</dt>
-        <dd>
-          Dropdown menu property sheet or it's 'menu' field were deleted from portal_properties tool.
-          Before saving any portal tabs you have to 'Regenerate Menu'. This action will add
-          'menu' field back to your properties.
-        </dd>
-      </dl>
+     <div class="field">
+         <label for="menu" i18n:translate="label_portaltabs">Portal tabs</label>
+         <div class="formHelp" i18n:translate="help_portaltabs_edit">
+         Here you can change your portal tabs. 
+         </div>
+         <textarea cols="80" 
+                   rows="20"
+                   tabindex=""
+                   name="menu"
+                   id="menu"
+                   tal:content="portal/portal_properties/dropdownmenu_properties/menu"
+                   tal:attributes="tabindex tabindex/next;"
+                   >Portal Tabs</textarea>
+     </div>
 
-      <div class="field">
-          <label for="menu" i18n:translate="label_portaltabs">Portal tabs</label>
-          <div class="formHelp" i18n:translate="help_portaltabs_edit">Here you can change your portal tabs.</div>
-          <textarea cols="80" 
-                    rows="20"
-                    tabindex=""
-                    name="menu"
-                    id="menu"
-                    tal:content="portal/portal_properties/dropdownmenu_properties/menu|string:"
-                    tal:attributes="tabindex tabindex/next;">Portal Tabs</textarea>
-      </div>
+     <div class="formControls"
+             tal:define="process_creation request/process_creation|nothing;">
+         <input class="context"
+                tabindex=""
+                type="submit"
+                value="Save"
+                name="form.button.Save"
+                i18n:attributes="value"
+                tal:attributes="tabindex tabindex/next" />
+     </div>
 
-      <div class="formControls"
-           tal:define="process_creation request/process_creation|nothing;">
-        <input class="context"
-               tabindex=""
-               type="submit"
-               value="Save"
-               name="form.button.Save"
-               i18n:attributes="value"
-               tal:attributes="tabindex tabindex/next" />
-      </div>
-
-      <input type="hidden" name="form.submitted" value="1" />
+     <input type="hidden" name="form.submitted" value="1" />
     </form>
 
Index: qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/prefs_dropdownmenu_edit_form.cpt.metadata
===================================================================
--- qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/prefs_dropdownmenu_edit_form.cpt.metadata	(revision 3713)
+++ qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/prefs_dropdownmenu_edit_form.cpt.metadata	(revision 1)
@@ -8,11 +8,8 @@
 validators..Save=validate_dropdownmenu_edit
 validators..Regenerate=validate_dropdownmenu_edit
-validators=validate_dropdownmenu_edit
 
 [actions]
 action.success..Save=traverse_to:string:dropdownmenu_edit
 action.success..Regenerate=redirect_to:string:dropdownmenu_update
-action.success=traverse_to:string:dropdownmenu_edit
 action.failure..Save=traverse_to:string:prefs_dropdownmenu_edit_form
 action.failure..Regenerate=traverse_to:string:prefs_dropdownmenu_edit_form
-action.failure=traverse_to:string:prefs_dropdownmenu_edit_form
Index: qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/validate_dropdownmenu_edit.vpy
===================================================================
--- qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/validate_dropdownmenu_edit.vpy	(revision 3713)
+++ qPloneDropDownMenu/trunk/skins/qPloneDropDownMenu/validate_dropdownmenu_edit.vpy	(revision 1)
@@ -11,5 +11,4 @@
 
 if state.getErrors():
-    context.plone_utils.addPortalMessage('Please correct the indicated errors.')
-    return state.set(status='failure')
+    return state.set(status='failure', portal_status_message='Please correct the indicated errors.')
 return state
Index: qPloneDropDownMenu/trunk/utils.py
===================================================================
--- qPloneDropDownMenu/trunk/utils.py	(revision 3713)
+++ qPloneDropDownMenu/trunk/utils.py	(revision 1)
@@ -1,57 +1,6 @@
-# -*- coding: utf-8 -*-
 """ Utility functions """
-
-from zope.component import getMultiAdapter
-
-from OFS.DTMLMethod import addDTMLMethod
-
-from Products.CMFCore.utils import getToolByName
-from Products.CMFPlone.migrations.migration_util import safeEditProperty
-from Products.CMFCore.Expression import Expression, createExprContext
-
-from config import PROPERTY_FIELD, PROPERTY_SHEET
-
-
-TAB_HTML_SNIPPET = """<li id="portaltab-%(id)s" class="plain">
-  <a href="%(url)s" accesskey="t" title="%(desc)s">%(name)s</a>
-</li>
-"""
-
 
 def addCSS(container, sheetId, title, csshovering):
     """ Add DTML Method object to portal root """
+    from OFS.DTMLMethod import addDTMLMethod
     addDTMLMethod(container, sheetId, title, csshovering)
-
-def updateMenu(site):
-    pu = getToolByName(site, 'plone_utils')
-    pa = getToolByName(site, 'portal_actions')
-    portal_props = getToolByName(site, 'portal_properties')
-
-    # collect all portal tabs
-    context_state = getMultiAdapter((site, site.REQUEST),
-                                    name=u'plone_context_state')
-    actions = context_state.actions()
-    portal_tabs_view = getMultiAdapter((site, site.REQUEST),
-                                       name='portal_tabs_view')
-    portal_tabs = portal_tabs_view.topLevelTabs(actions=actions)
-
-    # dump to html
-    value = u""
-    enc = portal_props.site_properties.getProperty('default_charset', 'utf-8')
-    for tab in portal_tabs:
-        value += TAB_HTML_SNIPPET % {'id': toUnicode(tab['id'], enc),
-                                     'url': toUnicode(tab['url'], enc),
-                                     'desc': toUnicode(tab['description'], enc),
-                                     'name': toUnicode(tab['name'], enc)}
-
-    if not hasattr(portal_props.aq_base, PROPERTY_SHEET):
-        portal_props.addPropertySheet(PROPERTY_SHEET,
-                                      'DropDown Menu Properties')
-    ap = getattr(portal_props.aq_base, PROPERTY_SHEET)
-    safeEditProperty(ap, PROPERTY_FIELD, value, 'text')
-
-def toUnicode(value, enc='utf-8'):
-    if isinstance(value, str):
-        return value.decode(enc)
-    else:
-        return value
Index: qPloneDropDownMenu/trunk/version.txt
===================================================================
--- qPloneDropDownMenu/trunk/version.txt	(revision 1)
+++ qPloneDropDownMenu/trunk/version.txt	(revision 1)
@@ -0,0 +1,1 @@
+0.1.11
