Index: qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/getNotAddableTypes.py
===================================================================
--- qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/getNotAddableTypes.py	(revision 3713)
+++ 	(revision )
@@ -1,12 +1,0 @@
-## Script (Python) "getNotAddableTypes"
-##bind container=container
-##bind context=context
-##bind namespace=
-##bind script=script
-##bind subpath=traverse_subpath
-##parameters=
-##title=
-##
-# customize this script to filter addable portal types based on
-# context, the current user or other criteria
-return ('Favorite','Sitemap')
Index: qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/google-sitemaps.pt
===================================================================
--- qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/google-sitemaps.pt	(revision 1)
+++ qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/google-sitemaps.pt	(revision 1)
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<urlset xmlns="http://www.google.com/schemas/sitemap/0.84"
+        xmlns:tal="http://xml.zope.org/namespaces/tal"
+        xmlns:metal="http://xml.zope.org/namespaces/metal"
+        tal:define="path python:'/'.join(here.getPhysicalPath());
+                    results python:container.searchForGoogleSitemapObjects(path);
+		    dummy python:request.RESPONSE.setHeader('Content-Type', 'text/xml');
+                    compress nocall:here/enableHTTPCompression | nothing;
+                    dummy python:compress and compress(request=request);
+		    additionalURLs python:modules['Products.qPloneGoogleSitemaps.utils'].additionalURLs"> 
+  <url tal:condition="results"
+       tal:repeat="result python:results.items()">
+    <loc tal:content="python:result[0]">http://www.yoursite.com/</loc>
+    <lastmod tal:content="python: DateTime(result[1].ModificationDate).HTML4()">2005-01-01</lastmod>
+  </url>
+  <url tal:define="URLs python:additionalURLs(context)"
+       tal:condition="URLs"
+       tal:repeat="URL URLs">
+    <loc tal:content="URL">http://www.yoursite.com/</loc>
+  </url>
+</urlset>
Index: qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/gsm_create_verify_file.cpy
===================================================================
--- qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/gsm_create_verify_file.cpy	(revision 3713)
+++ qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/gsm_create_verify_file.cpy	(revision 1)
@@ -17,9 +17,7 @@
 except BadRequestException:
     pass
-else:
-    props = getToolByName(context,'portal_properties').googlesitemap_properties
-    vfiles = list(props.getProperty('verification_filenames',[]))
-    vfiles.append(verify_filename)
-    props.manage_changeProperties(verification_filenames = vfiles)
+props = getToolByName(context,'portal_properties').googlesitemap_properties
+props.manage_changeProperties(verification_filename = verify_filename)
+
 
 return state.set(portal_status_message = 'Plone Google Sitemap updated.')
