diff --git a/providers/lldpcommon/src/main/java/org/onosproject/provider/lldpcommon/LinkDiscovery.java b/providers/lldpcommon/src/main/java/org/onosproject/provider/lldpcommon/LinkDiscovery.java
index f4e2231..e3b9085 100644
--- a/providers/lldpcommon/src/main/java/org/onosproject/provider/lldpcommon/LinkDiscovery.java
+++ b/providers/lldpcommon/src/main/java/org/onosproject/provider/lldpcommon/LinkDiscovery.java
@@ -17,8 +17,9 @@
 
 import com.google.common.collect.Sets;
 
-import org.jboss.netty.util.Timeout;
-import org.jboss.netty.util.TimerTask;
+import io.netty.util.Timeout;
+import io.netty.util.TimerTask;
+
 import org.onlab.packet.Ethernet;
 import org.onlab.packet.MacAddress;
 import org.onlab.packet.ONOSLLDP;
@@ -109,7 +110,7 @@
     public synchronized void start() {
         if (isStopped) {
             isStopped = false;
-            timeout = Timer.getTimer().newTimeout(this, 0, MILLISECONDS);
+            timeout = Timer.newTimeout(this, 0, MILLISECONDS);
         } else {
             log.warn("LinkDiscovery started multiple times?");
         }
@@ -218,7 +219,7 @@
         }
 
         if (!isStopped()) {
-            timeout = Timer.getTimer().newTimeout(this, context.probeRate(), MILLISECONDS);
+            timeout = t.timer().newTimeout(this, context.probeRate(), MILLISECONDS);
         }
     }
 
diff --git a/providers/null/src/main/java/org/onosproject/provider/nil/NullFlowRuleProvider.java b/providers/null/src/main/java/org/onosproject/provider/nil/NullFlowRuleProvider.java
index 8e508d2..98cb848 100644
--- a/providers/null/src/main/java/org/onosproject/provider/nil/NullFlowRuleProvider.java
+++ b/providers/null/src/main/java/org/onosproject/provider/nil/NullFlowRuleProvider.java
@@ -16,9 +16,10 @@
 package org.onosproject.provider.nil;
 
 import com.google.common.collect.Sets;
-import org.jboss.netty.util.HashedWheelTimer;
-import org.jboss.netty.util.Timeout;
-import org.jboss.netty.util.TimerTask;
+
+import io.netty.util.Timeout;
+import io.netty.util.TimerTask;
+
 import org.onlab.util.Timer;
 import org.onosproject.core.ApplicationId;
 import org.onosproject.net.DeviceId;
@@ -52,7 +53,6 @@
 
     private FlowRuleProviderService providerService;
 
-    private HashedWheelTimer timer = Timer.getTimer();
     private Timeout timeout;
 
     /**
@@ -62,7 +62,7 @@
      */
     void start(FlowRuleProviderService providerService) {
         this.providerService = providerService;
-        timeout = timer.newTimeout(new StatisticTask(), 5, TimeUnit.SECONDS);
+        timeout = Timer.newTimeout(new StatisticTask(), 5, TimeUnit.SECONDS);
     }
 
     /**
@@ -126,7 +126,7 @@
                         flowTable.getOrDefault(devId, Collections.emptySet());
                 providerService.pushFlowMetrics(devId, entries);
             }
-            timeout = timer.newTimeout(to.getTask(), 5, TimeUnit.SECONDS);
+            timeout = to.timer().newTimeout(to.task(), 5, TimeUnit.SECONDS);
         }
     }
 }
diff --git a/providers/null/src/main/java/org/onosproject/provider/nil/NullPacketProvider.java b/providers/null/src/main/java/org/onosproject/provider/nil/NullPacketProvider.java
index 54b45e4..d69a0ac 100644
--- a/providers/null/src/main/java/org/onosproject/provider/nil/NullPacketProvider.java
+++ b/providers/null/src/main/java/org/onosproject/provider/nil/NullPacketProvider.java
@@ -15,9 +15,6 @@
  */
 package org.onosproject.provider.nil;
 
