diff --git a/app/src/main/java/org/opencord/igmpproxy/impl/IgmpManager.java b/app/src/main/java/org/opencord/igmpproxy/impl/IgmpManager.java
index e32bc4a..f70dde2 100644
--- a/app/src/main/java/org/opencord/igmpproxy/impl/IgmpManager.java
+++ b/app/src/main/java/org/opencord/igmpproxy/impl/IgmpManager.java
@@ -352,6 +352,9 @@
         DeviceId deviceId = cp.deviceId();
         PortNumber portNumber = cp.port();
 
+        log.debug("Processing IGMP report on membership {} for vlan {} on port {} with type {}",
+                  igmpGroup, vlan, cp, igmpType);
+
         Ip4Address groupIp = igmpGroup.getGaddr().getIp4Address();
         if (!groupIp.isMulticast()) {
             log.info(groupIp.toString() + " is not a valid group address");
@@ -405,7 +408,9 @@
         GroupMember groupMember = groupMemberStore.getGroupMember(groupMemberKey);
 
         if (join) {
+            log.debug("Received join on {} for vlan {}", cp, vlan);
             igmpStatisticsManager.increaseStat(IgmpStatisticType.IGMP_JOIN_REQ);
+
             if (groupMember == null) {
                 Optional<ConnectPoint> sourceConfigured = getSource();
                 if (!sourceConfigured.isPresent()) {
@@ -460,6 +465,7 @@
             //put updated member to the store
             groupMemberStore.putGroupMember(groupMember);
         } else {
+            log.debug("Received leave on {} for vlan {}", cp, vlan);
             igmpStatisticsManager.increaseStat(IgmpStatisticType.IGMP_LEAVE_REQ);
             if (groupMember == null) {
                 log.info("receive leave but no instance, group {} device: {} port:{}",
@@ -775,7 +781,7 @@
             return (connectPointMode && connectPoint.deviceId().equals(device)
                     && connectPoint.port().equals(port));
         } else {
-            log.info("connectPoint not configured for device {}", device);
+            log.debug("connectPoint not configured for device {}", device);
             return false;
         }
     }
diff --git a/app/src/main/java/org/opencord/igmpproxy/impl/IgmpSender.java b/app/src/main/java/org/opencord/igmpproxy/impl/IgmpSender.java
index 9bda1c9..c71c70a 100644
--- a/app/src/main/java/org/opencord/igmpproxy/impl/IgmpSender.java
+++ b/app/src/main/java/org/opencord/igmpproxy/impl/IgmpSender.java
@@ -271,9 +271,15 @@
 
     public void sendIgmpPacket(Ethernet ethPkt, DeviceId deviceId, PortNumber portNumber) {
         if (!igmpLeadershipService.isLocalLeader(deviceId)) {
+            log.trace("Instance is not leader for device {}, " +
+                             "not emitting IMGP packet on port {}", deviceId, portNumber);
             return;
         }
 
+        if (log.isTraceEnabled()) {
+            log.trace("Emitting on {}/{} outbound IGMP packet {}", deviceId, portNumber, ethPkt);
+        }
+
         IPv4 ipv4Pkt = (IPv4) ethPkt.getPayload();
         IGMP igmp = (IGMP) ipv4Pkt.getPayload();
         // We are checking the length of packets. Right now the counter value will be 0 because of internal translation
@@ -292,6 +298,9 @@
                 treatment, ByteBuffer.wrap(ethPkt.serialize()));
         igmpStatisticsService.increaseStat(IgmpStatisticType.VALID_IGMP_PACKET_COUNTER);
         packetService.emit(packet);
+        if (log.isTraceEnabled()) {
+            log.trace("Emitted on {}/{} outbound IGMP packet {}", deviceId, portNumber, packet);
+        }
 
     }
 }
diff --git a/app/src/main/java/org/opencord/igmpproxy/impl/SingleStateMachine.java b/app/src/main/java/org/opencord/igmpproxy/impl/SingleStateMachine.java
index 83f2ef2..e0ae994 100644
--- a/app/src/main/java/org/opencord/igmpproxy/impl/SingleStateMachine.java
+++ b/app/src/main/java/org/opencord/igmpproxy/impl/SingleStateMachine.java
@@ -24,6 +24,8 @@
 import org.opencord.igmpproxy.statemachine.StateMachine;
 import org.opencord.igmpproxy.statemachine.State;
 import org.opencord.igmpproxy.statemachine.StateMachineId;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -34,6 +36,8 @@
 public final class SingleStateMachine implements StateMachine {
     public static final int DEFAULT_MAX_RESP = 0xfffffff;
 
+    private Logger log = LoggerFactory.getLogger(getClass());
+
     private StateMachineId stateMachineId;
     private int currentState;
 
@@ -211,6 +215,7 @@
     }
 
     private void next(int msg) {
+        log.debug("Transitioning to State {}", msg);
         this.currentState = transition[currentState][msg];
     }
 
