diff --git a/apps/mcast/pom.xml b/apps/mcast/pom.xml
new file mode 100644
index 0000000..43b0460
--- /dev/null
+++ b/apps/mcast/pom.xml
@@ -0,0 +1,45 @@
+<?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/McastEvent.java b/apps/mcast/src/main/java/org/onosproject/mcast/McastEvent.java
new file mode 100644
index 0000000..8ca57f2
--- /dev/null
+++ b/apps/mcast/src/main/java/org/onosproject/mcast/McastEvent.java
@@ -0,0 +1,111 @@
+/*
+ * 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.onosproject.event.AbstractEvent;
+import org.onosproject.net.ConnectPoint;
+
+import java.util.Optional;
+
+/**
+ * An entity representing a multicast event. Event either add or remove
+ * sinks or sources.
+ */
+public class McastEvent extends AbstractEvent<McastEvent.Type, McastRoute> {
+
+    private final Optional<ConnectPoint> sink;
+    private final Optional<ConnectPoint> source;
+
+    public enum Type {
+        /**
+         * A new mcast route has been added.
+         */
+        ROUTE_ADDED,
+
+        /**
+         * A mcast route has been removed.
+         */
+        ROUTE_REMOVED,
+
+        /**
+         * A source for a mcast route (ie. the subject) has been added.
+         */
+        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,
+
+        /**
+         * A source for a mcast route (ie. the subject) has been removed.
+         */
+        SINK_REMOVED
+    }
+
+    private McastEvent(McastEvent.Type type, McastRoute subject) {
+        super(type, subject);
+        sink = Optional.empty();
+        source = Optional.empty();
+    }
+
+    private McastEvent(McastEvent.Type type, McastRoute subject, long time) {
+        super(type, subject, time);
+        sink = Optional.empty();
+        source = Optional.empty();
+    }
+
+    protected 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,
+                       ConnectPoint sink,
+                       ConnectPoint source) {
+        super(type, subject, time);
+        this.sink = Optional.ofNullable(sink);
+        this.source = Optional.ofNullable(source);
+    }
+
+    /**
+     * The sink which has been removed or added. The field may not be set
+     * if the sink has not been detected yet or has been removed.
+     *
+     * @return an optional connect point
+     */
+    public Optional<ConnectPoint> sink() {
+        return sink;
+    }
+
+    /**
+     * 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.
+
+     * @return an optional connect point
+     */
+    public Optional<ConnectPoint> source() {
+        return source;
+    }
+}
diff --git a/apps/mcast/src/main/java/org/onosproject/mcast/McastListener.java b/apps/mcast/src/main/java/org/onosproject/mcast/McastListener.java
new file mode 100644
index 0000000..cbd84af
--- /dev/null
+++ b/apps/mcast/src/main/java/org/onosproject/mcast/McastListener.java
@@ -0,0 +1,24 @@
+/*
+ * 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.onosproject.event.EventListener;
+
+/**
+ * A listener interface for multicast events.
+ */
+public interface McastListener extends EventListener<McastEvent> {
+}
diff --git a/apps/mcast/src/main/java/org/onosproject/mcast/McastRoute.java b/apps/mcast/src/main/java/org/onosproject/mcast/McastRoute.java
new file mode 100644
index 0000000..d2999d0
--- /dev/null
+++ b/apps/mcast/src/main/java/org/onosproject/mcast/McastRoute.java
@@ -0,0 +1,52 @@
+/*
+ * 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/mcast/src/main/java/org/onosproject/mcast/MulticastRouteTable.java b/apps/mcast/src/main/java/org/onosproject/mcast/MulticastRouteTable.java
new file mode 100644
index 0000000..8bff021
--- /dev/null
+++ b/apps/mcast/src/main/java/org/onosproject/mcast/MulticastRouteTable.java
@@ -0,0 +1,90 @@
+/*
+ * 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.onosproject.net.ConnectPoint;
+
+import java.util.List;
+
+/**
+ * A service interface for maintaining multicast information.
+ */
+public interface MulticastRouteTable {
+
+    /**
+     * Adds a route to the information base.
+     *
+     * @param route a multicast route
+     */
+    void add(McastRoute route);
+
+    /**
+     * Removes a route from the information base.
+     *
+     * @param route a multicast route
+     */
+    void remove(McastRoute route);
+
+    /**
+     * Adds a source connection to the route from where the
+     * data stream is originating.
+     *
+     * @param route the multicast route
+     * @param connectPoint a source connect point
+     */
+    void addSource(McastRoute route, ConnectPoint connectPoint);
+
+    /**
+     * Adds a sink to the route to which a data stream should be
+     * sent to.
+     *
+     * @param route a multicast route
+     * @param connectPoint a sink connect point
+     */
+    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
+     * @param connectPoint a sink connect point
+     */
+    void removeSink(McastRoute route, ConnectPoint connectPoint);
+
+    /**
+     * Find the data source association for this multicast route.
+     *
+     * @param route a multicast route
+     * @return a connect point
+     */
+    ConnectPoint fetchSource(McastRoute route);
+
+    /**
+     * Find the list of sinks for this route.
+     *
+     * @param route a multicast route
+     * @return a list of connect points
+     */
+    List<ConnectPoint> fetchSinks(McastRoute route);
+}
diff --git a/apps/pom.xml b/apps/pom.xml
index 611ac0b..c016509 100644
--- a/apps/pom.xml
+++ b/apps/pom.xml
@@ -61,6 +61,7 @@
         <module>mfwd</module>
         <module>igmp</module>
         <module>pim</module>
+        <module>mcast</module>
   </modules>
 
     <properties>
