diff --git a/core/api/src/main/java/org/onlab/onos/core/MetricsHelper.java b/core/api/src/main/java/org/onlab/onos/core/MetricsHelper.java
new file mode 100644
index 0000000..7c9a715
--- /dev/null
+++ b/core/api/src/main/java/org/onlab/onos/core/MetricsHelper.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2014 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onlab.onos.core;
+
+import org.onlab.metrics.MetricsComponent;
+import org.onlab.metrics.MetricsFeature;
+import org.onlab.metrics.MetricsService;
+
+import com.codahale.metrics.Timer;
+
+/**
+ * Collection of utility methods used for providing Metrics.
+ */
+public interface MetricsHelper {
+
+    /**
+     * Returns MetricService instance.
+     *
+     * @return MetricService instance
+     */
+    abstract MetricsService metricsService();
+
+
+    /**
+     * Creates a Timer instance with given name.
+     *
+     * @param component component name
+     * @param feature   feature name
+     * @param name      timer name
+     * @return          Timer instance
+     */
+    default Timer createTimer(String component, String feature, String name) {
+        final MetricsService metricsService = metricsService();
+        if (metricsService != null) {
+            MetricsComponent c = metricsService.registerComponent(component);
+            MetricsFeature f = c.registerFeature(feature);
+            return metricsService.createTimer(c, f, name);
+        }
+        return null;
+    }
+
+}
diff --git a/core/net/src/main/java/org/onlab/onos/cluster/impl/MastershipManager.java b/core/net/src/main/java/org/onlab/onos/cluster/impl/MastershipManager.java
index 66509b6..4f993c4 100644
--- a/core/net/src/main/java/org/onlab/onos/cluster/impl/MastershipManager.java
+++ b/core/net/src/main/java/org/onlab/onos/cluster/impl/MastershipManager.java
@@ -17,6 +17,7 @@
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static org.slf4j.LoggerFactory.getLogger;
+import static org.onlab.metrics.MetricsUtil.*;
 
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -27,8 +28,6 @@
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.Service;
-import org.onlab.metrics.MetricsComponent;
-import org.onlab.metrics.MetricsFeature;
 import org.onlab.metrics.MetricsService;
 import org.onlab.onos.cluster.ClusterEvent;
 import org.onlab.onos.cluster.ClusterEventListener;
@@ -36,6 +35,7 @@
 import org.onlab.onos.cluster.ControllerNode;
 import org.onlab.onos.cluster.NodeId;
 import org.onlab.onos.cluster.RoleInfo;
+import org.onlab.onos.core.MetricsHelper;
 import org.onlab.onos.event.AbstractListenerRegistry;
 import org.onlab.onos.event.EventDeliveryService;
 import org.onlab.onos.mastership.MastershipAdminService;
@@ -56,7 +56,8 @@
 @Component(immediate = true)
 @Service
 public class MastershipManager
-    implements MastershipService, MastershipAdminService, MastershipTermService {
+    implements MastershipService, MastershipAdminService, MastershipTermService,
+               MetricsHelper {
 
     private static final String NODE_ID_NULL = "Node ID cannot be null";
     private static final String DEVICE_ID_NULL = "Device ID cannot be null";
@@ -192,7 +193,10 @@
         listenerRegistry.removeListener(listener);
     }
 
-    // FIXME: provide wiring to allow events to be triggered by changes within the store
+    @Override
+    public MetricsService metricsService() {
+        return metricsService;
+    }
 
     // Posts the specified event to the local event dispatcher.
     private void post(MastershipEvent event) {
@@ -201,30 +205,6 @@
         }
     }
 
-
-
-    private Timer createTimer(String component, String feature, String name) {
-        if (metricsService != null) {
-            MetricsComponent c = metricsService.registerComponent(component);
-            MetricsFeature f = c.registerFeature(feature);
-            return metricsService.createTimer(c, f, name);
-        }
-        return null;
-    }
-
-    private static final Context startTimer(Timer timer) {
-        if (timer != null) {
-            return timer.time();
-        }
-        return null;
-    }
-
-    private static final void stopTimer(Context context) {
-        if (context != null) {
-            context.stop();
-        }
-    }
-
     //callback for reacting to cluster events
     private class InternalClusterEventListener implements ClusterEventListener {
 
diff --git a/utils/misc/src/main/java/org/onlab/metrics/MetricsUtil.java b/utils/misc/src/main/java/org/onlab/metrics/MetricsUtil.java
new file mode 100644
index 0000000..e837c66
--- /dev/null
+++ b/utils/misc/src/main/java/org/onlab/metrics/MetricsUtil.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2014 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onlab.metrics;
+
+import com.codahale.metrics.Timer;
+import com.codahale.metrics.Timer.Context;
+
+public final class MetricsUtil {
+
+    /**
+     * Starts the Metric Timer.
+     * <p>
+     * If the given timer was null, it will silently return null.
+     * </p>
+     *
+     * @param timer timer to start
+     * @return timing context, if timer was not null
+     */
+    public static final Context startTimer(Timer timer) {
+        if (timer != null) {
+            return timer.time();
+        }
+        return null;
+    }
+
+    /**
+     * Stops the Metric Timer context.
+     * <p>
+     * If the given context was null, it will silently be ignored.
+     * </p>
+     *
+     * @param context timing context to stop, if not null.
+     */
+    public static final void stopTimer(Context context) {
+        if (context != null) {
+            context.stop();
+        }
+    }
+
+    // avoid instantiation
+    private MetricsUtil() {}
+}
