diff --git a/apps/route-service/api/src/main/java/org/onosproject/routeservice/RouteEvent.java b/apps/route-service/api/src/main/java/org/onosproject/routeservice/RouteEvent.java
index 0428beb..a7f5d88 100644
--- a/apps/route-service/api/src/main/java/org/onosproject/routeservice/RouteEvent.java
+++ b/apps/route-service/api/src/main/java/org/onosproject/routeservice/RouteEvent.java
@@ -32,6 +32,7 @@
 
     private final ResolvedRoute prevSubject;
     private final Collection<ResolvedRoute> alternativeRoutes;
+    private final Collection<ResolvedRoute> prevAlternativeRoutes;
 
     /**
      * Route event type.
@@ -109,8 +110,8 @@
     protected RouteEvent(Type type, ResolvedRoute subject, long time) {
         super(type, subject, time);
         this.prevSubject = null;
-
         this.alternativeRoutes = Collections.emptySet();
+        this.prevAlternativeRoutes = null;
     }
 
     /**
@@ -134,9 +135,25 @@
      */
     public RouteEvent(Type type, ResolvedRoute subject, ResolvedRoute prevSubject,
                       Collection<ResolvedRoute> alternatives) {
+        this(type, subject, prevSubject, alternatives, null);
+    }
+
+    /**
+     * Creates a new route event with a previous subject, alternative routes and previous alternative
+     * routes.
+     *
+     * @param type event type
+     * @param subject event subject
+     * @param prevSubject previous subject
+     * @param alternatives alternative routes for subject's prefix
+     * @param prevAlternatives previous alternative routes for subject's prefix
+     */
+    public RouteEvent(Type type, ResolvedRoute subject, ResolvedRoute prevSubject,
+                      Collection<ResolvedRoute> alternatives, Collection<ResolvedRoute> prevAlternatives) {
         super(type, subject);
         this.prevSubject = prevSubject;
         this.alternativeRoutes = alternatives;
+        this.prevAlternativeRoutes = prevAlternatives;
     }
 
     /**
@@ -157,9 +174,18 @@
         return alternativeRoutes;
     }
 
+    /**
+     * Returns the set of previous alternative routes for the subject's prefix.
+     *
+     * @return previous alternative routes
+     */
+    public Collection<ResolvedRoute> prevAlternatives() {
+        return prevAlternativeRoutes;
+    }
+
     @Override
     public int hashCode() {
-        return Objects.hash(subject(), type(), prevSubject(), alternativeRoutes);
+        return Objects.hash(subject(), type(), prevSubject(), alternativeRoutes, prevAlternativeRoutes);
     }
 
     @Override
@@ -177,7 +203,8 @@
         return Objects.equals(this.subject(), that.subject()) &&
                 Objects.equals(this.type(), that.type()) &&
                 Objects.equals(this.prevSubject, that.prevSubject) &&
-                Objects.equals(this.alternativeRoutes, that.alternativeRoutes);
+                Objects.equals(this.alternativeRoutes, that.alternativeRoutes) &&
+                Objects.equals(this.prevAlternativeRoutes, that.prevAlternativeRoutes);
     }
 
     @Override
@@ -188,6 +215,7 @@
                 .add("subject", subject())
                 .add("prevSubject", prevSubject)
                 .add("alternatives", alternativeRoutes)
+                .add("prevAlternatives", prevAlternativeRoutes)
                 .toString();
     }
 }
diff --git a/apps/route-service/app/src/main/java/org/onosproject/routeservice/impl/DefaultResolvedRouteStore.java b/apps/route-service/app/src/main/java/org/onosproject/routeservice/impl/DefaultResolvedRouteStore.java
index 34aeaa7..4981932 100644
--- a/apps/route-service/app/src/main/java/org/onosproject/routeservice/impl/DefaultResolvedRouteStore.java
+++ b/apps/route-service/app/src/main/java/org/onosproject/routeservice/impl/DefaultResolvedRouteStore.java
@@ -149,7 +149,7 @@
 
                 if (!immutableAlternatives.equals(oldRoutes)) {
                     return new RouteEvent(RouteEvent.Type.ALTERNATIVE_ROUTES_CHANGED,
-                            route, immutableAlternatives);
+                            route, null, immutableAlternatives, oldRoutes);
                 }
 
                 return null;
