commit e9a8711322884cbb32ab9eefd2d5c5f9b21eda7f
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Tue Sep 21 00:59:06 2021 +0200

    Move the Movement class from ObjectList to individual object classes.

diff --git a/src/main/java/org/distorted/main/RubikPreRender.java b/src/main/java/org/distorted/main/RubikPreRender.java
index 205d3e57..2b33d308 100644
--- a/src/main/java/org/distorted/main/RubikPreRender.java
+++ b/src/main/java/org/distorted/main/RubikPreRender.java
@@ -129,7 +129,7 @@ public class RubikPreRender implements EffectController, TwistyPreRender
     if( mNewObject!=null )
       {
       mNewObject.createTexture();
-      mView.setMovement(object.getObjectMovementClass());
+      mView.setMovement(mNewObject.getMovement());
 
       if( firstTime ) mNewObject.restorePreferences(mPreferences);
 
diff --git a/src/main/java/org/distorted/objects/ObjectList.java b/src/main/java/org/distorted/objects/ObjectList.java
index 7e0006b9..62f7c98b 100644
--- a/src/main/java/org/distorted/objects/ObjectList.java
+++ b/src/main/java/org/distorted/objects/ObjectList.java
@@ -44,7 +44,6 @@ public enum ObjectList
                        {5 , 24, 28, R.raw.cube5, R.drawable.ui_small_cube5, R.drawable.ui_medium_cube5, R.drawable.ui_big_cube5, R.drawable.ui_huge_cube5}
                      },
          TwistyCube.class,
-         new MovementCube(),
          0,
          60
        ),
@@ -54,7 +53,6 @@ public enum ObjectList
                        {2 , 11, 11, R.raw.jing, R.drawable.ui_small_jing2, R.drawable.ui_medium_jing2, R.drawable.ui_big_jing2, R.drawable.ui_huge_jing2} ,
                      },
          TwistyJing.class,
-         new MovementJing(),
          1,
          30
        ),
@@ -66,7 +64,6 @@ public enum ObjectList
                        {5 , 20, 23, R.raw.pyra5, R.drawable.ui_small_pyra5, R.drawable.ui_medium_pyra5, R.drawable.ui_big_pyra5, R.drawable.ui_huge_pyra5}
                      },
          TwistyPyraminx.class,
-         new MovementPyraminx(),
          1,
          30
        ),
@@ -77,7 +74,6 @@ public enum ObjectList
                        {5 , 33, 33, R.raw.kilo5, R.drawable.ui_small_kilo5, R.drawable.ui_medium_kilo5, R.drawable.ui_big_kilo5, R.drawable.ui_huge_kilo5} ,
                      },
          TwistyKilominx.class,
-         new MovementMinx(),
          2,
          30
        ),
@@ -88,7 +84,6 @@ public enum ObjectList
                        {5 , 35, 37, R.raw.mega5, R.drawable.ui_small_mega5, R.drawable.ui_medium_mega5, R.drawable.ui_big_mega5, R.drawable.ui_huge_mega5} ,
                      },
          TwistyMegaminx.class,
-         new MovementMinx(),
          2,
          30
        ),
@@ -98,7 +93,6 @@ public enum ObjectList
                        {2 , 18, 18, R.raw.ulti, R.drawable.ui_small_ulti, R.drawable.ui_medium_ulti, R.drawable.ui_big_ulti, R.drawable.ui_huge_ulti} ,
                      },
          TwistyUltimate.class,
-         new MovementUltimate(),
          3,
          30
        ),
@@ -110,7 +104,6 @@ public enum ObjectList
                        {4 , 32, 32, R.raw.diam4, R.drawable.ui_small_diam4, R.drawable.ui_medium_diam4, R.drawable.ui_big_diam4, R.drawable.ui_huge_diam4} ,
                      },
          TwistyDiamond.class,
-         new MovementDiamond(),
          3,
          60
        ),
@@ -120,7 +113,6 @@ public enum ObjectList
                        {3 , 10, 10, R.raw.dino, R.drawable.ui_small_dino, R.drawable.ui_medium_dino, R.drawable.ui_big_dino, R.drawable.ui_huge_dino} ,
                      },
          TwistyDino6.class,