Index: qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/gsm_delete_verify_file.cpy
===================================================================
--- qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/gsm_delete_verify_file.cpy	(revision 1)
+++ qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/gsm_delete_verify_file.cpy	(revision 1)
@@ -0,0 +1,23 @@
+## Script (Python) "create_verify_file"
+##bind container=container
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind subpath=traverse_subpath
+##parameters=
+##title=Create file for verification
+##
+
+from Products.CMFCore.utils import getToolByName
+props = getToolByName(context,'portal_properties').googlesitemap_properties
+
+portal = getToolByName(context,'portal_url').getPortalObject()
+try:
+    if portal[props.verification_filename].CreatedBy == 'qPloneGoogleSitemaps':
+        portal.manage_delObjects(props.verification_filename)
+except:
+    pass
+
+props.manage_changeProperties(verification_filename = '')
+
+return state.set(portal_status_message = 'Plone Google Sitemap updated.')
Index: qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/gsm_delete_verify_file.cpy.metadata
===================================================================
--- qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/gsm_delete_verify_file.cpy.metadata	(revision 1)
+++ qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/gsm_delete_verify_file.cpy.metadata	(revision 1)
@@ -0,0 +1,14 @@
+#
+# $$
+#
+[default]
+title=Delete verify file
+
+[security]
+View=0:Authenticated
+
+[validators]
+
+[actions]
+action.success=traverse_to:string:prefs_gsm_verification
+action.failure=traverse_to:string:prefs_gsm_verification
Index: qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/gsm_edit_pinging.cpy
===================================================================
--- qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/gsm_edit_pinging.cpy	(revision 1)
+++ qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/gsm_edit_pinging.cpy	(revision 1)
@@ -0,0 +1,20 @@
+## Script (Python) "gsm_edit_pinging"
+##bind container=container
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind subpath=traverse_subpath
+##parameters=transitions=[]
+##title=Configure Plone Google Sitemap
+##
+
+from Products.qPloneGoogleSitemaps.utils import setWorkflowTransitions
+from Products.CMFCore.utils import getToolByName
+
+if not transitions:
+    w_tool = getToolByName(context, "portal_workflow")
+    transitions = [w + "#" for w in w_tool.listWorkflows()]
+
+setWorkflowTransitions(context, transitions)
+
+return state.set(portal_status_message = "Plone Google Sitemap updated.")
Index: qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/gsm_edit_pinging.cpy.metadata
===================================================================
--- qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/gsm_edit_pinging.cpy.metadata	(revision 1)
+++ qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/gsm_edit_pinging.cpy.metadata	(revision 1)
@@ -0,0 +1,14 @@
+#
+# $$
+#
+[default]
+title= Save Propertiest
+
+[security]
+View=0:Authenticated
+
+[validators]
+
+[actions]
+action.success=traverse_to:string:prefs_gsm_pinging
+action.failure=traverse_to:string:prefs_gsm_pinging
Index: qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/gsm_edit_settings.cpy
===================================================================
--- qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/gsm_edit_settings.cpy	(revision 3713)
+++ qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/gsm_edit_settings.cpy	(revision 1)
@@ -5,64 +5,16 @@
 ##bind script=script
 ##bind subpath=traverse_subpath
-##bind state=state
-##parameters=
+##parameters=states, portalTypes, blackout_list, reg_exp, urls
 ##title=Configure Plone Google Sitemap
 ##
 
 from Products.CMFCore.utils import getToolByName
-from Products.qPloneGoogleSitemaps.utils import ping_google
+from Products.qPloneGoogleSitemaps.utils import setWorkflowTransitions
+import Products.qPloneGoogleSitemaps.config as config
 
-portal_url = getToolByName(context,'portal_url')
-portalURL = portal_url()
-portal = portal_url.getPortalObject()
-req = context.REQUEST
-message = ""
+props = getToolByName(context,'portal_properties').googlesitemap_properties
+props.manage_changeProperties( states=states, portalTypes=portalTypes,
+                               blackout_list=blackout_list, reg_exp = reg_exp,
+                               urls = urls)
 
