diff --git a/src/main/java/org/onosproject/igmp/IGMPProcessMembership.java b/src/main/java/org/onosproject/igmp/IGMPProcessMembership.java
deleted file mode 100644
index 0065af4..0000000
--- a/src/main/java/org/onosproject/igmp/IGMPProcessMembership.java
+++ /dev/null
@@ -1,39 +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.igmp;
-
-import org.onlab.packet.IGMP;
-import org.onosproject.net.ConnectPoint;
-
-/**
- * Process an IGMP Membership Report.
- */
-public final class IGMPProcessMembership {
-
-    // Hide the default constructor.
-    private IGMPProcessMembership() {
-    }
-
-    /**
-     * Process the IGMP Membership report.
-     *
-     * @param igmp the deserialized IGMP message.
-     * @param receivedFrom the ConnectPoint this message came from.
-     */
-    public static void processMembership(IGMP igmp, ConnectPoint receivedFrom) {
-    }
-
-}
diff --git a/src/main/java/org/onosproject/igmp/IGMPProcessQuery.java b/src/main/java/org/onosproject/igmp/IGMPProcessQuery.java
deleted file mode 100644
index a5ddbf3..0000000
--- a/src/main/java/org/onosproject/igmp/IGMPProcessQuery.java
+++ /dev/null
@@ -1,39 +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.igmp;
-
-import org.onlab.packet.IGMP;
-import org.onosproject.net.ConnectPoint;
-
-/**
- * Process IGMP Query messages.
- */
-public final class IGMPProcessQuery {
-
-    // Hide the default constructor.
-    private IGMPProcessQuery() {
-    }
-
-    /**
-     * Process the IGMP Membership Query message.
-     *
-     * @param igmp The deserialzed IGMP message
-     * @param receivedFrom the ConnectPoint this message came from.
-     */
-    public static void processQuery(IGMP igmp, ConnectPoint receivedFrom) {
-    }
-
-}
diff --git a/src/main/java/org/onosproject/igmp/IgmpSnoop.java b/src/main/java/org/onosproject/igmp/IgmpSnoop.java
index 3ade419..a0e2aeb 100644
--- a/src/main/java/org/onosproject/igmp/IgmpSnoop.java
+++ b/src/main/java/org/onosproject/igmp/IgmpSnoop.java
@@ -24,6 +24,7 @@
 import org.onlab.packet.EthType;
 import org.onlab.packet.Ethernet;
 import org.onlab.packet.IGMP;
+import org.onlab.packet.IGMPMembership;
 import org.onlab.packet.IPv4;
 import org.onlab.packet.Ip4Address;
 import org.onlab.packet.IpAddress;
@@ -76,7 +77,7 @@
     private static final String DEFAULT_MCAST_ADDR = "224.0.0.0/4";
 
     @Property(name = "multicastAddress",
-            label = "Define the multicast base raneg to listen to")
+            label = "Define the multicast base range to listen to")
     private String multicastAddress = DEFAULT_MCAST_ADDR;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
@@ -194,6 +195,7 @@
     }
 
     private void processQuery(IGMP pkt, ConnectPoint location) {
+        // TODO is this the right thing to do for a query?
         pkt.getGroups().forEach(group -> group.getSources().forEach(src -> {
 
             McastRoute route = new McastRoute(src,
@@ -205,6 +207,36 @@
         }));
     }
 
+    private void processMembership(IGMP pkt, ConnectPoint location) {
+        pkt.getGroups().forEach(group -> {
+
+            if (!(group instanceof IGMPMembership)) {
+                log.warn("Wrong group type in IGMP membership");
+                return;
+            }
+
+            IGMPMembership membership = (IGMPMembership) group;
+
+            McastRoute route = new McastRoute(IpAddress.valueOf("0.0.0.0"),
+                    group.getGaddr(),
+                    McastRoute.Type.IGMP);
+
+            if (membership.getRecordType() == IGMPMembership.MODE_IS_INCLUDE ||
+                    membership.getRecordType() == IGMPMembership.CHANGE_TO_INCLUDE_MODE) {
+
+
+                multicastService.add(route);
+                multicastService.addSink(route, location);
+
+            } else if (membership.getRecordType() == IGMPMembership.MODE_IS_EXCLUDE ||
+                    membership.getRecordType() == IGMPMembership.CHANGE_TO_EXCLUDE_MODE) {
+                multicastService.removeSink(route, location);
+                // TODO remove route if all sinks are gone
+            }
+
+        });
+    }
+
     /**
      * Packet processor responsible for handling IGMP packets.
      */
@@ -259,7 +291,7 @@
             switch (igmp.getIgmpType()) {
 
                 case IGMP.TYPE_IGMPV3_MEMBERSHIP_REPORT:
-                    IGMPProcessMembership.processMembership(igmp, pkt.receivedFrom());
+                    processMembership(igmp, pkt.receivedFrom());
                     break;
 
                 case IGMP.TYPE_IGMPV3_MEMBERSHIP_QUERY:
@@ -269,12 +301,11 @@
                 case IGMP.TYPE_IGMPV1_MEMBERSHIP_REPORT:
                 case IGMP.TYPE_IGMPV2_MEMBERSHIP_REPORT:
                 case IGMP.TYPE_IGMPV2_LEAVE_GROUP:
-                    log.debug("IGMP version 1 & 2 message types are not currently supported. Message type: " +
+                    log.debug("IGMP version 1 & 2 message types are not currently supported. Message type: {}",
                                       igmp.getIgmpType());
                     break;
-
                 default:
-                    log.debug("Unkown IGMP message type: " + igmp.getIgmpType());
+                    log.debug("Unknown IGMP message type: {}", igmp.getIgmpType());
                     break;
             }
         }
@@ -312,7 +343,6 @@
                     log.warn("Unknown device event {}", event.type());
                     break;
             }
-
         }
 
         @Override
