diff --git a/storm-server/src/main/java/org/apache/storm/daemon/nimbus/TopologyResources.java b/storm-server/src/main/java/org/apache/storm/daemon/nimbus/TopologyResources.java
index 6a0c3fb..0daa7c7 100644
--- a/storm-server/src/main/java/org/apache/storm/daemon/nimbus/TopologyResources.java
+++ b/storm-server/src/main/java/org/apache/storm/daemon/nimbus/TopologyResources.java
@@ -94,7 +94,7 @@
         for (WorkerResources worker : workers) {
             genericResources = NormalizedResourceRequest.addResourceMap(genericResources, worker.get_resources());
         }
-        NormalizedResourceRequest.filterGenericResources(genericResources);
+        NormalizedResourceRequest.removeNonGenericResources(genericResources);
         return genericResources;
     }
 
diff --git a/storm-server/src/main/java/org/apache/storm/scheduler/SupervisorDetails.java b/storm-server/src/main/java/org/apache/storm/scheduler/SupervisorDetails.java
index 8daf142..1886273 100644
--- a/storm-server/src/main/java/org/apache/storm/scheduler/SupervisorDetails.java
+++ b/storm-server/src/main/java/org/apache/storm/scheduler/SupervisorDetails.java
@@ -18,7 +18,6 @@
 import java.util.Set;
 import org.apache.storm.scheduler.resource.normalization.NormalizedResourceOffer;
 import org.apache.storm.scheduler.resource.normalization.NormalizedResourceRequest;
-import org.apache.storm.scheduler.resource.normalization.ResourceMetrics;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -159,7 +158,7 @@
      */
     public Map<String, Double> getTotalGenericResources() {
         Map<String, Double> genericResources = totalResources.toNormalizedMap();
-        NormalizedResourceRequest.filterGenericResources(genericResources);
+        NormalizedResourceRequest.removeNonGenericResources(genericResources);
         return genericResources;
     }
 
diff --git a/storm-server/src/main/java/org/apache/storm/scheduler/SupervisorResources.java b/storm-server/src/main/java/org/apache/storm/scheduler/SupervisorResources.java
index 612896e..2c578d6 100644
--- a/storm-server/src/main/java/org/apache/storm/scheduler/SupervisorResources.java
+++ b/storm-server/src/main/java/org/apache/storm/scheduler/SupervisorResources.java
@@ -86,7 +86,7 @@
 
     public SupervisorResources add(WorkerResources wr) {
         usedGenericResources = NormalizedResourceRequest.addResourceMap(usedGenericResources, wr.get_resources());
-        NormalizedResourceRequest.filterGenericResources(usedGenericResources);
+        NormalizedResourceRequest.removeNonGenericResources(usedGenericResources);
 
         return new SupervisorResources(
                 totalMem,
diff --git a/storm-server/src/main/java/org/apache/storm/scheduler/TopologyDetails.java b/storm-server/src/main/java/org/apache/storm/scheduler/TopologyDetails.java
index 180b5f9..be20834 100644
--- a/storm-server/src/main/java/org/apache/storm/scheduler/TopologyDetails.java
+++ b/storm-server/src/main/java/org/apache/storm/scheduler/TopologyDetails.java
@@ -457,7 +457,7 @@
 
     public Map<String, Double> getTotalRequestedGenericResources() {
         Map<String, Double> map = getApproximateTotalResources().toNormalizedMap();
-        NormalizedResourceRequest.filterGenericResources(map);
+        NormalizedResourceRequest.removeNonGenericResources(map);
         return map;
     }
 
diff --git a/storm-server/src/main/java/org/apache/storm/scheduler/resource/normalization/NormalizedResourceRequest.java b/storm-server/src/main/java/org/apache/storm/scheduler/resource/normalization/NormalizedResourceRequest.java
index 66aade8..0a9c7f0 100644
--- a/storm-server/src/main/java/org/apache/storm/scheduler/resource/normalization/NormalizedResourceRequest.java
+++ b/storm-server/src/main/java/org/apache/storm/scheduler/resource/normalization/NormalizedResourceRequest.java
@@ -179,9 +179,9 @@
     }
 
     /*
-     * return map with non generic resources removded
+     * return map with non generic resources removed
      */
-    public static void filterGenericResources(Map<String, Double> map) {
+    public static void removeNonGenericResources(Map<String, Double> map) {
         map.remove(Constants.COMMON_ONHEAP_MEMORY_RESOURCE_NAME);
         map.remove(Constants.COMMON_OFFHEAP_MEMORY_RESOURCE_NAME);
         map.remove(Constants.COMMON_TOTAL_MEMORY_RESOURCE_NAME);
diff --git a/storm-webapp/src/main/java/org/apache/storm/daemon/ui/UIHelpers.java b/storm-webapp/src/main/java/org/apache/storm/daemon/ui/UIHelpers.java
index 658ed06..3109bfe 100644
--- a/storm-webapp/src/main/java/org/apache/storm/daemon/ui/UIHelpers.java
+++ b/storm-webapp/src/main/java/org/apache/storm/daemon/ui/UIHelpers.java
@@ -654,7 +654,7 @@
         }
         TreeMap<String, Double> treeGenericResources = new TreeMap<>(); // use TreeMap for deterministic ordering
         treeGenericResources.putAll(resourceMap);
-        NormalizedResourceRequest.filterGenericResources(treeGenericResources);
+        NormalizedResourceRequest.removeNonGenericResources(treeGenericResources);
         return treeGenericResources.toString()
                 .replaceAll("[{}]", "")
                 .replace(",", "");
