diff --git a/core/net/src/main/java/org/onosproject/net/statistic/impl/FlowStatisticManager.java b/core/net/src/main/java/org/onosproject/net/statistic/impl/FlowStatisticManager.java
index 1287211..3f294f2 100644
--- a/core/net/src/main/java/org/onosproject/net/statistic/impl/FlowStatisticManager.java
+++ b/core/net/src/main/java/org/onosproject/net/statistic/impl/FlowStatisticManager.java
@@ -16,16 +16,21 @@
 
 package org.onosproject.net.statistic.impl;
 
-import com.google.common.base.MoreObjects;
-import com.google.common.base.Predicate;
-import com.google.common.collect.ImmutableSet;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.stream.Collectors;
+
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.Service;
-import org.onosproject.utils.Comparators;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.Device;
 import org.onosproject.net.Port;
@@ -46,22 +51,17 @@
 import org.onosproject.net.statistic.StatisticStore;
 import org.onosproject.net.statistic.SummaryFlowEntryWithLoad;
 import org.onosproject.net.statistic.TypedFlowEntryWithLoad;
-
+import org.onosproject.utils.Comparators;
 import org.slf4j.Logger;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.stream.Collectors;
+import com.google.common.base.MoreObjects;
+import com.google.common.base.Predicate;
+import com.google.common.collect.ImmutableSet;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static org.onosproject.security.AppGuard.checkPermission;
+import static org.onosproject.security.AppPermission.Type.STATISTIC_READ;
 import static org.slf4j.LoggerFactory.getLogger;
-import static org.onosproject.security.AppPermission.Type.*;
 
 /**
  * Provides an implementation of the Flow Statistic Service.
@@ -380,75 +380,6 @@
         }
     }
 
-    //
-    // Deprecated interfaces...
-    //
-    @Override
-    public Map<ConnectPoint, List<TypedFlowEntryWithLoad>> loadAllByType(Device device,
-                                                                  TypedStoredFlowEntry.FlowLiveType liveType,
-                                                                  Instruction.Type instType) {
-        FlowEntry.FlowLiveType type = toFlowEntryLiveType(liveType);
-
-        Map<ConnectPoint, List<FlowEntryWithLoad>> loadMap = loadAllByType(device, type, instType);
-
-        return toFlowEntryWithLoadMap(loadMap);
-    }
-
-    @Override
-    public List<TypedFlowEntryWithLoad> loadAllByType(Device device, PortNumber pNumber,
-                                               TypedStoredFlowEntry.FlowLiveType liveType,
-                                               Instruction.Type instType) {
-        FlowEntry.FlowLiveType type = toFlowEntryLiveType(liveType);
-
-        List<FlowEntryWithLoad> loadList = loadAllByType(device, pNumber, type, instType);
-
-        return toFlowEntryWithLoad(loadList);
-    }
-
-    @Override
-    public Map<ConnectPoint, List<TypedFlowEntryWithLoad>> loadTopnByType(Device device,
-                                                                   TypedStoredFlowEntry.FlowLiveType liveType,
-                                                                   Instruction.Type instType,
-                                                                   int topn) {
-        FlowEntry.FlowLiveType type = toFlowEntryLiveType(liveType);
-
-        Map<ConnectPoint, List<FlowEntryWithLoad>> loadMap = loadTopnByType(device, type, instType, topn);
-
-        return toFlowEntryWithLoadMap(loadMap);
-    }
-
-    @Override
-    public List<TypedFlowEntryWithLoad> loadTopnByType(Device device, PortNumber pNumber,
-                                                TypedStoredFlowEntry.FlowLiveType liveType,
-                                                Instruction.Type instType,
-                                                int topn) {
-        FlowEntry.FlowLiveType type = toFlowEntryLiveType(liveType);
-
-        List<FlowEntryWithLoad> loadList = loadTopnByType(device, pNumber, type, instType, topn);
-
-        return toFlowEntryWithLoad(loadList);
-    }
-
-    private FlowEntry.FlowLiveType toFlowEntryLiveType(TypedStoredFlowEntry.FlowLiveType liveType) {
-        if (liveType == null) {
-            return null;
-        }
-
-        // convert TypedStoredFlowEntry flow live type to FlowEntry one
-        switch (liveType) {
-            case IMMEDIATE_FLOW:
-                return FlowEntry.FlowLiveType.IMMEDIATE;
-            case SHORT_FLOW:
-                return FlowEntry.FlowLiveType.SHORT;
-            case MID_FLOW:
-                return FlowEntry.FlowLiveType.MID;
-            case LONG_FLOW:
-                return FlowEntry.FlowLiveType.LONG;
-            default:
-                return FlowEntry.FlowLiveType.UNKNOWN;
-        }
-    }
-
     private TypedStoredFlowEntry.FlowLiveType toTypedStoredFlowEntryLiveType(FlowEntry.FlowLiveType liveType) {
         if (liveType == null) {
             return null;
