diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/meter/impl/MeterManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/meter/impl/MeterManager.java
index 2cf658f..37251f6 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/meter/impl/MeterManager.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/meter/impl/MeterManager.java
@@ -29,6 +29,7 @@
 import org.onosproject.net.meter.Meter;
 import org.onosproject.net.meter.MeterEvent;
 import org.onosproject.net.meter.MeterFailReason;
+import org.onosproject.net.meter.MeterFeatures;
 import org.onosproject.net.meter.MeterId;
 import org.onosproject.net.meter.MeterKey;
 import org.onosproject.net.meter.MeterListener;
@@ -226,6 +227,16 @@
                 }
             });
         }
+
+        @Override
+        public void pushMeterFeatures(DeviceId deviceId, MeterFeatures meterfeatures) {
+            store.storeMeterFeatures(meterfeatures);
+        }
+
+        @Override
+        public void deleteMeterFeatures(DeviceId deviceId) {
+            store.deleteMeterFeatures(deviceId);
+        }
     }
 
     private class InternalMeterStoreDelegate implements MeterStoreDelegate {
diff --git a/incubator/net/src/test/java/org/onosproject/incubator/net/meter/impl/MeterManagerTest.java b/incubator/net/src/test/java/org/onosproject/incubator/net/meter/impl/MeterManagerTest.java
index 05832c7..a81004f 100644
--- a/incubator/net/src/test/java/org/onosproject/incubator/net/meter/impl/MeterManagerTest.java
+++ b/incubator/net/src/test/java/org/onosproject/incubator/net/meter/impl/MeterManagerTest.java
@@ -35,8 +35,10 @@
 import org.onosproject.net.meter.Band;
 import org.onosproject.net.meter.DefaultBand;
 import org.onosproject.net.meter.DefaultMeter;
+import org.onosproject.net.meter.DefaultMeterFeatures;
 import org.onosproject.net.meter.DefaultMeterRequest;
 import org.onosproject.net.meter.Meter;
+import org.onosproject.net.meter.MeterFeaturesKey;
 import org.onosproject.net.meter.MeterId;
 import org.onosproject.net.meter.MeterOperation;
 import org.onosproject.net.meter.MeterOperations;
@@ -51,13 +53,12 @@
 import org.onosproject.store.service.TestStorageService;
 
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 
 import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 import static org.onosproject.net.NetTestTools.APP_ID;
 import static org.onosproject.net.NetTestTools.did;
 import static org.onosproject.net.NetTestTools.injectEventDispatcher;
@@ -96,6 +97,24 @@
         TestUtils.setField(meterStore, "clusterService", new TestClusterService());
         TestUtils.setField(meterStore, "mastershipService", new TestMastershipService());
         meterStore.activate();
+        meterStore.storeMeterFeatures(DefaultMeterFeatures.builder().forDevice(did("1"))
+                .withMaxMeters(255L)
+                .withBandTypes(new HashSet<>())
+                .withUnits(new HashSet<>())
+                .hasStats(false)
+                .hasBurst(false)
+                .withMaxBands((byte) 0)
+                .withMaxColors((byte) 0)
+                .build());
+        meterStore.storeMeterFeatures(DefaultMeterFeatures.builder().forDevice(did("2"))
+                .withMaxMeters(2)
+                .withBandTypes(new HashSet<>())
+                .withUnits(new HashSet<>())
+                .hasBurst(false)
+                .hasStats(false)
+                .withMaxBands((byte) 0)
+                .withMaxColors((byte) 0)
+                .build());
 
         manager = new MeterManager();
         manager.store = meterStore;
@@ -195,6 +214,14 @@
         assertThat(manager.getMeter(did("2"), MeterId.meterId(1)), is(m2));
     }
 
+    @Test
+    public void testMeterFeatures() {
+        assertEquals(meterStore.getMaxMeters(MeterFeaturesKey.key(did("1"))), 255L);
+        assertEquals(meterStore.getMaxMeters(MeterFeaturesKey.key(did("2"))), 2);
+    }
+
+
+
     public class TestApplicationId extends DefaultApplicationId {
         public TestApplicationId(int id, String name) {
             super(id, name);
