diff --git a/src/test/java/net/onrc/onos/api/rest/TestRest.java b/src/test/java/net/onrc/onos/api/rest/TestRest.java
index f91e8dc..76792ab 100644
--- a/src/test/java/net/onrc/onos/api/rest/TestRest.java
+++ b/src/test/java/net/onrc/onos/api/rest/TestRest.java
@@ -1,6 +1,8 @@
 package net.onrc.onos.api.rest;
 
+import com.codahale.metrics.MetricFilter;
 import net.floodlightcontroller.restserver.RestletRoutable;
+import net.onrc.onos.core.metrics.OnosMetrics;
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
@@ -70,6 +72,7 @@
 
     public void tearDown() {
         getRestApiServer().stopServer();
+        OnosMetrics.removeMatching(MetricFilter.ALL);
     }
 
     /**
diff --git a/src/test/java/net/onrc/onos/api/rest/TestRestMetrics.java b/src/test/java/net/onrc/onos/api/rest/TestRestMetrics.java
index 34f6e0f..6796578 100644
--- a/src/test/java/net/onrc/onos/api/rest/TestRestMetrics.java
+++ b/src/test/java/net/onrc/onos/api/rest/TestRestMetrics.java
@@ -1,12 +1,7 @@
 package net.onrc.onos.api.rest;
 
 import com.codahale.metrics.Clock;
-import net.floodlightcontroller.core.module.FloodlightModuleContext;
-import net.floodlightcontroller.core.module.FloodlightModuleException;
-import net.onrc.onos.core.intent.runtime.IntentTestMocks;
-import net.onrc.onos.core.intent.runtime.PathCalcRuntimeModule;
 import net.onrc.onos.core.metrics.web.MetricsWebRoutable;
-import net.onrc.onos.core.topology.ITopologyService;
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
@@ -23,54 +18,27 @@
  * for metrics should inherit from this class.
  */
 public class TestRestMetrics extends TestRest {
-
-    private IntentTestMocks mocks;
-
     /**
-     * Fetch the Intent mocking object.
-     *
-     * @return intent mocking object
-     */
-    IntentTestMocks getMocks() {
-        return mocks;
-    }
-
-    /**
-     * Create the web server and mocks required for the topology tests.
+     * Creates the web server and mocks required for the metrics tests.
      */
     @Override
     public void setUp() {
-        mocks = new IntentTestMocks();
-        mocks.setUpIntentMocks();
-
         addRestlet(new MetricsWebRoutable());
         super.setUp();
-
-        final PathCalcRuntimeModule runtime = new PathCalcRuntimeModule();
-        final FloodlightModuleContext moduleContext = getMocks().getModuleContext();
-        try {
-            runtime.init(moduleContext);
-        } catch (FloodlightModuleException floodlightEx) {
-            throw new IllegalArgumentException(floodlightEx);
-        }
-        runtime.startUp(moduleContext);
-
-        getRestApiServer().addAttribute(ITopologyService.class.getCanonicalName(),
-                mocks.getTopologyService());
     }
 
     /**
-     * Remove anything that will interfere with the next test running correctly.
+     * Removes anything that will interfere with the next test running
+     * correctly.
      * Shuts down the test REST web server and removes the mocks.
      */
     @Override
     public void tearDown() {
-        getMocks().tearDownIntentMocks();
         super.tearDown();
     }
 
     /**
-     * Fetch the base URL for Metrics REST APIs.
+     * Fetches the base URL for Metrics REST APIs.
      *
      * @return base URL
      */
@@ -79,7 +47,7 @@
     }
 
     /**
-     * Check that the given list of elements in a JSON object are all 0 length
+     * Checks that the given list of elements in a JSON object are all 0 length
      * arrays.
      *
      * @param elementNames names of top level elements to check
diff --git a/src/test/java/net/onrc/onos/api/rest/TestRestMetricsCounters.java b/src/test/java/net/onrc/onos/api/rest/TestRestMetricsCounters.java
index 3ae9059..3eef047 100644
--- a/src/test/java/net/onrc/onos/api/rest/TestRestMetricsCounters.java
+++ b/src/test/java/net/onrc/onos/api/rest/TestRestMetricsCounters.java
@@ -1,7 +1,6 @@
 package net.onrc.onos.api.rest;
 
 import com.codahale.metrics.Counter;
-import net.onrc.onos.core.intent.runtime.PathCalcRuntimeModule;
 import net.onrc.onos.core.metrics.OnosMetrics;
 import org.json.JSONArray;
 import org.json.JSONException;
@@ -10,7 +9,6 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 import org.restlet.resource.ClientResource;
 
@@ -23,7 +21,6 @@
  * Unit tests for REST APIs for Counter Metrics.
  */
 @RunWith(PowerMockRunner.class)
