diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityAssignmentCache.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityAssignmentCache.java
index 444674b..dd46246 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityAssignmentCache.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityAssignmentCache.java
@@ -42,7 +42,6 @@
 import org.apache.ignite.internal.cluster.NodeOrderComparator;
 import org.apache.ignite.internal.IgniteInternalFuture;
 import org.apache.ignite.internal.managers.discovery.DiscoCache;
-import org.apache.ignite.internal.processors.cache.CacheGroupContext;
 import org.apache.ignite.internal.processors.cluster.BaselineTopology;
 import org.apache.ignite.internal.util.future.GridFutureAdapter;
 import org.apache.ignite.internal.util.typedef.F;
@@ -195,20 +194,6 @@
         assert topVer.compareTo(lastVersion()) >= 0 : "[topVer = " + topVer + ", last=" + lastVersion() + ']';
         assert idealAssignment != null;
 
-        DiscoCache discoCache = ctx.discovery().discoCache(topVer);
-
-        CacheGroupContext grpCtx = ctx.cache().cacheGroup(grpId);
-
-        if (grpCtx != null && grpCtx.persistenceEnabled() && !grpCtx.isLocal()) {
-            if ("cache3".equals(grpCtx.cacheOrGroupName()))
-                U.debug(log, "Initializing affinity assignment [topVer=" + topVer + ", assign=" + affAssignment + ']');
-
-            for (List<ClusterNode> pNodes : affAssignment) {
-                for (ClusterNode pNode : pNodes)
-                    assert discoCache.baselineNode(pNode.id());
-            }
-        }
-
         GridAffinityAssignment assignment = new GridAffinityAssignment(topVer, affAssignment, idealAssignment);
 
         affCache.put(topVer, new HistoryAffinityAssignment(assignment));
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java
index ba49164..0a2c154 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java
@@ -425,6 +425,11 @@
         updateRebalanceVersion(aff);
     }
 
+    /**
+     * @param p Partition ID to restore.
+     * @param discoCache Disco cache to use.
+     * @return {@code True} if should restore local partition.
+     */
     private boolean initLocalPartition(int p, DiscoCache discoCache) {
         IgnitePageStoreManager storeMgr = ctx.pageStore();
 
@@ -1395,8 +1400,6 @@
                                 if (diffIds == null)
                                     diffFromAffinity.put(p, diffIds = U.newHashSet(3));
 
-                                assert !grp.persistenceEnabled() || discoCache.baselineNode(e.getKey());
-
                                 diffIds.add(e.getKey());
                             }
                             else {
@@ -1690,8 +1693,6 @@
                                 if (diffIds == null)
                                     diffFromAffinity.put(p, diffIds = U.newHashSet(3));
 
-                                assert !grp.persistenceEnabled() || discoCache.baselineNode(parts.nodeId());
-
                                 if (diffIds.add(parts.nodeId()))
                                     changed = true;
                             }
@@ -1850,8 +1851,6 @@
                         if (ids == null)
                             diffFromAffinity.put(p0, ids = U.newHashSet(3));
 
-                        assert !grp.persistenceEnabled() || discoCache.baselineNode(nodeId);
-
                         ids.add(nodeId);
                     }
                     else {
@@ -2250,8 +2249,6 @@
                     if (diffIds == null)
                         diffFromAffinity.put(p, diffIds = U.newHashSet(3));
 
-                    assert !grp.persistenceEnabled() || discoCache.baselineNode(ctx.localNodeId());
-
                     diffIds.add(ctx.localNodeId());
                 }
             }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/GridClusterStateProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/GridClusterStateProcessor.java
index 82dd375..54e0f56 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/GridClusterStateProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/GridClusterStateProcessor.java
@@ -262,7 +262,7 @@
         try {
             if (blt != null) {
                 if (log.isInfoEnabled()) {
-                    U.log(log, "Writing BaselineTopology[id=" + blt.id() + ", baseline=" + blt.consistentIds() + "]");
+                    U.log(log, "Writing BaselineTopology[id=" + blt.id() + "]");
 
                     if (prevBltHistItem != null)
                         U.log(log, "Writing BaselineTopologyHistoryItem[id=" + prevBltHistItem.id() + "]");
