diff --git a/core/api/src/main/java/org/onosproject/net/mcast/McastEvent.java b/core/api/src/main/java/org/onosproject/net/mcast/McastEvent.java
index 9cb93f2..979194c 100644
--- a/core/api/src/main/java/org/onosproject/net/mcast/McastEvent.java
+++ b/core/api/src/main/java/org/onosproject/net/mcast/McastEvent.java
@@ -21,6 +21,8 @@
 
 import java.util.Optional;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
+
 /**
  * An entity representing a multicast event. Event either add or remove
  * sinks or sources.
@@ -48,11 +50,6 @@
         SOURCE_ADDED,
 
         /**
-         * A source for a mcast route (ie. the subject) has been removed.
-         */
-        SOURCE_REMOVED,
-
-        /**
          * A sink for a mcast route (ie. the subject) has been added.
          */
         SINK_ADDED,
@@ -75,15 +72,15 @@
         source = Optional.empty();
     }
 
-    protected McastEvent(McastEvent.Type type, McastRoute subject,
-                       ConnectPoint sink,
-                       ConnectPoint source) {
+    public McastEvent(McastEvent.Type type, McastRoute subject,
+                      ConnectPoint sink,
+                      ConnectPoint source) {
         super(type, subject);
         this.sink = Optional.ofNullable(sink);
         this.source = Optional.ofNullable(source);
     }
 
-    protected McastEvent(McastEvent.Type type, McastRoute subject, long time,
+    public McastEvent(McastEvent.Type type, McastRoute subject, long time,
                        ConnectPoint sink,
                        ConnectPoint source) {
         super(type, subject, time);
@@ -102,12 +99,20 @@
     }
 
     /**
-     * The source which has been removed or added. The field may not be set
-     * if the source has not been detected yet or has been removed.
+     * The source which has been removed or added.
 
      * @return an optional connect point
      */
     public Optional<ConnectPoint> source() {
         return source;
     }
+
+    @Override
+    public String toString() {
+        return toStringHelper(this)
+                .add("type", type())
+                .add("route", subject())
+                .add("source", source)
+                .add("sinks", sink).toString();
+    }
 }
diff --git a/core/api/src/main/java/org/onosproject/net/mcast/McastRoute.java b/core/api/src/main/java/org/onosproject/net/mcast/McastRoute.java
index 47ab12b..ff1292b 100644
--- a/core/api/src/main/java/org/onosproject/net/mcast/McastRoute.java
+++ b/core/api/src/main/java/org/onosproject/net/mcast/McastRoute.java
@@ -20,6 +20,7 @@
 import org.onlab.packet.IpPrefix;
 
 import static com.google.common.base.MoreObjects.toStringHelper;
+import static com.google.common.base.Preconditions.checkNotNull;
 
 /**
  * An entity representing a multicast route consisting of a source
@@ -50,6 +51,9 @@
     private final Type type;
 
     public McastRoute(IpPrefix source, IpPrefix group, Type type) {
+        checkNotNull(source, "Multicast route must have a source");
+        checkNotNull(group, "Multicast route must specify a group address");
+        checkNotNull(type, "Must indicate what type of route");
         this.source = source;
         this.group = group;
         this.type = type;
diff --git a/core/api/src/main/java/org/onosproject/net/mcast/MulticastRouteTable.java b/core/api/src/main/java/org/onosproject/net/mcast/MulticastRouteService.java
similarity index 89%
rename from core/api/src/main/java/org/onosproject/net/mcast/MulticastRouteTable.java
rename to core/api/src/main/java/org/onosproject/net/mcast/MulticastRouteService.java
index a5e8d30..56e87c5 100644
--- a/core/api/src/main/java/org/onosproject/net/mcast/MulticastRouteTable.java
+++ b/core/api/src/main/java/org/onosproject/net/mcast/MulticastRouteService.java
@@ -24,7 +24,7 @@
  * A service interface for maintaining multicast information.
  */
 @Beta
-public interface MulticastRouteTable {
+public interface MulticastRouteService {
 
     /**
      * Adds a route to the information base.
@@ -59,14 +59,6 @@
     void addSink(McastRoute route, ConnectPoint connectPoint);
 
     /**
-     * Removes a source connection from the route.
-     *
-     * @param route the multicast route
-     * @param connectPoint a source connect point
-     */
-    void removeSource(McastRoute route, ConnectPoint connectPoint);
-
-    /**
      * Removes a sink from the route.
      *
      * @param route the multicast route
diff --git a/core/api/src/main/java/org/onosproject/net/mcast/package-info.java b/core/api/src/main/java/org/onosproject/net/mcast/package-info.java
new file mode 100644
index 0000000..e8dcc7b
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/mcast/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * External model entities of the multicast RIB.
+ */
+package org.onosproject.net.mcast;
\ No newline at end of file
