public class Tile
{
    public static final int TOP = 0;
    public static final int LEFT = 1;
    public static final int BOTTOM = 2;
    public static final int RIGHT = 3;

    public Tile (long number, String[] data)
    {
        _id = number;
        _data = new char[data.length][data[0].length()];
        _originalState = new char[data.length][data[0].length()];

        for (int i = 0; i < data.length; i++)
        {
            for (int j = 0; j < data[0].length(); j++)
            {
                _data[i][j] = data[i].charAt(j);
                _originalState[i][j] = data[i].charAt(j);
            }
        }
    }

    /*
     * rotates tile 90 degrees clockwise. Assume you
     * have to call it multiple times to get through
     * all 360 degrees.
     */

    public void rotate ()
    {
    }

    public final long getID ()
    {
        return _id;
    }

    @Override
    public boolean equals (Object obj)
    {
        if (obj == null)
            return false;

        if (this == obj)
            return true;
        
        if (getClass() == obj.getClass())
        {
            Tile temp = (Tile) obj;

            return (_id == temp._id);
        }

        return false;
    }

    @Override
    public String toString ()
    {
        String str = TileData.TILE_ID+_id+":\n";

        for (int i = 0; i < _data.length; i++)
        {
            for (int j = 0; j < _data[0].length; j++)
            {
                str += _data[i][j];
            }

            str += "\n";
        }

        return str;
    }

    private long _id;
    private char[][] _data;
    private char[][] _originalState;
}
@@ -616,24 +616,76 @@
  %7D%0A        %7D
+%0A%0A        _freeze = false;  // should the tile move?
 %0A    %7D%0A%0A    
@@ -854,24 +854,319 @@
 te ()%0A    %7B%0A
+        int x = _data.length;%0A%09    int y = _data%5B0%5D.length;%0A%09    char%5B%5D%5B%5D temp = new char%5Bx%5D%5By%5D;%0A%0A        for (int i = 0; i %3C x; i++)%0A        %7B%0A            for (int j = 0; j %3C y; j++)%0A            %7B%0A                temp%5Bj%5D%5Bx - 1 - i%5D = _data%5Bi%5D%5Bj%5D;%0A            %7D%0A        %7D%0A%0A        _data = temp;%0A
     %7D%0A%0A    p
@@ -1987,9 +1987,38 @@
 lState;%0A
+    private boolean _freeze;%0A
 %7D

Update Tile.java