diff --git a/java/src/com/android/inputmethod/latin/utils/CoordinateUtils.java b/java/src/com/android/inputmethod/latin/utils/CoordinateUtils.java
index 87df013..3a97059 100644
--- a/java/src/com/android/inputmethod/latin/utils/CoordinateUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/CoordinateUtils.java
@@ -16,7 +16,7 @@
 
 package com.android.inputmethod.latin.utils;
 
-import java.util.Arrays;
+import javax.annotation.Nonnull;
 
 public final class CoordinateUtils {
     private static final int INDEX_X = 0;
@@ -27,32 +27,35 @@
         // This utility class is not publicly instantiable.
     }
 
+    @Nonnull
     public static int[] newInstance() {
         return new int[ELEMENT_SIZE];
     }
 
-    public static int x(final int[] coords) {
+    public static int x(@Nonnull final int[] coords) {
         return coords[INDEX_X];
     }
 
-    public static int y(final int[] coords) {
+    public static int y(@Nonnull final int[] coords) {
         return coords[INDEX_Y];
     }
 
-    public static void set(final int[] coords, final int x, final int y) {
+    public static void set(@Nonnull final int[] coords, final int x, final int y) {
         coords[INDEX_X] = x;
         coords[INDEX_Y] = y;
     }
 
-    public static void copy(final int[] destination, final int[] source) {
+    public static void copy(@Nonnull final int[] destination, @Nonnull final int[] source) {
         destination[INDEX_X] = source[INDEX_X];
         destination[INDEX_Y] = source[INDEX_Y];
     }
 
+    @Nonnull
     public static int[] newCoordinateArray(final int arraySize) {
         return new int[ELEMENT_SIZE * arraySize];
     }
 
+    @Nonnull
     public static int[] newCoordinateArray(final int arraySize,
             final int defaultX, final int defaultY) {
         final int[] result = new int[ELEMENT_SIZE * arraySize];
@@ -62,30 +65,30 @@
         return result;
     }
 
-    public static int xFromArray(final int[] coordsArray, final int index) {
+    public static int xFromArray(@Nonnull final int[] coordsArray, final int index) {
         return coordsArray[ELEMENT_SIZE * index + INDEX_X];
     }
 
-    public static int yFromArray(final int[] coordsArray, final int index) {
+    public static int yFromArray(@Nonnull final int[] coordsArray, final int index) {
         return coordsArray[ELEMENT_SIZE * index + INDEX_Y];
     }
 
-    public static int[] coordinateFromArray(final int[] coordsArray, final int index) {
-        final int baseIndex = ELEMENT_SIZE * index;
-        return Arrays.copyOfRange(coordsArray, baseIndex, baseIndex + ELEMENT_SIZE);
+    @Nonnull
+    public static int[] coordinateFromArray(@Nonnull final int[] coordsArray, final int index) {
+        final int[] coords = newInstance();
+        set(coords, xFromArray(coordsArray, index), yFromArray(coordsArray, index));
+        return coords;
     }
 
-    public static void setXYInArray(final int[] coordsArray, final int index,
+    public static void setXYInArray(@Nonnull final int[] coordsArray, final int index,
             final int x, final int y) {
         final int baseIndex = ELEMENT_SIZE * index;
         coordsArray[baseIndex + INDEX_X] = x;
         coordsArray[baseIndex + INDEX_Y] = y;
     }
 
-    public static void setCoordinateInArray(final int[] coordsArray, final int index,
-            final int[] coords) {
-        final int baseIndex = ELEMENT_SIZE * index;
-        coordsArray[baseIndex + INDEX_X] = coords[INDEX_X];
-        coordsArray[baseIndex + INDEX_Y] = coords[INDEX_Y];
+    public static void setCoordinateInArray(@Nonnull final int[] coordsArray, final int index,
+            @Nonnull final int[] coords) {
+        setXYInArray(coordsArray, index, x(coords), y(coords));
     }
 }
