Index: src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListPlugin.java
===================================================================
--- src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListPlugin.java	(revision 29)
+++ src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListPlugin.java	(working copy)
@@ -29,6 +29,7 @@
 import com.xpn.xwiki.plugin.XWikiPluginInterface;
 import com.xpn.xwiki.plugin.lucene.LucenePlugin;
 import com.xpn.xwiki.plugin.lucene.SearchResult;
+import com.xpn.xwiki.plugin.lucene.SearchResults;
 import com.xpn.xwiki.plugin.scheduler.SchedulerPlugin;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -516,10 +517,24 @@
      */
     public List getWatchListWhatsNew(String user, XWikiContext context) throws Exception
     {
+        return getWatchListWhatsNew(user, false, 20, context);
+    }
+
+    /**
+     * Get the list of the elements watched by user ordered by last modification date, descending
+     *
+     * @param user XWiki User
+     * @param forceMonoWiki force mono wiki mode running and hql query
+     * @param context Context of the request
+     * @return The list of the watched elements ordered by last modification date, descending
+     * @throws XWikiException If the search request fails
+     */
+    public List getWatchListWhatsNew(String user, boolean forceMonoWiki, int nbElements, XWikiContext context) throws Exception
+    {
         List<String> results = new ArrayList<String>();
         BaseObject watchListObject = this.getWatchListObject(user, context);
 
-        if (context.getWiki().isVirtualMode()) {
+        if ((!forceMonoWiki)||context.getWiki().isVirtualMode()) {
             // In virtual mode RSS feeds are generated from a Lucene query
             String documents = watchListObject.getLargeStringValue("documents").trim();
             String spaces = watchListObject.getLargeStringValue("spaces");
@@ -528,11 +543,20 @@
             if (!StringUtils.isBlank(request)) {
                 String language = StringUtils.isBlank(context.getLanguage()) ? "default" : context.getLanguage();
                 LucenePlugin lucene = (LucenePlugin) context.getWiki().getPlugin("lucene", context);
-                List<SearchResult> luceneResults =
-                    lucene.getSearchResults(request, "-date", null, language, context).getResults(0, 20);
+                if (log.isInfoEnabled()) {
+                    log.info("Running lucene query " + request);
+                }
 
+                SearchResults luceneSearchResults = lucene.getSearchResults(request, "-date", null, language, context);
+                if (log.isInfoEnabled()) {
+                    log.info("Lucene query return " + luceneSearchResults.getTotalHitcount() + " results before security checks");
+                }
+                List<SearchResult> luceneResults = luceneSearchResults.getResults(1, nbElements);
                 for (SearchResult result : luceneResults) {
                     results.add(result.getWiki() + ":" + result.getFullName());
+                }              
+                if (log.isInfoEnabled()) {
+                     log.info("Lucene query return " + results.size() + " results after security checks and max items");
                 }
             }
         } else {
@@ -546,7 +570,7 @@
             String request = "select doc.fullName from XWikiDocument as doc where doc.space in ('" +
                 watchedSpaces + "') or doc.fullName in ('" + watchedDocuments + "') " +
                 "order by doc.date desc";
-            results.addAll(context.getWiki().getStore().search(request, 20, 0, context));
+            results.addAll(context.getWiki().getStore().search(request, nbElements, 0, context));
         }
         return results;
     }
Index: src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListPluginApi.java
===================================================================
--- src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListPluginApi.java	(revision 28)
+++ src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListPluginApi.java	(working copy)
@@ -246,6 +246,33 @@
     }
 
     /**
+     * Get the list of the elements watched by user ordered by last modification date, descending
+     *
+     * @param user XWiki User
+     * @param nbElements Number of elements to return
+     * @return the list of the elements watched by user ordered by last modification date, descending
+     * @throws XWikiException If the search request fails
+     */
+    public List getWatchListWhatsNew(String user, int nbElements) throws Exception
+    {
+        return getWatchListPlugin().getWatchListWhatsNew(user, false, nbElements, context);
+    }
+
+    /**
+     * Get the list of the elements watched by user ordered by last modification date, descending
+     *
+     * @param user XWiki User
+     * @param forceMonoWiki force running an HQL query
+     * @param nbElements number of returned elements
+     * @return the list of the elements watched by user ordered by last modification date, descending
+     * @throws XWikiException If the search request fails
+     */
+    public List getWatchListWhatsNew(String user, boolean forceMonoWiki, int nbElements) throws Exception
+    {
+        return getWatchListPlugin().getWatchListWhatsNew(user, forceMonoWiki, nbElements, context);
+    }
+
+    /**
      * Get the WatchList plugin
      *
      * @return the WatchList plugin
Index: src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListJob.java
===================================================================
--- src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListJob.java	(revision 28)
+++ src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListJob.java	(working copy)
@@ -222,9 +222,14 @@
     private List filter(List updatedDocuments,
         Object notificationCriteria, String subscriber) throws XWikiException
     {
-        String spaceCriterion = (String) notificationCriteria.getProperty("spaces").getValue();
-        String documentCriterion = (String) notificationCriteria.getProperty("documents").getValue();
-        String query = (String) notificationCriteria.getProperty("query").getValue();
+        if (notificationCriteria==null)
+        {
+            return new ArrayList();
+        }
+                 
+        String spaceCriterion = (notificationCriteria.getProperty("spaces")==null) ? "" : (String) notificationCriteria.getProperty("spaces").getValue();
+        String documentCriterion = (notificationCriteria.getProperty("documents")==null) ? "" : (String) notificationCriteria.getProperty("documents").getValue();
+        String query = (notificationCriteria.getProperty("query")==null) ? "" :  (String) notificationCriteria.getProperty("query").getValue();
 
         List watchedDocuments = new ArrayList();
         if (spaceCriterion.length() == 0 && documentCriterion.length() == 0
