diff --git a/icu4c/source/i18n/units_complexconverter.h b/icu4c/source/i18n/units_complexconverter.h
index 21f3d9b..5c669b4 100644
--- a/icu4c/source/i18n/units_complexconverter.h
+++ b/icu4c/source/i18n/units_complexconverter.h
@@ -86,7 +86,7 @@
      *
      * @param inputUnit represents the source unit. (should be single or compound unit).
      * @param outputUnits represents the output unit. could be any type. (single, compound or mixed).
-     * @param ratesInfo
+     * @param ratesInfo a ConversionRates instance containing the unit conversion rates.
      * @param status
      */
     ComplexUnitsConverter(const MeasureUnitImpl &inputUnit, const MeasureUnitImpl &outputUnits,
diff --git a/icu4j/main/classes/core/src/com/ibm/icu/impl/number/UnitConversionHandler.java b/icu4j/main/classes/core/src/com/ibm/icu/impl/number/UnitConversionHandler.java
index 84a77ad..2803b59 100644
--- a/icu4j/main/classes/core/src/com/ibm/icu/impl/number/UnitConversionHandler.java
+++ b/icu4j/main/classes/core/src/com/ibm/icu/impl/number/UnitConversionHandler.java
@@ -2,12 +2,9 @@
 // License & terms of use: http://www.unicode.org/copyright.html
 package com.ibm.icu.impl.number;
 
-import java.util.List;
-
 import com.ibm.icu.impl.units.ComplexUnitsConverter;
 import com.ibm.icu.impl.units.ConversionRates;
 import com.ibm.icu.impl.units.MeasureUnitImpl;
-import com.ibm.icu.util.Measure;
 import com.ibm.icu.util.MeasureUnit;
 
 /**
diff --git a/icu4j/main/classes/core/src/com/ibm/icu/impl/units/ComplexUnitsConverter.java b/icu4j/main/classes/core/src/com/ibm/icu/impl/units/ComplexUnitsConverter.java
index 8a2b2f2..853a63c 100644
--- a/icu4j/main/classes/core/src/com/ibm/icu/impl/units/ComplexUnitsConverter.java
+++ b/icu4j/main/classes/core/src/com/ibm/icu/impl/units/ComplexUnitsConverter.java
@@ -86,6 +86,7 @@
      * @param outputUnits
      *            represents the output unit. could be any type. (single, compound or mixed).
      * @param conversionRates
+     *            a ConversionRates instance containing the unit conversion rates.
      */
     public ComplexUnitsConverter(MeasureUnitImpl inputUnit, MeasureUnitImpl outputUnits,
             ConversionRates conversionRates) {
diff --git a/icu4j/main/classes/core/src/com/ibm/icu/impl/units/UnitsRouter.java b/icu4j/main/classes/core/src/com/ibm/icu/impl/units/UnitsRouter.java
index cfb6fa0..0c38fcb 100644
--- a/icu4j/main/classes/core/src/com/ibm/icu/impl/units/UnitsRouter.java
+++ b/icu4j/main/classes/core/src/com/ibm/icu/impl/units/UnitsRouter.java
@@ -9,7 +9,6 @@
 import com.ibm.icu.impl.IllegalIcuArgumentException;
 import com.ibm.icu.impl.number.MicroProps;
 import com.ibm.icu.number.Precision;
-import com.ibm.icu.util.Measure;
 import com.ibm.icu.util.MeasureUnit;
 
 /**
diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/impl/UnitsTest.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/impl/UnitsTest.java
index 30d82ed..6468566 100644
--- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/impl/UnitsTest.java
+++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/impl/UnitsTest.java
@@ -64,7 +64,7 @@
                 for (Measure measure : measures) {
                     double accuracy = 0.0;
                     if (i == expected.length - 1) {
-                        accuracy = accuracy;
+                        accuracy = this.accuracy;
                     }
                     assertTrue("input " + value + ", output measure " + i + ": expected " +
                                     expected[i] + ", expected unit " +
@@ -572,7 +572,6 @@
             /**
              * Test Case Data
              */
-            @SuppressWarnings("unused")
             String category;
             String usage;
             String region;
@@ -622,6 +621,7 @@
                 }
             }
 
+            @Override
             public String toString() {
                 ArrayList<MeasureUnitImpl> outputUnits = new ArrayList<>();
                 for (Pair<String, MeasureUnitImpl> unit : outputUnitInOrder) {
