diff --git a/core/store/dist/src/test/java/org/onosproject/store/intent/impl/GossipIntentStoreTest.java b/core/store/dist/src/test/java/org/onosproject/store/intent/impl/GossipIntentStoreTest.java
index a74c3a2..7fed235 100644
--- a/core/store/dist/src/test/java/org/onosproject/store/intent/impl/GossipIntentStoreTest.java
+++ b/core/store/dist/src/test/java/org/onosproject/store/intent/impl/GossipIntentStoreTest.java
@@ -30,7 +30,7 @@
 import org.onosproject.net.intent.IntentState;
 import org.onosproject.net.intent.IntentTestsMocks;
 import org.onosproject.net.intent.MockIdGenerator;
-import org.onosproject.net.intent.PartitionServiceAdapter;
+import org.onosproject.net.intent.IntentPartitionServiceAdapter;
 import org.onosproject.store.service.TestStorageService;
 
 import static org.hamcrest.Matchers.is;
@@ -52,7 +52,7 @@
     public void setUp() {
         intentStore = new GossipIntentStore();
         intentStore.storageService = new TestStorageService();
-        intentStore.partitionService = new PartitionServiceAdapter();
+        intentStore.partitionService = new IntentPartitionServiceAdapter();
         intentStore.clusterService = new ClusterServiceAdapter();
         idGenerator = new MockIdGenerator();
         Intent.bindIdGenerator(idGenerator);
diff --git a/core/store/dist/src/test/java/org/onosproject/store/intent/impl/PartitionManagerTest.java b/core/store/dist/src/test/java/org/onosproject/store/intent/impl/IntentPartitionManagerTest.java
similarity index 93%
rename from core/store/dist/src/test/java/org/onosproject/store/intent/impl/PartitionManagerTest.java
rename to core/store/dist/src/test/java/org/onosproject/store/intent/impl/IntentPartitionManagerTest.java
index 61d1937..5ba0c7c 100644
--- a/core/store/dist/src/test/java/org/onosproject/store/intent/impl/PartitionManagerTest.java
+++ b/core/store/dist/src/test/java/org/onosproject/store/intent/impl/IntentPartitionManagerTest.java
@@ -50,9 +50,9 @@
 import static org.junit.Assert.assertTrue;
 
 /**
- * Unit tests for the PartitionManager class.
+ * Unit tests for the IntentPartitionManager class.
  */
-public class PartitionManagerTest {
+public class IntentPartitionManagerTest {
 
     private final LeadershipEvent event
             = new LeadershipEvent(LeadershipEvent.Type.LEADER_ELECTED,
@@ -68,7 +68,7 @@
         private LeadershipService leadershipService;
     private LeadershipEventListener leaderListener;
 
-    private PartitionManager partitionManager;
+    private IntentPartitionManager partitionManager;
 
     @Before
     public void setUp() {
@@ -76,13 +76,13 @@
 
         leadershipService.addListener(anyObject(LeadershipEventListener.class));
         expectLastCall().andDelegateTo(new TestLeadershipService());
-        for (int i = 0; i < PartitionManager.NUM_PARTITIONS; i++) {
+        for (int i = 0; i < IntentPartitionManager.NUM_PARTITIONS; i++) {
             expect(leadershipService.runForLeadership(ELECTION_PREFIX + i))
                 .andReturn(CompletableFuture.completedFuture(null))
                 .times(1);
         }
 
-        partitionManager = new PartitionManager()
+        partitionManager = new IntentPartitionManager()
                 .withScheduledExecutor(new NullScheduledExecutor());
 
         partitionManager.clusterService = new TestClusterService();
@@ -108,7 +108,7 @@
                             new Leadership(ELECTION_PREFIX + i, MY_NODE_ID, 0, 0));
         }
 
-        for (int i = numMine; i < PartitionManager.NUM_PARTITIONS; i++) {
+        for (int i = numMine; i < IntentPartitionManager.NUM_PARTITIONS; i++) {
             expect(leadershipService.getLeader(ELECTION_PREFIX + i))
                     .andReturn(OTHER_NODE_ID).anyTimes();
 
@@ -129,7 +129,7 @@
 
         leadershipService.addListener(anyObject(LeadershipEventListener.class));
 
-        for (int i = 0; i < PartitionManager.NUM_PARTITIONS; i++) {
+        for (int i = 0; i < IntentPartitionManager.NUM_PARTITIONS; i++) {
             expect(leadershipService.runForLeadership(ELECTION_PREFIX + i))
                 .andReturn(CompletableFuture.completedFuture(null))
                 .times(1);
@@ -179,7 +179,7 @@
     @Test
     public void testRebalanceScheduling() {
         // We have all the partitions so we'll need to relinquish some
-        setUpLeadershipService(PartitionManager.NUM_PARTITIONS);
+        setUpLeadershipService(IntentPartitionManager.NUM_PARTITIONS);
 
         replay(leadershipService);
 
@@ -198,7 +198,7 @@
     @Test
     public void testRebalance() {
         // We have all the partitions so we'll need to relinquish some
-        setUpLeadershipService(PartitionManager.NUM_PARTITIONS);
+        setUpLeadershipService(IntentPartitionManager.NUM_PARTITIONS);
 
         expect(leadershipService.withdraw(anyString()))
                                  .andReturn(CompletableFuture.completedFuture(null))
@@ -221,7 +221,7 @@
     @Test
     public void testNoRebalance() {
         // Partitions are already perfectly balanced among the two active instances
-        setUpLeadershipService(PartitionManager.NUM_PARTITIONS / 2);
+        setUpLeadershipService(IntentPartitionManager.NUM_PARTITIONS / 2);
         replay(leadershipService);
 
         partitionManager.activate();
@@ -233,7 +233,7 @@
 
         reset(leadershipService);
         // We have a smaller share than we should
-        setUpLeadershipService(PartitionManager.NUM_PARTITIONS / 2 - 1);
+        setUpLeadershipService(IntentPartitionManager.NUM_PARTITIONS / 2 - 1);
         replay(leadershipService);
 
         // trigger rebalance
