commit 3e6055362ce9717b7da9fe1908336b731ba5be97
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Mon Aug 23 15:20:24 2021 +0200

    Finally remove cubit creation from the implementation classes and move it to the TwistyObject.

diff --git a/src/main/java/org/distorted/objects/TwistyBandagedAbstract.java b/src/main/java/org/distorted/objects/TwistyBandagedAbstract.java
index 397eedf2..66465ef9 100644
--- a/src/main/java/org/distorted/objects/TwistyBandagedAbstract.java
+++ b/src/main/java/org/distorted/objects/TwistyBandagedAbstract.java
@@ -21,13 +21,10 @@ package org.distorted.objects;
 
 import android.content.res.Resources;
 
-import org.distorted.helpers.FactoryCubit;
 import org.distorted.helpers.ObjectShape;
 import org.distorted.helpers.ObjectSticker;
-import org.distorted.library.effect.MatrixEffectQuaternion;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
-import org.distorted.library.mesh.MeshBase;
 import org.distorted.library.mesh.MeshSquare;
 import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
@@ -188,35 +185,6 @@ abstract class TwistyBandagedAbstract extends TwistyObject
     return ( cubit>=0 && cubit< indices.length ) ? indices[cubit] : 0;
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  private Static4D getQuat(int cubit, int numLayers)
-    {
-    return INIT_QUATS[getQuatIndex(cubit)];
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  private int getNumCubitVariants(int numLayers)
-    {
-    return mDimensions.length;
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  int getCubitVariant(int cubit, int numLayers)
-    {
-    float[][] pos = getPositions();
-
-    if( cubit>=0 && cubit<pos.length )
-      {
-      int numPoints = pos[cubit].length/3;
-      return numPoints==8 ? 4 : numPoints-1;
-      }
-
-    return 1;
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   ObjectShape getObjectShape(int cubit, int numLayers)
@@ -283,30 +251,31 @@ abstract class TwistyBandagedAbstract extends TwistyObject
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  MeshBase createCubitMesh(int cubit, int numLayers)
+  Static4D getQuat(int cubit, int numLayers)
     {
-    int variant = getCubitVariant(cubit,numLayers);
+    return INIT_QUATS[getQuatIndex(cubit)];
+    }
 
-    if( mMeshes==null )
-      {
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.clear();
-      mMeshes = new MeshBase[getNumCubitVariants(numLayers)];
-      }
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  int getNumCubitVariants(int numLayers)
+    {
+    return mDimensions.length;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  int getCubitVariant(int cubit, int numLayers)
+    {
+    float[][] pos = getPositions();
 
-    if( mMeshes[variant]==null )
+    if( cubit>=0 && cubit<pos.length )
       {
-      ObjectShape shape = getObjectShape(cubit,numLayers);
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.createNewFaceTransform(shape);
-      mMeshes[variant] = factory.createRoundedSolid(shape);
+      int numPoints = pos[cubit].length/3;
+      return numPoints==8 ? 4 : numPoints-1;
       }
 
-    MeshBase mesh = mMeshes[variant].copy(true);
-    MatrixEffectQuaternion quat = new MatrixEffectQuaternion( getQuat(cubit,numLayers), new Static3D(0,0,0) );
-    mesh.apply(quat,0xffffffff,0);
-
-    return mesh;
+    return 1;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyCube.java b/src/main/java/org/distorted/objects/TwistyCube.java
index 5f05244b..1c01159e 100644
--- a/src/main/java/org/distorted/objects/TwistyCube.java
+++ b/src/main/java/org/distorted/objects/TwistyCube.java
@@ -21,13 +21,10 @@ package org.distorted.objects;
 
 import android.content.res.Resources;
 
-import org.distorted.helpers.FactoryCubit;
 import org.distorted.helpers.ObjectShape;
 import org.distorted.helpers.ObjectSticker;
-import org.distorted.library.effect.MatrixEffectQuaternion;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
-import org.distorted.library.mesh.MeshBase;
 import org.distorted.library.mesh.MeshSquare;
 import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
@@ -139,27 +136,6 @@ class TwistyCube extends TwistyObject
     super(size, size, quat, texture, mesh, effects, moves, ObjectList.CUBE, res, scrWidth);
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  private Static4D getQuat(int cubit, int numLayers)
-    {
-    return QUATS[0];
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  private int getNumCubitVariants(int numLayers)
-    {
-    return 1;
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  int getCubitVariant(int cubit, int numLayers)
-    {
-    return 0;
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   ObjectShape getObjectShape(int cubit, int numLayers)
@@ -187,30 +163,23 @@ class TwistyCube extends TwistyObject
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  MeshBase createCubitMesh(int cubit, int numLayers)
+  Static4D getQuat(int cubit, int numLayers)
     {
-    int variant = getCubitVariant(cubit,numLayers);
+    return QUATS[0];
+    }
 
-    if( mMeshes==null )
-      {
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.clear();
-      mMeshes = new MeshBase[getNumCubitVariants(numLayers)];
-      }
+///////////////////////////////////////////////////////////////////////////////////////////////////
 
-    if( mMeshes[variant]==null )
-      {
-      ObjectShape shape = getObjectShape(cubit,numLayers);
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.createNewFaceTransform(shape);
-      mMeshes[variant] = factory.createRoundedSolid(shape);
-      }
+  int getNumCubitVariants(int numLayers)
+    {
+    return 1;
+    }
 
-    MeshBase mesh = mMeshes[variant].copy(true);
-    MatrixEffectQuaternion quat = new MatrixEffectQuaternion( getQuat(cubit,numLayers), new Static3D(0,0,0) );
-    mesh.apply(quat,0xffffffff,0);
+///////////////////////////////////////////////////////////////////////////////////////////////////
 
-    return mesh;
+  int getCubitVariant(int cubit, int numLayers)
+    {
+    return 0;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyDiamond.java b/src/main/java/org/distorted/objects/TwistyDiamond.java
index e7a260f6..18318208 100644
--- a/src/main/java/org/distorted/objects/TwistyDiamond.java
+++ b/src/main/java/org/distorted/objects/TwistyDiamond.java
@@ -21,13 +21,10 @@ package org.distorted.objects;
 
 import android.content.res.Resources;
 
-import org.distorted.helpers.FactoryCubit;
 import org.distorted.helpers.ObjectShape;
 import org.distorted.helpers.ObjectSticker;
-import org.distorted.library.effect.MatrixEffectQuaternion;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
-import org.distorted.library.mesh.MeshBase;
 import org.distorted.library.mesh.MeshSquare;
 import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
@@ -377,50 +374,13 @@ public class TwistyDiamond extends TwistyObject
     return -1;
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  private Static4D getQuat(int cubit, int numLayers)
-    {
-    int numO = getNumOctahedrons(numLayers);
-
-    if( cubit<numO ) return QUATS[0];
-
-    switch( retFaceTetraBelongsTo(cubit-numO, numLayers) )
-      {
-      case 0: return QUATS[0];                          // unit quat
-      case 1: return new Static4D(0,-SQ2/2,0,SQ2/2);    //  90 along Y
-      case 2: return QUATS[1];                          // 180 along Y
-      case 3: return new Static4D(0,+SQ2/2,0,SQ2/2);    //  90 along
-      case 4: return new Static4D(0,     0,1,    0);    // 180 along Z
-      case 5: return new Static4D(SQ2/2, 0,SQ2/2,0);    //
-      case 6: return new Static4D(     1,0,0,    0);    // 180 along X
-      case 7: return new Static4D(-SQ2/2,0,SQ2/2,0);    //
-      }
-
-    return null;
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  private int getNumCubitVariants(int numLayers)
-    {
-    return 2;
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  int getCubitVariant(int cubit, int numLayers)
-    {
-    return cubit<getNumOctahedrons(numLayers) ? 0 : 1;
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   ObjectShape getObjectShape(int cubit, int numLayers)
     {
     int variant = getCubitVariant(cubit,numLayers);
     int N = numLayers>3 ? 5:6;
-    int E = numLayers>3 ? 1:2;
+    int E = numLayers>3 ? 0:2;
 
     if( variant==0 )
       {
@@ -446,30 +406,39 @@ public class TwistyDiamond extends TwistyObject
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  MeshBase createCubitMesh(int cubit, int numLayers)
+  Static4D getQuat(int cubit, int numLayers)
     {
-    int variant = getCubitVariant(cubit,numLayers);
+    int numO = getNumOctahedrons(numLayers);
 
-    if( mMeshes==null )
-      {
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.clear();
-      mMeshes = new MeshBase[getNumCubitVariants(numLayers)];
-      }
+    if( cubit<numO ) return QUATS[0];
 
-    if( mMeshes[variant]==null )
+    switch( retFaceTetraBelongsTo(cubit-numO, numLayers) )
       {
-      ObjectShape shape = getObjectShape(cubit,numLayers);
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.createNewFaceTransform(shape);
-      mMeshes[variant] = factory.createRoundedSolid(shape);
+      case 0: return QUATS[0];                          // unit quat
+      case 1: return new Static4D(0,-SQ2/2,0,SQ2/2);    //  90 along Y
+      case 2: return QUATS[1];                          // 180 along Y
+      case 3: return new Static4D(0,+SQ2/2,0,SQ2/2);    //  90 along
+      case 4: return new Static4D(0,     0,1,    0);    // 180 along Z
+      case 5: return new Static4D(SQ2/2, 0,SQ2/2,0);    //
+      case 6: return new Static4D(     1,0,0,    0);    // 180 along X
+      case 7: return new Static4D(-SQ2/2,0,SQ2/2,0);    //
       }
 
-    MeshBase mesh = mMeshes[variant].copy(true);
-    MatrixEffectQuaternion quat = new MatrixEffectQuaternion( getQuat(cubit,numLayers), new Static3D(0,0,0) );
-    mesh.apply(quat,0xffffffff,0);
+    return null;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
 
-    return mesh;
+  int getNumCubitVariants(int numLayers)
+    {
+    return 2;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  int getCubitVariant(int cubit, int numLayers)
+    {
+    return cubit<getNumOctahedrons(numLayers) ? 0 : 1;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyDino.java b/src/main/java/org/distorted/objects/TwistyDino.java
index b1f5687c..38e4c7ca 100644
--- a/src/main/java/org/distorted/objects/TwistyDino.java
+++ b/src/main/java/org/distorted/objects/TwistyDino.java
@@ -21,13 +21,10 @@ package org.distorted.objects;
 
 import android.content.res.Resources;
 
-import org.distorted.helpers.FactoryCubit;
 import org.distorted.helpers.ObjectShape;
 import org.distorted.helpers.ObjectSticker;
-import org.distorted.library.effect.MatrixEffectQuaternion;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
-import org.distorted.library.mesh.MeshBase;
 import org.distorted.library.mesh.MeshSquare;
 import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
@@ -180,65 +177,36 @@ public abstract class TwistyDino extends TwistyObject
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private Static4D getQuat(int cubit, int numLayers)
-    {
-    return QUATS[cubit];
-    }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  private int getNumCubitVariants(int numLayers)
+  ObjectShape getObjectShape(int cubit, int numLayers)
     {
-    return 1;
+    float[][] bands     = new float[][] { {0.035f,30,0.16f,0.8f,6,2,2}, {0.010f,30,0.16f,0.2f,6,2,2} };
+    int[] bandIndices   = new int[] { 0,0,1,1 };
+    float[][] corners   = new float[][] { {0.07f,0.40f}, {0.05f,0.30f} };
+    int[] cornerIndices = new int[] { 0,0,1,1 };
+    float[][] centers   = new float[][] { {0.0f, -0.75f, -0.75f} };
+    int[] centerIndices = new int[] { 0,0,0,0 };
+    return new ObjectShape(VERTICES,VERT_INDEXES,bands,bandIndices,corners,cornerIndices,centers,centerIndices,getNumCubitFaces(), null);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  int getCubitVariant(int cubit, int numLayers)
+  Static4D getQuat(int cubit, int numLayers)
     {
-    return 0;
+    return QUATS[cubit];
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  ObjectShape getObjectShape(int cubit, int numLayers)
+  int getNumCubitVariants(int numLayers)
     {
-    float[][] bands= new float[][] { {0.035f,30,0.16f,0.8f,6,2,2}, {0.010f,30,0.16f,0.2f,6,2,2} };
-    int[] bandIndices   = new int[] { 0,0,1,1 };
-    float[][] corners   = new float[][] { {0.07f,0.40f}, {0.05f,0.30f} };
-    int[] cornerIndices = new int[] { 0,0,1,1 };
-    float[][] centers   = new float[][] { {0.0f, -0.75f, -0.75f} };
-    int[] centerIndices = new int[] { 0,0,0,0 };
-
-    return new ObjectShape(VERTICES,VERT_INDEXES,bands,bandIndices,corners,cornerIndices,centers,centerIndices,getNumCubitFaces(), null);
+    return 1;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  MeshBase createCubitMesh(int cubit, int numLayers)
+  int getCubitVariant(int cubit, int numLayers)
     {
-    int variant = getCubitVariant(cubit,numLayers);
-
-    if( mMeshes==null )
-      {
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.clear();
-      mMeshes = new MeshBase[getNumCubitVariants(numLayers)];
-      }
-
-    if( mMeshes[variant]==null )
-      {
-      ObjectShape shape = getObjectShape(cubit,numLayers);
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.createNewFaceTransform(shape);
-      mMeshes[variant] = factory.createRoundedSolid(shape);
-      }
-
-    MeshBase mesh = mMeshes[variant].copy(true);
-    MatrixEffectQuaternion quat = new MatrixEffectQuaternion( getQuat(cubit,numLayers), new Static3D(0,0,0) );
-    mesh.apply(quat,0xffffffff,0);
-
-    return mesh;
+    return 0;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyHelicopter.java b/src/main/java/org/distorted/objects/TwistyHelicopter.java
index 2f2cd0a6..e2bce122 100644
--- a/src/main/java/org/distorted/objects/TwistyHelicopter.java
+++ b/src/main/java/org/distorted/objects/TwistyHelicopter.java
@@ -21,13 +21,10 @@ package org.distorted.objects;
 
 import android.content.res.Resources;
 
-import org.distorted.helpers.FactoryCubit;
 import org.distorted.helpers.ObjectShape;
 import org.distorted.helpers.ObjectSticker;
-import org.distorted.library.effect.MatrixEffectQuaternion;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
-import org.distorted.library.mesh.MeshBase;
 import org.distorted.library.mesh.MeshSquare;
 import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
@@ -311,7 +308,7 @@ public class TwistyHelicopter extends TwistyObject
 
     if( variant==0 )
       {
-      float[][] bands= new float[][] { {0.028f,35,0.16f,0.7f,7,3,3}, {0.000f, 0,1.00f,0.0f,3,1,5} };
+      float[][] bands     = new float[][] { {0.028f,35,0.16f,0.7f,7,3,3}, {0.000f, 0,1.00f,0.0f,3,1,5} };
       int[] bandIndices   = new int[] { 0,0,0,1,1,1 };
       float[][] corners   = new float[][] { {0.08f,0.15f}, {0.08f,0.20f} };
       int[] cornerIndices = new int[] { 1,1,1,0,0 };
@@ -321,7 +318,7 @@ public class TwistyHelicopter extends TwistyObject
       }
     else
       {
-      float[][] bands= new float[][] { {0.028f,35,0.16f,0.7f,7,3,3}, {0.000f, 0,1.00f,0.0f,3,1,3} };
+      float[][] bands     = new float[][] { {0.028f,35,0.16f,0.7f,7,3,3}, {0.000f, 0,1.00f,0.0f,3,1,3} };
       int[] bandIndices   = new int[] { 0,1,1,1 };
       float[][] corners   = new float[][] { {0.06f,0.15f}, {0.06f,0.20f} };
       int[] cornerIndices = new int[] { 0,1,1,-1 };
@@ -333,14 +330,14 @@ public class TwistyHelicopter extends TwistyObject
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private Static4D getQuat(int cubit, int numLayers)
+  Static4D getQuat(int cubit, int numLayers)
     {
     return QUATS[QUAT_INDICES[cubit]];
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private int getNumCubitVariants(int numLayers)
+  int getNumCubitVariants(int numLayers)
     {
     return 2;
     }
@@ -352,34 +349,6 @@ public class TwistyHelicopter extends TwistyObject
     return cubit<8 ? 0:1;
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  MeshBase createCubitMesh(int cubit, int numLayers)
-    {
-    int variant = getCubitVariant(cubit,numLayers);
-
-    if( mMeshes==null )
-      {
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.clear();
-      mMeshes = new MeshBase[getNumCubitVariants(numLayers)];
-      }
-
-    if( mMeshes[variant]==null )
-      {
-      ObjectShape shape = getObjectShape(cubit,numLayers);
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.createNewFaceTransform(shape);
-      mMeshes[variant] = factory.createRoundedSolid(shape);
-      }
-
-    MeshBase mesh = mMeshes[variant].copy(true);
-    MatrixEffectQuaternion quat = new MatrixEffectQuaternion( getQuat(cubit,numLayers), new Static3D(0,0,0) );
-    mesh.apply(quat,0xffffffff,0);
-
-    return mesh;
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   int getFaceColor(int cubit, int cubitface, int size)
diff --git a/src/main/java/org/distorted/objects/TwistyIvy.java b/src/main/java/org/distorted/objects/TwistyIvy.java
index b503b5ce..f844f5e8 100644
--- a/src/main/java/org/distorted/objects/TwistyIvy.java
+++ b/src/main/java/org/distorted/objects/TwistyIvy.java
@@ -21,13 +21,10 @@ package org.distorted.objects;
 
 import android.content.res.Resources;
 
-import org.distorted.helpers.FactoryCubit;
 import org.distorted.helpers.ObjectShape;
 import org.distorted.helpers.ObjectSticker;
-import org.distorted.library.effect.MatrixEffectQuaternion;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
-import org.distorted.library.mesh.MeshBase;
 import org.distorted.library.mesh.MeshSquare;
 import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
@@ -359,7 +356,7 @@ public class TwistyIvy extends TwistyObject
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private Static4D getQuat(int cubit, int numLayers)
+  Static4D getQuat(int cubit, int numLayers)
     {
     switch(cubit)
       {
@@ -381,7 +378,7 @@ public class TwistyIvy extends TwistyObject
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private int getNumCubitVariants(int numLayers)
+  int getNumCubitVariants(int numLayers)
     {
     return 2;
     }
@@ -393,34 +390,6 @@ public class TwistyIvy extends TwistyObject
     return cubit<4 ? 0:1;
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  MeshBase createCubitMesh(int cubit, int numLayers)
-    {
-    int variant = getCubitVariant(cubit,numLayers);
-
-    if( mMeshes==null )
-      {
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.clear();
-      mMeshes = new MeshBase[getNumCubitVariants(numLayers)];
-      }
-
-    if( mMeshes[variant]==null )
-      {
-      ObjectShape shape = getObjectShape(cubit,numLayers);
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.createNewFaceTransform(shape);
-      mMeshes[variant] = factory.createRoundedSolid(shape);
-      }
-
-    MeshBase mesh = mMeshes[variant].copy(true);
-    MatrixEffectQuaternion quat = new MatrixEffectQuaternion( getQuat(cubit,numLayers), new Static3D(0,0,0) );
-    mesh.apply(quat,0xffffffff,0);
-
-    return mesh;
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   int getFaceColor(int cubit, int cubitface, int numLayers)
diff --git a/src/main/java/org/distorted/objects/TwistyJing.java b/src/main/java/org/distorted/objects/TwistyJing.java
index 56c5baa8..fb4917aa 100644
--- a/src/main/java/org/distorted/objects/TwistyJing.java
+++ b/src/main/java/org/distorted/objects/TwistyJing.java
@@ -21,13 +21,10 @@ package org.distorted.objects;
 
 import android.content.res.Resources;
 
-import org.distorted.helpers.FactoryCubit;
 import org.distorted.helpers.ObjectShape;
 import org.distorted.helpers.ObjectSticker;
-import org.distorted.library.effect.MatrixEffectQuaternion;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
-import org.distorted.library.mesh.MeshBase;
 import org.distorted.library.mesh.MeshSquare;
 import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
@@ -331,14 +328,14 @@ public class TwistyJing extends TwistyObject
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private Static4D getQuat(int cubit, int numLayers)
+  Static4D getQuat(int cubit, int numLayers)
     {
     return QUATS[ROT_QUAT[cubit]];
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private int getNumCubitVariants(int numLayers)
+  int getNumCubitVariants(int numLayers)
     {
     return 3;
     }
@@ -350,34 +347,6 @@ public class TwistyJing extends TwistyObject
     return cubit<4 ? 0 : (cubit<10?1:2);
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  MeshBase createCubitMesh(int cubit, int numLayers)
-    {
-    int variant = getCubitVariant(cubit,numLayers);
-
-    if( mMeshes==null )
-      {
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.clear();
-      mMeshes = new MeshBase[getNumCubitVariants(numLayers)];
-      }
-
-    if( mMeshes[variant]==null )
-      {
-      ObjectShape shape = getObjectShape(cubit,numLayers);
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.createNewFaceTransform(shape);
-      mMeshes[variant] = factory.createRoundedSolid(shape);
-      }
-
-    MeshBase mesh = mMeshes[variant].copy(true);
-    MatrixEffectQuaternion quat = new MatrixEffectQuaternion( getQuat(cubit,numLayers), new Static3D(0,0,0) );
-    mesh.apply(quat,0xffffffff,0);
-
-    return mesh;
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   int getColor(int face)
diff --git a/src/main/java/org/distorted/objects/TwistyKilominx.java b/src/main/java/org/distorted/objects/TwistyKilominx.java
index 9b628a86..f05d6e4d 100644
--- a/src/main/java/org/distorted/objects/TwistyKilominx.java
+++ b/src/main/java/org/distorted/objects/TwistyKilominx.java
@@ -21,16 +21,12 @@ package org.distorted.objects;
 
 import android.content.res.Resources;
 
-import org.distorted.helpers.FactoryCubit;
 import org.distorted.helpers.ObjectShape;
 import org.distorted.helpers.ObjectSticker;
 import org.distorted.helpers.QuatHelper;
-import org.distorted.library.effect.MatrixEffectQuaternion;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
-import org.distorted.library.mesh.MeshBase;
 import org.distorted.library.mesh.MeshSquare;
-import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
 import org.distorted.main.R;
 
@@ -539,7 +535,7 @@ public class TwistyKilominx extends TwistyMinx
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private Static4D getQuat(int cubit, int numLayers)
+  Static4D getQuat(int cubit, int numLayers)
     {
     int numCubitsPerCorner = numCubitsPerCorner(numLayers);
     int numCubitsPerEdge   = numCubitsPerEdge(numLayers);
@@ -549,7 +545,7 @@ public class TwistyKilominx extends TwistyMinx
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private int getNumCubitVariants(int numLayers)
+  int getNumCubitVariants(int numLayers)
     {
     int[] sizes = ObjectList.KILO.getSizes();
     int variants = sizes.length;
@@ -581,34 +577,6 @@ public class TwistyKilominx extends TwistyMinx
     return highestSize-2;
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  MeshBase createCubitMesh(int cubit, int numLayers)
-    {
-    int variant = getCubitVariant(cubit,numLayers);
-
-    if( mMeshes==null )
-      {
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.clear();
-      mMeshes = new MeshBase[getNumCubitVariants(numLayers)];
-      }
-
-    if( mMeshes[variant]==null )
-      {
-      ObjectShape shape = getObjectShape(cubit,numLayers);
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.createNewFaceTransform(shape);
-      mMeshes[variant] = factory.createRoundedSolid(shape);
-      }
-
-    MeshBase mesh = mMeshes[variant].copy(true);
-    MatrixEffectQuaternion quat = new MatrixEffectQuaternion( getQuat(cubit,numLayers), new Static3D(0,0,0) );
-    mesh.apply(quat,0xffffffff,0);
-
-    return mesh;
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   int getCornerColor(int cubit, int cubitface, int numLayers, int numCubitsPerCorner)
diff --git a/src/main/java/org/distorted/objects/TwistyMegaminx.java b/src/main/java/org/distorted/objects/TwistyMegaminx.java
index 6d40c350..319de7ee 100644
--- a/src/main/java/org/distorted/objects/TwistyMegaminx.java
+++ b/src/main/java/org/distorted/objects/TwistyMegaminx.java
@@ -21,16 +21,12 @@ package org.distorted.objects;
 
 import android.content.res.Resources;
 
-import org.distorted.helpers.FactoryCubit;
 import org.distorted.helpers.ObjectShape;
 import org.distorted.helpers.ObjectSticker;
 import org.distorted.helpers.QuatHelper;
-import org.distorted.library.effect.MatrixEffectQuaternion;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
-import org.distorted.library.mesh.MeshBase;
 import org.distorted.library.mesh.MeshSquare;
-import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
 import org.distorted.main.R;
 
@@ -450,7 +446,7 @@ public class TwistyMegaminx extends TwistyMinx
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private Static4D getQuat(int cubit, int numLayers)
+  Static4D getQuat(int cubit, int numLayers)
     {
     int numCubitsPerCorner = numCubitsPerCorner(numLayers);
     int numCubitsPerEdge   = numCubitsPerEdge(numLayers);
@@ -460,7 +456,7 @@ public class TwistyMegaminx extends TwistyMinx
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private int getNumCubitVariants(int numLayers)
+  int getNumCubitVariants(int numLayers)
     {
     int[] sizes = ObjectList.MEGA.getSizes();
     int variants = sizes.length;
@@ -491,34 +487,6 @@ public class TwistyMegaminx extends TwistyMinx
     return numShapes-1;
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  MeshBase createCubitMesh(int cubit, int numLayers)
-    {
-    int variant = getCubitVariant(cubit,numLayers);
-
-    if( mMeshes==null )
-      {
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.clear();
-      mMeshes = new MeshBase[getNumCubitVariants(numLayers)];
-      }
-
-    if( mMeshes[variant]==null )
-      {
-      ObjectShape shape = getObjectShape(cubit,numLayers);
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.createNewFaceTransform(shape);
-      mMeshes[variant] = factory.createRoundedSolid(shape);
-      }
-
-    MeshBase mesh = mMeshes[variant].copy(true);
-    MatrixEffectQuaternion quat = new MatrixEffectQuaternion( getQuat(cubit,numLayers), new Static3D(0,0,0) );
-    mesh.apply(quat,0xffffffff,0);
-
-    return mesh;
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   int getCornerColor(int cubit, int cubitface, int numLayers, int numCubitsPerCorner)
diff --git a/src/main/java/org/distorted/objects/TwistyMinx.java b/src/main/java/org/distorted/objects/TwistyMinx.java
index e5f6b934..85031d93 100644
--- a/src/main/java/org/distorted/objects/TwistyMinx.java
+++ b/src/main/java/org/distorted/objects/TwistyMinx.java
@@ -21,10 +21,8 @@ package org.distorted.objects;
 
 import android.content.res.Resources;
 
-import org.distorted.helpers.FactoryCubit;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
-import org.distorted.library.mesh.MeshBase;
 import org.distorted.library.mesh.MeshSquare;
 import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
diff --git a/src/main/java/org/distorted/objects/TwistyObject.java b/src/main/java/org/distorted/objects/TwistyObject.java
index 1792a179..7f4d0223 100644
--- a/src/main/java/org/distorted/objects/TwistyObject.java
+++ b/src/main/java/org/distorted/objects/TwistyObject.java
@@ -29,6 +29,7 @@ import com.google.firebase.crashlytics.FirebaseCrashlytics;
 
 import org.distorted.helpers.FactoryCubit;
 import org.distorted.helpers.FactorySticker;
+import org.distorted.helpers.ObjectShape;
 import org.distorted.helpers.ObjectSticker;
 import org.distorted.helpers.QuatHelper;
 import org.distorted.library.effect.Effect;
@@ -287,6 +288,34 @@ public abstract class TwistyObject extends DistortedNode
       }
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private MeshBase createCubitMesh(int cubit, int numLayers)
+    {
+    int variant = getCubitVariant(cubit,numLayers);
+
+    if( mMeshes==null )
+      {
+      FactoryCubit factory = FactoryCubit.getInstance();
+      factory.clear();
+      mMeshes = new MeshBase[getNumCubitVariants(numLayers)];
+      }
+
+    if( mMeshes[variant]==null )
+      {
+      ObjectShape shape = getObjectShape(cubit,numLayers);
+      FactoryCubit factory = FactoryCubit.getInstance();
+      factory.createNewFaceTransform(shape);
+      mMeshes[variant] = factory.createRoundedSolid(shape);
+      }
+
+    MeshBase mesh = mMeshes[variant].copy(true);
+    MatrixEffectQuaternion quat = new MatrixEffectQuaternion( getQuat(cubit,numLayers), new Static3D(0,0,0) );
+    mesh.apply(quat,0xffffffff,0);
+
+    return mesh;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public void setObjectRatio(float sizeChange)
@@ -974,13 +1003,16 @@ public abstract class TwistyObject extends DistortedNode
   abstract int getNumFaces();
   abstract int getNumStickerTypes(int numLayers);
   abstract int getNumCubitFaces();
-  abstract MeshBase createCubitMesh(int cubit, int numLayers);
   abstract ObjectSticker retSticker(int face);
   abstract int getColor(int face);
   abstract int getFaceColor(int cubit, int cubitface, int numLayers);
   abstract float returnMultiplier();
   abstract float[][] getCuts(int numLayers);
   abstract boolean shouldResetTextureMaps();
+  abstract int getCubitVariant(int cubit, int numLayers);
+  abstract int getNumCubitVariants(int numLayers);
+  abstract Static4D getQuat(int cubit, int numLayers);
+  abstract ObjectShape getObjectShape(int cubit, int numLayers);
 
   public abstract Static3D[] getRotationAxis();
   public abstract boolean isSolved();
diff --git a/src/main/java/org/distorted/objects/TwistyPyraminx.java b/src/main/java/org/distorted/objects/TwistyPyraminx.java
index fa140edc..4a70cce0 100644
--- a/src/main/java/org/distorted/objects/TwistyPyraminx.java
+++ b/src/main/java/org/distorted/objects/TwistyPyraminx.java
@@ -21,13 +21,10 @@ package org.distorted.objects;
 
 import android.content.res.Resources;
 
-import org.distorted.helpers.FactoryCubit;
 import org.distorted.helpers.ObjectShape;
 import org.distorted.helpers.ObjectSticker;
-import org.distorted.library.effect.MatrixEffectQuaternion;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
-import org.distorted.library.mesh.MeshBase;
 import org.distorted.library.mesh.MeshSquare;
 import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
@@ -336,14 +333,14 @@ public class TwistyPyraminx extends TwistyObject
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private Static4D getQuat(int cubit, int numLayers)
+  Static4D getQuat(int cubit, int numLayers)
     {
     return QUATS[0];
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private int getNumCubitVariants(int numLayers)
+  int getNumCubitVariants(int numLayers)
     {
     return 2;
     }
@@ -355,34 +352,6 @@ public class TwistyPyraminx extends TwistyObject
     return cubit<getNumOctahedrons(numLayers) ? 0:1;
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  MeshBase createCubitMesh(int cubit, int numLayers)
-    {
-    int variant = getCubitVariant(cubit,numLayers);
-
-    if( mMeshes==null )
-      {
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.clear();
-      mMeshes = new MeshBase[getNumCubitVariants(numLayers)];
-      }
-
-    if( mMeshes[variant]==null )
-      {
-      ObjectShape shape = getObjectShape(cubit,numLayers);
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.createNewFaceTransform(shape);
-      mMeshes[variant] = factory.createRoundedSolid(shape);
-      }
-
-    MeshBase mesh = mMeshes[variant].copy(true);
-    MatrixEffectQuaternion quat = new MatrixEffectQuaternion( getQuat(cubit,numLayers), new Static3D(0,0,0) );
-    mesh.apply(quat,0xffffffff,0);
-
-    return mesh;
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   int getColor(int face)
diff --git a/src/main/java/org/distorted/objects/TwistyRedi.java b/src/main/java/org/distorted/objects/TwistyRedi.java
index 14fa8c58..f9b5bf18 100644
--- a/src/main/java/org/distorted/objects/TwistyRedi.java
+++ b/src/main/java/org/distorted/objects/TwistyRedi.java
@@ -21,13 +21,10 @@ package org.distorted.objects;
 
 import android.content.res.Resources;
 
-import org.distorted.helpers.FactoryCubit;
 import org.distorted.helpers.ObjectShape;
 import org.distorted.helpers.ObjectSticker;
-import org.distorted.library.effect.MatrixEffectQuaternion;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
-import org.distorted.library.mesh.MeshBase;
 import org.distorted.library.mesh.MeshSquare;
 import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
@@ -314,7 +311,7 @@ public class TwistyRedi extends TwistyObject
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private Static4D getQuat(int cubit, int numLayers)
+  Static4D getQuat(int cubit, int numLayers)
     {
     switch(cubit)
       {
@@ -346,7 +343,7 @@ public class TwistyRedi extends TwistyObject
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private int getNumCubitVariants(int numLayers)
+  int getNumCubitVariants(int numLayers)
     {
     return 2;
     }
@@ -358,34 +355,6 @@ public class TwistyRedi extends TwistyObject
     return cubit<8 ? 0:1;
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  MeshBase createCubitMesh(int cubit, int numLayers)
-    {
-    int variant = getCubitVariant(cubit,numLayers);
-
-    if( mMeshes==null )
-      {
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.clear();
-      mMeshes = new MeshBase[getNumCubitVariants(numLayers)];
-      }
-
-    if( mMeshes[variant]==null )
-      {
-      ObjectShape shape = getObjectShape(cubit,numLayers);
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.createNewFaceTransform(shape);
-      mMeshes[variant] = factory.createRoundedSolid(shape);
-      }
-
-    MeshBase mesh = mMeshes[variant].copy(true);
-    MatrixEffectQuaternion quat = new MatrixEffectQuaternion( getQuat(cubit,numLayers), new Static3D(0,0,0) );
-    mesh.apply(quat,0xffffffff,0);
-
-    return mesh;
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   int getFaceColor(int cubit, int cubitface, int size)
diff --git a/src/main/java/org/distorted/objects/TwistyRex.java b/src/main/java/org/distorted/objects/TwistyRex.java
index 64e73926..162968c6 100644
--- a/src/main/java/org/distorted/objects/TwistyRex.java
+++ b/src/main/java/org/distorted/objects/TwistyRex.java
@@ -21,13 +21,10 @@ package org.distorted.objects;
 
 import android.content.res.Resources;
 
-import org.distorted.helpers.FactoryCubit;
 import org.distorted.helpers.ObjectShape;
 import org.distorted.helpers.ObjectSticker;
-import org.distorted.library.effect.MatrixEffectQuaternion;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
-import org.distorted.library.mesh.MeshBase;
 import org.distorted.library.mesh.MeshSquare;
 import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
@@ -357,7 +354,7 @@ public class TwistyRex extends TwistyObject
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private Static4D getQuat(int cubit, int numLayers)
+  Static4D getQuat(int cubit, int numLayers)
     {
     switch(cubit)
       {
@@ -412,7 +409,7 @@ public class TwistyRex extends TwistyObject
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private int getNumCubitVariants(int numLayers)
+  int getNumCubitVariants(int numLayers)
     {
     return 3;
     }
@@ -424,34 +421,6 @@ public class TwistyRex extends TwistyObject
     return cubit<24 ? 0 : (cubit<30?1:2);
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  MeshBase createCubitMesh(int cubit, int numLayers)
-    {
-    int variant = getCubitVariant(cubit,numLayers);
-
-    if( mMeshes==null )
-      {
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.clear();
-      mMeshes = new MeshBase[getNumCubitVariants(numLayers)];
-      }
-
-    if( mMeshes[variant]==null )
-      {
-      ObjectShape shape = getObjectShape(cubit,numLayers);
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.createNewFaceTransform(shape);
-      mMeshes[variant] = factory.createRoundedSolid(shape);
-      }
-
-    MeshBase mesh = mMeshes[variant].copy(true);
-    MatrixEffectQuaternion quat = new MatrixEffectQuaternion( getQuat(cubit,numLayers), new Static3D(0,0,0) );
-    mesh.apply(quat,0xffffffff,0);
-
-    return mesh;
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   int getFaceColor(int cubit, int cubitface, int numLayers)
diff --git a/src/main/java/org/distorted/objects/TwistySkewb.java b/src/main/java/org/distorted/objects/TwistySkewb.java
index 2228f480..0b71b84a 100644
--- a/src/main/java/org/distorted/objects/TwistySkewb.java
+++ b/src/main/java/org/distorted/objects/TwistySkewb.java
@@ -407,7 +407,7 @@ public class TwistySkewb extends TwistyObject
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private Static4D getQuat(int cubit, int numLayers)
+  Static4D getQuat(int cubit, int numLayers)
     {
     int numCorners = getNumCorners();
     int numEdges   = getNumEdges(numLayers);
@@ -475,58 +475,43 @@ public class TwistySkewb extends TwistyObject
       int N = numLayers==2 ? 7:5;
       int E1= numLayers==2 ? 3:2;
       int E2= numLayers==2 ? 5:3;
-      float[][] bands= new float[][]
-          {
-             {0.028f,35,0.16f,0.7f,N,E1,E1},
-             {0.000f, 0,1.00f,0.0f,3, 1,E2}
-          };
+      float[][] bands     = new float[][] { {0.028f,35,0.16f,0.7f,N,E1,E1}, {0.000f, 0,1.00f,0.0f,3,1,E2} };
       int[] bandIndices   = new int[] { 0,0,0,1,1,1 };
       float[][] corners   = new float[][] { {0.08f,0.15f}, {0.08f,0.20f} };
       int[] cornerIndices = new int[] { 1,1,1,0,0 };
       float[][] centers   = new float[][] { {-0.25f, -0.25f, -0.25f} };
       int[] centerIndices = new int[] { 0,0,0,-1,0 };
-
       return new ObjectShape(VERTICES_CORNER,VERT_INDEXES_CORNER,bands,bandIndices,corners,cornerIndices,centers,centerIndices,getNumCubitFaces(), null);
       }
     else if( variant==1 )
       {
       int N = numLayers==2 ? 7:5;
       int E = numLayers==2 ? 5:2;
-      float[][] bands= new float[][]
-          {
-             {0.035f,30,0.16f,0.8f,N,2,E},
-             {0.020f,45,0.16f,0.2f,3,1,2}
-          };
+      float[][] bands     = new float[][] { {0.035f,30,0.16f,0.8f,N,2,E}, {0.020f,45,0.16f,0.2f,3,1,2} };
       int[] bandIndices   = new int[] { 0,0,1,1 };
       float[][] corners   = new float[][] { {0.07f,0.20f}, {0.02f,0.30f} };
       int[] cornerIndices = new int[] { 0,0,1,1 };
       float[][] centers   = new float[][] { {0.0f, -0.25f, -0.25f} };
       int[] centerIndices = new int[] { 0,0,0,0 };
-
       return new ObjectShape(VERTICES_EDGE,VERT_INDEXES_EDGE,bands,bandIndices,corners,cornerIndices,centers,centerIndices,getNumCubitFaces(), null);
       }
     else
       {
       int N = numLayers==2 ? 7:6;
       int E = numLayers==2 ? 3:1;
-      float[][] bands= new float[][]
-          {
-             {0.051f,35,SQ2/8,0.9f, N,E,E},
-             {0.000f, 0,    1,0.0f, 3,0,0}
-          };
+      float[][] bands     = new float[][] { {0.051f,35,SQ2/8,0.9f,N,E,E}, {0.000f,0,1,0.0f,3,0,0} };
       int[] bandIndices   = new int[] { 0,1,1,1,1 };
       float[][] corners   = new float[][] { {0.06f,0.10f} };
       int[] cornerIndices = new int[] { 0,0,0,0,0 };
       float[][] centers   = new float[][] { {0,0,-0.2f} };
       int[] centerIndices = new int[] { 0,0,0,0,-1 };
-
       return new ObjectShape(VERTICES_FACE,VERT_INDEXES_FACE,bands,bandIndices,corners,cornerIndices,centers,centerIndices,getNumCubitFaces(), null);
       }
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private int getNumCubitVariants(int numLayers)
+  int getNumCubitVariants(int numLayers)
     {
     return 3;
     }
@@ -541,34 +526,6 @@ public class TwistySkewb extends TwistyObject
     return cubit<numCorners+numEdges ? 1:2;
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  MeshBase createCubitMesh(int cubit, int numLayers)
-    {
-    int variant = getCubitVariant(cubit,numLayers);
-
-    if( mMeshes==null )
-      {
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.clear();
-      mMeshes = new MeshBase[getNumCubitVariants(numLayers)];
-      }
-
-    if( mMeshes[variant]==null )
-      {
-      ObjectShape shape = getObjectShape(cubit,numLayers);
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.createNewFaceTransform(shape);
-      mMeshes[variant] = factory.createRoundedSolid(shape);
-      }
-
-    MeshBase mesh = mMeshes[variant].copy(true);
-    MatrixEffectQuaternion quat = new MatrixEffectQuaternion( getQuat(cubit,numLayers), new Static3D(0,0,0) );
-    mesh.apply(quat,0xffffffff,0);
-
-    return mesh;
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   int getFaceColor(int cubit, int cubitface, int numLayers)
diff --git a/src/main/java/org/distorted/objects/TwistySquare.java b/src/main/java/org/distorted/objects/TwistySquare.java
index 2f57d319..957c98ab 100644
--- a/src/main/java/org/distorted/objects/TwistySquare.java
+++ b/src/main/java/org/distorted/objects/TwistySquare.java
@@ -21,10 +21,8 @@ package org.distorted.objects;
 
 import android.content.res.Resources;
 
-import org.distorted.helpers.FactoryCubit;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
-import org.distorted.library.mesh.MeshBase;
 import org.distorted.library.mesh.MeshSquare;
 import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
diff --git a/src/main/java/org/distorted/objects/TwistySquare1.java b/src/main/java/org/distorted/objects/TwistySquare1.java
index 0ef0a6a8..77d84ecd 100644
--- a/src/main/java/org/distorted/objects/TwistySquare1.java
+++ b/src/main/java/org/distorted/objects/TwistySquare1.java
@@ -21,15 +21,11 @@ package org.distorted.objects;
 
 import android.content.res.Resources;
 
-import org.distorted.helpers.FactoryCubit;
 import org.distorted.helpers.ObjectShape;
 import org.distorted.helpers.ObjectSticker;
-import org.distorted.library.effect.MatrixEffectQuaternion;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
-import org.distorted.library.mesh.MeshBase;
 import org.distorted.library.mesh.MeshSquare;
-import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
 import org.distorted.main.R;
 
@@ -223,14 +219,14 @@ class TwistySquare1 extends TwistySquare
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private Static4D getQuat(int cubit, int numLayers)
+  Static4D getQuat(int cubit, int numLayers)
     {
     return QUATS[QUAT_NUMBER[cubit]];
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private int getNumCubitVariants(int numLayers)
+  int getNumCubitVariants(int numLayers)
     {
     return 3;
     }
@@ -242,34 +238,6 @@ class TwistySquare1 extends TwistySquare
     return cubit<2 ? 0 : (cubit<10 ? 1:2);
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  MeshBase createCubitMesh(int cubit, int numLayers)
-    {
-    int variant = getCubitVariant(cubit,numLayers);
-
-    if( mMeshes==null )
-      {
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.clear();
-      mMeshes = new MeshBase[getNumCubitVariants(numLayers)];
-      }
-
-    if( mMeshes[variant]==null )
-      {
-      ObjectShape shape = getObjectShape(cubit,numLayers);
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.createNewFaceTransform(shape);
-      mMeshes[variant] = factory.createRoundedSolid(shape);
-      }
-
-    MeshBase mesh = mMeshes[variant].copy(true);
-    MatrixEffectQuaternion quat = new MatrixEffectQuaternion( getQuat(cubit,numLayers), new Static3D(0,0,0) );
-    mesh.apply(quat,0xffffffff,0);
-
-    return mesh;
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   ObjectSticker retSticker(int face)
diff --git a/src/main/java/org/distorted/objects/TwistySquare2.java b/src/main/java/org/distorted/objects/TwistySquare2.java
index b3cc18f7..d50aee71 100644
--- a/src/main/java/org/distorted/objects/TwistySquare2.java
+++ b/src/main/java/org/distorted/objects/TwistySquare2.java
@@ -21,15 +21,11 @@ package org.distorted.objects;
 
 import android.content.res.Resources;
 
-import org.distorted.helpers.FactoryCubit;
 import org.distorted.helpers.ObjectShape;
 import org.distorted.helpers.ObjectSticker;
-import org.distorted.library.effect.MatrixEffectQuaternion;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
-import org.distorted.library.mesh.MeshBase;
 import org.distorted.library.mesh.MeshSquare;
-import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
 import org.distorted.main.R;
 
@@ -199,7 +195,6 @@ class TwistySquare2 extends TwistySquare
       int[] cornerIndices = new int[] { 0,0,0,0,0,0,0,0 };
       float[][] centers   = new float[][] { { -0.75f, 0.0f, 0.0f} };
       int[] centerIndices = new int[] { 0,0,0,0,0,0,0,0 };
-
       return new ObjectShape(VERTICES_MIDDLE,VERT_INDEXES_MIDDLE,bands,bandIndices,corners,cornerIndices,centers,centerIndices,getNumCubitFaces(), null);
       }
     else if( variant==1 )
@@ -210,7 +205,6 @@ class TwistySquare2 extends TwistySquare
       int[] cornerIndices = new int[] { 0,0,-1,0,0,-1 };
       float[][] centers   = new float[][] { { 0.0f, 0.0f,-0.5f} };
       int[] centerIndices = new int[] { 0,0,-1,0,0,-1 };
-
       return new ObjectShape(VERTICES_EDGE,VERT_INDEXES_EDGE,bands,bandIndices,corners,cornerIndices,centers,centerIndices,getNumCubitFaces(), null);
       }
     else
@@ -221,21 +215,20 @@ class TwistySquare2 extends TwistySquare
       int[] cornerIndices = new int[] { 0,0,-1,0,0,-1 };
       float[][] centers   = new float[][] { { 0.0f, 0.0f,-0.5f} };
       int[] centerIndices = new int[] { 0,0,-1,0,0,-1 };
-
       return new ObjectShape(VERTICES_CORNER,VERT_INDEXES_CORNER,bands,bandIndices,corners,cornerIndices,centers,centerIndices,getNumCubitFaces(), null);
       }
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private Static4D getQuat(int cubit, int numLayers)
+  Static4D getQuat(int cubit, int numLayers)
     {
     return QUATS[QUAT_NUMBER[cubit]];
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private int getNumCubitVariants(int numLayers)
+  int getNumCubitVariants(int numLayers)
     {
     return 3;
     }
@@ -247,34 +240,6 @@ class TwistySquare2 extends TwistySquare
     return cubit<2 ? 0 : (cubit<10 ? 1:2);
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  MeshBase createCubitMesh(int cubit, int numLayers)
-    {
-    int variant = getCubitVariant(cubit,numLayers);
-
-    if( mMeshes==null )
-      {
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.clear();
-      mMeshes = new MeshBase[getNumCubitVariants(numLayers)];
-      }
-
-    if( mMeshes[variant]==null )
-      {
-      ObjectShape shape = getObjectShape(cubit,numLayers);
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.createNewFaceTransform(shape);
-      mMeshes[variant] = factory.createRoundedSolid(shape);
-      }
-
-    MeshBase mesh = mMeshes[variant].copy(true);
-    MatrixEffectQuaternion quat = new MatrixEffectQuaternion( getQuat(cubit,numLayers), new Static3D(0,0,0) );
-    mesh.apply(quat,0xffffffff,0);
-
-    return mesh;
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   ObjectSticker retSticker(int face)
diff --git a/src/main/java/org/distorted/objects/TwistyUltimate.java b/src/main/java/org/distorted/objects/TwistyUltimate.java
index cd9c2f8e..3f96ddf9 100644
--- a/src/main/java/org/distorted/objects/TwistyUltimate.java
+++ b/src/main/java/org/distorted/objects/TwistyUltimate.java
@@ -21,13 +21,10 @@ package org.distorted.objects;
 
 import android.content.res.Resources;
 
-import org.distorted.helpers.FactoryCubit;
 import org.distorted.helpers.ObjectShape;
 import org.distorted.helpers.ObjectSticker;
-import org.distorted.library.effect.MatrixEffectQuaternion;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
-import org.distorted.library.mesh.MeshBase;
 import org.distorted.library.mesh.MeshSquare;
 import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
@@ -257,7 +254,6 @@ class TwistyUltimate extends TwistyObject
       int[] cornerIndices = new int[] { 0, 0, 0, 0,-1, 0, 0, 0 };
       float[][] centers   = new float[][] { { 0.0f,-0.5f, -(SQ5+3)/4 } };
       int[] centerIndices = new int[] { 0,0,0,0,0,0,0,0 };
-
       return new ObjectShape(VERTICES_SMALL_RIGHT,VERT_INDEXES_SMALL_RIGHT,bands,bandIndices,corners,cornerIndices,centers,centerIndices,getNumCubitFaces(), null);
       }
     else if( variant==1 )
@@ -284,14 +280,14 @@ class TwistyUltimate extends TwistyObject
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private Static4D getQuat(int cubit, int numLayers)
+  Static4D getQuat(int cubit, int numLayers)
     {
     return QUATS[QUAT_INDEX[cubit]];
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private int getNumCubitVariants(int numLayers)
+  int getNumCubitVariants(int numLayers)
     {
     return 3;
     }
@@ -303,34 +299,6 @@ class TwistyUltimate extends TwistyObject
     return cubit<4 ? 0 : (cubit<8 ? 1:2);
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  MeshBase createCubitMesh(int cubit, int numLayers)
-    {
-    int variant = getCubitVariant(cubit,numLayers);
-
-    if( mMeshes==null )
-      {
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.clear();
-      mMeshes = new MeshBase[getNumCubitVariants(numLayers)];
-      }
-
-    if( mMeshes[variant]==null )
-      {
-      ObjectShape shape = getObjectShape(cubit,numLayers);
-      FactoryCubit factory = FactoryCubit.getInstance();
-      factory.createNewFaceTransform(shape);
-      mMeshes[variant] = factory.createRoundedSolid(shape);
-      }
-
-    MeshBase mesh = mMeshes[variant].copy(true);
-    MatrixEffectQuaternion quat = new MatrixEffectQuaternion( getQuat(cubit,numLayers), new Static3D(0,0,0) );
-    mesh.apply(quat,0xffffffff,0);
-
-    return mesh;
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   float[][] getCubitPositions(int numLayers)
