commit 0a7aa15bac417131f785dfbf160bc35ee0fb07f7
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Wed Jun 16 23:19:04 2021 +0200

    Separate the notion of maxLevel (in DB) [which has to stay backwards-compatible with previous versions of the app] and 'numScrambles' - the number of times an objects gets scrambled in the 'full scramble' mode. Now the second can be whatever we want without breaking backwards compatibility.

diff --git a/src/main/java/org/distorted/dialogs/RubikDialogScoresPagerAdapter.java b/src/main/java/org/distorted/dialogs/RubikDialogScoresPagerAdapter.java
index 75c7a610..ccb599bc 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogScoresPagerAdapter.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogScoresPagerAdapter.java
@@ -118,7 +118,7 @@ class RubikDialogScoresPagerAdapter extends PagerAdapter implements RubikNetwork
       {
       int object   = ObjectList.unpackObject(i);
       int sizeIndex= ObjectList.unpackSizeIndex(i);
-      lastTab[i]   = ObjectList.getMaxLevel(object, sizeIndex);
+      lastTab[i]   = ObjectList.getDBLevel(object, sizeIndex);
       maxTab[i]    = Math.min(lastTab[i],MAX);
       toDoTab[i]   = 0;
 
diff --git a/src/main/java/org/distorted/dialogs/RubikDialogScoresView.java b/src/main/java/org/distorted/dialogs/RubikDialogScoresView.java
index 28d6d1f6..ff6f326a 100644
--- a/src/main/java/org/distorted/dialogs/RubikDialogScoresView.java
+++ b/src/main/java/org/distorted/dialogs/RubikDialogScoresView.java
@@ -95,7 +95,6 @@ public class RubikDialogScoresView extends FrameLayout
     boolean inserted = false;
     long myRecordInMillis = scores.getRecord(object, sizeIndex, level);
     float myRecordInSeconds = (myRecordInMillis/10)/100.0f;
-    boolean mySubmitted = scores.isSubmitted(object, sizeIndex, level);
     String myName = scores.getName();
     if( myName.length()==0 ) myName = act.getString(R.string.you);
     int myCountryID = res.getIdentifier( scores.getCountry(), "drawable", packageName);
diff --git a/src/main/java/org/distorted/effects/scramble/ScrambleEffect.java b/src/main/java/org/distorted/effects/scramble/ScrambleEffect.java
index d419345d..e7adca0d 100644
--- a/src/main/java/org/distorted/effects/scramble/ScrambleEffect.java
+++ b/src/main/java/org/distorted/effects/scramble/ScrambleEffect.java
@@ -87,7 +87,7 @@ public abstract class ScrambleEffect extends BaseEffect implements EffectListene
   ScrambleEffect()
     {
     mRnd = new Random( System.currentTimeMillis() );
-    mScrambles = new int[ObjectList.MAX_LEVEL][3];
+    mScrambles = new int[ObjectList.MAX_SCRAMBLE][3];
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/ObjectList.java b/src/main/java/org/distorted/objects/ObjectList.java
index d6338f58..a0d0f962 100644
--- a/src/main/java/org/distorted/objects/ObjectList.java
+++ b/src/main/java/org/distorted/objects/ObjectList.java
@@ -34,12 +34,14 @@ import java.lang.reflect.Field;
 
 public enum ObjectList
   {
+  ///////////////////// Size // DB Level // NumScrambles // Mesh // small icon // medium icon // big icon // huge icon
+
   CUBE (
          new int[][] {
-                       {2 , 12, R.raw.cube2, R.drawable.ui_small_cube2, R.drawable.ui_medium_cube2, R.drawable.ui_big_cube2, R.drawable.ui_huge_cube2} ,
-                       {3 , 16, R.raw.cube3, R.drawable.ui_small_cube3, R.drawable.ui_medium_cube3, R.drawable.ui_big_cube3, R.drawable.ui_huge_cube3} ,
-                       {4 , 20, R.raw.cube4, R.drawable.ui_small_cube4, R.drawable.ui_medium_cube4, R.drawable.ui_big_cube4, R.drawable.ui_huge_cube4} ,
-                       {5 , 24, R.raw.cube5, R.drawable.ui_small_cube5, R.drawable.ui_medium_cube5, R.drawable.ui_big_cube5, R.drawable.ui_huge_cube5}
+                       {2 , 12, 12, R.raw.cube2, R.drawable.ui_small_cube2, R.drawable.ui_medium_cube2, R.drawable.ui_big_cube2, R.drawable.ui_huge_cube2} ,
+                       {3 , 16, 17, R.raw.cube3, R.drawable.ui_small_cube3, R.drawable.ui_medium_cube3, R.drawable.ui_big_cube3, R.drawable.ui_huge_cube3} ,
+                       {4 , 20, 24, R.raw.cube4, R.drawable.ui_small_cube4, R.drawable.ui_medium_cube4, R.drawable.ui_big_cube4, R.drawable.ui_huge_cube4} ,
+                       {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(),
@@ -49,9 +51,9 @@ public enum ObjectList
 
   PYRA (
          new int[][] {
-                       {3 , 10, R.raw.pyra3, R.drawable.ui_small_pyra3, R.drawable.ui_medium_pyra3, R.drawable.ui_big_pyra3, R.drawable.ui_huge_pyra3} ,
-                       {4 , 15, R.raw.pyra4, R.drawable.ui_small_pyra4, R.drawable.ui_medium_pyra4, R.drawable.ui_big_pyra4, R.drawable.ui_huge_pyra4} ,
-                       {5 , 20, R.raw.pyra5, R.drawable.ui_small_pyra5, R.drawable.ui_medium_pyra5, R.drawable.ui_big_pyra5, R.drawable.ui_huge_pyra5}
+                       {3 , 10, 10, R.raw.pyra3, R.drawable.ui_small_pyra3, R.drawable.ui_medium_pyra3, R.drawable.ui_big_pyra3, R.drawable.ui_huge_pyra3} ,
+                       {4 , 15, 17, R.raw.pyra4, R.drawable.ui_small_pyra4, R.drawable.ui_medium_pyra4, R.drawable.ui_big_pyra4, R.drawable.ui_huge_pyra4} ,
+                       {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(),
@@ -61,7 +63,7 @@ public enum ObjectList
 
   ULTI (
          new int[][] {
-                       {2 , 18, R.raw.ulti, R.drawable.ui_small_ulti, R.drawable.ui_medium_ulti, R.drawable.ui_big_ulti, R.drawable.ui_huge_ulti} ,
+                       {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(),
@@ -71,8 +73,8 @@ public enum ObjectList
 
   KILO (
          new int[][] {
-                       {3 , 18, R.raw.kilo3, R.drawable.ui_small_kilo3, R.drawable.ui_medium_kilo3, R.drawable.ui_big_kilo3, R.drawable.ui_huge_kilo3} ,
-                       {5 , 33, R.raw.kilo5, R.drawable.ui_small_kilo5, R.drawable.ui_medium_kilo5, R.drawable.ui_big_kilo5, R.drawable.ui_huge_kilo5} ,
+                       {3 , 18, 18, R.raw.kilo3, R.drawable.ui_small_kilo3, R.drawable.ui_medium_kilo3, R.drawable.ui_big_kilo3, R.drawable.ui_huge_kilo3} ,
+                       {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(),
@@ -82,8 +84,8 @@ public enum ObjectList
 
   MEGA (
          new int[][] {
-                       {3 , 21, R.raw.mega3, R.drawable.ui_small_mega3, R.drawable.ui_medium_mega3, R.drawable.ui_big_mega3, R.drawable.ui_huge_mega3} ,
-                       {5 , 35, R.raw.mega5, R.drawable.ui_small_mega5, R.drawable.ui_medium_mega5, R.drawable.ui_big_mega5, R.drawable.ui_huge_mega5} ,
+                       {3 , 21, 21, R.raw.mega3, R.drawable.ui_small_mega3, R.drawable.ui_medium_mega3, R.drawable.ui_big_mega3, R.drawable.ui_huge_mega3} ,
+                       {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(),
@@ -93,7 +95,7 @@ public enum ObjectList
 
   DINO (
          new int[][] {
-                       {3 , 10, R.raw.dino, R.drawable.ui_small_dino, R.drawable.ui_medium_dino, R.drawable.ui_big_dino, R.drawable.ui_huge_dino} ,
+                       {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 MovementDino(),
@@ -103,7 +105,7 @@ public enum ObjectList
 
   DIN4 (
          new int[][] {
-                       {3 ,  7, R.raw.dino, R.drawable.ui_small_din4, R.drawable.ui_medium_din4, R.drawable.ui_big_din4, R.drawable.ui_huge_din4} ,
+                       {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 MovementDino(),
@@ -113,7 +115,7 @@ public enum ObjectList
 
   REDI (
          new int[][] {
-                       {3 , 14, R.raw.redi, R.drawable.ui_small_redi, R.drawable.ui_medium_redi, R.drawable.ui_big_redi, R.drawable.ui_huge_redi} ,
+                       {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 MovementRedi(),
@@ -123,7 +125,7 @@ public enum ObjectList
 
   HELI (
          new int[][] {
-                       {3 , 18, R.raw.heli, R.drawable.ui_small_heli, R.drawable.ui_medium_heli, R.drawable.ui_big_heli, R.drawable.ui_huge_heli} ,
+                       {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(),
@@ -133,8 +135,8 @@ public enum ObjectList
 
   SKEW (
          new int[][] {
-                       {2 , 11, R.raw.skew2, R.drawable.ui_small_skewb, R.drawable.ui_medium_skewb, R.drawable.ui_big_skewb, R.drawable.ui_huge_skewb} ,
-                       {3 , 17, R.raw.skew3, R.drawable.ui_small_skewm, R.drawable.ui_medium_skewm, R.drawable.ui_big_skewm, R.drawable.ui_huge_skewm} ,
+                       {2 , 11, 11, R.raw.skew2, R.drawable.ui_small_skewb, R.drawable.ui_medium_skewb, R.drawable.ui_big_skewb, R.drawable.ui_huge_skewb} ,
+                       {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 MovementSkewb(),
@@ -144,7 +146,7 @@ public enum ObjectList
 
   IVY  (
          new int[][] {
-                       {2 , 8, R.raw.ivy, R.drawable.ui_small_ivy, R.drawable.ui_medium_ivy, R.drawable.ui_big_ivy, R.drawable.ui_huge_ivy} ,
+                       {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(),
@@ -154,7 +156,7 @@ public enum ObjectList
 
   REX  (
          new int[][] {
-                       {3 , 16, R.raw.rex, R.drawable.ui_small_rex, R.drawable.ui_medium_rex, R.drawable.ui_big_rex, R.drawable.ui_huge_rex} ,
+                       {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 MovementRex(),
@@ -164,7 +166,7 @@ public enum ObjectList
 
   BAN1 (
          new int[][] {
-                       {3 , 16, R.raw.ban1, R.drawable.ui_small_ban1, R.drawable.ui_medium_ban1, R.drawable.ui_big_ban1, R.drawable.ui_huge_ban1} ,
+                       {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(),
@@ -174,7 +176,7 @@ public enum ObjectList
 
   BAN2 (
          new int[][] {
-                       {3 , 16, R.raw.ban2, R.drawable.ui_small_ban2, R.drawable.ui_medium_ban2, R.drawable.ui_big_ban2, R.drawable.ui_huge_ban2} ,
+                       {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(),
@@ -184,7 +186,7 @@ public enum ObjectList
 
   BAN3 (
          new int[][] {
-                       {3 , 16, R.raw.ban3, R.drawable.ui_small_ban3, R.drawable.ui_medium_ban3, R.drawable.ui_big_ban3, R.drawable.ui_huge_ban3} ,
+                       {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(),
@@ -194,7 +196,7 @@ public enum ObjectList
 
   BAN4 (
          new int[][] {
-                       {3 , 16, R.raw.ban4, R.drawable.ui_small_ban4, R.drawable.ui_medium_ban4, R.drawable.ui_big_ban4, R.drawable.ui_huge_ban4} ,
+                       {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(),
@@ -204,8 +206,8 @@ public enum ObjectList
 
   DIAM (
          new int[][] {
-                       {2 , 10, R.raw.diam2, R.drawable.ui_small_diam2, R.drawable.ui_medium_diam2, R.drawable.ui_big_diam2, R.drawable.ui_huge_diam2} ,
-                       {3 , 18, R.raw.diam3, R.drawable.ui_small_diam3, R.drawable.ui_medium_diam3, R.drawable.ui_big_diam3, R.drawable.ui_huge_diam3} ,
+                       {2 , 10, 12, R.raw.diam2, R.drawable.ui_small_diam2, R.drawable.ui_medium_diam2, R.drawable.ui_big_diam2, R.drawable.ui_huge_diam2} ,
+                       {3 , 18, 24, R.raw.diam3, R.drawable.ui_small_diam3, R.drawable.ui_medium_diam3, R.drawable.ui_big_diam3, R.drawable.ui_huge_diam3} ,
                      },
          TwistyDiamond.class,
          new MovementDiamond(),
@@ -215,7 +217,7 @@ public enum ObjectList
 
   SQU1 (
          new int[][] {
-                       {3 , 24, R.raw.square1, R.drawable.ui_small_square1, R.drawable.ui_medium_square1, R.drawable.ui_big_square1, R.drawable.ui_huge_square1} ,
+                       {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(),
@@ -225,7 +227,7 @@ public enum ObjectList
 
   SQU2 (
          new int[][] {
-                       {3 , 24, R.raw.square2, R.drawable.ui_small_square2, R.drawable.ui_medium_square2, R.drawable.ui_big_square2, R.drawable.ui_huge_square2} ,
+                       {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(),
@@ -237,9 +239,10 @@ public enum ObjectList
   public static final int NUM_OBJECTS = values().length;
   public static final int MAX_NUM_OBJECTS;
   public static final int MAX_LEVEL;
+  public static final int MAX_SCRAMBLE;
   public static final int MAX_OBJECT_SIZE;
 
-  private final int[] mObjectSizes, mMaxLevels, mSmallIconIDs, mMediumIconIDs, mBigIconIDs, mHugeIconIDs, mResourceIDs;
+  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;
@@ -255,9 +258,10 @@ public enum ObjectList
     mNumAll = 0;
     int num, i = 0;
     objects = new ObjectList[NUM_OBJECTS];
-    int maxNum  = Integer.MIN_VALUE;
-    int maxLevel= Integer.MIN_VALUE;
-    int maxSize = Integer.MIN_VALUE;
+    int maxNum     = Integer.MIN_VALUE;
+    int maxLevel   = Integer.MIN_VALUE;
+    int maxScramble= Integer.MIN_VALUE;
+    int maxSize    = Integer.MIN_VALUE;
 
     for(ObjectList object: ObjectList.values())
       {
@@ -269,13 +273,15 @@ public enum ObjectList
 
       for(int j=0; j<num; j++)
         {
-        if( object.mMaxLevels[j] > maxLevel ) maxLevel = object.mMaxLevels[j];
-        if( object.mObjectSizes[j] > maxSize) maxSize  = object.mObjectSizes[j];
+        if( object.mNumScrambles[j]> maxScramble ) maxScramble= object.mNumScrambles[j];
+        if( object.mDBLevels[j]    > maxLevel    ) maxLevel   = object.mDBLevels[j];
+        if( object.mObjectSizes[j] > maxSize     ) maxSize    = object.mObjectSizes[j];
         }
       }
 
     MAX_NUM_OBJECTS = maxNum;
     MAX_LEVEL       = maxLevel;
+    MAX_SCRAMBLE    = maxScramble;
     MAX_OBJECT_SIZE = maxSize;
     }
 
@@ -455,12 +461,25 @@ public enum ObjectList
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public static int getMaxLevel(int ordinal, int sizeIndex)
+  public static int getDBLevel(int ordinal, int sizeIndex)
     {
     if( ordinal>=0 && ordinal<NUM_OBJECTS )
       {
       int num = objects[ordinal].mObjectSizes.length;
-      return sizeIndex>=0 && sizeIndex<num ? objects[ordinal].mMaxLevels[sizeIndex] : 0;
+      return sizeIndex>=0 && sizeIndex<num ? objects[ordinal].mDBLevels[sizeIndex] : 0;
+      }
+
+    return 0;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public static int getNumScramble(int ordinal, int sizeIndex)
+    {
+    if( ordinal>=0 && ordinal<NUM_OBJECTS )
+      {
+      int num = objects[ordinal].mObjectSizes.length;
+      return sizeIndex>=0 && sizeIndex<num ? objects[ordinal].mNumScrambles[sizeIndex] : 0;
       }
 
     return 0;
@@ -529,7 +548,8 @@ public enum ObjectList
     mNumSizes = info.length;
 
     mObjectSizes  = new int[mNumSizes];
-    mMaxLevels    = new int[mNumSizes];
+    mDBLevels     = new int[mNumSizes];
+    mNumScrambles = new int[mNumSizes];
     mResourceIDs  = new int[mNumSizes];
     mSmallIconIDs = new int[mNumSizes];
     mMediumIconIDs= new int[mNumSizes];
@@ -539,12 +559,13 @@ public enum ObjectList
     for(int i=0; i<mNumSizes; i++)
       {
       mObjectSizes[i]  = info[i][0];
-      mMaxLevels[i]    = info[i][1];
-      mResourceIDs[i]  = info[i][2];
-      mSmallIconIDs[i] = info[i][3];
-      mMediumIconIDs[i]= info[i][4];
-      mBigIconIDs[i]   = info[i][5];
-      mHugeIconIDs[i]  = info[i][6];
+      mDBLevels[i]     = info[i][1];
+      mNumScrambles[i] = info[i][2];
+      mResourceIDs[i]  = info[i][3];
+      mSmallIconIDs[i] = info[i][4];
+      mMediumIconIDs[i]= info[i][5];
+      mBigIconIDs[i]   = info[i][6];
+      mHugeIconIDs[i]  = info[i][7];
       }
 
     mObjectClass         = object;
@@ -562,9 +583,16 @@ public enum ObjectList
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int[] getMaxLevels()
+  public int[] getDBLevels()
+    {
+    return mDBLevels;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public int[] getNumScrambles()
     {
-    return mMaxLevels;
+    return mNumScrambles;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/screens/RubikScreenPlay.java b/src/main/java/org/distorted/screens/RubikScreenPlay.java
index a1bd6fcc..cc81637f 100644
--- a/src/main/java/org/distorted/screens/RubikScreenPlay.java
+++ b/src/main/java/org/distorted/screens/RubikScreenPlay.java
@@ -178,8 +178,8 @@ public class RubikScreenPlay extends RubikScreenBase
           popupView.setSystemUiVisibility(RubikActivity.FLAGS);
 
           final int sizeIndex = ObjectList.getSizeIndex(mObject,mSize);
-          final int maxLevel = ObjectList.getMaxLevel(mObject, sizeIndex);
-          final int levelsShown = Math.min(maxLevel,LEVELS_SHOWN);
+          final int dbLevel = ObjectList.getDBLevel(mObject, sizeIndex);
+          final int levelsShown = Math.min(dbLevel,LEVELS_SHOWN);
 
           mPlayPopup.showAsDropDown(view, margin, margin);
           mPlayPopup.update(view, mPlayLayoutWidth, (int)(levelsShown*(mMenuItemSize+margin)+3*margin+mMenuItemSize*(LAST_BUTTON-1.0f)));
@@ -465,13 +465,13 @@ public class RubikScreenPlay extends RubikScreenBase
     mSize  = preferences.getInt("statePlay_size"  , DEF_SIZE  );
 
     int sizeIndex = ObjectList.getSizeIndex(mObject,mSize);
-    int maxLevel = ObjectList.getMaxLevel(mObject, sizeIndex);
+    int dbLevel = ObjectList.getDBLevel(mObject, sizeIndex);
 
     // This means the app has been upgraded to a new version which swapped the
     // Object for a new one with larger sizeIndex and now getMaxLevel() returns
     // 0. Reset the object to default, otherwise we'll get a crash later on.
 
-    if( maxLevel==0 )
+    if( dbLevel==0 )
       {
       mObject = DEF_OBJECT;
       mSize   = DEF_SIZE;
@@ -512,8 +512,9 @@ public class RubikScreenPlay extends RubikScreenBase
   private void adjustLevels(final RubikActivity act)
     {
     int sizeIndex = ObjectList.getSizeIndex(mObject,mSize);
-    int maxLevel = ObjectList.getMaxLevel(mObject, sizeIndex);
-    int numLevel = Math.min(maxLevel, LEVELS_SHOWN);
+    int dbLevel = ObjectList.getDBLevel(mObject, sizeIndex);
+    int numScrambles = ObjectList.getNumScramble(mObject, sizeIndex);
+    int numLevel = Math.min(dbLevel, LEVELS_SHOWN);
     String[] levels = new String[numLevel];
 
     for(int i=0; i<numLevel-1; i++)
@@ -526,8 +527,8 @@ public class RubikScreenPlay extends RubikScreenBase
       levels[numLevel-1] = act.getString(R.string.level_full);
       }
 
-    if( mLevelValue>maxLevel || mLevelValue<1 ||
-       (mLevelValue<maxLevel || mLevelValue>LEVELS_SHOWN ) )
+    if( mLevelValue>dbLevel || mLevelValue<1 ||
+       (mLevelValue<dbLevel || mLevelValue>LEVELS_SHOWN ) )
       {
       mLevelValue=1;
       }
@@ -552,13 +553,14 @@ public class RubikScreenPlay extends RubikScreenBase
 
     for(int i=0; i<numLevel; i++)
       {
-      final int scrambles = i<numLevel-1 ? i+1 : maxLevel;
+      final int level     = i<numLevel-1 ? i+1 : dbLevel;
+      final int scrambles = i<numLevel-1 ? i+1 : numScrambles;
       Button button = new Button(act);
       button.setLayoutParams(i==0 ? pT : (i==numLevel-1 ? pB : pM));
       button.setText(levels[i]);
       button.setTextSize(TypedValue.COMPLEX_UNIT_PX, mMenuTextSize);
 
-      int icon = scores.isSolved(mObject, sizeIndex, scrambles-1) ? R.drawable.ui_solved : R.drawable.ui_notsolved;
+      int icon = scores.isSolved(mObject, sizeIndex, level-1) ? R.drawable.ui_solved : R.drawable.ui_notsolved;
       button.setCompoundDrawablesWithIntrinsicBounds(icon,0,0,0);
 
       button.setOnClickListener( new View.OnClickListener()
@@ -571,8 +573,8 @@ public class RubikScreenPlay extends RubikScreenBase
           if(pre.isUINotBlocked())
             {
             mPlayPopup.dismiss();
-            mLevelValue = scrambles;
-            pre.scrambleObject(mLevelValue);
+            mLevelValue = level;
+            pre.scrambleObject(scrambles);
             }
           }
         });
diff --git a/src/main/java/org/distorted/tutorials/TutorialState.java b/src/main/java/org/distorted/tutorials/TutorialState.java
index 63016e61..df6c4294 100644
--- a/src/main/java/org/distorted/tutorials/TutorialState.java
+++ b/src/main/java/org/distorted/tutorials/TutorialState.java
@@ -177,9 +177,9 @@ public class TutorialState implements RubikPreRender.ActionFinishedListener
         int size = play.getSize();
         int object= play.getObject();
         int sizeIndex = ObjectList.getSizeIndex(object,size);
-        int maxLevel = ObjectList.getMaxLevel(object, sizeIndex);
+        int numScrambles = ObjectList.getNumScramble(object, sizeIndex);
 
-        act.getPreRender().scrambleObject(maxLevel);
+        act.getPreRender().scrambleObject(numScrambles);
         }
       });
     }
