diff --git a/src/main/java/net/floodlightcontroller/debugevent/DebugEvent.java b/src/main/java/net/floodlightcontroller/debugevent/DebugEvent.java
index f3e5ac6d96ed06962248b1e8c7c2ea8f5e2a7096..1595380ce1eec77b370c0c7b3d49fb2144a01e2b 100644
--- a/src/main/java/net/floodlightcontroller/debugevent/DebugEvent.java
+++ b/src/main/java/net/floodlightcontroller/debugevent/DebugEvent.java
@@ -171,8 +171,6 @@ public class DebugEvent implements IFloodlightModule, IDebugEventService {
         }
     };
 
-
-
     /**
      * Thread local cache for event-ids that are currently active.
      */
@@ -192,14 +190,13 @@ public class DebugEvent implements IFloodlightModule, IDebugEventService {
     public int registerEvent(String moduleName, String eventName,
                              boolean flushImmediately, String eventDescription,
                              EventType et, int bufferCapacity, String formatStr,
-                             Object[] params) {
+                             Object[] params) throws MaxEventsRegistered {
         int eventId = -1;
         synchronized (eventIdLock) {
              eventId = Integer.valueOf(eventIdCounter++);
         }
-        if (eventId > MAX_EVENTS-2) {
-            log.error("Cannot register any more events - max threshold reached");
-            eventId = MAX_EVENTS-1; // last element of array
+        if (eventId > MAX_EVENTS-1) {
+            throw new MaxEventsRegistered();
         }
 
         // register event id for moduleName
@@ -219,7 +216,7 @@ public class DebugEvent implements IFloodlightModule, IDebugEventService {
                                      et, formatStr, eventDescription, eventName,
                                      moduleName, flushImmediately);
         allEvents[eventId] = new DebugEventHistory(ei, bufferCapacity);
-        if (enabled && eventId < MAX_EVENTS-1) {
+        if (enabled && eventId < MAX_EVENTS) {
             currentEvents.add(eventId);
         }
 
@@ -228,7 +225,7 @@ public class DebugEvent implements IFloodlightModule, IDebugEventService {
 
     @Override
     public void updateEvent(int eventId, Object[] params) {
-        if (eventId < 0 || eventId > MAX_EVENTS-2) return;
+        if (eventId < 0 || eventId > MAX_EVENTS-1) return;
 
         LocalEventHistory[] thishist = this.threadlocalEvents.get();
         if (thishist[eventId] == null) {
diff --git a/src/main/java/net/floodlightcontroller/debugevent/IDebugEventService.java b/src/main/java/net/floodlightcontroller/debugevent/IDebugEventService.java
index cddbc575fcc70415fed0600063c9ba9b98e9174e..72f1d4c9cb02e9e710d0058662beb438c025faed 100644
--- a/src/main/java/net/floodlightcontroller/debugevent/IDebugEventService.java
+++ b/src/main/java/net/floodlightcontroller/debugevent/IDebugEventService.java
@@ -38,6 +38,13 @@ public interface IDebugEventService extends IFloodlightService {
         }
     }
 
+    /**
+    * exception thrown when MAX_EVENTS have been registered
+    */
+    public class MaxEventsRegistered extends Exception {
+        private static final long serialVersionUID = 2609587082227510262L;
+    }
+
     /**
      * Register an event for debugging.
      *
@@ -64,10 +71,12 @@ public interface IDebugEventService extends IFloodlightService {
      *                         event. This can just be null for now.
      * @return                 an eventId for this event. All updates to this
      *                         event must use the returned eventId.
+     * @throws MaxEventsRegistered
      */
     public int registerEvent(String moduleName, String eventName, boolean flushNow,
                              String eventDescription, EventType et,
-                             int bufferCapacity, String formatStr, Object[] params);
+                             int bufferCapacity, String formatStr, Object[] params)
+                                     throws MaxEventsRegistered;
 
     /**
      * updateEvent is used to log events for pre-registered events.  This method
diff --git a/src/main/java/net/floodlightcontroller/debugevent/web/DebugEventResource.java b/src/main/java/net/floodlightcontroller/debugevent/web/DebugEventResource.java
index 58a940469e24083d59ba6b2152d34af3002363b9..3fab95487bde0f436e0ff0b5b215bebacccd1f56 100644
--- a/src/main/java/net/floodlightcontroller/debugevent/web/DebugEventResource.java
+++ b/src/main/java/net/floodlightcontroller/debugevent/web/DebugEventResource.java
@@ -22,7 +22,7 @@ import org.slf4j.LoggerFactory;
  *  where {param} must be one of (no quotes):
  *       "all"                  returns value/info on all active events.
  *       "{moduleName}"         returns value/info on all active events for the specified module.
- *       "{moduleCounterName}"  returns value/info for specific event if it is active.
+ *       "{moduleEventName}"  returns value/info for specific event if it is active.
  *
  * @author Saurav
  */
diff --git a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java
index d26410e00388b890e3c6c1e0f9974019d37464a4..61a69f3886962f8bde378af51fedcba0de81b3f7 100644
--- a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java
+++ b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkDiscoveryManager.java
@@ -60,6 +60,7 @@ import net.floodlightcontroller.debugcounter.IDebugCounterService;
 import net.floodlightcontroller.debugcounter.IDebugCounterService.CounterType;
 import net.floodlightcontroller.debugcounter.NullDebugCounter;
 import net.floodlightcontroller.debugevent.IDebugEventService;
+import net.floodlightcontroller.debugevent.IDebugEventService.MaxEventsRegistered;
 import net.floodlightcontroller.debugevent.NullDebugEvent;
 import net.floodlightcontroller.debugevent.IDebugEventService.EventType;
 import net.floodlightcontroller.linkdiscovery.ILinkDiscovery;
@@ -2073,7 +2074,7 @@ public class LinkDiscoveryManager implements IOFMessageListener,
         }
 
         registerLinkDiscoveryDebugCounters();
-        registerLinkDiscovertDebugEvents();
+        registerLinkDiscoveryDebugEvents();
 
         ScheduledExecutorService ses = threadPool.getScheduledExecutor();
 
@@ -2167,23 +2168,27 @@ public class LinkDiscoveryManager implements IOFMessageListener,
                                       CounterType.COUNT_ON_DEMAND);
     }
 
-    private void registerLinkDiscovertDebugEvents() {
+    private void registerLinkDiscoveryDebugEvents() {
         if (debugEvents == null) {
             log.error("Debug Event Service not found.");
             debugEvents = new NullDebugEvent();
             return;
         }
-        SWITCH_EVENT = debugEvents.registerEvent(
-                           getName(), "switchevent", true,
-                           "Switch connected, disconnected or port changed",
-                           EventType.ALWAYS_LOG, 100,
-                           "Sw=%dpid, reason=%s", null);
-
-        LINK_EVENT = debugEvents.registerEvent(
-                         getName(), "linkevent", false,
-                         "Direct OpenFlow links discovered or timed-out",
-                         EventType.ALWAYS_LOG, 100,
-                         "srcSw=%dpid, srcPort=%d, dstSw=%dpid, dstPort=%d, reason=%s", null);
+        try {
+            SWITCH_EVENT = debugEvents.registerEvent(
+                               getName(), "switchevent", true,
+                               "Switch connected, disconnected or port changed",
+                               EventType.ALWAYS_LOG, 100,
+                               "Sw=%dpid, reason=%s", null);
+
+            LINK_EVENT = debugEvents.registerEvent(
+                               getName(), "linkevent", false,
+                               "Direct OpenFlow links discovered or timed-out",
+                               EventType.ALWAYS_LOG, 100,
+                               "srcSw=%dpid, srcPort=%d, dstSw=%dpid, dstPort=%d, reason=%s", null);
+        } catch (MaxEventsRegistered e) {
+            e.printStackTrace();
+        }
     }
 
     // ****************************************************
diff --git a/src/test/java/net/floodlightcontroller/debugevent/DebugEventTest.java b/src/test/java/net/floodlightcontroller/debugevent/DebugEventTest.java
index 9003c7ba7e9b994d59ba5573a567b813522ced5b..67d18288f43adde2a44b982cbaaf2ce8da24ce4f 100644
--- a/src/test/java/net/floodlightcontroller/debugevent/DebugEventTest.java
+++ b/src/test/java/net/floodlightcontroller/debugevent/DebugEventTest.java
@@ -7,6 +7,7 @@ import org.slf4j.LoggerFactory;
 
 import net.floodlightcontroller.debugevent.IDebugEventService.DebugEventInfo;
 import net.floodlightcontroller.debugevent.IDebugEventService.EventType;
+import net.floodlightcontroller.debugevent.IDebugEventService.MaxEventsRegistered;
 import net.floodlightcontroller.test.FloodlightTestCase;
 
 public class DebugEventTest extends FloodlightTestCase {
@@ -24,9 +25,14 @@ public class DebugEventTest extends FloodlightTestCase {
     @Test
     public void testRegisterAndUpdateEvent() {
         assertEquals(0, debugEvent.currentEvents.size());
-        int eventId = debugEvent.registerEvent("dbgevtest", "switchevent", true,
+        int eventId = -1;
+        try {
+            eventId = debugEvent.registerEvent("dbgevtest", "switchevent", true,
                                                "switchtest", EventType.ALWAYS_LOG,
                                                100, "Sw=%dpid, reason=%s", null);
+        } catch (MaxEventsRegistered e) {
+            e.printStackTrace();
+        }
 
         assertEquals(1, debugEvent.currentEvents.size());
         assertEquals(eventId, debugEvent.moduleEvents.get("dbgevtest").