diff --git a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFChannelHandler.java b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFChannelHandler.java
index 11cff69..6649fcd 100644
--- a/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFChannelHandler.java
+++ b/protocols/openflow/ctl/src/main/java/org/onosproject/openflow/controller/impl/OFChannelHandler.java
@@ -94,6 +94,13 @@
     // needs to check if the handshake is complete
     private volatile ChannelState state;
 
+    /**
+     * Timeout in ms to wait for meter feature reply.
+     */
+    private static final long METER_TIMEOUT = 60_000;
+
+    private volatile long lastStateChange = System.currentTimeMillis();
+
     // When a switch with a duplicate dpid is found (i.e we already have a
     // connected switch with the same dpid), the new switch is immediately
     // disconnected. At that point netty callsback channelDisconnected() which
@@ -574,6 +581,20 @@
          * OpenFlow 1.3
          */
         WAIT_METER_FEATURES_REPLY(true) {
+
+            @Override
+            void processOFEchoRequest(OFChannelHandler h, OFEchoRequest m)
+                    throws IOException {
+                super.processOFEchoRequest(h, m);
+                if (System.currentTimeMillis() - h.lastStateChange > METER_TIMEOUT) {
+                    log.info("{} did not respond to MeterFeaturesRequest on time, " +
+                            "moving on without it.",
+                            h.getSwitchInfoString());
+                   h.sendHandshakeDescriptionStatsRequest();
+                   h.setState(WAIT_DESCRIPTION_STAT_REPLY);
+                }
+            }
+
             @Override
             void processOFError(OFChannelHandler h, OFErrorMsg m)
                     throws IOException {
@@ -1303,6 +1324,7 @@
      */
     private void setState(ChannelState state) {
         this.state = state;
+        this.lastStateChange = System.currentTimeMillis();
     }
 
     /**
@@ -1332,6 +1354,7 @@
      */
     private void sendHandshakeFeaturesRequestMessage() throws IOException {
         OFFactory factory = (ofVersion == OFVersion.OF_13) ? factory13 : factory10;
+        log.debug("Sending FEATURES_REQUEST to {}", channel.getRemoteAddress());
         OFMessage m = factory.buildFeaturesRequest()
                 .setXid(this.handshakeTransactionIds--)
                 .build();
@@ -1345,7 +1368,7 @@
      */
     private void sendHandshakeSetConfig() throws IOException {
         OFFactory factory = (ofVersion == OFVersion.OF_13) ? factory13 : factory10;
-        //log.debug("Sending CONFIG_REQUEST to {}", channel.getRemoteAddress());
+        log.debug("Sending CONFIG_REQUEST to {}", channel.getRemoteAddress());
         List<OFMessage> msglist = new ArrayList<>(3);
 
         // Ensure we receive the full packet via PacketIn
@@ -1384,6 +1407,7 @@
     private void sendHandshakeDescriptionStatsRequest() throws IOException {
         // Get Description to set switch-specific flags
         OFFactory factory = (ofVersion == OFVersion.OF_13) ? factory13 : factory10;
+        log.debug("Sending DESC_STATS_REQUEST to {}", channel.getRemoteAddress());
         OFDescStatsRequest dreq = factory
                 .buildDescStatsRequest()
                 .setXid(handshakeTransactionIds--)
@@ -1399,6 +1423,7 @@
     private void sendMeterFeaturesRequest() throws IOException {
         // Get meter features including the MaxMeters value available for the device
         OFFactory factory = (ofVersion == OFVersion.OF_13) ? factory13 : factory10;
+        log.debug("Sending METER_FEATURES_REQUEST to {}", channel.getRemoteAddress());
         OFMeterFeaturesStatsRequest mfreq = factory
                 .buildMeterFeaturesStatsRequest()
                 .setXid(handshakeTransactionIds--)
@@ -1407,6 +1432,7 @@
     }
 
     private void sendHandshakeOFPortDescRequest() throws IOException {
+        log.debug("Sending OF_PORT_DESC_REQUEST to {}", channel.getRemoteAddress());
         // Get port description for 1.3 switch
         OFPortDescStatsRequest preq = factory13
                 .buildPortDescStatsRequest()
