diff --git a/core/src/main/java/de/javakaffee/web/msm/MemcachedSessionService.java b/core/src/main/java/de/javakaffee/web/msm/MemcachedSessionService.java
index <HASH>..<HASH> 100644
--- a/core/src/main/java/de/javakaffee/web/msm/MemcachedSessionService.java
+++ b/core/src/main/java/de/javakaffee/web/msm/MemcachedSessionService.java
@@ -575,7 +575,13 @@ public class MemcachedSessionService {
             // -> with container managed auth protected resources should not be ignored
             // TODO: check ignored resource also below
             if (!_sticky && !_trackingHostValve.isIgnoredRequest() && !isContainerSessionLookup()) {
-                result.registerReference();
+                synchronized (_manager.getSessionsInternal()) {
+                    // the session could have been removed in the meantime...
+                    if(_manager.getSessionInternal(id) == null) {
+                        addValidLoadedSession(result);
+                    }
+                    result.registerReference();
+                }
             }
         }
         else if ( canHitMemcached( id ) && _invalidSessionsCache.get( id ) == null ) {
Fix potential race condition for non-sticky sessions

This would have caused "No session found in session map for <sessionId>"
debug logs, and the session (potentially updated) would not have been
stored/updated in memcached.