-         new MovementCornerTwisting(),
          4,
          60
        ),
@@ -130,7 +122,6 @@ public enum ObjectList
                        {3 , 7, 7, R.raw.dino, R.drawable.ui_small_din4, R.drawable.ui_medium_din4, R.drawable.ui_big_din4, R.drawable.ui_huge_din4} ,
                      },
          TwistyDino4.class,
-         new MovementCornerTwisting(),
          4,
          60
        ),
@@ -140,7 +131,6 @@ public enum ObjectList
                        {3 , 14, 16, R.raw.redi, R.drawable.ui_small_redi, R.drawable.ui_medium_redi, R.drawable.ui_big_redi, R.drawable.ui_huge_redi} ,
                      },
          TwistyRedi.class,
-         new MovementCornerTwisting(),
          4,
          60
        ),
@@ -150,7 +140,6 @@ public enum ObjectList
                        {3 , 18, 20, R.raw.heli, R.drawable.ui_small_heli, R.drawable.ui_medium_heli, R.drawable.ui_big_heli, R.drawable.ui_huge_heli} ,
                      },
          TwistyHelicopter.class,
-         new MovementHelicopter(),
          4,
          60
        ),
@@ -161,7 +150,6 @@ public enum ObjectList
                        {3 , 17, 21, R.raw.skew3, R.drawable.ui_small_skewm, R.drawable.ui_medium_skewm, R.drawable.ui_big_skewm, R.drawable.ui_huge_skewm} ,
                      },
          TwistySkewb.class,
-         new MovementCornerTwisting(),
          5,
          60
        ),
@@ -171,7 +159,6 @@ public enum ObjectList
                        {2 , 8, 8, R.raw.ivy, R.drawable.ui_small_ivy, R.drawable.ui_medium_ivy, R.drawable.ui_big_ivy, R.drawable.ui_huge_ivy} ,
                      },
          TwistyIvy.class,
-         new MovementIvy(),
          5,
          60
        ),
@@ -181,7 +168,6 @@ public enum ObjectList
                        {3 , 16, 19, R.raw.rex, R.drawable.ui_small_rex, R.drawable.ui_medium_rex, R.drawable.ui_big_rex, R.drawable.ui_huge_rex} ,
                      },
          TwistyRex.class,
-         new MovementCornerTwisting(),
          5,
          60
        ),
@@ -191,7 +177,6 @@ public enum ObjectList
                        {3 , 16, 16, R.raw.ban1, R.drawable.ui_small_ban1, R.drawable.ui_medium_ban1, R.drawable.ui_big_ban1, R.drawable.ui_huge_ban1} ,
                      },
          TwistyBandagedFused.class,
-         new MovementCube(),
          6,
          60
        ),
@@ -201,7 +186,6 @@ public enum ObjectList
                        {3 , 16, 16, R.raw.ban2, R.drawable.ui_small_ban2, R.drawable.ui_medium_ban2, R.drawable.ui_big_ban2, R.drawable.ui_huge_ban2} ,
                      },
          TwistyBandaged2Bar.class,
-         new MovementCube(),
          6,
          60
        ),
@@ -211,7 +195,6 @@ public enum ObjectList
                        {3 , 16, 16, R.raw.ban3, R.drawable.ui_small_ban3, R.drawable.ui_medium_ban3, R.drawable.ui_big_ban3, R.drawable.ui_huge_ban3} ,
                      },
          TwistyBandaged3Plate.class,
-         new MovementCube(),
          6,
          60
        ),
@@ -221,7 +204,6 @@ public enum ObjectList
                        {3 , 16, 16, R.raw.ban4, R.drawable.ui_small_ban4, R.drawable.ui_medium_ban4, R.drawable.ui_big_ban4, R.drawable.ui_huge_ban4} ,
                      },
          TwistyBandagedEvil.class,
-         new MovementCube(),
          6,
          60
        ),
@@ -231,7 +213,6 @@ public enum ObjectList
                        {3 , 24, 24, R.raw.square1, R.drawable.ui_small_square1, R.drawable.ui_medium_square1, R.drawable.ui_big_square1, R.drawable.ui_huge_square1} ,
                      },
          TwistySquare1.class,
