Index: jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryChecker.java
===================================================================
--- jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryChecker.java	(revision 1179985)
+++ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryChecker.java	(working copy)
@@ -35,6 +35,9 @@
 import org.apache.jackrabbit.core.state.ChildNodeEntry;
 import org.apache.jackrabbit.core.state.ItemStateException;
 import org.apache.jackrabbit.core.state.NodeState;
+import org.apache.jackrabbit.core.version.InconsistentVersioningState;
+import org.apache.jackrabbit.core.version.InternalVersion;
+import org.apache.jackrabbit.core.version.InternalVersionHistory;
 import org.apache.jackrabbit.core.version.InternalVersionManager;
 import org.apache.jackrabbit.spi.Name;
 import org.slf4j.Logger;
@@ -104,11 +107,29 @@
 
     private void checkVersionHistory(NodeState node) {
         if (node.hasPropertyName(JCR_VERSIONHISTORY)) {
-            log.debug("Checking version history of node {}", node.getNodeId());
+            String message = null;
+            
             try {
-                versionManager.getVersionHistoryOfNode(node.getNodeId());
+                log.debug("Checking version history of node {}",
+                        node.getNodeId());
+                message = "Removing references to a missing version history of node "
+                        + node.getNodeId();
+                InternalVersionHistory vh = versionManager
+                        .getVersionHistoryOfNode(node.getNodeId());
+
+                // additional checks, see JCR-3101
+                message = "Removing references to an inconsistent version history of node "
+                        + node.getNodeId() + " (root version missing)";
+                InternalVersion root = vh.getRootVersion();
+                message = "Removing references to an inconsistent version history of node "
+                        + node.getNodeId()
+                        + " (frozen node of root version "
+                        + root.getId() + " missing)";
+                if (null == root.getFrozenNode()) {
+                    throw new InconsistentVersioningState("frozen node of " + root.getId() + " is missing.");
+                }
             } catch (Exception e) {
-                log.info("Removing references to a missing version history", e);
+                log.info(message, e);
                 removeVersionHistoryReferences(node);
             }
         }
