diff --git a/src/nwmatcher.js b/src/nwmatcher.js
index <HASH>..<HASH> 100644
--- a/src/nwmatcher.js
+++ b/src/nwmatcher.js
@@ -874,7 +874,9 @@ NW.Dom = (function(global) {
         if (snap && !snap.isExpired) {
           if (snap.Results[selector] &&
             snap.Roots[selector] == from) {
-            return snap.Results[selector];
+            return callback ?
+              concat(data, snap.Results[selector], callback) :
+              snap.Results[selector];
           }
         } else {
           // temporarily pause caching while we are getting hammered with dom mutations (jdalton)
@@ -898,6 +900,17 @@ NW.Dom = (function(global) {
       // this block can be safely removed, it is a speed booster on big pages
       // and still maintain the mandatory "document ordered" result set
 
+      if (simpleSelector.test(selector)) {
+        switch (selector.charAt(0)) {
+          case '.': data = concat(data, byClass(selector.slice(1), from), callback);
+          case '#': data = concat(data, [ byId(selector.slice(1), from) ], callback);
+          default: data = concat(data, byTag(selector, from), callback);
+        }
+        snap.Roots[selector] = from;
+        snap.Results[selector] = data;
+        return data;
+      }
+
       // commas separators are treated
       // sequentially to maintain order
       if (selector.indexOf(',') < 0) {
invoke provided callbacks also when returning cached results, use a faster resolver for simple selectors in client_api