-         new MovementSquare(),
          7,
          60
        ),
@@ -241,7 +222,6 @@ public enum ObjectList
                        {3 , 24, 24, R.raw.square2, R.drawable.ui_small_square2, R.drawable.ui_medium_square2, R.drawable.ui_big_square2, R.drawable.ui_huge_square2} ,
                      },
          TwistySquare2.class,
-         new MovementSquare(),
          7,
          60
        ),
@@ -252,7 +232,6 @@ public enum ObjectList
                        {3 , 16, 17, R.raw.mirr3, R.drawable.ui_small_mirr3, R.drawable.ui_medium_mirr3, R.drawable.ui_big_mirr3, R.drawable.ui_huge_mirr3} ,
                      },
          TwistyMirror.class,
-         new MovementCube(),
          7,
          60
        ),
@@ -266,7 +245,6 @@ public enum ObjectList
 
   private final int[] mObjectSizes, mDBLevels, mNumScrambles, mSmallIconIDs, mMediumIconIDs, mBigIconIDs, mHugeIconIDs, mResourceIDs;
   private final Class<? extends TwistyObject> mObjectClass;
-  private final Movement mObjectMovementClass;
   private final int mRow, mNumSizes;
   private final int mFOV;
 
@@ -565,7 +543,7 @@ public enum ObjectList
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  ObjectList(int[][] info, Class<? extends TwistyObject> object , Movement movement, int row, int fov)
+  ObjectList(int[][] info, Class<? extends TwistyObject> object , int row, int fov)
     {
     mNumSizes = info.length;
 
@@ -590,10 +568,9 @@ public enum ObjectList
       mHugeIconIDs[i]  = info[i][7];
       }
 
-    mObjectClass         = object;
-    mObjectMovementClass = movement;
-    mRow                 = row;
-    mFOV                 = fov;
+    mObjectClass= object;
+    mRow        = row;
+    mFOV        = fov;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -688,11 +665,4 @@ public enum ObjectList
 
     return null;
     }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  public Movement getObjectMovementClass()
-    {
-    return mObjectMovementClass;
-    }
   }
diff --git a/src/main/java/org/distorted/objects/TwistyBandagedAbstract.java b/src/main/java/org/distorted/objects/TwistyBandagedAbstract.java
index 7364dda3..3997c7a3 100644
--- a/src/main/java/org/distorted/objects/TwistyBandagedAbstract.java
+++ b/src/main/java/org/distorted/objects/TwistyBandagedAbstract.java
@@ -66,6 +66,7 @@ abstract class TwistyBandagedAbstract extends TwistyObject
   private Static4D[] mInitQuats;
   private int[][] mAxisMap;
   private int[][] mFaceMap;
+  private Movement mMovement;
   ScrambleState[] mStates;
   float[][] POSITIONS;
   int[] QUAT_INDICES;
@@ -468,6 +469,14 @@ abstract class TwistyBandagedAbstract extends TwistyObject
     return ROT_AXIS;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public Movement getMovement()
