commit cd22a46ed957561422b960ec2f7efcdbf1cfabd2
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Thu Mar 6 10:17:24 2025 +0100

    adjust TODO
    fix for a crasher

diff --git a/TODO.txt b/TODO.txt
index 4f9a731d..3ec9ab3c 100644
--- a/TODO.txt
+++ b/TODO.txt
@@ -6,9 +6,8 @@ OBJLIB
 
 1) unification of verifiers
 2) support for stickermodes
-3) support for Ghosts
-4) support for rounded cubit walls
-5) corrections of shape of cubit walls 
+3) support for rounded cubit walls
+4) corrections of shape of cubit walls 
 
 /////////////////////////////////////////////
 APP
@@ -16,4 +15,4 @@ APP
 1) voting for next feature
 2) Patronite
 3) explanation for the CUBE3 & MEGA3 middles in Solver's setup positions
-4) white plastic (depends on OBJLIB 5)
+4) white plastic (depends on OBJLIB 4)
diff --git a/src/main/java/org/distorted/solvers/ScreenSolutionMultiphased.java b/src/main/java/org/distorted/solvers/ScreenSolutionMultiphased.java
index 54aafbc2..4a0a8580 100644
--- a/src/main/java/org/distorted/solvers/ScreenSolutionMultiphased.java
+++ b/src/main/java/org/distorted/solvers/ScreenSolutionMultiphased.java
@@ -251,68 +251,74 @@ public class ScreenSolutionMultiphased extends ScreenAbstract implements MovesFi
 
   void backPhase()
     {
-    SolverActivity act = mAct.get();
-    ObjectControl control = act.getControl();
-
-    if( mCurrMove>0 )
-      {
-      ObjectMove[] moves = transformMoves(mMoves[mCurrPhase],0,mCurrMove, false);
-      control.applyScrambles(moves);
-      mCurrMove = 0;
-      }
-    else if( mCurrPhase>0 )
-      {
-      mCurrPhase--;
-      mNumMoves = mMoves[mCurrPhase]==null ? 0 : mMoves[mCurrPhase].length;
-      mCurrMove = 0;
-      ObjectMove[] moves = transformMoves(mMoves[mCurrPhase],0,mNumMoves, false);
-      control.applyScrambles(moves);
-      }
-    else
+    if( mMoves!=null )
       {
-      mCurrPhase = mNumPhases-1;
-      mNumMoves = mMoves[mCurrPhase]==null ? 0 : mMoves[mCurrPhase].length;
-      mCurrMove = mNumMoves;
-      ObjectMove[] moves = transformMoves(mMoves, true);
-      control.applyScrambles(moves);
-      }
+      SolverActivity act = mAct.get();
+      ObjectControl control = act.getControl();
 
-    setText(act);
+      if( mCurrMove>0 )
+        {
+        ObjectMove[] moves = transformMoves(mMoves[mCurrPhase],0,mCurrMove, false);
+        control.applyScrambles(moves);
+        mCurrMove = 0;
+        }
+      else if( mCurrPhase>0 )
+        {
+        mCurrPhase--;
+        mNumMoves = mMoves[mCurrPhase]==null ? 0 : mMoves[mCurrPhase].length;
+        mCurrMove = 0;
+        ObjectMove[] moves = transformMoves(mMoves[mCurrPhase],0,mNumMoves, false);
+        control.applyScrambles(moves);
+        }
+      else
+        {
+        mCurrPhase = mNumPhases-1;
+        mNumMoves = mMoves[mCurrPhase]==null ? 0 : mMoves[mCurrPhase].length;
+        mCurrMove = mNumMoves;
+        ObjectMove[] moves = transformMoves(mMoves, true);
+        control.applyScrambles(moves);
+        }
+
+      setText(act);
+      }
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   void nextPhase()
     {
-    SolverActivity act = mAct.get();
-    ObjectControl control = act.getControl();
-
-    if( mCurrPhase<mNumPhases-1 )
-      {
-      glowCubits(mCubitsNotInvolved[mCurrPhase]);
-      ObjectMove[] moves = transformMoves(mMoves[mCurrPhase],mCurrMove,mNumMoves, true);
-      control.applyScrambles(moves);
-      mCurrPhase++;
-      mNumMoves = mMoves[mCurrPhase]==null ? 0 : mMoves[mCurrPhase].length;
-      mCurrMove = 0;
-      }
-    else if( mCurrMove<mNumMoves )
-      {
-      glowCubits(mCubitsNotInvolved[mCurrPhase]);
-      ObjectMove[] moves = transformMoves(mMoves[mCurrPhase],mCurrMove,mNumMoves, true);
-      control.applyScrambles(moves);
-      mCurrMove = mNumMoves;
-      }
-    else
+    if( mMoves!=null )
       {
-      mCurrPhase = 0;
-      mNumMoves = mMoves[mCurrPhase]==null ? 0 : mMoves[mCurrPhase].length;
-      mCurrMove = 0;
-      ObjectMove[] moves = transformMoves(mMoves, false);
-      control.applyScrambles(moves);
-      }
+      SolverActivity act = mAct.get();
+      ObjectControl control = act.getControl();
 
-    setText(act);
+      if( mCurrPhase<mNumPhases-1 )
+        {
+        glowCubits(mCubitsNotInvolved[mCurrPhase]);
+        ObjectMove[] moves = transformMoves(mMoves[mCurrPhase],mCurrMove,mNumMoves, true);
+        control.applyScrambles(moves);
+        mCurrPhase++;
+        mNumMoves = mMoves[mCurrPhase]==null ? 0 : mMoves[mCurrPhase].length;
+        mCurrMove = 0;
+        }
+      else if( mCurrMove<mNumMoves )
+        {
+        glowCubits(mCubitsNotInvolved[mCurrPhase]);
+        ObjectMove[] moves = transformMoves(mMoves[mCurrPhase],mCurrMove,mNumMoves, true);
+        control.applyScrambles(moves);
+        mCurrMove = mNumMoves;
+        }
+      else
+        {
+        mCurrPhase = 0;
+        mNumMoves = mMoves[mCurrPhase]==null ? 0 : mMoves[mCurrPhase].length;
+        mCurrMove = 0;
+        ObjectMove[] moves = transformMoves(mMoves, false);
+        control.applyScrambles(moves);
+        }
+
+      setText(act);
+      }
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