-def addSMByType(parent, sm_type, sm_id):
-    new_id = portal.invokeFactory(id=sm_id, type_name="Sitemap", sitemapType=sm_type)
-    sm = getattr(portal, new_id)
-    if sm:
-        sm.markCreationFlag()
-        return new_id
-    return None
-
-if req.get('form.button.AddContent', False):
-    new_id = addSMByType(portal, 'content', 'sitemap.xml')
-    if new_id:
-        return req.RESPONSE.redirect("%s/%s/edit" % (portalURL, new_id))
-    else:
-        message = "Can't create content sitemap"
-elif req.get('form.button.AddMobile', False):
-    new_id = addSMByType(portal, 'mobile', 'mobile-sitemap.xml')
-    if new_id:
-        return req.RESPONSE.redirect("%s/%s/edit" % (portalURL, new_id))
-    else:
-        message = "Can't create mobile sitemap"
-elif req.get('form.button.AddNews', False):
-    new_id = addSMByType(portal, 'news', 'news-sitemap.xml')
-    if new_id:
-        return req.RESPONSE.redirect("%s/%s/edit" % (portalURL, new_id))
-    else:
-        message = "Can't create news sitemap"
-else:
-    smselected = req.get('smselected', [])
-
-    if req.get('form.button.Delete', False):
-        portal.manage_delObjects(ids=smselected[:])
-        message = "Succesfully deleted: %s" % smselected
-
-    elif req.get('form.button.Ping', False):
-        pinged = []
-        message = "Google pinged. It will review your sitemap as soon as it will be able to. Processed: %s"
-        for sm_id in smselected:
-            try:
-                ping_google(portalURL, sm_id)
-            except:
-                message = "Cannot contact Google. Try again in a while. But pinged for: %s"
-                break
-            else:
-                pinged.append(sm_id)
-        message = message % pinged
-
-return state.set(next_action='traverse_to:string:prefs_gsm_settings',
-                 portal_status_message = message)
+return state.set(portal_status_message = 'Plone Google Sitemap updated.')
Index: qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/gsm_edit_settings.cpy.metadata
===================================================================
--- qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/gsm_edit_settings.cpy.metadata	(revision 1)
+++ qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/gsm_edit_settings.cpy.metadata	(revision 1)
@@ -0,0 +1,14 @@
+#
+# $$
+#
+[default]
+title= Save Propertiest
+
+[security]
+View=0:Authenticated
+
+[validators]
+
+[actions]
+action.success=traverse_to:string:prefs_gsm_settings
+action.failure=traverse_to:string:prefs_gsm_settings
Index: qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/ping_googlesitemaps.cpy
===================================================================
--- qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/ping_googlesitemaps.cpy	(revision 1)
+++ qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/ping_googlesitemaps.cpy	(revision 1)
@@ -0,0 +1,23 @@
+## Script (Python) "ping_googlesitemaps.cpy"
+##bind container=container
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind subpath=traverse_subpath
+##parameters=
+##title=Ping information to Google
+##
+
+from Products.CMFCore.utils import getToolByName
+from Products.qPloneGoogleSitemaps.utils import ping_google
+
+url = getToolByName(context, 'portal_url')()
+
+portal_msg = "Google pinged. It will review your sitemap as soon as it will be able to."
+
+try:
+    ping_google(url)
+except:
+    portal_msg = "Cannot contact Google. Try again in a while."
+    
+return state.set(portal_status_message = portal_msg)
Index: qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/ping_googlesitemaps.cpy.metadata
===================================================================
--- qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/ping_googlesitemaps.cpy.metadata	(revision 1)
+++ qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/ping_googlesitemaps.cpy.metadata	(revision 1)
@@ -0,0 +1,13 @@
+#
+# $$
+#
+[default]
+title=Google Sitemap Ping
+
+[security]
+View=0:Authenticated
+
+[validators]
+
+[actions]
+action.success=traverse_to:string:prefs_gsm_pinging
Index: qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/prefs_gsm_overview.cpt
===================================================================
--- qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/prefs_gsm_overview.cpt	(revision 3713)
+++ qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/prefs_gsm_overview.cpt	(revision 1)
@@ -30,4 +30,10 @@
             </li>
 
+            <li class="">
+               <a href=""
+                  tal:attributes="href string: prefs_gsm_pinging"
+                  i18n:translate="label_logs">Pinging</a>
+            </li>
+
         </ul>
 
@@ -57,62 +63,27 @@
 
 <!--              -->
-            <dl tal:define="view here/@@sitemap_settings;
-                            sitemaps view/sitemapsURLByType;
-                            all sitemaps/all | nothing">
+            <dl>
             <dt>First step</dt>
-            <dd>To enable Google Sitemaps on your site, add a sitemap at 
-            <a href="prefs_gsm_settings"
-                tal:attributes="href string:$portal_url/prefs_gsm_settings">Google Sitemap settings</a> tab.
-            You can add one of the following sitemap types: <strong>content, mobile or news</strong>.
-            Different sitemap types index their own content and do not depend on other sitemaps.
+            <dd>Your site is Google Sitemaps enabled already. Check 
+            <a href="google-sitemaps"
+                tal:attributes="href string:$portal_url/google-sitemaps">sitemap XML</a> 
+            to see generated sitemap document of your website. It should contain URLs of 
+            all published objects. If you see something that should not be indexed by 
+            Google, retract objects or exclude sections with robots.txt (that GoogleBot 
+            obey).
             </dd>
             <dt>Second step</dt>