-import org.jboss.netty.util.HashedWheelTimer;
-import org.jboss.netty.util.Timeout;
-import org.jboss.netty.util.TimerTask;
 import org.onlab.packet.Ethernet;
 import org.onlab.packet.ICMP;
 import org.onlab.util.Timer;
@@ -34,6 +31,9 @@
 import org.onosproject.net.packet.PacketProviderService;
 import org.slf4j.Logger;
 
+import io.netty.util.Timeout;
+import io.netty.util.TimerTask;
+
 import java.nio.ByteBuffer;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
@@ -69,7 +69,6 @@
     private List<Device> devices;
     private int currentDevice = 0;
 
-    private HashedWheelTimer timer = Timer.getTimer();
     private Timeout timeout;
 
     /**
@@ -91,7 +90,7 @@
                 .collect(Collectors.toList());
 
         adjustRate(packetRate);
-        timeout = timer.newTimeout(new PacketDriverTask(), INITIAL_DELAY, SECONDS);
+        timeout = Timer.newTimeout(new PacketDriverTask(), INITIAL_DELAY, SECONDS);
     }
 
     /**
@@ -103,7 +102,7 @@
         boolean needsRestart = delay == 0 && packetRate > 0;
         delay = packetRate > 0 ? 1000 / packetRate : 0;
         if (needsRestart) {
-            timeout = timer.newTimeout(new PacketDriverTask(), 1, MILLISECONDS);
+            timeout = Timer.newTimeout(new PacketDriverTask(), 1, MILLISECONDS);
         }
         log.info("Settings: packetRate={}, delay={}", packetRate, delay);
     }
@@ -144,7 +143,7 @@
             if (!devices.isEmpty() && !to.isCancelled() && delay > 0) {
                 sendEvent(devices.get(Math.min(currentDevice, devices.size() - 1)));
                 currentDevice = (currentDevice + 1) % devices.size();
-                timeout = timer.newTimeout(to.getTask(), delay, TimeUnit.MILLISECONDS);
+                timeout = to.timer().newTimeout(to.task(), delay, TimeUnit.MILLISECONDS);
             }
         }
 
diff --git a/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/GroupStatsCollector.java b/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/GroupStatsCollector.java
index d13a5b0..7366806 100644
--- a/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/GroupStatsCollector.java
+++ b/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/GroupStatsCollector.java
@@ -16,9 +16,6 @@
 
 package org.onosproject.provider.of.group.impl;
 
-import org.jboss.netty.util.HashedWheelTimer;
-import org.jboss.netty.util.Timeout;
-import org.jboss.netty.util.TimerTask;
 import org.onlab.util.Timer;
 import org.onosproject.openflow.controller.OpenFlowSwitch;
 import org.onosproject.openflow.controller.RoleState;
@@ -27,6 +24,9 @@
 import org.projectfloodlight.openflow.types.OFGroup;
 import org.slf4j.Logger;
 
+import io.netty.util.Timeout;
+import io.netty.util.TimerTask;
+
 import java.util.concurrent.TimeUnit;
 
 import static org.slf4j.LoggerFactory.getLogger;
@@ -36,7 +36,6 @@
  */
 public class GroupStatsCollector implements TimerTask {
 
-    private final HashedWheelTimer timer = Timer.getTimer();
     private final OpenFlowSwitch sw;
     private final Logger log = getLogger(getClass());
     private final int refreshInterval;
@@ -65,7 +64,7 @@
         if (!this.stopTimer) {
             log.trace("Scheduling stats collection in {} seconds for {}",
                     this.refreshInterval, this.sw.getStringId());
-            timeout.getTimer().newTimeout(this, refreshInterval,
+            timeout.timer().newTimeout(this, refreshInterval,
                     TimeUnit.SECONDS);
         }
     }
@@ -100,7 +99,7 @@
      */
     public void start() {
         log.info("Starting Group Stats collection thread for {}", sw.getStringId());
-        timeout = timer.newTimeout(this, 1, TimeUnit.SECONDS);
+        timeout = Timer.newTimeout(this, 1, TimeUnit.SECONDS);
     }
 
     /**
diff --git a/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/MeterStatsCollector.java b/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/MeterStatsCollector.java
index 38af8db0..677eec1 100644
--- a/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/MeterStatsCollector.java
+++ b/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/MeterStatsCollector.java
@@ -16,15 +16,15 @@
 
 package org.onosproject.provider.of.meter.impl;
 
-import org.jboss.netty.util.HashedWheelTimer;
-import org.jboss.netty.util.Timeout;
-import org.jboss.netty.util.TimerTask;
 import org.onlab.util.Timer;
 import org.onosproject.openflow.controller.OpenFlowSwitch;
 import org.onosproject.openflow.controller.RoleState;
 import org.projectfloodlight.openflow.protocol.OFMeterStatsRequest;
 import org.slf4j.Logger;
 
+import io.netty.util.Timeout;
+import io.netty.util.TimerTask;
+
 import java.util.concurrent.TimeUnit;
 
 import static org.slf4j.LoggerFactory.getLogger;
@@ -34,7 +34,6 @@
  */
 public class MeterStatsCollector implements TimerTask {
 
-    private final HashedWheelTimer timer = Timer.getTimer();
     private final OpenFlowSwitch sw;
     private final Logger log = getLogger(getClass());
     private final int refreshInterval;
@@ -68,7 +67,7 @@
         if (!this.stopTimer) {
             log.trace("Scheduling stats collection in {} seconds for {}",
                     this.refreshInterval, this.sw.getStringId());
-            timeout.getTimer().newTimeout(this, refreshInterval,
+            timeout.timer().newTimeout(this, refreshInterval,
                     TimeUnit.SECONDS);
         }
     }
@@ -94,7 +93,7 @@
      */
     public void start() {
         log.info("Starting Meter Stats collection thread for {}", sw.getStringId());
-        timeout = timer.newTimeout(this, 1, TimeUnit.SECONDS);
+        timeout = Timer.newTimeout(this, 1, TimeUnit.SECONDS);
     }
 
     /**
diff --git a/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/TunnelStatsCollector.java b/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/TunnelStatsCollector.java
index ab3e752..e64daa4 100644
--- a/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/TunnelStatsCollector.java
+++ b/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/TunnelStatsCollector.java
@@ -19,14 +19,14 @@
 
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.jboss.netty.util.HashedWheelTimer;
-import org.jboss.netty.util.Timeout;
-import org.jboss.netty.util.TimerTask;
 import org.onlab.util.Timer;
 import org.onosproject.pcep.api.PcepController;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import io.netty.util.Timeout;
+import io.netty.util.TimerTask;
+
 import java.util.concurrent.TimeUnit;
 
 /*
@@ -39,7 +39,6 @@
     protected PcepController controller;
 
     private int refreshInterval;
-    private final HashedWheelTimer timer = Timer.getTimer();
 
     private String pcepTunnelId;
     private Timeout timeout;
@@ -47,7 +46,7 @@
 
 
     /**
-     * Greate a tunnel status collector object.
+     * Create a tunnel status collector object.
      *
      * @param id              tunnel whose status data will be collected
      * @param refreshInterval time interval for collecting statistic
@@ -68,7 +67,7 @@
         if (!stopped && !timeout.isCancelled()) {
             log.trace("Scheduling stats collection in {} seconds for {}",
                       this.refreshInterval, pcepTunnelId);
-            timeout.getTimer().newTimeout(this, refreshInterval, TimeUnit.SECONDS);
+            timeout.timer().newTimeout(this, refreshInterval, TimeUnit.SECONDS);
         }
 
     }
@@ -88,7 +87,7 @@
     public synchronized void start() {
         log.info("Starting Tunnel Stats collection thread for {}", pcepTunnelId);
         stopped = false;
-        timeout = timer.newTimeout(this, 1, TimeUnit.SECONDS);
+        timeout = Timer.newTimeout(this, 1, TimeUnit.SECONDS);
     }
 
     /**
