diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/MetricsSystem.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/MetricsSystem.java
index a277abd6e13..1d131d5db6e 100644
--- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/MetricsSystem.java
+++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/MetricsSystem.java
@@ -42,18 +42,6 @@
   @InterfaceAudience.Private
   public abstract MetricsSystem init(String prefix);

-  /**
-   * Register a metrics source
-   * @param <T>   the actual type of the source object
-   * @param source object to register
-   * @param name  of the source. Must be unique or null (then extracted from
-   *              the annotations of the source object.)
-   * @param desc  the description of the source (or null. See above.)
-   * @return the source object
-   * @exception MetricsException Metrics Exception.
-   */
-  public abstract <T> T register(String name, String desc, T source);
-
   /**
    * Unregister a metrics source
    * @param name of the source. This is the name you use to call register()
@@ -79,16 +67,16 @@
   public abstract MetricsSource getSource(String name);

   /**
-   * Register a metrics sink
-   * @param <T>   the type of the sink
-   * @param sink  to register
-   * @param name  of the sink. Must be unique.
-   * @param desc  the description of the sink
-   * @return the sink
+   * Register a metrics source
+   * @param <T>   the actual type of the source object
+   * @param source object to register
+   * @param name  of the source. Must be unique or null (then extracted from
+   *              the annotations of the source object.)
+   * @param desc  the description of the source (or null. See above.)
+   * @return the source object
    * @exception MetricsException Metrics Exception.
    */
-  public abstract <T extends MetricsSink>
-  T register(String name, String desc, T sink);
+  public abstract <T> T register(String name, String desc, T source);

   /**
    * Register a callback interface for JMX events
diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java
index a6edf08e5a7..5b87be1ec67 100644
--- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java
+++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java
@@ -269,31 +269,6 @@ void registerSource(String name, String desc, MetricsSource source) {
     LOG.debug("Registered source "+ name);
   }

-  @Override public synchronized <T extends MetricsSink>
-  T register(final String name, final String description, final T sink) {
-    LOG.debug(name +", "+ description);
-    if (allSinks.containsKey(name)) {
-      if(sinks.get(name) == null) {
-        registerSink(name, description, sink);
-      } else {
-        LOG.warn("Sink "+ name +" already exists!");
-      }
-      return sink;
-    }
-    if (config != null) {
-      registerSink(name, description, sink);
-    }
-    // We want to re-register the sink to pick up new config
-    // when the metrics system restarts.
-    register(name, new AbstractCallback() {
-      @Override public void postStart() {
-        register(name, description, sink);
-      }
-    });
-    return sink;
-  }
-
   synchronized void registerSink(String name, String desc, MetricsSink sink) {
     checkNotNull(config, "config");
     MetricsConfig conf = sinkConfigs.get(name);
diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestGangliaMetrics.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestGangliaMetrics.java
index 7bc772f062a..f012c877d18 100644
--- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestGangliaMetrics.java
+++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestGangliaMetrics.java
@@ -139,8 +139,8 @@ public void testTagsForPrefix() throws Exception {
     GangliaMetricsTestHelper.setDatagramSocket(gsink31, mockds31);

     // register the sinks
-    ms.register("gsink30", "gsink30 desc", gsink30);
-    ms.register("gsink31", "gsink31 desc", gsink31);
+    //ms.register("gsink30", "gsink30 desc", gsink30);
+    //ms.register("gsink31", "gsink31 desc", gsink31);
     ms.publishMetricsNow(); // publish the metrics

     ms.stop();