-            <dd>
-            <tal:condition-true condition="all">
-            Your site is already Google Sitemaps enabled. Check 
-            <tal:loop repeat="smdata all">
-            <a href="google-sitemaps"
-               tal:attributes="href smdata/url"
-               tal:content="smdata/id">sitemap id</a>
-            <span tal:omit-tag=""
-                  tal:condition="not: repeat/smdata/end">,</span>
-            </tal:loop>
-            to see generated sitemap document(s) of your website. 
-            </tal:condition-true>
-            <tal:condition-false condition="not:all">
-            After adding Google Sitemap(s), check whether they where generated correctly.
-            </tal:condition-false>
-
-            They should contain URLs of all published objects. If you see
-            something that should not be indexed by Google, retract objects or
-            exclude sections with robots.txt (that GoogleBot obeys).
-            </dd>
-            <dt>Third step</dt>
-            <dd>Make Google know about your sitemap(s):
+            <dd>Make Google know of your sitemap:
             <ol>
                 <li>go to <a href="https://www.google.com/webmasters/sitemaps">Google 
                 Sitemaps Central</a> (logging in / signing up as necessary)</li>
-                <tal:condition-true condition="all">
-
-                <li>add your sitemap URL(s): 
-                  <ul>
-                    <tal:loop repeat="smdata all">
-                    <li>
-                      <code tal:content="smdata/url">http://example.com/sitemaps.xml</code>
-                    </li>
-                    </tal:loop>
-                  </ul>
-                </tal:condition-true>
-
-                <tal:condition-false condition="not:all">
-                <li>This step will display urls to your sitemap(s) after adding it(them) in previous step(s)</li>
-                </tal:condition-false>
-
+                <li>add your sitemap URL: 
+                <code tal:content="string:$portal_url/google-sitemaps">http://example.com/google-sitemaps</code>
             </ol>
             It takes a while for your sitemap to be processed by Google. 
-            It usually processes the sitemap within 24 hours so do not expect your 
+            Usually within 24 hours it processes hte sitemap so do not expect your 
             submission to be processed instantly.
             </dd>
-            </dl>
+            <dl>
             <h2>Helpful resources</h2>
             <dl>
@@ -126,9 +97,4 @@
             <dd>Stay tuned. We are preparing new and fresh releases. Product page will 
             help you to keep informed about them.</dd>
-            <dt><a href="http://projects.quintagroup.com/products/wiki/qPloneGoogleSitemaps">Plone Google Sitemaps documentation area.</dt>
-            <dd>Visit product's documentation area to familiarize yourself with qPloneGoogleSitemaps product in
-            more details.
-            </dd>
-
             </dl>
         </div>
