diff --git a/core/src/org/apache/pivot/util/Version.java b/core/src/org/apache/pivot/util/Version.java
index eba34c0..6969336 100644
--- a/core/src/org/apache/pivot/util/Version.java
+++ b/core/src/org/apache/pivot/util/Version.java
@@ -77,7 +77,7 @@
 
     @Override
     public int compareTo(final Version version) {
-        return new Long(getNumber()).compareTo(version.getNumber());
+        return Long.compare(getNumber(), version.getNumber());
     }
 
     @Override
@@ -87,7 +87,7 @@
 
     @Override
     public int hashCode() {
-        return new Long(getNumber()).hashCode();
+        return Long.valueOf(getNumber()).hashCode();
     }
 
     @Override
diff --git a/core/test/org/apache/pivot/functional/monad/test/OptionTest.java b/core/test/org/apache/pivot/functional/monad/test/OptionTest.java
index 6c1a453..6492c9d 100644
--- a/core/test/org/apache/pivot/functional/monad/test/OptionTest.java
+++ b/core/test/org/apache/pivot/functional/monad/test/OptionTest.java
@@ -57,12 +57,12 @@
         OptionCompanion<Object> o = OptionCompanion.getInstance();
         assertNotNull(o);
 
-        Option<Object> oo = o.fromValue(new String("Hello"));
+        Option<Object> oo = o.fromValue(new StringBuilder("Hello"));
         assertNotNull(oo);
         assertTrue(oo instanceof Some);
         assertTrue(oo.hasValue());
         Object ooValue = oo.getValue();
-        assertTrue(ooValue instanceof String);
+        assertTrue(ooValue instanceof StringBuilder);
         System.out.println("companionObjectTest(), value stored is " + ooValue);
     }
 
@@ -85,7 +85,7 @@
         OptionCompanion<Number> o = OptionCompanion.getInstance();
         assertNotNull(o);
 
-        Option<Number> on = o.fromValue(new Double(Math.PI));
+        Option<Number> on = o.fromValue(Double.valueOf(Math.PI));
         assertNotNull(on);
         assertTrue(on instanceof Some);
         assertTrue(on.hasValue());
diff --git a/tests/src/org/apache/pivot/tests/TextInputValidatorTest.java b/tests/src/org/apache/pivot/tests/TextInputValidatorTest.java
index bb37404..9421134 100644
--- a/tests/src/org/apache/pivot/tests/TextInputValidatorTest.java
+++ b/tests/src/org/apache/pivot/tests/TextInputValidatorTest.java
@@ -133,7 +133,7 @@
 
         // textinputFloat.setText("123456.789");
         // new, show different ways to format decimal values in i18n format
-        Double value = new Double(testValue);
+        Double value = Double.valueOf(testValue);
         // textinputFloat.setText(value.toString());
         // textinputFloat.setText(String.format(customDecimalFormat, value)); // sample using String.format
         // formatter.format(customDecimalFormat, value); // sample using Formatter
@@ -146,7 +146,7 @@
         // standard float range model
         // note that float approximations could give errors,
         // try to increment/decrement the initial value near a range end, to see problems ...
-        textinputFloatRange.setText(nf.format(new Float(testValue)));
+        textinputFloatRange.setText(nf.format(Float.valueOf(testValue)));
         textinputFloatRange.setValidator(new FloatRangeValidator(2.0f, 123456789f));
 
         // test the listener by updating a label
diff --git a/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFrameSkin.java b/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFrameSkin.java
index ecd6fb6..bc8c8ad 100644
--- a/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFrameSkin.java
+++ b/wtk-terra/src/org/apache/pivot/wtk/skin/terra/TerraFrameSkin.java
@@ -852,7 +852,7 @@
         boolean active = window.isActive();
 
         titleLabel.getStyles().put(Style.color, active ? titleBarColor : inactiveTitleBarColor);
-        iconImageView.getStyles().put(Style.opacity, active ? new Float(1.0f) : new Float(INACTIVE_ICON_OPACITY));
+        iconImageView.getStyles().put(Style.opacity, Float.valueOf(active ? 1.0f : INACTIVE_ICON_OPACITY));
 
         updateButtonStyles(minimizeButton, active);
         updateButtonStyles(maximizeButton, active);
diff --git a/wtk/src/org/apache/pivot/wtk/content/LinkButtonDataRenderer.java b/wtk/src/org/apache/pivot/wtk/content/LinkButtonDataRenderer.java
index 1631caa..5a67c2a 100644
--- a/wtk/src/org/apache/pivot/wtk/content/LinkButtonDataRenderer.java
+++ b/wtk/src/org/apache/pivot/wtk/content/LinkButtonDataRenderer.java
@@ -77,7 +77,7 @@
             imageView.setVisible(true);
             imageView.setImage(icon);
 
-            imageView.getStyles().put(Style.opacity, button.isEnabled() ? new Float(1.0f) : new Float(0.5f));
+            imageView.getStyles().put(Style.opacity, Float.valueOf(button.isEnabled() ? 1.0f : 0.5f));
         }
 
         // Update the label
diff --git a/wtk/src/org/apache/pivot/wtk/content/MenuItemDataRenderer.java b/wtk/src/org/apache/pivot/wtk/content/MenuItemDataRenderer.java
index 2ed89dc..9cbfef0 100644
--- a/wtk/src/org/apache/pivot/wtk/content/MenuItemDataRenderer.java
+++ b/wtk/src/org/apache/pivot/wtk/content/MenuItemDataRenderer.java
@@ -102,7 +102,7 @@
 
         imageView.setImage(icon);
         imageView.setPreferredWidth(margin - padding.left * 2);
-        imageView.getStyles().put(Style.opacity, button.isEnabled() ? new Float(1.0f) : new Float(0.5f));
+        imageView.getStyles().put(Style.opacity, Float.valueOf(button.isEnabled() ? 1.0f : 0.5f));
 
         // Update the labels
         textLabel.setText(text != null ? text : "");
