diff --git a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java
index 284a973..5d12e04 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/intent/impl/GossipIntentStore.java
@@ -35,13 +35,12 @@
 import org.onosproject.net.intent.Intent;
 import org.onosproject.net.intent.IntentData;
 import org.onosproject.net.intent.IntentEvent;
-import org.onosproject.net.intent.WorkPartitionService;
 import org.onosproject.net.intent.IntentState;
 import org.onosproject.net.intent.IntentStore;
 import org.onosproject.net.intent.IntentStoreDelegate;
 import org.onosproject.net.intent.Key;
+import org.onosproject.net.intent.WorkPartitionService;
 import org.onosproject.store.AbstractStore;
-import org.onosproject.store.Timestamp;
 import org.onosproject.store.serializers.KryoNamespaces;
 import org.onosproject.store.service.EventuallyConsistentMap;
 import org.onosproject.store.service.EventuallyConsistentMapBuilder;
@@ -368,21 +367,26 @@
     @Override
     public void addPending(IntentData data) {
         checkNotNull(data);
+        if (data.version() == null) {
+            /*
+             * Copy IntentData including request state in this way we can
+             * avoid the creation of Intents with state == request, which can
+             * be problematic if the Intent state is different from *REQ
+             * {INSTALL_, WITHDRAW_ and PURGE_}.
+             */
+            pendingMap.put(data.key(), new IntentData(data.intent(), data.state(), data.request(),
+                                                      new WallClockTimestamp(), clusterService.getLocalNode().id()));
+        } else {
+            pendingMap.compute(data.key(), (key, existingValue) -> {
+                if (existingValue == null || existingValue.version().isOlderThan(data.version())) {
+                    return new IntentData(data.intent(), data.state(), data.request(),
+                                          data.version(), clusterService.getLocalNode().id());
+                } else {
+                    return existingValue;
+                }
+            });
+        }
 
-        Timestamp version = data.version() != null ? data.version() : new WallClockTimestamp();
-        pendingMap.compute(data.key(), (key, existingValue) -> {
-            if (existingValue == null || existingValue.version().isOlderThan(version)) {
-                /*
-                 * This avoids to create Intent with state == request, which can
-                 * be problematic if the Intent state is different from *REQ
-                 * {INSTALL_, WITHDRAW_ and PURGE_}.
-                 */
-                return new IntentData(data.intent(), data.state(), data.request(),
-                                      version, clusterService.getLocalNode().id());
-            } else {
-                return existingValue;
-            }
-        });
     }
 
     @Override