Index: qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/prefs_gsm_pinging.cpt
===================================================================
--- qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/prefs_gsm_pinging.cpt	(revision 1)
+++ qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/prefs_gsm_pinging.cpt	(revision 1)
@@ -0,0 +1,115 @@
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US"
+      xmlns:metal="http://xml.zope.org/namespaces/metal"
+      xmlns:tal="http://xml.zope.org/namespaces/tal"
+      lang="en-US"
+      metal:use-macro="here/prefs_main_template/macros/master"
+      i18n:domain="qPloneGoogleSitemaps"> 
+<body>
+    <div metal:fill-slot="prefs_configlet_main"
+        tal:define="errors python:request.get('errors', {})">
+
+        <div class="documentEditable">
+            <ul class="contentViews">
+                <li class="">
+                    <a href=""
+                    tal:attributes="href string: prefs_gsm_overview"
+                    i18n:translate="label_properties">Overview</a>
+                </li>
+
+                <li class="">
+                    <a href=""
+                    tal:attributes="href string:prefs_gsm_verification"
+                    i18n:translate="label_properties">Verification</a>
+                </li>
+
+                <li class="">
+                <a href=""
+                    tal:attributes="href string: prefs_gsm_settings">
+                    Settings</a>
+                </li>
+
+                <li class="selected">
+                <a href=""
+                    tal:attributes="href string: ${template/id}"
+                    i18n:translate="label_logs">Pinging</a>
+                </li>
+
+            </ul>
+
+            <div class="contentActions">
+            &nbsp;
+            </div>
+            <div class="documentContent">
+                <h1 i18n:translate="heading_plonegooglesitemaps">Plone Google Sitemaps</h1>
+                <a href=""
+                class="link-parent"
+                tal:attributes="href string: $portal_url/plone_control_panel"
+                i18n:translate="label_up_to_plone_setup">
+                Up to Plone Setup
+                </a>
+                <form>
+                    <fieldset>
+                        <legend>Google Ping</legend>
+                        <p>By pressing "Ping Google" button you inform Google that it
+                        should reread your sitemap as you did some modification on 
+                        the site. Google usually rereads your sitemap with it's 
+                        own schedule but you have possibility to hint it about best
+                        time to do that.</p>
+                        <div class="formControls">
+                            <input class="context"
+                                tabindex=""
+                                type="submit"
+                                name="form.button.Ping"
+                                value="Ping Google"
+                                i18n:attributes="value"
+                                tal:attributes="tabindex tabindex/next;" />
+                        </div>
+                    </fieldset>
+                    <div class="field"
+                         tal:define="portal_workflow portal/portal_workflow;
+                                     getWorkflowTransitions python:modules['Products.qPloneGoogleSitemaps.utils'].getWorkflowTransitions">
+                            <label for= "portal_workflow">
+                                        Workflows to ping
+                            </label>
+                            <div class="formHelp">
+                                        Transitions after which Google have been pinged
+                            </div>
+                            <fieldset class="workflow"
+                                      tal:repeat="workflow portal_workflow/listWorkflows">
+                                <legend tal:content="workflow">Workflow title (and id)</legend>
+                                <div class="field"
+                                    tal:repeat="transition python:getWorkflowTransitions(context,workflow)">
+                                <tal:transition define="enabled python:transition.after_script_name in ['', 'ping_googlesitemap'];
+                                    name string:${workflow}#${transition/id}">
+                                    <input type="checkbox"
+                                           name="transitions:list"
+                                           tal:attributes=" id name;
+                                                            value name;
+                                                            checked python:enabled and transition.after_script_name;
+                                                            disabled not:enabled"/>
+                                    <label tal:content="string:${transition/getId}: ${transition/title_or_id}"
+                                           tal:attributes="for name; class python:test(enabled, None, 'discreet')">Transition id
+                                    </label>
+                                    <span  class="discreet"
+                                            tal:condition="not:enabled"
+                                            tal:content="string:(${transition/after_script_name})" />
+                                </tal:transition>
+                            </div>
+                        </fieldset>
+                        <div class="formControls">
+                            <input class="context"
+                                tabindex=""
+                                type="submit"
+                                name="form.button.Save"
+                                value="Save"
+                                i18n:attributes="value"
+                                tal:attributes="tabindex tabindex/next;" />
+                        </div>
+                    </div>
+                    <input type="hidden" name="form.submitted" value="1" />
+                </form>
+            </div>
+        </div>
+    </div>
+</body>
+</html>
Index: qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/prefs_gsm_pinging.cpt.metadata
===================================================================
--- qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/prefs_gsm_pinging.cpt.metadata	(revision 1)
+++ qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/prefs_gsm_pinging.cpt.metadata	(revision 1)
@@ -0,0 +1,15 @@
+#
+# $$
+#
+[default]
+title=Plone Google Sitemap Configuration
+
+[security]
+View=0:Authenticated
+
+[validators]
+
+[actions]
+action.success..Ping=traverse_to:string:ping_googlesitemaps
+action.success..Save=traverse_to:string:gsm_edit_pinging
+action.failure=traverse_to:string:prefs_gsm_pinging
Index: qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/prefs_gsm_settings.cpt
===================================================================
--- qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/prefs_gsm_settings.cpt	(revision 3713)
+++ qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/prefs_gsm_settings.cpt	(revision 1)
@@ -26,4 +26,9 @@
                    Settings</a>
                 </li>
+                <li class="">
+                <a href=""
+                   tal:attributes="href string: prefs_gsm_pinging">
+                   Pinging</a>
+                </li>
             </ul>
             <div class="contentActions">
@@ -38,7 +43,4 @@
                    Up to Plone Setup
                 </a>
-
-                
-
                 <form name="edit_form"
                     action="."
@@ -47,109 +49,122 @@
                     tal:attributes="action string:${here_url}/${template/getId}" >
 
-                <fieldset tal:define="view here/@@sitemap_settings;
-                                      sitemaps view/sitemapsDict;">
+                <fieldset tal:define="props portal/portal_properties/googlesitemap_properties;
+                                      portal_types portal/portal_types;">
                     <legend i18n:translate="legend_plonesitemap_configuration_details">
-                        Google SiteMaps configuration
+                        Google SiteMap configuration
                     </legend>
