diff --git a/apps/mcast/api/src/main/java/org/onosproject/mcast/api/McastRouteData.java b/apps/mcast/api/src/main/java/org/onosproject/mcast/api/McastRouteData.java
index ce81ea9..a343c39 100644
--- a/apps/mcast/api/src/main/java/org/onosproject/mcast/api/McastRouteData.java
+++ b/apps/mcast/api/src/main/java/org/onosproject/mcast/api/McastRouteData.java
@@ -121,8 +121,8 @@
      * Adds sources for a given host Id. If the Host Id is {@link HostId#NONE} the sources are intended to be
      * used at all times independently of the attached host.
      *
-     * @param hostId the host
-     * @param sources  the sources
+     * @param hostId  the host
+     * @param sources the sources
      */
     public void addSources(HostId hostId, Set<ConnectPoint> sources) {
         checkNotNull(hostId);
diff --git a/apps/mcast/api/src/main/java/org/onosproject/mcast/api/McastStore.java b/apps/mcast/api/src/main/java/org/onosproject/mcast/api/McastStore.java
index 484f32ec..5e2c1e6 100644
--- a/apps/mcast/api/src/main/java/org/onosproject/mcast/api/McastStore.java
+++ b/apps/mcast/api/src/main/java/org/onosproject/mcast/api/McastStore.java
@@ -57,7 +57,7 @@
      * The source stored with this method are not tied with any host.
      * Traffic will be sent from all of them.
      *
-     * @param route a Multicast route
+     * @param route   a Multicast route
      * @param sources set of specific connect points
      */
     void storeSources(McastRoute route, Set<ConnectPoint> sources);
@@ -78,6 +78,15 @@
     void removeSource(McastRoute route, HostId source);
 
     /**
+     * Removes a set of source connect points for a given route.
+     * This method is not tied with any host.
+     *
+     * @param route   a Multicast route
+     * @param sources set of specific connect points
+     */
+    void removeSources(McastRoute route, Set<ConnectPoint> sources);
+
+    /**
      * Removes a set of source connect points for a given host the route.
      *
      * @param route         the multicast route
diff --git a/apps/mcast/api/src/main/java/org/onosproject/mcast/api/MulticastRouteService.java b/apps/mcast/api/src/main/java/org/onosproject/mcast/api/MulticastRouteService.java
index bd32363..2e34a4b 100644
--- a/apps/mcast/api/src/main/java/org/onosproject/mcast/api/MulticastRouteService.java
+++ b/apps/mcast/api/src/main/java/org/onosproject/mcast/api/MulticastRouteService.java
@@ -86,7 +86,7 @@
      * used as different sources for that Mcast Tree. For dual-homed sources
      * please use {@link #addSource(McastRoute route, HostId hostId) addSource}.
      *
-     * @param route a Multicast route
+     * @param route   a Multicast route
      * @param sources a set of source connect points
      */
     void addSources(McastRoute route, Set<ConnectPoint> sources);
@@ -107,6 +107,26 @@
     void removeSource(McastRoute route, HostId source);
 
     /**
+     * Removes a set of sources from the route.
+     * If this method is used the connect points will all be
+     * used as different sources for that Mcast Tree. For dual-homed sources
+     * please use {@link #removeSource(McastRoute, HostId)}.
+     *
+     * @param route   the multicast route
+     * @param sources set of sources
+     */
+    void removeSources(McastRoute route, Set<ConnectPoint> sources);
+
+    /**
+     * Removes a set of source connect points for a given host source from the route.
+     *
+     * @param route         a multicast route
+     * @param hostId        a source host
+     * @param connectPoints the source for the specific connect points
+     */
+    void removeSources(McastRoute route, HostId hostId, Set<ConnectPoint> connectPoints);
+
+    /**
      * Adds a sink to the route to which a data stream should be
      * sent to.
      *
diff --git a/apps/mcast/impl/src/main/java/org/onosproject/mcast/impl/DistributedMcastRoutesStore.java b/apps/mcast/impl/src/main/java/org/onosproject/mcast/impl/DistributedMcastRoutesStore.java
index e3526c4..2d86104 100644
--- a/apps/mcast/impl/src/main/java/org/onosproject/mcast/impl/DistributedMcastRoutesStore.java
+++ b/apps/mcast/impl/src/main/java/org/onosproject/mcast/impl/DistributedMcastRoutesStore.java
@@ -145,6 +145,14 @@
     }
 
     @Override
+    public void removeSources(McastRoute route, Set<ConnectPoint> sources) {
+        mcastRoutes.compute(route, (k, v) -> {
+            v.removeSources(HostId.NONE, sources);
+            return v;
+        });
+    }
+
+    @Override
     public void removeSources(McastRoute route, HostId hostId, Set<ConnectPoint> sources) {
         mcastRoutes.compute(route, (k, v) -> {
             v.removeSources(hostId, sources);
diff --git a/apps/mcast/impl/src/main/java/org/onosproject/mcast/impl/MulticastRouteManager.java b/apps/mcast/impl/src/main/java/org/onosproject/mcast/impl/MulticastRouteManager.java
index a004c8d..51d4207 100644
--- a/apps/mcast/impl/src/main/java/org/onosproject/mcast/impl/MulticastRouteManager.java
+++ b/apps/mcast/impl/src/main/java/org/onosproject/mcast/impl/MulticastRouteManager.java
@@ -172,6 +172,25 @@
     }
 
     @Override
+    public void removeSources(McastRoute route, Set<ConnectPoint> connectPoints) {
+        checkNotNull(route, "Route cannot be null");
+        checkNotNull(connectPoints, "ConnectPoints cannot be null");
+        if (checkRoute(route)) {
+            store.removeSources(route, connectPoints);
+        }
+    }
+
+    @Override
+    public void removeSources(McastRoute route, HostId hostId, Set<ConnectPoint> connectPoints) {
+        checkNotNull(route, "Route cannot be null");
+        checkNotNull(hostId, "HostId cannot be null");
+        checkNotNull(connectPoints, "ConnectPoints cannot be null");
+        if (checkRoute(route)) {
+            store.removeSources(route, hostId, connectPoints);
+        }
+    }
+
+    @Override
     public void addSink(McastRoute route, HostId hostId) {
         if (checkRoute(route)) {
             Set<ConnectPoint> sinks = new HashSet<>();
@@ -303,7 +322,7 @@
                         if ((event.prevSubject() != null && event.subject() != null)) {
                             //we compute the difference between old locations and new ones and remove the previous
                             Set<HostLocation> removedConnectPoint = Sets.difference(event.prevSubject().locations(),
-                                event.subject().locations()).immutableCopy();
+                                    event.subject().locations()).immutableCopy();
                             if (!removedConnectPoint.isEmpty()) {
                                 if (!routesForSource.isEmpty()) {
                                     eventRemoveSources(hostId, removedConnectPoint, routesForSource);
@@ -313,7 +332,7 @@
                                 }
                             }
                             Set<HostLocation> addedConnectPoints = Sets.difference(event.subject().locations(),
-                                event.prevSubject().locations()).immutableCopy();
+                                    event.prevSubject().locations()).immutableCopy();
                             //if the host now has some new locations we add them to the sinks set
                             if (!addedConnectPoints.isEmpty()) {
                                 if (!routesForSource.isEmpty()) {