-@PrepareForTest(PathCalcRuntimeModule.class)
 public class TestRestMetricsCounters extends TestRestMetrics {
 
     /**
diff --git a/src/test/java/net/onrc/onos/api/rest/TestRestMetricsFilters.java b/src/test/java/net/onrc/onos/api/rest/TestRestMetricsFilters.java
index 7e65a55..4be1a5c 100644
--- a/src/test/java/net/onrc/onos/api/rest/TestRestMetricsFilters.java
+++ b/src/test/java/net/onrc/onos/api/rest/TestRestMetricsFilters.java
@@ -2,7 +2,6 @@
 
 import com.codahale.metrics.Gauge;
 import com.codahale.metrics.MetricFilter;
-import net.onrc.onos.core.intent.runtime.PathCalcRuntimeModule;
 import net.onrc.onos.core.metrics.OnosMetrics;
 import org.json.JSONArray;
 import org.json.JSONException;
@@ -11,7 +10,6 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 import org.restlet.resource.ClientResource;
 
@@ -25,7 +23,6 @@
  */
 
 @RunWith(PowerMockRunner.class)
-@PrepareForTest(PathCalcRuntimeModule.class)
 public class TestRestMetricsFilters extends TestRestMetrics {
 
     /**
diff --git a/src/test/java/net/onrc/onos/api/rest/TestRestMetricsGauges.java b/src/test/java/net/onrc/onos/api/rest/TestRestMetricsGauges.java
index 95c1aff..205f527 100644
--- a/src/test/java/net/onrc/onos/api/rest/TestRestMetricsGauges.java
+++ b/src/test/java/net/onrc/onos/api/rest/TestRestMetricsGauges.java
@@ -1,7 +1,6 @@
 package net.onrc.onos.api.rest;
 
 import com.codahale.metrics.Gauge;
-import net.onrc.onos.core.intent.runtime.PathCalcRuntimeModule;
 import net.onrc.onos.core.metrics.OnosMetrics;
 import org.json.JSONArray;
 import org.json.JSONException;
@@ -10,7 +9,6 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 import org.restlet.resource.ClientResource;
 
@@ -23,7 +21,6 @@
  * Unit tests for REST APIs for Gauges Metrics.
  */
 @RunWith(PowerMockRunner.class)
-@PrepareForTest(PathCalcRuntimeModule.class)
 public class TestRestMetricsGauges extends TestRestMetrics {
 
     /**
diff --git a/src/test/java/net/onrc/onos/api/rest/TestRestMetricsHistograms.java b/src/test/java/net/onrc/onos/api/rest/TestRestMetricsHistograms.java
index 108cd73..c3fd01c 100644
--- a/src/test/java/net/onrc/onos/api/rest/TestRestMetricsHistograms.java
+++ b/src/test/java/net/onrc/onos/api/rest/TestRestMetricsHistograms.java
@@ -1,7 +1,6 @@
 package net.onrc.onos.api.rest;
 
 import com.codahale.metrics.Histogram;
-import net.onrc.onos.core.intent.runtime.PathCalcRuntimeModule;
 import net.onrc.onos.core.metrics.OnosMetrics;
 import org.json.JSONArray;
 import org.json.JSONException;
@@ -10,7 +9,6 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 import org.restlet.resource.ClientResource;
 
@@ -27,9 +25,7 @@
 /**
  * Unit tests for REST APIs for Histogram Metrics.
  */
-
 @RunWith(PowerMockRunner.class)
-@PrepareForTest(PathCalcRuntimeModule.class)
 public class TestRestMetricsHistograms extends TestRestMetrics {
 
     /**
diff --git a/src/test/java/net/onrc/onos/api/rest/TestRestMetricsMeters.java b/src/test/java/net/onrc/onos/api/rest/TestRestMetricsMeters.java
index a14acef..88b459b 100644
--- a/src/test/java/net/onrc/onos/api/rest/TestRestMetricsMeters.java
+++ b/src/test/java/net/onrc/onos/api/rest/TestRestMetricsMeters.java
@@ -1,7 +1,6 @@
 package net.onrc.onos.api.rest;
 
 import com.codahale.metrics.Meter;
-import net.onrc.onos.core.intent.runtime.PathCalcRuntimeModule;
 import net.onrc.onos.core.metrics.OnosMetrics;
 import org.json.JSONArray;
 import org.json.JSONException;
@@ -10,7 +9,6 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 import org.restlet.resource.ClientResource;
 
@@ -26,7 +24,6 @@
  * Unit tests for REST APIs for Meter Metrics.
  */
 @RunWith(PowerMockRunner.class)
-@PrepareForTest(PathCalcRuntimeModule.class)
 public class TestRestMetricsMeters extends TestRestMetrics {
 
     /**
diff --git a/src/test/java/net/onrc/onos/api/rest/TestRestMetricsTimers.java b/src/test/java/net/onrc/onos/api/rest/TestRestMetricsTimers.java
index 6d16bf7..6aec6ee 100644
--- a/src/test/java/net/onrc/onos/api/rest/TestRestMetricsTimers.java
+++ b/src/test/java/net/onrc/onos/api/rest/TestRestMetricsTimers.java
@@ -3,7 +3,6 @@
 import com.codahale.metrics.Reservoir;
 import com.codahale.metrics.SlidingWindowReservoir;
 import com.codahale.metrics.Timer;
-import net.onrc.onos.core.intent.runtime.PathCalcRuntimeModule;
 import net.onrc.onos.core.metrics.OnosMetrics;
 import org.json.JSONArray;
 import org.json.JSONException;
@@ -12,7 +11,6 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 import org.restlet.resource.ClientResource;
 
@@ -27,9 +25,7 @@
 /**
  * Unit tests for REST APIs for Timer Metrics.
  */
-
 @RunWith(PowerMockRunner.class)
-@PrepareForTest(PathCalcRuntimeModule.class)
 public class TestRestMetricsTimers extends TestRestMetrics {
 
     /**
diff --git a/src/test/java/net/onrc/onos/core/intent/runtime/PathCalcRuntimeModuleTest.java b/src/test/java/net/onrc/onos/core/intent/runtime/PathCalcRuntimeModuleTest.java
index 119acc6..a8e222e 100644
--- a/src/test/java/net/onrc/onos/core/intent/runtime/PathCalcRuntimeModuleTest.java
+++ b/src/test/java/net/onrc/onos/core/intent/runtime/PathCalcRuntimeModuleTest.java
@@ -18,6 +18,7 @@
 import net.onrc.onos.core.intent.IntentOperation.Operator;
 import net.onrc.onos.core.intent.IntentOperationList;
 import net.onrc.onos.core.intent.ShortestPathIntent;
+import net.onrc.onos.core.metrics.OnosMetrics;
 import net.onrc.onos.core.topology.HostEvent;
 import net.onrc.onos.core.topology.LinkEvent;
 import net.onrc.onos.core.topology.MockTopology;
@@ -27,6 +28,7 @@
 import net.onrc.onos.core.topology.TopologyEvents;
 import net.onrc.onos.core.util.SwitchPort;
 
+import com.codahale.metrics.MetricFilter;
 import org.hamcrest.Description;
 import org.hamcrest.Factory;
 import org.hamcrest.Matcher;
@@ -169,6 +171,7 @@
     @After
     public void tearDown() {
         mocks.tearDownIntentMocks();
+        OnosMetrics.removeMatching(MetricFilter.ALL);
     }
 
     private static final String BAD_SWITCH_INTENT_NAME = "No Such Switch Intent";
diff --git a/src/test/java/net/onrc/onos/core/intent/runtime/UseCaseTest.java b/src/test/java/net/onrc/onos/core/intent/runtime/UseCaseTest.java
index b7de7b0..b56b3e1 100644
--- a/src/test/java/net/onrc/onos/core/intent/runtime/UseCaseTest.java
+++ b/src/test/java/net/onrc/onos/core/intent/runtime/UseCaseTest.java
@@ -28,6 +28,7 @@
 import net.onrc.onos.core.intent.PathIntentMap;
 import net.onrc.onos.core.intent.ShortestPathIntent;
 import net.onrc.onos.core.intent.runtime.web.IntentWebRoutable;
+import net.onrc.onos.core.metrics.OnosMetrics;
 import net.onrc.onos.core.registry.IControllerRegistryService;
 import net.onrc.onos.core.topology.HostEvent;
 import net.onrc.onos.core.topology.ITopologyListener;
@@ -40,6 +41,7 @@
 import net.onrc.onos.core.topology.TopologyEvents;
 import net.onrc.onos.core.util.SwitchPort;
 
+import com.codahale.metrics.MetricFilter;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -130,6 +132,7 @@
         verify(controllerRegistryService);
         PowerMock.verify(persistIntent, PersistIntent.class);
         verify(restApi);
+        OnosMetrics.removeMatching(MetricFilter.ALL);
     }
 
     private void showResult(PathIntentMap intents) {
diff --git a/src/test/java/net/onrc/onos/core/topology/TopologyManagerTest.java b/src/test/java/net/onrc/onos/core/topology/TopologyManagerTest.java
index 309bfb4..e8e06b7 100644
--- a/src/test/java/net/onrc/onos/core/topology/TopologyManagerTest.java
+++ b/src/test/java/net/onrc/onos/core/topology/TopologyManagerTest.java
@@ -18,12 +18,14 @@
 import net.onrc.onos.core.datagrid.IDatagridService;
 import net.onrc.onos.core.datagrid.IEventChannel;
 import net.onrc.onos.core.datagrid.IEventChannelListener;
+import net.onrc.onos.core.metrics.OnosMetrics;
 import net.onrc.onos.core.registry.IControllerRegistryService;
 import net.onrc.onos.core.util.Dpid;
 import net.onrc.onos.core.util.PortNumber;
 import net.onrc.onos.core.util.SwitchPort;
 import net.onrc.onos.core.util.TestUtils;
 
+import com.codahale.metrics.MetricFilter;
 import org.easymock.EasyMock;
 import org.junit.After;
 import org.junit.Before;
@@ -126,7 +128,7 @@
 
     @After
     public void tearDown() throws Exception {
-
+        OnosMetrics.removeMatching(MetricFilter.ALL);
     }
 
     /**