-
-                    <table class="listing"
-                           summary="Sitemaps management"
-                           i18n:attributes="summary summary_sitemaps_management;"
-                           tal:condition="sitemaps">
-                        <thead>
-                            <tr>
-                            <th></th>
-                            <th>Type</th>
-                            <th>Edit Sitemap</th>
-                            <th>Size (bytes)</th>
-                            <th>Entries</th>
-                            </tr>
-                        </thead>
-                        <tbody>
-                            <tal:items tal:repeat="data sitemaps">
-                            <tr tal:define="oddrow repeat/data/odd;"
-                                tal:attributes="class python:test(oddrow, 'even', 'odd')" >
-                                <td>
-                                <input type="checkbox" class="noborder"
-                                        name="smselected:list" id="#" value="#" tabindex=""
-                                        tal:attributes="value    data/sm_id;
-                                                        id       string:cb_${data/sm_id};
-                                                        alt      data/sm_type;
-                                                        title    data/sm_type;
-                                                        tabindex tabindex/next;" />
-                                </td>
-                                <td>
-                                <strong tal:content="data/sm_type"> Sitemap type </strong>
-                                </td>
-                                <td>
-                                <a alt="" title="" href="http://"
-                                    tal:attributes="href string:${data/sm_url}/edit;
-                                                    title data/sm_id;
-                                                    alt string:${data/sm_id}"
-                                    tal:content="data/sm_id">Edit default sitemap type </a>
-                                </td>
-                                <td tal:content="string:${data/sm_size}"> 10 000 in bytes
-                                </td>
-                                <td tal:content="string:${data/sm_entries}"> 50 000 items
-                                </td>
-                            </tr>
-                            </tal:items>
-                            <tr>
-                            <th colspan="3"><strong>Limitations:</strong></th>
-                            <th><strong>10,485,760</strong></th>
-                            <th><strong>50,000</strong></th>
-                            </tr>
-                        </tbody>
-                        </table>
-
-                        <div class="formControls"
-                            tal:define="process_creation request/process_creation|nothing;"
-                            i18n:domain="plone">
-                            <input class="context"
-                                tabindex=""
-                                type="submit"
-                                name="form.button.AddContent"
-                                value="Add Content Sitemap"
-                                i18n:attributes="value"
-                                tal:condition="not:view/hasContentSM"
-                                tal:attributes="tabindex tabindex/next;" />
-                            <input class="context"
-                                tabindex=""
-                                type="submit"
-                                name="form.button.AddMobile"
-                                value="Add Mobile Sitemap"
-                                i18n:attributes="value"
-                                tal:condition="not:view/hasMobileSM"
-                                tal:attributes="tabindex tabindex/next;" />
-                            <input class="context"
-                                tabindex=""
-                                type="submit"
-                                name="form.button.AddNews"
-                                value="Add News Sitemap"
-                                i18n:attributes="value"
-                                tal:condition="not:view/hasNewsSM"
-                                tal:attributes="tabindex tabindex/next;" />
-                            <tal:block condition="sitemaps">
-                            <input class="context"
-                                tabindex=""
-                                type="submit"
-                                name="form.button.Delete"
-                                value="Delete"
-                                i18n:attributes="value"
-                                tal:attributes="tabindex tabindex/next;" />
-                            <input class="context"
-                                tabindex=""
-                                type="submit"
-                                name="form.button.Ping"
-                                value="Ping"
-                                i18n:attributes="value"
-                                tal:attributes="tabindex tabindex/next;" />
-                            </tal:block>
+                    <div class="field" 
+                        tal:define="portalTypes props/portalTypes;">
+                        <label for="portalTypes ">
+                            Define the types
+                        </label>
+                        <div class="formHelp">
+                            Define the types to be included in sitemap.
                         </div>
 
-                    <tal:block condition="sitemaps">
-                    <p><strong>Note</strong>: Ping button allows you to make additional ping (apart from automatic one).</p>
-                    </tal:block>
+                        <select multiple="multiple"
+                                name="portalTypes"
+                                id="portalTypes"
+                                tal:attributes="tabindex tabindex/next;">
 
