diff --git a/src/main/java/net/onrc/onos/core/metrics/OnosMetrics.java b/src/main/java/net/onrc/onos/core/metrics/OnosMetrics.java
index 6c8cad2..a299407 100644
--- a/src/main/java/net/onrc/onos/core/metrics/OnosMetrics.java
+++ b/src/main/java/net/onrc/onos/core/metrics/OnosMetrics.java
@@ -48,6 +48,17 @@
 public final class OnosMetrics {
 
     /**
+     * Registry to hold the Components defined in the system.
+     */
+    private static ConcurrentMap<String, MetricsComponent> componentsRegistry =
+            new ConcurrentHashMap<>();
+
+    /**
+     * Registry for the Metrics objects created in the system.
+     */
+    private static final MetricRegistry METRICS_REGISTRY = new MetricRegistry();
+
+    /**
      * Hide constructor.  The only way to get the registry is through the
      * singleton getter.
      */
@@ -95,11 +106,17 @@
         private final String name;
 
         /**
+         * Registry to hold the Features defined in this Component.
+         */
+        private final ConcurrentMap<String, MetricsFeature> featuresRegistry =
+                new ConcurrentHashMap<>();
+
+        /**
          * Constructs a component from a name.
          *
          * @param newName name of the component
          */
-        private Component(final String newName) {
+        Component(final String newName) {
             name = newName;
         }
 
@@ -108,12 +125,6 @@
             return name;
         }
 
-        /**
-         * Registry to hold the Features defined in this Component.
-         */
-        private ConcurrentMap<String, MetricsFeature> featuresRegistry =
-                new ConcurrentHashMap<>();
-
         @Override
         public MetricsFeature registerFeature(final String featureName) {
             MetricsFeature feature = featuresRegistry.get(featureName);
@@ -140,7 +151,7 @@
          *
          * @param newName name of the Feature
          */
-        private Feature(final String newName) {
+        Feature(final String newName) {
             name = newName;
         }
 
@@ -151,12 +162,6 @@
     }
 
     /**
-     * Registry to hold the Components defined in the system.
-     */
-    private static ConcurrentMap<String, MetricsComponent> componentsRegistry =
-            new ConcurrentHashMap<>();
-
-    /**
      * Registers a component.
      *
      * @param name name of the Component to register
@@ -175,11 +180,6 @@
     }
 
     /**
-     * Registry for the Metrics objects created in the system.
-     */
-    private static final MetricRegistry METRICS_REGISTRY = new MetricRegistry();
-
-    /**
      * Generates a name for a Metric from its component and feature.
      *
      * @param component component the metric is defined in
diff --git a/src/main/java/net/onrc/onos/core/metrics/web/MetricsObjectResource.java b/src/main/java/net/onrc/onos/core/metrics/web/MetricsObjectResource.java
index 64db953..bf4e4c2 100644
--- a/src/main/java/net/onrc/onos/core/metrics/web/MetricsObjectResource.java
+++ b/src/main/java/net/onrc/onos/core/metrics/web/MetricsObjectResource.java
@@ -19,6 +19,12 @@
 @SuppressWarnings("rawtypes")
 public class MetricsObjectResource {
 
+    private List<TimerObjectResource> timers;
+    private List<GaugeObjectResource> gauges;
+    private List<CounterObjectResource> counters;
+    private List<MeterObjectResource> meters;
+    private List<HistogramObjectResource> histograms;
+
     /**
      * Base Metric object that all metrics inherit from.  Defines common
      * attributes.
@@ -185,13 +191,6 @@
         }
     }
 
-
-    private List<TimerObjectResource> timers;
-    private List<GaugeObjectResource> gauges;
-    private List<CounterObjectResource> counters;
-    private List<MeterObjectResource> meters;
-    private List<HistogramObjectResource> histograms;
-
     /**
      * Gets the list of Gauge objects.
      *
diff --git a/src/main/java/net/onrc/onos/core/metrics/web/MetricsResource.java b/src/main/java/net/onrc/onos/core/metrics/web/MetricsResource.java
index 89746e3..59c450c 100644
--- a/src/main/java/net/onrc/onos/core/metrics/web/MetricsResource.java
+++ b/src/main/java/net/onrc/onos/core/metrics/web/MetricsResource.java
@@ -17,6 +17,7 @@
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * REST APIs for Metrics objects.
@@ -27,7 +28,7 @@
      * Metric filter to allow selecting metrics by name.
      */
     private static class MetricNameFilter implements MetricFilter {
-        final HashSet<String> names;
+        private final Set<String> names;
 
         /**
          * Hide default constructor.
diff --git a/src/main/java/net/onrc/onos/core/metrics/web/MetricsWebRoutable.java b/src/main/java/net/onrc/onos/core/metrics/web/MetricsWebRoutable.java
index d79e659..3a3f493 100644
--- a/src/main/java/net/onrc/onos/core/metrics/web/MetricsWebRoutable.java
+++ b/src/main/java/net/onrc/onos/core/metrics/web/MetricsWebRoutable.java
@@ -11,6 +11,9 @@
 public class MetricsWebRoutable implements RestletRoutable {
     /**
      * Creates the Restlet router and binds to the proper resources.
+     *
+     * @param context Context to use for the restlet
+     * @return the router for Metrics REST calls
      */
     @Override
     public Restlet getRestlet(Context context) {
@@ -22,7 +25,9 @@
 
 
     /**
-     * Sets the base path for the Metrics.
+     * Defines the base path for the Metrics.
+     *
+     * @return base path for Metrics REST APIs
      */
     @Override
     public String basePath() {
