diff --git a/apps/mcast/pom.xml b/apps/mcast/pom.xml
deleted file mode 100644
index 43b0460..0000000
--- a/apps/mcast/pom.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Copyright 2014 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.
-  -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.onosproject</groupId>
-        <artifactId>onos-apps</artifactId>
-        <version>1.4.0-SNAPSHOT</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <artifactId>onos-app-mcast</artifactId>
-    <packaging>bundle</packaging>
-
-    <description>Multicast RIB</description>
-
-    <properties>
-        <onos.app.name>org.onosproject.mcast</onos.app.name>
-    </properties>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/apps/mcast/src/main/java/org/onosproject/mcast/McastRoute.java b/apps/mcast/src/main/java/org/onosproject/mcast/McastRoute.java
deleted file mode 100644
index d2999d0..0000000
--- a/apps/mcast/src/main/java/org/onosproject/mcast/McastRoute.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * 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.
- */
-package org.onosproject.mcast;
-
-import org.onlab.packet.IpPrefix;
-
-/**
- * An entity representing a multicast route consisting of a source
- * and a multicast group address.
- */
-public class McastRoute {
-
-    public final IpPrefix source;
-    public final IpPrefix group;
-
-    public McastRoute(IpPrefix source, IpPrefix group) {
-        this.source = source;
-        this.group = group;
-    }
-
-    /**
-     * Fetches the source address of this route.
-     *
-     * @return an ip address
-     */
-    public IpPrefix source() {
-        return source;
-    }
-
-    /**
-     * Fetches the group address of this route.
-     *
-     * @return an ip address
-     */
-    public IpPrefix group() {
-        return group;
-    }
-
-}
diff --git a/apps/pom.xml b/apps/pom.xml
index c016509..611ac0b 100644
--- a/apps/pom.xml
+++ b/apps/pom.xml
@@ -61,7 +61,6 @@
         <module>mfwd</module>
         <module>igmp</module>
         <module>pim</module>
-        <module>mcast</module>
   </modules>
 
     <properties>
diff --git a/apps/mcast/src/main/java/org/onosproject/mcast/McastEvent.java b/core/api/src/main/java/org/onosproject/net/mcast/McastEvent.java
similarity index 97%
rename from apps/mcast/src/main/java/org/onosproject/mcast/McastEvent.java
rename to core/api/src/main/java/org/onosproject/net/mcast/McastEvent.java
index 8ca57f2..9cb93f2 100644
--- a/apps/mcast/src/main/java/org/onosproject/mcast/McastEvent.java
+++ b/core/api/src/main/java/org/onosproject/net/mcast/McastEvent.java
@@ -13,8 +13,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.mcast;
+package org.onosproject.net.mcast;
 
+import com.google.common.annotations.Beta;
 import org.onosproject.event.AbstractEvent;
 import org.onosproject.net.ConnectPoint;
 
@@ -24,6 +25,7 @@
  * An entity representing a multicast event. Event either add or remove
  * sinks or sources.
  */
+@Beta
 public class McastEvent extends AbstractEvent<McastEvent.Type, McastRoute> {
 
     private final Optional<ConnectPoint> sink;
diff --git a/apps/mcast/src/main/java/org/onosproject/mcast/McastListener.java b/core/api/src/main/java/org/onosproject/net/mcast/McastListener.java
similarity index 89%
rename from apps/mcast/src/main/java/org/onosproject/mcast/McastListener.java
rename to core/api/src/main/java/org/onosproject/net/mcast/McastListener.java
index cbd84af..06449b9 100644
--- a/apps/mcast/src/main/java/org/onosproject/mcast/McastListener.java
+++ b/core/api/src/main/java/org/onosproject/net/mcast/McastListener.java
@@ -13,12 +13,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.mcast;
+package org.onosproject.net.mcast;
 
+import com.google.common.annotations.Beta;
 import org.onosproject.event.EventListener;
 
 /**
  * A listener interface for multicast events.
  */
+@Beta
 public interface McastListener extends EventListener<McastEvent> {
 }
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
new file mode 100644
index 0000000..47ab12b
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/mcast/McastRoute.java
@@ -0,0 +1,113 @@
+/*
+ * 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.
+ */
+package org.onosproject.net.mcast;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Objects;
+import org.onlab.packet.IpPrefix;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+/**
+ * An entity representing a multicast route consisting of a source
+ * and a multicast group address.
+ */
+@Beta
+public class McastRoute {
+
+    public enum Type {
+        /**
+         * Route originates from PIM.
+         */
+        PIM,
+
+        /**
+         * Route originates from IGMP.
+         */
+        IGMP,
+
+        /**
+         * Route originates from other config (ie. REST, CLI).
+         */
+        STATIC
+    }
+
+    private final IpPrefix source;
+    private final IpPrefix group;
+    private final Type type;
+
+    public McastRoute(IpPrefix source, IpPrefix group, Type type) {
+        this.source = source;
+        this.group = group;
+        this.type = type;
+    }
+
+    /**
+     * Fetches the source address of this route.
+     *
+     * @return an ip address
+     */
+    public IpPrefix source() {
+        return source;
+    }
+
+    /**
+     * Fetches the group address of this route.
+     *
+     * @return an ip address
+     */
+    public IpPrefix group() {
+        return group;
+    }
+
+    /**
+     * Obtains how this route was created.
+     * @return a type of route
+
+     */
+    public Type type() {
+        return type;
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(this)
+                .add("source", source)
+                .add("group", group)
+                .add("origin", type)
+                .toString();
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        McastRoute that = (McastRoute) o;
+        return Objects.equal(source, that.source) &&
+                Objects.equal(group, that.group) &&
+                Objects.equal(type, that.type);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hashCode(source, group, type);
+    }
+
+}
diff --git a/apps/mcast/src/main/java/org/onosproject/mcast/MulticastRouteTable.java b/core/api/src/main/java/org/onosproject/net/mcast/MulticastRouteTable.java
similarity index 96%
rename from apps/mcast/src/main/java/org/onosproject/mcast/MulticastRouteTable.java
rename to core/api/src/main/java/org/onosproject/net/mcast/MulticastRouteTable.java
index 8bff021..a5e8d30 100644
--- a/apps/mcast/src/main/java/org/onosproject/mcast/MulticastRouteTable.java
+++ b/core/api/src/main/java/org/onosproject/net/mcast/MulticastRouteTable.java
@@ -13,8 +13,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.mcast;
+package org.onosproject.net.mcast;
 
+import com.google.common.annotations.Beta;
 import org.onosproject.net.ConnectPoint;
 
 import java.util.List;
@@ -22,6 +23,7 @@
 /**
  * A service interface for maintaining multicast information.
  */
+@Beta
 public interface MulticastRouteTable {
 
     /**