+                        <tal:contenttypes repeat="type python:portal_types.listContentTypes()">
+                            <option tal:define="type python:portal_types.getTypeInfo(type);
+                                                type_name type/Title;
+                                                portal_type type/getId"
+                                    tal:attributes="value portal_type;
+                                                    selected python: test(portal_type in portalTypes, 'selected', None)"
+                                    tal:content="type_name">
+                                Article
+                            </option>
+                        </tal:contenttypes>
+                        </select>
+                    </div>
+
+                    <div class="field" 
+                        tal:define="states props/states;">
+                        <label for="states ">
+                            Review status
+                        </label>
+
+                        <div class="formHelp">
+                            You may include items in sitemap depend of their review state.
+                        </div>
+
+                        <textarea name="states:lines" 
+                                id="states"
+                                cols="20"
+                                rows="8"
+                                tabindex=""
+                                tal:attributes="tabindex tabindex/next;"
+                                tal:define="content python:modules['string'].join(states,'\n');"
+                                tal:content="content">
+                        </textarea>
+                    </div>
+                    <div class="field" 
+                        tal:define="blackout_list props/blackout_list;">
+                        <label for="blackout_list ">
+                            Blackout entries
+                        </label>
+                        <div class="formHelp">
+                            The objects with the given ids will not be included in sitemap.
+                        </div>
+                        <textarea name="blackout_list:lines" 
+                                id="reg_exp"
+                                cols="20"
+                                rows="8"
+                                tabindex=""
+                                tal:attributes="tabindex tabindex/next;"
+                                tal:define="content python:modules['string'].join(blackout_list ,'\n');"
+                                tal:content="content">
+                        </textarea>
+                    </div>
+                    <div class="field" 
+                        tal:define="reg_exp props/reg_exp;">
+                        <label for="reg_exp">
+                            URL processing Regular Expressions
+                        </label>
+                        <div class="formHelp">
+                            Provide regular expressions (in Perl syntax), one per line to be applied to URLs before including them into Sitemap. For instance, "s/\/index_html//" will remove /index_html from URLs representing default documents.
+                        </div>
+
+                        <textarea name="reg_exp:lines" 
+                                id="reg_exp"
+                                cols="20"
+                                rows="8"
+                                tabindex=""
+                                tal:attributes="tabindex tabindex/next;"
+                                tal:define="content python:modules['string'].join(reg_exp ,'\n');"
+                                tal:content="content">
+                        </textarea>
+                    </div>
+                    <div class="field" 
+                        tal:define="urls props/urls;">
+                        <label for="urls"> Additional URLs
+                        </label>
+                        <div class="formHelp">
+                            Define additional URLs that are not objects and that should be included in sitemap.
+                        </div>
+                        <textarea name="urls:lines" 
+                                id="urls"
+                                cols="20"
+                                rows="8"
+                                tabindex=""
+                                tal:attributes="tabindex tabindex/next;"
+                                tal:define="content python:modules['string'].join(urls ,'\n');"
+                                tal:content="content">
+                        </textarea>
+                    </div>
+
+                    <div class="formControls"
+                        tal:define="process_creation request/process_creation|nothing;"
+                        i18n:domain="plone">
+                        <input class="context"
+                            tabindex=""
+                            type="submit"
+                            name="form.button.Save"
+                            value="Save"
+                            i18n:attributes="value"
+                            tal:attributes="tabindex tabindex/next;" />
+                    </div>
                     </fieldset>
                     <input type="hidden" name="form.submitted" value="1" />
Index: qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/prefs_gsm_settings.cpt.metadata
===================================================================
--- qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/prefs_gsm_settings.cpt.metadata	(revision 3713)
+++ qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/prefs_gsm_settings.cpt.metadata	(revision 1)
@@ -11,9 +11,5 @@
 
 [actions]
-action.success..AddContent=traverse_to:string:gsm_edit_settings
-action.success..AddMobile=traverse_to:string:gsm_edit_settings
-action.success..AddNews=traverse_to:string:gsm_edit_settings
-action.success..Delete=traverse_to:string:gsm_edit_settings
-action.success..Ping=traverse_to:string:gsm_edit_settings
+action.success..Save=traverse_to:string:gsm_edit_settings
 action.success=traverse_to:string:gsm_edit_settings
-action.failure=redirect_to:string:prefs_gsm_settings
+action.failure=traverse_to:string:prefs_gsm_settings
Index: qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/prefs_gsm_verification.cpt
===================================================================
--- qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/prefs_gsm_verification.cpt	(revision 3713)
+++ qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/prefs_gsm_verification.cpt	(revision 1)
@@ -8,5 +8,5 @@
     <div metal:fill-slot="prefs_configlet_main"
         tal:define="errors python:request.get('errors', {});
