diff --git a/tck/src/main/java/com/sun/ts/tests/el/common/util/TestNum.java b/tck/src/main/java/com/sun/ts/tests/el/common/util/TestNum.java
index 448b589..3abebd9 100644
--- a/tck/src/main/java/com/sun/ts/tests/el/common/util/TestNum.java
+++ b/tck/src/main/java/com/sun/ts/tests/el/common/util/TestNum.java
@@ -14,10 +14,6 @@
  *
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
-
-/*
- * $Id$
- */
 package com.sun.ts.tests.el.common.util;
 
 import java.math.BigDecimal;
@@ -25,64 +21,64 @@
 import java.util.ArrayList;
 
 /**
- * Used to store lists that will be utilized accross the board for a common
+ * Used to store lists that will be utilized across the board for a common
  * point of reference when testing.
  */
 public final class TestNum {
 
-  private static final String COMPARATOR = "1";
+    private static final String COMPARATOR = "1";
 
-  private static ArrayList<Float> floatList;
+    private static ArrayList<Float> floatList;
 
-  private static ArrayList<Object> numberList;
+    private static ArrayList<Object> numberList;
 
-  /**
-   * Private as this class will only have static methods and members.
-   */
-  private TestNum() {
-  }
+    /**
+     * Private as this class will only have static methods and members.
+     */
+    private TestNum() {
+    }
 
-  /**
-   * Used for a common list of Float values when testing.
-   *
-   * @return - A set list of common Floats that we use as test values.
-   */
-  public static ArrayList<Float> getFloatList() {
+    /**
+     * Used for a common list of Float values when testing.
+     *
+     * @return - A set list of common Floats that we use as test values.
+     */
+    public static ArrayList<Float> getFloatList() {
 
-    floatList = new ArrayList<>();
+        floatList = new ArrayList<>();
 
-    floatList.add(Float.valueOf("1.00005f"));
-    floatList.add(Float.valueOf("1.5E-4d"));
-    floatList.add(Float.valueOf("1.5E+4"));
-    floatList.add(Float.valueOf("1.5e+4"));
+        floatList.add(Float.valueOf("1.00005f"));
+        floatList.add(Float.valueOf("1.5E-4d"));
+        floatList.add(Float.valueOf("1.5E+4"));
+        floatList.add(Float.valueOf("1.5e+4"));
 
-    return floatList;
+        return floatList;
 
-  }
+    }
 
-  /**
-   * Used a common reference point for Number types and a common value is
-   * assigned (1).
-   *
-   * @return - A common List of Number types with a constant value.
-   */
-  public static ArrayList<Object> getNumberList() {
+    /**
+     * Used a common reference point for Number types and a common value is
+     * assigned (1).
+     *
+     * @return - A common List of Number types with a constant value.
+     */
+    public static ArrayList<Object> getNumberList() {
 
-    numberList = new ArrayList<>();
+        numberList = new ArrayList<>();
 
-    numberList.add(BigDecimal.valueOf(Long.parseLong(COMPARATOR)));
-    numberList.add(Double.valueOf(COMPARATOR));
-    numberList.add(Float.valueOf(COMPARATOR));
-    numberList.add(COMPARATOR + ".0");
-    numberList.add(COMPARATOR + "e0");
-    numberList.add(COMPARATOR + "E0");
-    numberList.add(BigInteger.valueOf(Long.parseLong(COMPARATOR)));
-    numberList.add(Long.valueOf(COMPARATOR));
-    numberList.add(Integer.valueOf(COMPARATOR));
-    numberList.add(Short.valueOf(COMPARATOR));
-    numberList.add(Byte.valueOf(COMPARATOR));
+        numberList.add(BigDecimal.valueOf(Long.parseLong(COMPARATOR)));
+        numberList.add(Double.valueOf(COMPARATOR));
+        numberList.add(Float.valueOf(COMPARATOR));
+        numberList.add(COMPARATOR + ".0");
+        numberList.add(COMPARATOR + "e0");
+        numberList.add(COMPARATOR + "E0");
+        numberList.add(BigInteger.valueOf(Long.parseLong(COMPARATOR)));
+        numberList.add(Long.valueOf(COMPARATOR));
+        numberList.add(Integer.valueOf(COMPARATOR));
+        numberList.add(Short.valueOf(COMPARATOR));
+        numberList.add(Byte.valueOf(COMPARATOR));
 
-    return numberList;
+        return numberList;
 
-  }
+    }
 }
