diff --git oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ObservationManagerImpl.java oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ObservationManagerImpl.java
index 4e184d9..6f8f21c 100644
--- oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ObservationManagerImpl.java
+++ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ObservationManagerImpl.java
@@ -367,7 +367,7 @@ public class ObservationManagerImpl implements JackrabbitObservationManager {
     }
 
     @Override
-    public EventListenerIterator getRegisteredEventListeners() throws RepositoryException {
+    public EventListenerIterator getRegisteredEventListeners() {
         return new EventListenerIteratorAdapter(processors.keySet());
     }
 
diff --git oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryImpl.java oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryImpl.java
index 4de2570..d29ed74 100644
--- oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryImpl.java
+++ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryImpl.java
@@ -42,6 +42,7 @@ import javax.jcr.SimpleCredentials;
 import javax.jcr.Value;
 import javax.security.auth.login.LoginException;
 
+import com.google.common.base.Predicate;
 import com.google.common.collect.ImmutableMap;
 
 import org.apache.commons.io.IOUtils;
@@ -274,8 +275,9 @@ public class RepositoryImpl implements JackrabbitRepository {
             }
             boolean relaxedLocking = getRelaxedLocking(attributes);
 
+            RefreshPredicate predicate = new RefreshPredicate();
             RefreshStrategy refreshStrategy = refreshInterval == null
-                ? new RefreshStrategy.LogOnce(60)
+                ? new RefreshStrategy.ConditionalRefreshStrategy(new RefreshStrategy.LogOnce(60), predicate)
                 : new RefreshStrategy.Timed(refreshInterval);
             ContentSession contentSession = contentRepository.login(credentials, workspaceName);
             SessionDelegate sessionDelegate = createSessionDelegate(refreshStrategy, contentSession);
@@ -283,6 +285,7 @@ public class RepositoryImpl implements JackrabbitRepository {
                     statisticManager, securityProvider,
                     createAttributes(refreshInterval, relaxedLocking),
                     sessionDelegate, observationQueueLength, commitRateLimiter);
+            predicate.setSessionContext(context);
             return context.getSession();
         } catch (LoginException e) {
             throw new javax.jcr.LoginException(e.getMessage(), e);
@@ -506,6 +509,26 @@ public class RepositoryImpl implements JackrabbitRepository {
         }
     }
 
+    /**
+     * Predicate which ensures that refresh strategy is invoked only
+     * if there is no event listeners registered with the session
+     */
+    private static class RefreshPredicate implements Predicate<Long>{
+        private SessionContext sessionContext;
+
+        @Override
+        public boolean apply(@Nullable Long input) {
+            if (sessionContext == null){
+                return true;
+            }
+            return !sessionContext.hasEventListeners();
+        }
+
+        public void setSessionContext(SessionContext sessionContext) {
+            this.sessionContext = sessionContext;
+        }
+    }
+
     private static class RegistrationTask implements Runnable {
         private final SessionStats sessionStats;
         private final Whiteboard whiteboard;
diff --git oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/RefreshStrategy.java oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/RefreshStrategy.java
index 864949d..1c941ad 100644
--- oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/RefreshStrategy.java
+++ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/RefreshStrategy.java
@@ -25,6 +25,7 @@ import static java.util.concurrent.TimeUnit.SECONDS;
 
 import java.util.ArrayList;
 
+import com.google.common.base.Predicate;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -207,4 +208,30 @@ public interface RefreshStrategy {
         }
     }
 
+    /**
+     * This strategy conditionally invokes the delegated strategy based on the passed predicate
+     */
+    class ConditionalRefreshStrategy implements RefreshStrategy {
+        private final RefreshStrategy delegate;
+        private final Predicate<Long> condition;
+
+        public ConditionalRefreshStrategy(RefreshStrategy delegate, Predicate<Long> condition) {
+            this.delegate = delegate;
+            this.condition = condition;
+        }
+
+        @Override
+        public boolean needsRefresh(long secondsSinceLastAccess) {
+            if (condition.apply(secondsSinceLastAccess)){
+                return delegate.needsRefresh(secondsSinceLastAccess);
+            }
+            return false;
+        }
+
+        @Override
+        public void refreshed() {
+            delegate.refreshed();
+        }
+    }
+
 }
diff --git oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionContext.java oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionContext.java
index 9aba4bc..4ea34c0 100644
--- oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionContext.java
+++ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionContext.java
@@ -295,6 +295,13 @@ public class SessionContext implements NamePathMapper {
         return observationManager;
     }
 
+    public boolean hasEventListeners(){
+        if (observationManager != null){
+            return observationManager.getRegisteredEventListeners().hasNext();
+        }
+        return false;
+    }
+
     public Set<String> getOpenScopedLocks() {
         return openScopedLocks;
     }