-                    view here/@@sitemap_settings;">
+                    props portal/portal_properties/googlesitemap_properties">
 
         <div class="documentEditable">
@@ -30,4 +30,10 @@
                 </li>
 
+                <li class="">
+                <a href=""
+                    tal:attributes="href string: prefs_gsm_pinging"
+                    i18n:translate="label_logs">Pinging</a>
+                </li>
+
             </ul>
 
@@ -44,7 +50,7 @@
                 </a>
 
-                <form tal:define="vfiles view/getVerificationFiles;
-                                  step1 python:test(vfiles, 'discreet', '');
-                                  step2 python:test(not vfiles, 'discreet', '')">
+                <form tal:define="file_provided props/verification_filename;
+                                  step1 python:test(file_provided, 'discreet', '');
+                                  step2 python:test(not file_provided, 'discreet', '')">
                     <ol>
                         <li tal:attributes="class step1">
@@ -55,8 +61,12 @@
                         </li>
                         <li tal:attributes="class step1">Provide verification file name:
-                            <p><input name="verify_filename" id="verify_filename" type="text"></p>
+                            <p><input name="verify_filename" id="verify_filename" type="text"
+                                tal:attributes="value props/verification_filename;
+                                                disabled step1"
+                            ></p>
                         </li>
                         <li tal:attributes="class step1">
-                                <input name="form.button.CreateFile" id="create_file" type="submit" value="Create verification file"/>
+                                <input name="form.button.CreateFile" id="create_file" type="submit" value="Create verification file"
+                                tal:attributes="disabled step1"/>
                                 <input type="hidden" name="form.submitted" value="1" />
                         </li>
@@ -68,10 +78,7 @@
                         </li>
                         <li class="discreet"
-                            tal:attributes="class step2"
-                            tal:condition="vfiles">
-                            <strong>Existent verification files:</strong>
-                            <ul><li tal:repeat="vf vfiles"
-                                    tal:content="vf">verification file id
-                            </li></ul>
+                            tal:attributes="class step2"><input name="form.button.DeleteFile" id="remove_file" type="submit" value="Remove verification file"
+                            tal:attributes="disabled step2;
+                                            value string:Remove ${file_provided} verifivation file"/>
                         </li>
                     </ol>
Index: qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/prefs_gsm_verification.cpt.metadata
===================================================================
--- qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/prefs_gsm_verification.cpt.metadata	(revision 3713)
+++ qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/prefs_gsm_verification.cpt.metadata	(revision 1)
@@ -12,3 +12,4 @@
 [actions]
 action.success..CreateFile=traverse_to:string:gsm_create_verify_file
+action.success..DeleteFile=traverse_to:string:gsm_delete_verify_file
 action.failure=traverse_to:string:prefs_gsm_verification
Index: qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/searchForGoogleSitemapObjects.py
===================================================================
--- qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/searchForGoogleSitemapObjects.py	(revision 1)
+++ qPloneGoogleSitemaps/trunk/skins/qPloneGoogleSitemaps/searchForGoogleSitemapObjects.py	(revision 1)
@@ -0,0 +1,30 @@
+## Script (Python) "searchForGoogleSitemapObjects"
+##bind container=
+##bind context=context
+##bind namespace=
+##bind script=script
+##bind subpath=traverse_subpath
+##parameters=path=None
+##
+from Products.CMFCore.utils import getToolByName
+from Products.qPloneGoogleSitemaps.utils import applyOperations
+from string import find
+
+if not path:
+    path = '/'.join(context.getPhysicalPath())
+
+catalog = getToolByName(context, 'portal_catalog')
+try:
+    props = getToolByName(context, 'portal_properties').googlesitemap_properties
+    objects = catalog(path = path,
+                portal_type = props.portalTypes,
+                review_state = props.states,)
+except AttributeError:
+    # We are run without being properly installed, do default processing
+    return applyOperations(catalog(path = path,
+                                   review_state = ['published'],),
+                                   [])
+
+blackout_list = props.blackout_list
+return applyOperations([ob for ob in objects if (ob.getId not in blackout_list)],
+                    props.getProperty('reg_exp'))
