diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelProviderService.java b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelProviderService.java
index d543437..2cda4a3 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelProviderService.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelProviderService.java
@@ -60,6 +60,14 @@
     void tunnelUpdated(TunnelDescription tunnel);
 
     /**
+     * Signals that the tunnel was changed with tunnel status change.
+     *
+     * @param tunnel tunnel information
+     * @param state tunnel working status
+     */
+    void tunnelUpdated(TunnelDescription tunnel, State state);
+
+    /**
      * Signals that the a tunnel was queried.
      *
      * @param tunnelId tunnel identity
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelStore.java b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelStore.java
index 6940ab2..519c9f7 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelStore.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelStore.java
@@ -19,6 +19,7 @@
 
 import com.google.common.annotations.Beta;
 import org.onosproject.core.ApplicationId;
+import org.onosproject.incubator.net.tunnel.Tunnel.State;
 import org.onosproject.incubator.net.tunnel.Tunnel.Type;
 import org.onosproject.net.Annotations;
 import org.onosproject.net.provider.ProviderId;
@@ -38,6 +39,15 @@
     TunnelId createOrUpdateTunnel(Tunnel tunnel);
 
     /**
+     * Creates a tunnel or updates a tunnel with the new state given in input.
+     *
+     * @param tunnel tunnel
+     * @param state tunnel state
+     * @return tunnel identity
+     */
+    TunnelId createOrUpdateTunnel(Tunnel tunnel, State state);
+
+    /**
      * Deletes a tunnel by a specific tunnel identifier.
      *
      * @param tunnelId tunnel unique identifier generated by ONOS
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/tunnel/impl/TunnelManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/tunnel/impl/TunnelManager.java
index 702667f..8a9225b 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/tunnel/impl/TunnelManager.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/tunnel/impl/TunnelManager.java
@@ -337,6 +337,20 @@
         }
 
         @Override
+        public void tunnelUpdated(TunnelDescription tunnel, State state) {
+            Tunnel storedTunnel = new DefaultTunnel(provider().id(),
+                                                    tunnel.src(), tunnel.dst(),
+                                                    tunnel.type(),
+                                                    state,
+                                                    tunnel.groupId(),
+                                                    tunnel.id(),
+                                                    tunnel.tunnelName(),
+                                                    tunnel.path(),
+                                                    tunnel.annotations());
+            store.createOrUpdateTunnel(storedTunnel, state);
+        }
+
+        @Override
         public void tunnelRemoved(TunnelDescription tunnel) {
             if (tunnel.id() != null) {
                 store.deleteTunnel(tunnel.id());
diff --git a/incubator/store/src/main/java/org/onosproject/incubator/store/tunnel/impl/DistributedTunnelStore.java b/incubator/store/src/main/java/org/onosproject/incubator/store/tunnel/impl/DistributedTunnelStore.java
index 9a1871d..7f5074a 100644
--- a/incubator/store/src/main/java/org/onosproject/incubator/store/tunnel/impl/DistributedTunnelStore.java
+++ b/incubator/store/src/main/java/org/onosproject/incubator/store/tunnel/impl/DistributedTunnelStore.java
@@ -38,6 +38,7 @@
 import org.onosproject.core.IdGenerator;
 import org.onosproject.incubator.net.tunnel.DefaultTunnel;
 import org.onosproject.incubator.net.tunnel.Tunnel;
+import org.onosproject.incubator.net.tunnel.Tunnel.State;
 import org.onosproject.incubator.net.tunnel.Tunnel.Type;
 import org.onosproject.incubator.net.tunnel.TunnelEndPoint;
 import org.onosproject.incubator.net.tunnel.TunnelEvent;
@@ -147,6 +148,15 @@
 
     @Override
     public TunnelId createOrUpdateTunnel(Tunnel tunnel) {
+        return handleCreateOrUpdateTunnel(tunnel, null);
+    }
+
+    @Override
+    public TunnelId createOrUpdateTunnel(Tunnel tunnel, State state) {
+        return handleCreateOrUpdateTunnel(tunnel, state);
+    }
+
+    private TunnelId handleCreateOrUpdateTunnel(Tunnel tunnel, State state) {
         // tunnelIdAsKeyStore.
         if (tunnel.tunnelId() != null && !"".equals(tunnel.tunnelId().toString())) {
             Tunnel old = tunnelIdAsKeyStore.get(tunnel.tunnelId());
@@ -156,24 +166,25 @@
             }
             DefaultAnnotations oldAnno = (DefaultAnnotations) old.annotations();
             SparseAnnotations newAnno = (SparseAnnotations) tunnel.annotations();
+            State newTunnelState = (state != null) ? state : old.state();
             Tunnel newT = new DefaultTunnel(old.providerId(), old.src(),
                                             old.dst(), old.type(),
-                                            old.state(), old.groupId(),
+                                            newTunnelState, old.groupId(),
                                             old.tunnelId(),
                                             old.tunnelName(),
                                             old.path(),
                                             DefaultAnnotations.merge(oldAnno, newAnno));
             tunnelIdAsKeyStore.put(tunnel.tunnelId(), newT);
-            TunnelEvent event = new TunnelEvent(
-                                                TunnelEvent.Type.TUNNEL_UPDATED,
+            TunnelEvent event = new TunnelEvent(TunnelEvent.Type.TUNNEL_UPDATED,
                                                 tunnel);
             notifyDelegate(event);
             return tunnel.tunnelId();
         } else {
             TunnelId tunnelId = TunnelId.valueOf(idGenerator.getNewId());
+            State tunnelState = (state != null) ? state : tunnel.state();
             Tunnel newT = new DefaultTunnel(tunnel.providerId(), tunnel.src(),
                                             tunnel.dst(), tunnel.type(),
-                                            tunnel.state(), tunnel.groupId(),
+                                            tunnelState, tunnel.groupId(),
                                             tunnelId,
                                             tunnel.tunnelName(),
                                             tunnel.path(),
diff --git a/providers/ovsdb/tunnel/src/test/java/org/onosproject/ovsdb/provider/tunnel/OvsdbTunnelProviderTest.java b/providers/ovsdb/tunnel/src/test/java/org/onosproject/ovsdb/provider/tunnel/OvsdbTunnelProviderTest.java
index b8d4d14..566f535 100644
--- a/providers/ovsdb/tunnel/src/test/java/org/onosproject/ovsdb/provider/tunnel/OvsdbTunnelProviderTest.java
+++ b/providers/ovsdb/tunnel/src/test/java/org/onosproject/ovsdb/provider/tunnel/OvsdbTunnelProviderTest.java
@@ -182,6 +182,11 @@
         }
 
         @Override
+        public void tunnelUpdated(TunnelDescription tunnel, State state) {
+
+        }
+
+        @Override
         public Tunnel tunnelQueryById(TunnelId tunnelId) {
             return null;
         }
diff --git a/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/TunnelProviderRegistryAdapter.java b/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/TunnelProviderRegistryAdapter.java
index d455e7f..d331407 100644
--- a/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/TunnelProviderRegistryAdapter.java
+++ b/providers/pcep/tunnel/src/test/java/org/onosproject/provider/pcep/tunnel/impl/TunnelProviderRegistryAdapter.java
@@ -70,6 +70,10 @@
         }
 
         @Override
+        public void tunnelUpdated(TunnelDescription tunnel, State state) {
+        }
+
+        @Override
         public Tunnel tunnelQueryById(TunnelId tunnelId) {
             return null;
         }