+    {
+    if( mMovement==null ) mMovement = new MovementCube();
+    return mMovement;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public int[] getBasicAngle()
diff --git a/src/main/java/org/distorted/objects/TwistyCube.java b/src/main/java/org/distorted/objects/TwistyCube.java
index 93934c0e..ad94e408 100644
--- a/src/main/java/org/distorted/objects/TwistyCube.java
+++ b/src/main/java/org/distorted/objects/TwistyCube.java
@@ -53,6 +53,7 @@ class TwistyCube extends TwistyObject
   private Static4D[] mQuats;
   private int[] mBasicAngle;
   private ObjectSticker[] mStickers;
+  private Movement mMovement;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -365,6 +366,14 @@ class TwistyCube extends TwistyObject
     return ROT_AXIS;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public Movement getMovement()
+    {
+    if( mMovement==null ) mMovement = new MovementCube();
+    return mMovement;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public int[] getBasicAngle()
diff --git a/src/main/java/org/distorted/objects/TwistyDiamond.java b/src/main/java/org/distorted/objects/TwistyDiamond.java
index 4f36451e..d5ae7b73 100644
--- a/src/main/java/org/distorted/objects/TwistyDiamond.java
+++ b/src/main/java/org/distorted/objects/TwistyDiamond.java
@@ -60,6 +60,7 @@ public class TwistyDiamond extends TwistyObject
   private Static4D[] mQuats;
   private int[] mTetraToFaceMap;
   private ObjectSticker[] mStickers;
+  private Movement mMovement;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -519,6 +520,14 @@ public class TwistyDiamond extends TwistyObject
     return ROT_AXIS;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public Movement getMovement()
+    {
+    if( mMovement==null ) mMovement = new MovementDiamond();
+    return mMovement;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public int[] getBasicAngle()
diff --git a/src/main/java/org/distorted/objects/TwistyDino.java b/src/main/java/org/distorted/objects/TwistyDino.java
index 94795f53..c24b902f 100644
--- a/src/main/java/org/distorted/objects/TwistyDino.java
+++ b/src/main/java/org/distorted/objects/TwistyDino.java
@@ -54,6 +54,7 @@ public abstract class TwistyDino extends TwistyObject
   private Static4D[] mQuats;
   private ObjectSticker[] mStickers;
   private float[][] mCenters;
+  private Movement mMovement;
   ScrambleState[] mStates;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -231,6 +232,14 @@ public abstract class TwistyDino extends TwistyObject
     return ROT_AXIS;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public Movement getMovement()
+    {
+    if( mMovement==null ) mMovement = new MovementCornerTwisting();
+    return mMovement;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public int[] getBasicAngle()
diff --git a/src/main/java/org/distorted/objects/TwistyHelicopter.java b/src/main/java/org/distorted/objects/TwistyHelicopter.java
index 49a5223e..c45b9237 100644
--- a/src/main/java/org/distorted/objects/TwistyHelicopter.java
+++ b/src/main/java/org/distorted/objects/TwistyHelicopter.java
@@ -62,6 +62,7 @@ public class TwistyHelicopter extends TwistyObject
   private int[] mQuatIndices;
   private int[][] mFaceMap;
   private ObjectSticker[] mStickers;
+  private Movement mMovement;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -433,6 +434,14 @@ public class TwistyHelicopter extends TwistyObject
     return ROT_AXIS;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public Movement getMovement()
+    {
+    if( mMovement==null ) mMovement = new MovementHelicopter();
+    return mMovement;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public int[] getBasicAngle()
diff --git a/src/main/java/org/distorted/objects/TwistyIvy.java b/src/main/java/org/distorted/objects/TwistyIvy.java
index 7a8e17ae..54a61ba0 100644
--- a/src/main/java/org/distorted/objects/TwistyIvy.java
+++ b/src/main/java/org/distorted/objects/TwistyIvy.java
@@ -61,6 +61,7 @@ public class TwistyIvy extends TwistyObject
   private Static4D[] mQuats;
   private int[][] mFaceMap;
   private ObjectSticker[] mStickers;
+  private Movement mMovement;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -466,6 +467,14 @@ public class TwistyIvy extends TwistyObject
     return ROT_AXIS;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public Movement getMovement()
+    {
+    if( mMovement==null ) mMovement = new MovementIvy();
+    return mMovement;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public int[] getBasicAngle()
diff --git a/src/main/java/org/distorted/objects/TwistyJing.java b/src/main/java/org/distorted/objects/TwistyJing.java
index 1b98a676..91d55509 100644
--- a/src/main/java/org/distorted/objects/TwistyJing.java
+++ b/src/main/java/org/distorted/objects/TwistyJing.java
@@ -60,6 +60,7 @@ public class TwistyJing extends TwistyObject
   private float[][] mCenters;
   private int[][] mFaceMap;
   private ObjectSticker[] mStickers;
+  private Movement mMovement;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -421,6 +422,14 @@ public class TwistyJing extends TwistyObject
     return ROT_AXIS;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public Movement getMovement()
+    {
+    if( mMovement==null ) mMovement = new MovementJing();
+    return mMovement;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public int[] getBasicAngle()
diff --git a/src/main/java/org/distorted/objects/TwistyMinx.java b/src/main/java/org/distorted/objects/TwistyMinx.java
index 5072ccac..d6e46aa8 100644
--- a/src/main/java/org/distorted/objects/TwistyMinx.java
+++ b/src/main/java/org/distorted/objects/TwistyMinx.java
@@ -82,6 +82,7 @@ abstract class TwistyMinx extends TwistyObject
   private ScrambleState[] mStates;
   private int[] mBasicAngle;
   private int[] mFaceMap;
+  private Movement mMovement;
   Static4D[] mQuats;
   float[][] mCenterCoords;
   float[][] mCorners;
@@ -569,6 +570,14 @@ abstract class TwistyMinx extends TwistyObject
     return ROT_AXIS;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public Movement getMovement()
+    {
+    if( mMovement==null ) mMovement = new MovementMinx();
+    return mMovement;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public int[] getBasicAngle()
diff --git a/src/main/java/org/distorted/objects/TwistyMirror.java b/src/main/java/org/distorted/objects/TwistyMirror.java
index fe9d4c3c..b823d5ed 100644
--- a/src/main/java/org/distorted/objects/TwistyMirror.java
+++ b/src/main/java/org/distorted/objects/TwistyMirror.java
@@ -52,6 +52,7 @@ class TwistyMirror extends TwistyObject
   private int[] mBasicAngle;
   private ObjectSticker[] mStickers;
   private float[][] mPositions;
+  private Movement mMovement;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -646,6 +647,14 @@ class TwistyMirror extends TwistyObject
     return ROT_AXIS;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public Movement getMovement()
+    {
+    if( mMovement==null ) mMovement = new MovementCube();
+    return mMovement;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public int[] getBasicAngle()
diff --git a/src/main/java/org/distorted/objects/TwistyObject.java b/src/main/java/org/distorted/objects/TwistyObject.java
index 1470564e..c6d68f5b 100644
--- a/src/main/java/org/distorted/objects/TwistyObject.java
+++ b/src/main/java/org/distorted/objects/TwistyObject.java
@@ -1302,6 +1302,7 @@ public abstract class TwistyObject extends DistortedNode
   abstract int getSolvedFunctionIndex();
   abstract ScrambleState[] getScrambleStates();
 
+  public abstract Movement getMovement();
   public abstract Static3D[] getRotationAxis();
   public abstract int[] getBasicAngle();
   public abstract int getObjectName(int numLayers);
diff --git a/src/main/java/org/distorted/objects/TwistyPyraminx.java b/src/main/java/org/distorted/objects/TwistyPyraminx.java
index 391d0303..6f7ee7a2 100644
--- a/src/main/java/org/distorted/objects/TwistyPyraminx.java
+++ b/src/main/java/org/distorted/objects/TwistyPyraminx.java
@@ -53,6 +53,7 @@ public class TwistyPyraminx extends TwistyObject
   private int[] mBasicAngle;
   private Static4D[] mQuats;
   private ObjectSticker[] mStickers;
+  private Movement mMovement;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -394,6 +395,14 @@ public class TwistyPyraminx extends TwistyObject
     return ROT_AXIS;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public Movement getMovement()
+    {
+    if( mMovement==null ) mMovement = new MovementPyraminx();
+    return mMovement;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public int[] getBasicAngle()
diff --git a/src/main/java/org/distorted/objects/TwistyRedi.java b/src/main/java/org/distorted/objects/TwistyRedi.java
index a0aa6b67..e24eda23 100644
--- a/src/main/java/org/distorted/objects/TwistyRedi.java
+++ b/src/main/java/org/distorted/objects/TwistyRedi.java
@@ -59,6 +59,7 @@ public class TwistyRedi extends TwistyObject
   private float[][] mCenters;
   private int[][] mFaceMap;
   private ObjectSticker[] mStickers;
+  private Movement mMovement;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -431,6 +432,14 @@ public class TwistyRedi extends TwistyObject
     return ROT_AXIS;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public Movement getMovement()
+    {
+    if( mMovement==null ) mMovement = new MovementCornerTwisting();
+    return mMovement;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public int[] getBasicAngle()
diff --git a/src/main/java/org/distorted/objects/TwistyRex.java b/src/main/java/org/distorted/objects/TwistyRex.java
index 766021b7..d8052b4b 100644
--- a/src/main/java/org/distorted/objects/TwistyRex.java
+++ b/src/main/java/org/distorted/objects/TwistyRex.java
@@ -58,6 +58,7 @@ public class TwistyRex extends TwistyObject
   private Static4D[] mQuats;
   private int[][] mFaceMap;
   private ObjectSticker[] mStickers;
+  private Movement mMovement;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -462,6 +463,14 @@ public class TwistyRex extends TwistyObject
     return ROT_AXIS;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public Movement getMovement()
+    {
+    if( mMovement==null ) mMovement = new MovementCornerTwisting();
+    return mMovement;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public int[] getBasicAngle()
diff --git a/src/main/java/org/distorted/objects/TwistySkewb.java b/src/main/java/org/distorted/objects/TwistySkewb.java
index b64b24f1..a6238763 100644
--- a/src/main/java/org/distorted/objects/TwistySkewb.java
+++ b/src/main/java/org/distorted/objects/TwistySkewb.java
@@ -56,6 +56,7 @@ public class TwistySkewb extends TwistyObject
   private Static4D[] mQuats;
   private int[][] mCornerMap,mEdgeMap,mCenterMap;
   private ObjectSticker[] mStickers;
+  private Movement mMovement;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -571,6 +572,14 @@ public class TwistySkewb extends TwistyObject
     return ROT_AXIS;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public Movement getMovement()
+    {
+    if( mMovement==null ) mMovement = new MovementCornerTwisting();
+    return mMovement;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public int[] getBasicAngle()
diff --git a/src/main/java/org/distorted/objects/TwistySquare.java b/src/main/java/org/distorted/objects/TwistySquare.java
index 4428b962..6e65a5b3 100644
--- a/src/main/java/org/distorted/objects/TwistySquare.java
+++ b/src/main/java/org/distorted/objects/TwistySquare.java
@@ -54,6 +54,7 @@ abstract class TwistySquare extends TwistyObject
     };
 
   private int[] mBasicAngle;
+  private Movement mMovement;
   Static4D[] mQuats;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -170,6 +171,14 @@ abstract class TwistySquare extends TwistyObject
     return ROT_AXIS;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public Movement getMovement()
+    {
+    if( mMovement==null ) mMovement = new MovementSquare();
+    return mMovement;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public int[] getBasicAngle()
diff --git a/src/main/java/org/distorted/objects/TwistyUltimate.java b/src/main/java/org/distorted/objects/TwistyUltimate.java
index e7ac8fde..d750dd0f 100644
--- a/src/main/java/org/distorted/objects/TwistyUltimate.java
+++ b/src/main/java/org/distorted/objects/TwistyUltimate.java
@@ -78,6 +78,7 @@ class TwistyUltimate extends TwistyObject
   private float[][] mCenters;
   private int[] mQuatIndex;
   private ObjectSticker[] mStickers;
+  private Movement mMovement;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -433,6 +434,14 @@ class TwistyUltimate extends TwistyObject
     return ROT_AXIS;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public Movement getMovement()
+    {
+    if( mMovement==null ) mMovement = new MovementUltimate();
+    return mMovement;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public int[] getBasicAngle()
diff --git a/src/main/java/org/distorted/tutorials/TutorialPreRender.java b/src/main/java/org/distorted/tutorials/TutorialPreRender.java
index 95075191..e3c1142c 100644
--- a/src/main/java/org/distorted/tutorials/TutorialPreRender.java
+++ b/src/main/java/org/distorted/tutorials/TutorialPreRender.java
@@ -97,7 +97,7 @@ public class TutorialPreRender implements EffectController, TwistyPreRender
     if( mNewObject!=null )
       {
       mNewObject.createTexture();
-      mView.setMovement(object.getObjectMovementClass());
+      mView.setMovement(mNewObject.getMovement());
 
       if( mScreenWidth!=0 )
         {
