Index: src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListPlugin.java
===================================================================
--- src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListPlugin.java	(revision 31)
+++ src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListPlugin.java	(revision 32)
@@ -719,6 +719,9 @@
             wikiServers.add(context.getMainXWiki());
         }
 
+        if (log.isInfoEnabled())
+           log.info("WatchList checking subscribers in wikis: " + StringUtils.join(wikiServers, ","));
+
         try {
             for (Iterator iter = wikiServers.iterator(); iter.hasNext();) {
                 String wiki = (String) iter.next();
Index: src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListJob.java
===================================================================
--- src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListJob.java	(revision 31)
+++ src/main/java/com/xpn/xwiki/plugin/watchlist/WatchListJob.java	(revision 32)
@@ -29,6 +29,7 @@
 import com.xpn.xwiki.plugin.mailsender.MailSenderPlugin;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.commons.lang.StringUtils;
 import org.apache.velocity.VelocityContext;
 import org.joda.time.DateTime;
 import org.joda.time.Days;
@@ -162,6 +163,8 @@
                         // Retreive WatchList Object for each subscribers
                         Document subscriber = new Document(
                             context.getWiki().getDocument((String) it.next(), context), context);
+                        LOG.info(logprefix + "checkingDocumentsForUser " +
+                                           subscriber.getFullName());
                         Object userObj = subscriber.getObject("XWiki.XWikiUsers");
                         Object notificationCriteria =
                             subscriber.getObject(WatchListPlugin.WATCHLIST_CLASS);
@@ -292,15 +295,31 @@
                     updatedDocument.getWiki() + ":" + updatedDocument.getSpace();
             boolean documentAdded = false;
 
+            if (LOG.isDebugEnabled()) {
+                if (!updatedDocumentSpace.equals("dev:Watch"))
+                 LOG.debug("Checking Match for subscriber " + subscriber + " for document " + updatedDocumentName + " in space " + updatedDocumentSpace + " for spaces " + StringUtils.join(watchedSpaces, ","));                             
+            }
+
             if (watchedSpaces!=null) {
                 for (int i = 0; i < watchedSpaces.length; i++) {
-                    if (updatedDocumentSpace.equals(watchedSpaces[i])
-                            && context.getWiki().getRightService()
-                            .hasAccessLevel("view", subscriber, updatedDocumentName, context))
-                    {
-                        filteredDocumentList.add(updatedDocumentName);
-                        documentAdded = true;
-                        break;
+                    if (updatedDocumentSpace.equals(watchedSpaces[i])) {
+                        String origDatabase = context.getDatabase();
+                        try {
+                            context.setDatabase(updatedDocument.getWiki());
+                            if (context.getWiki().getRightService()
+                                    .hasAccessLevel("view", subscriber, updatedDocumentName, context))
+                            {
+                                filteredDocumentList.add(updatedDocumentName);
+                                documentAdded = true;
+                                break;
+                            } else {
+                                if (LOG.isInfoEnabled()) {
+                                    LOG.info("Matching doc " + updatedDocumentName + " for subscriber " + subscriber + " missing rights in context " + context.getDatabase());
+                                }
+                            }
+                        } finally {
+                            context.setDatabase(origDatabase);
+                        }
                     }
                 }
             }
@@ -311,13 +330,24 @@
                 Iterator watchedDocumentIt = watchedDocuments.iterator();
                 while (watchedDocumentIt.hasNext()) {
                     String watchedDocumentName = (String) watchedDocumentIt.next();
-                    if (updatedDocumentName.equals(watchedDocumentName)
-                            && context.getWiki().getRightService()
-                            .hasAccessLevel("view", subscriber, updatedDocumentName, context))
-                    {
-                        filteredDocumentList.add(updatedDocumentName);
-                        documentAdded = true;
-                        break;
+                    if (updatedDocumentName.equals(watchedDocumentName)) {
+                        String origDatabase = context.getDatabase();
+                        try {
+                            context.setDatabase(updatedDocument.getWiki());
+                            if ( context.getWiki().getRightService()
+                                    .hasAccessLevel("view", subscriber, updatedDocumentName, context))
+                            {
+                                filteredDocumentList.add(updatedDocumentName);
+                                documentAdded = true;
+                                break;
+                            } else {
+                                if (LOG.isInfoEnabled()) {
+                                    LOG.info("Matching doc " + updatedDocumentName + " for subscriber " + subscriber + " missing rights in context " + context.getDatabase());
+                                }
+                            }
+                        } finally {
+                            context.setDatabase(origDatabase);
+                        }
                     }
                 }
             }
@@ -338,9 +368,23 @@
                     for (int i=0;i<watchedTags.length;i++) {
                         String tag = watchedTags[i];
                         if (tagList1.contains(tag)||tagList2.contains(tag)) {
-                            filteredDocumentList.add(updatedDocumentName);
-                            documentAdded = true;
-                            break;
+                            String origDatabase = context.getDatabase();
+                            try {
+                                context.setDatabase(updatedDocument.getWiki());
+                                if ( context.getWiki().getRightService()
+                                        .hasAccessLevel("view", subscriber, updatedDocumentName, context))
+                                {
+                                    filteredDocumentList.add(updatedDocumentName);
+                                    documentAdded = true;
+                                    break;
+                                } else {
+                                    if (LOG.isInfoEnabled()) {
+                                        LOG.info("Matching doc " + updatedDocumentName + " for subscriber " + subscriber + " missing rights in context " + context.getDatabase());
+                                    }
+                                }
+                            } finally {
+                                context.setDatabase(origDatabase);
+                            }
                         }
                     }
                 }
