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
-   */
-  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
    */
-  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;
-    }
-    allSinks.put(name, 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();
