commit 7589635eb9d37cf1e5c364178ba819c196d236f7
Author: Leszek Koltunski <leszek@distorted.org>
Date:   Thu Jun 16 01:44:59 2016 +0100

    Major push towards simplifying DistortedObject's public API.
    All MATRIX effects are using the new API - the 'DataND' marker interfaces.

diff --git a/src/main/java/org/distorted/examples/bean/BeanRenderer.java b/src/main/java/org/distorted/examples/bean/BeanRenderer.java
index 803737e..63b13ff 100644
--- a/src/main/java/org/distorted/examples/bean/BeanRenderer.java
+++ b/src/main/java/org/distorted/examples/bean/BeanRenderer.java
@@ -28,11 +28,12 @@ import javax.microedition.khronos.opengles.GL10;
 import org.distorted.examples.R;
 
 import org.distorted.library.EffectTypes;
-import org.distorted.library.type.Interpolator2D;
+import org.distorted.library.type.Dynamic2D;
 import org.distorted.library.Distorted;
 import org.distorted.library.DistortedBitmap;
-import org.distorted.library.type.Float2D;
-import org.distorted.library.type.Float4D;
+import org.distorted.library.type.Static2D;
+import org.distorted.library.type.Static3D;
+import org.distorted.library.type.Static4D;
 
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
@@ -45,9 +46,9 @@ class BeanRenderer implements GLSurfaceView.Renderer
 {
    private GLSurfaceView mView;
    private DistortedBitmap mBean;
-   private Float2D pLeft, pRight;
-   private Interpolator2D iLeft, iRight;
-   private Float4D rLeft, rRight;
+   private Static2D pLeft, pRight;
+   private Dynamic2D iLeft, iRight;
+   private Static4D rLeft, rRight;
    private int bmpHeight, bmpWidth;
     
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -56,22 +57,22 @@ class BeanRenderer implements GLSurfaceView.Renderer
       {
       mView = v;
      
-      pLeft = new Float2D(100, 199);
-      pRight= new Float2D(230, 150);
+      pLeft = new Static2D(100, 199);
+      pRight= new Static2D(230, 150);
       
-      rLeft = new Float4D(-9,-31,35,35);
-      rRight= new Float4D(-9,-31,35,35);
+      rLeft = new Static4D(-9,-31,35,35);
+      rRight= new Static4D(-9,-31,35,35);
      
-      iLeft = new Interpolator2D();
-      iRight= new Interpolator2D();
+      iLeft = new Dynamic2D();
+      iRight= new Dynamic2D();
      
       iLeft.setCount(0.0f);
       iRight.setCount(0.0f);
       iLeft.setDuration(1500);
       iRight.setDuration(1500);
       
-      Float2D p1 = new Float2D(0,0);
-      Float2D p2 = new Float2D(-10,-34);
+      Static2D p1 = new Static2D(0,0);
+      Static2D p2 = new Static2D(-10,-34);
       
       iLeft.add(p1);
       iLeft.add(p1);
@@ -107,14 +108,18 @@ class BeanRenderer implements GLSurfaceView.Renderer
       if( bmpHeight/bmpWidth > height/width )
         {
         int w = (height*bmpWidth)/bmpHeight;
-        mBean.move((width-w)/2 ,0, 0);
-        mBean.scale((float)height/bmpHeight);
+        float factor = (float)height/bmpHeight;
+
+        mBean.move( new Static3D((width-w)/2,0,0) );
+        mBean.scale( new Static3D(factor,factor,factor) );
         }
       else
         {
         int h = (width*bmpHeight)/bmpWidth;
-        mBean.move(0 ,(height-h)/2, 0);
-        mBean.scale((float)width/bmpWidth);
+        float factor = (float)width/bmpWidth;
+
+        mBean.move( new Static3D(0,(height-h)/2,0) );
+        mBean.scale( new Static3D(factor,factor,factor) );
         }
       
       Distorted.onSurfaceChanged(width, height); 
diff --git a/src/main/java/org/distorted/examples/check/CheckRenderer.java b/src/main/java/org/distorted/examples/check/CheckRenderer.java
index 38ff375..87dd72a 100644
--- a/src/main/java/org/distorted/examples/check/CheckRenderer.java
+++ b/src/main/java/org/distorted/examples/check/CheckRenderer.java
@@ -30,12 +30,12 @@ import org.distorted.examples.R;
 import org.distorted.library.Distorted;
 import org.distorted.library.DistortedBitmap;
 import org.distorted.library.EffectTypes;
-import org.distorted.library.type.Float1D;
-import org.distorted.library.type.Float2D;
-import org.distorted.library.type.Float3D;
-import org.distorted.library.type.Float4D;
-import org.distorted.library.type.Interpolator1D;
-import org.distorted.library.type.Interpolator2D;
+import org.distorted.library.type.Static1D;
+import org.distorted.library.type.Static2D;
+import org.distorted.library.type.Static3D;
+import org.distorted.library.type.Static4D;
+import org.distorted.library.type.Dynamic1D;
+import org.distorted.library.type.Dynamic2D;
 
 import android.app.AlertDialog;
 import android.content.Context;
@@ -85,14 +85,18 @@ class CheckRenderer implements GLSurfaceView.Renderer
       if( bmpHeight/bmpWidth > height/width )
         {
         int w = (height*bmpWidth)/bmpHeight;
-        mSuccess.move((width-w)/2 ,0, 0);
-        mSuccess.scale((float)height/bmpHeight);
+        float factor = (float)height/bmpHeight;
+
+        mSuccess.move( new Static3D((width-w)/2,0,0) );
+        mSuccess.scale( new Static3D(factor,factor,factor) );
         }
       else
         {
         int h = (width*bmpHeight)/bmpWidth;
-        mSuccess.move(0 ,(height-h)/2, 0);
-        mSuccess.scale((float)width/bmpWidth);
+        float factor = (float)width/bmpWidth;
+
+        mSuccess.move( new Static3D(0,(height-h)/2,0) );
+        mSuccess.scale( new Static3D(factor,factor,factor) );
         }
       
       Distorted.onSurfaceChanged(width, height);
@@ -128,28 +132,28 @@ class CheckRenderer implements GLSurfaceView.Renderer
       //
       // Even if adding some of the Effects fails, the App will still start - you just won't see
       // the effects that failed to add.
-      Float2D pDown   = new Float2D(bmpWidth/2,   0);
-      Float3D vDown   = new Float3D( 0,-bmpHeight,0);
-      Float4D mRegion = new Float4D( 0, 0, 40 ,40 );
+      Static2D pDown   = new Static2D(bmpWidth/2,   0);
+      Static3D vDown   = new Static3D( 0,-bmpHeight,0);
+      Static4D mRegion = new Static4D( 0, 0, 40 ,40 );
 
-      Interpolator2D mPoint = new Interpolator2D();
+      Dynamic2D mPoint = new Dynamic2D();
       mPoint.setCount(0.0f);
       mPoint.setDuration(2000);
-      mPoint.add(new Float2D(        0, bmpHeight/2));
-      mPoint.add(new Float2D( bmpWidth, bmpHeight/2));
+      mPoint.add(new Static2D(        0, bmpHeight/2));
+      mPoint.add(new Static2D( bmpWidth, bmpHeight/2));
 
       mSuccess.swirl( 30, mRegion, mPoint );
       mSuccess.deform(vDown, pDown, 2000, 0.0f);
 
       // Now try adding 1 Fragment Effect. Likewise, will fail if maxFragmentEffects is <1.
-      Float3D color = new Float3D(1,0,0);
-      Interpolator1D inter = new Interpolator1D();
+      Static3D color = new Static3D(1,0,0);
+      Dynamic1D inter = new Dynamic1D();
       inter.setCount(0.0f);
       inter.setDuration(2000);
-      inter.add(new Float1D(0));
-      inter.add(new Float1D(1));
+      inter.add(new Static1D(0));
+      inter.add(new Static1D(1));
 
-      mSuccess.chroma(inter, color, null, new Float2D(0,0) );
+      mSuccess.chroma(inter, color, null, new Static2D(0,0) );
 
       try
         {
diff --git a/src/main/java/org/distorted/examples/cubes/CubesRenderer.java b/src/main/java/org/distorted/examples/cubes/CubesRenderer.java
index d72cb2b..889a206 100644
--- a/src/main/java/org/distorted/examples/cubes/CubesRenderer.java
+++ b/src/main/java/org/distorted/examples/cubes/CubesRenderer.java
@@ -28,10 +28,10 @@ import javax.microedition.khronos.opengles.GL10;
 import org.distorted.examples.R;
 
 import org.distorted.library.EffectTypes;
-import org.distorted.library.type.InterpolatorQuat;
+import org.distorted.library.type.DynamicQuat;
 import org.distorted.library.DistortedCubes;
-import org.distorted.library.type.Float4D;
-import org.distorted.library.type.Float3D;
+import org.distorted.library.type.Static4D;
+import org.distorted.library.type.Static3D;
 import org.distorted.library.Distorted;
 
 import android.graphics.Bitmap;
@@ -49,9 +49,9 @@ class CubesRenderer implements GLSurfaceView.Renderer
 	
     private GLSurfaceView mView;
     private DistortedCubes mCubes;
-    private InterpolatorQuat mQuatInt1, mQuatInt2;
+    private DynamicQuat mQuatInt1, mQuatInt2;
     
-    Float4D mQuat1, mQuat2;
+    Static4D mQuat1, mQuat2;
     int mScreenMin;
     
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -67,11 +67,11 @@ class CubesRenderer implements GLSurfaceView.Renderer
       
       mCubes = new DistortedCubes( mCols, shape, SIZE);
       
-      mQuat1 = new Float4D(0,0,0,1);  // unity
-      mQuat2 = new Float4D(0,0,0,1);  // quaternions
+      mQuat1 = new Static4D(0,0,0,1);  // unity
+      mQuat2 = new Static4D(0,0,0,1);  // quaternions
       
-      mQuatInt1 = new InterpolatorQuat();
-      mQuatInt2 = new InterpolatorQuat();
+      mQuatInt1 = new DynamicQuat();
+      mQuatInt2 = new DynamicQuat();
       mQuatInt1.setDuration(0);
       mQuatInt2.setDuration(0);
       mQuatInt1.setCount(0.5f);
@@ -102,17 +102,21 @@ class CubesRenderer implements GLSurfaceView.Renderer
       if( mRows/mCols > height/width )
         {
         int w = (height*mRows)/mCols;
-        mCubes.move((width-w)/2 ,0, 0);
-        mCubes.scale((float)height/(mRows*SIZE));
+        float factor = (float)height/(mRows*SIZE);
+
+        mCubes.move( new Static3D((width-w)/2,0,0) );
+        mCubes.scale( new Static3D(factor,factor,factor) );
         }  
       else
         {   
         int h = (width*mRows)/mCols;
-        mCubes.move(0 ,(height-h)/2, 0);
-        mCubes.scale((float)width/(mCols*SIZE));
+        float factor = (float)width/(mCols*SIZE);
+
+        mCubes.move( new Static3D(0,(height-h)/2,0) );
+        mCubes.scale( new Static3D(factor,factor,factor) );
         }
     
-      Float3D center = new Float3D(mCols*SIZE/2,mRows*SIZE/2, 0);
+      Static3D center = new Static3D(mCols*SIZE/2,mRows*SIZE/2, 0);
       
       mCubes.quaternion(center, mQuatInt1);
       mCubes.quaternion(center, mQuatInt2);
diff --git a/src/main/java/org/distorted/examples/deform/DeformRenderer.java b/src/main/java/org/distorted/examples/deform/DeformRenderer.java
index 1c03708..85a15f3 100644
--- a/src/main/java/org/distorted/examples/deform/DeformRenderer.java
+++ b/src/main/java/org/distorted/examples/deform/DeformRenderer.java
@@ -25,9 +25,9 @@ import javax.microedition.khronos.opengles.GL10;
 import org.distorted.library.Distorted;
 import org.distorted.library.DistortedBitmap;
 import org.distorted.library.EffectTypes;
-import org.distorted.library.type.Interpolator2D;
-import org.distorted.library.type.Float3D;
-import org.distorted.library.type.Float4D;
+import org.distorted.library.type.Dynamic3D;
+import org.distorted.library.type.Static3D;
+import org.distorted.library.type.Static4D;
 
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
@@ -51,10 +51,11 @@ class DeformRenderer implements GLSurfaceView.Renderer
    private GLSurfaceView mView;
    private DistortedBitmap fps;
    private DistortedBitmap stretch;
-   private Float3D touchPoint;
-   private static Interpolator2D di;
-   private static Float3D[] v;
-   private static Float4D dr;
+   private Static3D touchPoint;
+   private static Dynamic3D mReleasedDynamic;
+   private static Dynamic3D mMovingDynamic;
+   private static Static3D[] v;
+   private static Static4D dr;
    private Canvas fpsCanvas;
    private Bitmap fpsBitmap, stretchBitmap;
    private int scrHeight, scrWidth;
@@ -75,21 +76,28 @@ class DeformRenderer implements GLSurfaceView.Renderer
       { 
       mView = view;
       
-      dr = new Float4D(0,0,0,0);
+      dr = new Static4D(0,0,0,0);
      
-      di = new Interpolator2D();
-      di.setMode(Interpolator2D.MODE_PATH);
-      di.setCount(0.5f);
-      di.setDuration(NUM_VECTORS*500);
-      
-      v = new Float3D[NUM_VECTORS];
-      
+      mReleasedDynamic = new Dynamic3D();
+      mReleasedDynamic.setMode(Dynamic3D.MODE_PATH);
+      mReleasedDynamic.setCount(0.5f);
+      mReleasedDynamic.setDuration(NUM_VECTORS*500);
+
+      mMovingDynamic = new Dynamic3D();
+      mMovingDynamic.setMode(Dynamic3D.MODE_PATH);
+      mMovingDynamic.setCount(0.5f);
+      mMovingDynamic.setDuration(0);
+
+      v = new Static3D[NUM_VECTORS];
+
       for(int i=0; i<NUM_VECTORS; i++)
         {
-        v[i] = new Float3D(0,0,0);  
-        di.add(v[i]);
+        v[i] = new Static3D(0,0,0);
+        mReleasedDynamic.add(v[i]);
         }
-      
+
+      mMovingDynamic.add(v[0]);
+
       durations = new long[NUMFRAMES+1];
       currDuration = 0;
       
@@ -154,8 +162,8 @@ class DeformRenderer implements GLSurfaceView.Renderer
       if( bitmapCreated==false )
         {
         createBitmap(scrWidth/2,scrHeight/2);
-        stretch.move(scrWidth/4,scrHeight/4,0);
-        fps.move(5,5,0);
+        stretch.move( new Static3D(scrWidth/4,scrHeight/4,0) );
+        fps.move( new Static3D(5,5,0) );
         bitmapCreated=true;
         }
       else
@@ -208,7 +216,7 @@ class DeformRenderer implements GLSurfaceView.Renderer
         stretchCanvas.drawRect(               0, h *i/NUMLINES -1,  w               ,  h*i/NUMLINES + 1, mPaint);  
         }
         
-      touchPoint= new Float3D(0,0,0);
+      touchPoint= new Static3D(0,0,0);
         
       fps = new DistortedBitmap( fpsW, fpsH, 2);
       fpsBitmap = Bitmap.createBitmap(fpsW,fpsH, Bitmap.Config.ARGB_8888);
@@ -244,7 +252,7 @@ class DeformRenderer implements GLSurfaceView.Renderer
                            break;
         case MODE_DEFORM : stretch.deform( v[0], touchPoint);
                            break;
-        case MODE_SHEAR  : shearID = stretch.shear(touchPoint,v[0]);
+        case MODE_SHEAR  : shearID = stretch.shear(touchPoint, mMovingDynamic);
                            break;
         }                   
       }
@@ -283,11 +291,11 @@ class DeformRenderer implements GLSurfaceView.Renderer
       
       switch(mMode)
         {
-        case MODE_DISTORT: stretch.distort(di, dr, touchPoint);
+        case MODE_DISTORT: stretch.distort( mReleasedDynamic, dr, touchPoint);
                            break;
-        case MODE_DEFORM : stretch.deform( di, touchPoint);
+        case MODE_DEFORM : stretch.deform( mReleasedDynamic, touchPoint);
                            break;
-        case MODE_SHEAR  : shearID = stretch.shear(touchPoint,di); 
+        case MODE_SHEAR  : shearID = stretch.shear(touchPoint,mReleasedDynamic);
                            break;
         }      
       }
diff --git a/src/main/java/org/distorted/examples/differentbitmaps/DifferentBitmapsRenderer.java b/src/main/java/org/distorted/examples/differentbitmaps/DifferentBitmapsRenderer.java
index c21631d..05d6da0 100644
--- a/src/main/java/org/distorted/examples/differentbitmaps/DifferentBitmapsRenderer.java
+++ b/src/main/java/org/distorted/examples/differentbitmaps/DifferentBitmapsRenderer.java
@@ -30,9 +30,10 @@ import org.distorted.examples.R;
 import org.distorted.library.Distorted;
 import org.distorted.library.DistortedBitmap;
 import org.distorted.library.EffectTypes;
-import org.distorted.library.type.Float2D;
-import org.distorted.library.type.Float4D;
-import org.distorted.library.type.Interpolator2D;
+import org.distorted.library.type.Dynamic2D;
+import org.distorted.library.type.Static2D;
+import org.distorted.library.type.Static3D;
+import org.distorted.library.type.Static4D;
 
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
@@ -47,9 +48,9 @@ class DifferentBitmapsRenderer implements GLSurfaceView.Renderer
    
    private GLSurfaceView mView;
    private DistortedBitmap[] bmp;
-   private Float2D point;
-   private Interpolator2D di;
-   private Float2D[] vec;
+   private Static2D point;
+   private Dynamic2D di;
+   private Static2D[] vec;
    private int bmpHeight, bmpWidth;
     
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -59,15 +60,15 @@ class DifferentBitmapsRenderer implements GLSurfaceView.Renderer
       mView = v;
      
       // create shared effects - enlarge the nose and keep moving the whole bitmap left and right.
-      di = new Interpolator2D();
+      di = new Dynamic2D();
       di.setCount(0.0f);
       di.setDuration(3000);
-      vec = new Float2D[2];
-      vec[0] = new Float2D( 25,0);
-      vec[1] = new Float2D(-25,0);
+      vec = new Static2D[2];
+      vec[0] = new Static2D( 25,0);
+      vec[1] = new Static2D(-25,0);
       di.add(vec[0]);
       di.add(vec[1]);
-      point = new Float2D(305, 380);
+      point = new Static2D(305, 380);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -117,22 +118,26 @@ class DifferentBitmapsRenderer implements GLSurfaceView.Renderer
       if( bmpHeight/(NUM*bmpWidth) > height/width )
         {
         int w = (height*bmpWidth)/bmpHeight;
-      
+        float factor = (float)height/bmpHeight;
+        Static3D scale = new Static3D(factor,factor,factor);
+
         for(int i=NUM-1; i>=0; i--) 
           {
-          bmp[i].move( (width-NUM*w)/2 +i*w ,0,0);
-          bmp[i].scale((float)height/bmpHeight);
+          bmp[i].move( new Static3D((width-NUM*w)/2 +i*w ,0,0) );
+          bmp[i].scale(scale);
           }
         }
       else
         {
         int w = width/NUM;  
         int h = (width*bmpHeight)/(bmpWidth*NUM);
-      
+        float factor = (float)width/(bmpWidth*NUM);
+        Static3D scale = new Static3D(factor,factor,factor);
+
         for(int i=NUM-1; i>=0; i--) 
           {
-          bmp[i].move(i*w, (height-h)/2, 0);  
-          bmp[i].scale((float)width/(bmpWidth*NUM));
+          bmp[i].move( new Static3D(i*w,(height-h)/2,0) );
+          bmp[i].scale(scale);
           }
         }
          
@@ -160,7 +165,7 @@ class DifferentBitmapsRenderer implements GLSurfaceView.Renderer
       bmp[1].setBitmap(bitmap1);
       bmp[2].setBitmap(bitmap2);
          
-      bmp[0].sink(8.0f, new Float4D(0,0,80,80), point, 0, 0.5f);
+      bmp[0].sink(8.0f, new Static4D(0,0,80,80), point, 0, 0.5f);
       bmp[0].distort(di,point); 
       
       try
diff --git a/src/main/java/org/distorted/examples/differenteffects/DifferentEffectsRenderer.java b/src/main/java/org/distorted/examples/differenteffects/DifferentEffectsRenderer.java
index b2747bd..67d7d3a 100644
--- a/src/main/java/org/distorted/examples/differenteffects/DifferentEffectsRenderer.java
+++ b/src/main/java/org/distorted/examples/differenteffects/DifferentEffectsRenderer.java
@@ -30,10 +30,10 @@ import org.distorted.examples.R;
 import org.distorted.library.Distorted;
 import org.distorted.library.DistortedBitmap;
 import org.distorted.library.EffectTypes;
-import org.distorted.library.type.Float2D;
-import org.distorted.library.type.Float3D;
-import org.distorted.library.type.Float4D;
-import org.distorted.library.type.Interpolator3D;
+import org.distorted.library.type.Dynamic3D;
+import org.distorted.library.type.Static2D;
+import org.distorted.library.type.Static3D;
+import org.distorted.library.type.Static4D;
 
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
@@ -48,10 +48,10 @@ class DifferentEffectsRenderer implements GLSurfaceView.Renderer
    
    private GLSurfaceView mView;
    private DistortedBitmap[] bmp;
-   private Float2D pLeft, pRight, pNose1;
-   private Float4D RegionEye;
-   private Interpolator3D mDI;
-   private Float3D[] vec;
+   private Static2D pLeft, pRight, pNose1;
+   private Static4D RegionEye;
+   private Dynamic3D mDI;
+   private Static3D[] vec;
    private int bmpHeight, bmpWidth;
     
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -61,20 +61,20 @@ class DifferentEffectsRenderer implements GLSurfaceView.Renderer
       mView = v;
       
       // bmp[0] effects
-      pLeft = new Float2D(214, 206);
-      pRight= new Float2D(390, 212);
-      RegionEye = new Float4D(0,0,60,60);
+      pLeft = new Static2D(214, 206);
+      pRight= new Static2D(390, 212);
+      RegionEye = new Static4D(0,0,60,60);
       
       // bmp[1] effects
-      mDI = new Interpolator3D();
+      mDI = new Dynamic3D();
       mDI.setCount(0.0f);
       mDI.setDuration(1000);
-      vec = new Float3D[2];
-      vec[0] = new Float3D( 50,0,0);
-      vec[1] = new Float3D(-50,0,0);
+      vec = new Static3D[2];
+      vec[0] = new Static3D( 50,0,0);
+      vec[1] = new Static3D(-50,0,0);
       mDI.add(vec[0]);
       mDI.add(vec[1]);
-      pNose1 = new Float2D(305, 340);
+      pNose1 = new Static2D(305, 340);
       
       // we don't need to prepare anything for bmp[2] effects
       }
@@ -103,22 +103,26 @@ class DifferentEffectsRenderer implements GLSurfaceView.Renderer
       if( bmpHeight/(NUM*bmpWidth) > height/width )
         {
         int w = (height*bmpWidth)/bmpHeight;
-      
+        float factor = (float)height/bmpHeight;
+        Static3D scaleFactor = new Static3D(factor,factor,factor);
+
         for(int i=NUM-1; i>=0; i--) 
           {
-          bmp[i].move( (width-NUM*w)/2 +i*w ,0, 0);
-          bmp[i].scale((float)height/bmpHeight);
+          bmp[i].move( new Static3D((width-NUM*w)/2 +i*w , 0, 0) );
+          bmp[i].scale(scaleFactor);
           }
         }
       else
         {
         int w = width/NUM;  
         int h = (width*bmpHeight)/(bmpWidth*NUM);
-      
+        float factor = (float)width/(bmpWidth*NUM);
+        Static3D scaleFactor = new Static3D(factor,factor,factor);
+
         for(int i=NUM-1; i>=0; i--) 
           {
-          bmp[i].move(i*w, (height-h)/2, 0);  
-          bmp[i].scale((float)width/(bmpWidth*NUM));
+          bmp[i].move( new Static3D(i*w, (height-h)/2, 0) );
+          bmp[i].scale(scaleFactor);
           }
         }
        
diff --git a/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java b/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java
index e08af01..a283a21 100644
--- a/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java
+++ b/src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java
@@ -29,10 +29,12 @@ import org.distorted.examples.R;
 
 import org.distorted.library.DistortedCubes;
 import org.distorted.library.EffectTypes;
-import org.distorted.library.type.Float3D;
-import org.distorted.library.type.Float4D;
-import org.distorted.library.type.Interpolator3D;
-import org.distorted.library.type.Interpolator4D;
+import org.distorted.library.type.Dynamic1D;
+import org.distorted.library.type.Dynamic3D;
+import org.distorted.library.type.Static1D;
+import org.distorted.library.type.Static3D;
+import org.distorted.library.type.Static4D;
+import org.distorted.library.type.Dynamic4D;
 import org.distorted.library.Distorted;
 
 import android.graphics.Bitmap;
@@ -51,12 +53,12 @@ class Effects3DRenderer implements GLSurfaceView.Renderer
 
     private static int[] order;
     
-    private static Interpolator3D mMoveInter, mScaleInter, mShearInter;
-    private static Interpolator4D mRotateInter;
-    
-    private static Float3D mZeroPoint, mMovePoint, mScalePoint, mShearPoint;
-    private static Float4D mRotatePoint;
-    
+    private static Dynamic3D mMoveInter, mScaleInter, mShearInter;
+    private static Dynamic4D mDynamicRotate;
+
+    private static Static3D mZeroPoint, mMovePoint, mScalePoint, mShearPoint;
+    private static Static4D mRotatePoint;
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     public static void setMove(float x, float y, float z)
@@ -75,7 +77,7 @@ class Effects3DRenderer implements GLSurfaceView.Renderer
 
     public static void setRotate(float a, float x, float y, float z)
       {
-      mRotatePoint.set(a, x, y, z);
+      mRotatePoint.set(a,x,y,z);
       }
     
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -103,10 +105,10 @@ class Effects3DRenderer implements GLSurfaceView.Renderer
         {
         switch(order[i])
           {
-          case Effects3DActivity.MOVE  : mCube.move(mMoveInter)               ; break; 
-          case Effects3DActivity.SCALE : mCube.scale(mScaleInter)             ; break;
-          case Effects3DActivity.ROTATE: mCube.rotate(mZeroPoint,mRotateInter); break;
-          case Effects3DActivity.SHEAR : mCube.shear(mZeroPoint,mShearInter)  ; break;
+          case Effects3DActivity.MOVE  : mCube.move(mMoveInter)                 ; break;
+          case Effects3DActivity.SCALE : mCube.scale(mScaleInter)               ; break;
+          case Effects3DActivity.ROTATE: mCube.rotate(mZeroPoint,mDynamicRotate); break;
+          case Effects3DActivity.SHEAR : mCube.shear(mZeroPoint,mShearInter)    ; break;
           }
         }
       }
@@ -118,21 +120,21 @@ class Effects3DRenderer implements GLSurfaceView.Renderer
       mView = v;
       mCube = new DistortedCubes( 1, "1", SIZE);
       
-      mZeroPoint  = new Float3D(0,0,0);
-      mMovePoint  = new Float3D(0,0,0);
-      mScalePoint = new Float3D(1,1,1);
-      mShearPoint = new Float3D(0,0,0);
-      mRotatePoint= new Float4D(1,0,0,0);
-      
-      mMoveInter  = new Interpolator3D();
-      mScaleInter = new Interpolator3D();
-      mShearInter = new Interpolator3D();
-      mRotateInter= new Interpolator4D();
-      
+      mZeroPoint   = new Static3D(0,0,0);
+      mMovePoint   = new Static3D(0,0,0);
+      mScalePoint  = new Static3D(1,1,1);
+      mShearPoint  = new Static3D(0,0,0);
+      mRotatePoint = new Static4D(0,1,0,0);
+
+      mMoveInter    = new Dynamic3D();
+      mScaleInter   = new Dynamic3D();
+      mShearInter   = new Dynamic3D();
+      mDynamicRotate= new Dynamic4D();
+
       mMoveInter.add(mMovePoint);
       mScaleInter.add(mScalePoint);
       mShearInter.add(mShearPoint);
-      mRotateInter.add(mRotatePoint);
+      mDynamicRotate.add(mRotatePoint);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/examples/fbo/FBORenderer.java b/src/main/java/org/distorted/examples/fbo/FBORenderer.java
index 92c76ec..d5212a1 100644
--- a/src/main/java/org/distorted/examples/fbo/FBORenderer.java
+++ b/src/main/java/org/distorted/examples/fbo/FBORenderer.java
@@ -31,7 +31,8 @@ import org.distorted.library.DistortedNode;
 import org.distorted.library.Distorted;
 import org.distorted.library.DistortedBitmap;
 import org.distorted.library.EffectTypes;
-import org.distorted.library.type.Float2D;
+import org.distorted.library.type.Static2D;
+import org.distorted.library.type.Static3D;
 
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
@@ -74,14 +75,18 @@ class FBORenderer implements GLSurfaceView.Renderer
       if( lisaHeight/lisaWidth > height/width )
         {
         int w = (height*lisaWidth)/lisaHeight;
-        mLisa.move((width-w)/2 ,0, 0);
-        mLisa.scale((float)height/lisaHeight);
+        float factor = (float)height/lisaHeight;
+
+        mLisa.move( new Static3D((width-w)/2,0,0) );
+        mLisa.scale( new Static3D(factor,factor,factor));
         }
       else
         {
         int h = (width*lisaHeight)/lisaWidth;
-        mLisa.move(0 ,(height-h)/2, 0);
-        mLisa.scale((float)width/lisaWidth);
+        float factor = (float)width/lisaWidth;
+
+        mLisa.move(  new Static3D(0,(height-h)/2,0) );
+        mLisa.scale( new Static3D(factor,factor,factor) );
         }
       
       Distorted.onSurfaceChanged(width, height); 
@@ -122,10 +127,12 @@ class FBORenderer implements GLSurfaceView.Renderer
      
       int textWidth  = mText.getWidth();
       int textHeight = mText.getHeight();
-      
-      mText.move(lisaWidth/6 , lisaHeight/3, 0);
-      mText.scale(lisaWidth/(1.5f*textWidth));
-      mText.sink(0.5f, new Float2D( textWidth/2, textHeight/2), 5000, 0.0f);
+
+      float factor = lisaWidth/(1.5f*textWidth);
+
+      mText.move( new Static3D(lisaWidth/6,lisaHeight/3,0) );
+      mText.scale( new Static3D(factor,factor,factor) );
+      mText.sink(0.5f, new Static2D( textWidth/2, textHeight/2), 5000, 0.0f);
       mLisa.macroblock(4, 10000, 0.0f);
       
       try
diff --git a/src/main/java/org/distorted/examples/fov/FOVRenderer.java b/src/main/java/org/distorted/examples/fov/FOVRenderer.java
index e7c848a..af22ba5 100644
--- a/src/main/java/org/distorted/examples/fov/FOVRenderer.java
+++ b/src/main/java/org/distorted/examples/fov/FOVRenderer.java
@@ -24,9 +24,9 @@ import javax.microedition.khronos.opengles.GL10;
 
 import org.distorted.library.Distorted;
 import org.distorted.library.DistortedBitmap;
-import org.distorted.library.type.Float2D;
-import org.distorted.library.type.Float3D;
-import org.distorted.library.type.Float4D;
+import org.distorted.library.type.Static2D;
+import org.distorted.library.type.Static3D;
+import org.distorted.library.type.Static4D;
 
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
@@ -115,13 +115,13 @@ class FOVRenderer implements GLSurfaceView.Renderer
         
       int min = w<h ? w:h;
         
-      Float3D dp3D = new Float3D(0,0,min/5);
-      Float4D dr = new Float4D(0,0,min/5,min/5);
+      Static3D dp3D = new Static3D(0,0,min/5);
+      Static4D dr = new Static4D(0,0,min/5,min/5);
         
-      Float2D point1 = new Float2D(  w/4,   h/4);
-      Float2D point2 = new Float2D(3*w/4,   h/4);
-      Float2D point3 = new Float2D(  w/4, 3*h/4);
-      Float2D point4 = new Float2D(3*w/4, 3*h/4);
+      Static2D point1 = new Static2D(  w/4,   h/4);
+      Static2D point2 = new Static2D(3*w/4,   h/4);
+      Static2D point3 = new Static2D(  w/4, 3*h/4);
+      Static2D point4 = new Static2D(3*w/4, 3*h/4);
        
       fov.distort(dp3D, dr, point1, 0, 0.5f);
       fov.distort(dp3D, dr, point2, 0, 0.5f);
diff --git a/src/main/java/org/distorted/examples/girl/GirlRenderer.java b/src/main/java/org/distorted/examples/girl/GirlRenderer.java
index ed18807..dc5ab43 100644
--- a/src/main/java/org/distorted/examples/girl/GirlRenderer.java
+++ b/src/main/java/org/distorted/examples/girl/GirlRenderer.java
@@ -30,12 +30,12 @@ import org.distorted.examples.R;
 import org.distorted.library.Distorted;
 import org.distorted.library.DistortedBitmap;
 import org.distorted.library.EffectTypes;
-import org.distorted.library.type.Float1D;
-import org.distorted.library.type.Float2D;
-import org.distorted.library.type.Float3D;
-import org.distorted.library.type.Float4D;
-import org.distorted.library.type.Interpolator3D;
-import org.distorted.library.type.Interpolator1D;
+import org.distorted.library.type.Dynamic1D;
+import org.distorted.library.type.Dynamic3D;
+import org.distorted.library.type.Static1D;
+import org.distorted.library.type.Static2D;
+import org.distorted.library.type.Static3D;
+import org.distorted.library.type.Static4D;
 
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
@@ -48,12 +48,12 @@ class GirlRenderer implements GLSurfaceView.Renderer
 {
     private GLSurfaceView mView;
     private DistortedBitmap mGirl;
-    private Float2D pLeft, pRight, pHips;
-    private Float4D Region, sinkRegion, HipsRegion;
-    private static Interpolator3D diL, diR;
-    private static Interpolator1D diHips, diSink;
-    private static Float3D v0,v1,v2,v3;
-    private static Float1D d0, d1, s0;
+    private Static2D pLeft, pRight, pHips;
+    private Static4D Region, sinkRegion, HipsRegion;
+    private static Dynamic3D diL, diR;
+    private static Dynamic1D diHips, diSink;
+    private static Static3D v0,v1,v2,v3;
+    private static Static1D d0, d1, s0;
     
     private int bmpHeight, bmpWidth;
     
@@ -71,34 +71,34 @@ class GirlRenderer implements GLSurfaceView.Renderer
       hipsSwirl  = 0;
       boobsSink  = 1.0f;
       
-      pLeft = new Float2D(132, 264);
-      pRight= new Float2D(247, 264);
+      pLeft = new Static2D(132, 264);
+      pRight= new Static2D(247, 264);
       
       // Make the boobs bigger
-      sinkRegion = new Float4D(0,0,60,60);
+      sinkRegion = new Static4D(0,0,60,60);
       
-      s0 = new Float1D(boobsSink);
+      s0 = new Static1D(boobsSink);
       
-      diSink = new Interpolator1D(); 
+      diSink = new Dynamic1D();
       diSink.setCount(0.5f);
       diSink.setDuration(0);
       diSink.add(s0);
       
       // Boobs Movement
-      Region = new Float4D(0,0,45,45);
+      Region = new Static4D(0,0,45,45);
       
-      diL = new Interpolator3D();
-      diR = new Interpolator3D();
+      diL = new Dynamic3D();
+      diR = new Dynamic3D();
       
       diL.setCount(0.0f);
       diR.setCount(0.0f);
       diL.setDuration(1000);
       diR.setDuration(1000);
       
-      v0 = new Float3D( 0,-boobsSwing, 0);
-      v1 = new Float3D( boobsSwing, 0, 0);
-      v2 = new Float3D( 0, boobsSwing, 0);
-      v3 = new Float3D(-boobsSwing, 0, 0);
+      v0 = new Static3D( 0,-boobsSwing, 0);
+      v1 = new Static3D( boobsSwing, 0, 0);
+      v2 = new Static3D( 0, boobsSwing, 0);
+      v3 = new Static3D(-boobsSwing, 0, 0);
       
       diL.add(v0);
       diL.add(v1);
@@ -111,12 +111,12 @@ class GirlRenderer implements GLSurfaceView.Renderer
       diR.add(v1);
       
       // Movement of the hips
-      pHips = new Float2D(216,505);
-      HipsRegion = new Float4D(0,0,120,120);
-      diHips = new Interpolator1D();
+      pHips = new Static2D(216,505);
+      HipsRegion = new Static4D(0,0,120,120);
+      diHips = new Dynamic1D();
       
-      d0 = new Float1D(-hipsSwirl);
-      d1 = new Float1D(+hipsSwirl);
+      d0 = new Static1D(-hipsSwirl);
+      d1 = new Static1D(+hipsSwirl);
       
       diHips.add(d0);
       diHips.add(d1);
@@ -172,14 +172,18 @@ class GirlRenderer implements GLSurfaceView.Renderer
       if( bmpHeight/bmpWidth > height/width )
         {
         int w = (height*bmpWidth)/bmpHeight;
-        mGirl.move((width-w)/2 ,0, 0);
-        mGirl.scale((float)height/bmpHeight);
+        float factor = (float)height/bmpHeight;
+
+        mGirl.move( new Static3D((width-w)/2,0,0) );
+        mGirl.scale( new Static3D(factor,factor,factor) );
         }
       else
         {
         int h = (width*bmpHeight)/bmpWidth;
-        mGirl.move(0 ,(height-h)/2, 0);
-        mGirl.scale((float)width/bmpWidth);
+        float factor = (float)width/bmpWidth;
+
+        mGirl.move( new Static3D(0,(height-h)/2,0) );
+        mGirl.scale( new Static3D(factor,factor,factor) );
         }
       
       Distorted.onSurfaceChanged(width, height); 
diff --git a/src/main/java/org/distorted/examples/interpolator/InterpolatorActivity.java b/src/main/java/org/distorted/examples/interpolator/InterpolatorActivity.java
index d3ae21c..4ab34f9 100644
--- a/src/main/java/org/distorted/examples/interpolator/InterpolatorActivity.java
+++ b/src/main/java/org/distorted/examples/interpolator/InterpolatorActivity.java
@@ -20,7 +20,7 @@
 package org.distorted.examples.interpolator;
 
 import org.distorted.library.Distorted;
-import org.distorted.library.type.Interpolator1D;
+import org.distorted.library.type.Dynamic1D;
 import org.distorted.examples.R;
 
 import android.app.Activity;
@@ -99,21 +99,21 @@ public class InterpolatorActivity extends Activity implements OnSeekBarChangeLis
     
     public void Loop(View v)
       {
-      InterpolatorSurfaceView.setMode(Interpolator1D.MODE_LOOP);
+      InterpolatorSurfaceView.setMode(Dynamic1D.MODE_LOOP);
       }     
     
 ///////////////////////////////////////////////////////////////////
 
     public void Path(View v)
       {
-      InterpolatorSurfaceView.setMode(Interpolator1D.MODE_PATH);
+      InterpolatorSurfaceView.setMode(Dynamic1D.MODE_PATH);
       }  
 
 ///////////////////////////////////////////////////////////////////
 
     public void Jump(View v)
       {
-      InterpolatorSurfaceView.setMode(Interpolator1D.MODE_JUMP);
+      InterpolatorSurfaceView.setMode(Dynamic1D.MODE_JUMP);
       }  
     
 ///////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/examples/interpolator/InterpolatorRenderer.java b/src/main/java/org/distorted/examples/interpolator/InterpolatorRenderer.java
index 53dbb2b..2205747 100644
--- a/src/main/java/org/distorted/examples/interpolator/InterpolatorRenderer.java
+++ b/src/main/java/org/distorted/examples/interpolator/InterpolatorRenderer.java
@@ -32,6 +32,7 @@ import android.opengl.GLSurfaceView;
 import org.distorted.library.DistortedBitmap;
 import org.distorted.library.Distorted;
 import org.distorted.library.EffectTypes;
+import org.distorted.library.type.Static3D;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -86,7 +87,7 @@ public class InterpolatorRenderer implements GLSurfaceView.Renderer
    public void onSurfaceChanged(GL10 glUnused, int width, int height)
      {
      mBackground.abortEffects(EffectTypes.MATRIX);
-     mBackground.scale((float)width/texWidth,(float)height/texHeight,1);
+     mBackground.scale( new Static3D((float)width/texWidth,(float)height/texHeight,1) );
      Distorted.onSurfaceChanged(width, height);
      InterpolatorSurfaceView.setScreenSize(width,height);
      }
diff --git a/src/main/java/org/distorted/examples/interpolator/InterpolatorSurfaceView.java b/src/main/java/org/distorted/examples/interpolator/InterpolatorSurfaceView.java
index 1dff48f..267c8d3 100644
--- a/src/main/java/org/distorted/examples/interpolator/InterpolatorSurfaceView.java
+++ b/src/main/java/org/distorted/examples/interpolator/InterpolatorSurfaceView.java
@@ -28,12 +28,12 @@ import android.graphics.Canvas;
 import android.graphics.Paint.Style;
 import android.graphics.Paint;
 
-import org.distorted.library.type.Interpolator1D;
-import org.distorted.library.type.Interpolator2D;
-import org.distorted.library.type.Interpolator3D;
-import org.distorted.library.type.Float1D;
-import org.distorted.library.type.Float2D;
-import org.distorted.library.type.Float3D;
+import org.distorted.library.type.Dynamic1D;
+import org.distorted.library.type.Dynamic2D;
+import org.distorted.library.type.Dynamic3D;
+import org.distorted.library.type.Static1D;
+import org.distorted.library.type.Static2D;
+import org.distorted.library.type.Static3D;
 
 ///////////////////////////////////////////////////////////////////
 
@@ -51,9 +51,9 @@ public class InterpolatorSurfaceView extends GLSurfaceView
     private static int xDown,yDown;
     private static int mScrW, mScrH;
    
-    private static Interpolator1D di1D;
-    private static Interpolator2D di2D;
-    private static Interpolator3D di3D;
+    private static Dynamic1D di1D;
+    private static Dynamic2D di2D;
+    private static Dynamic3D di3D;
     
     private static Paint mPaint;
     private static int moving;
@@ -65,9 +65,9 @@ public class InterpolatorSurfaceView extends GLSurfaceView
     
     private static int currentDim = DIM_2D;
     
-    private static Float1D p1D;
-    private static Float2D p2D;
-    private static Float3D p3D;
+    private static Static1D p1D;
+    private static Static2D p2D;
+    private static Static3D p3D;
     
     private static float[] mDrawCoord = new float[3];
       
@@ -86,15 +86,15 @@ public class InterpolatorSurfaceView extends GLSurfaceView
       mPosition = 0;
       mNoise    = 0.0f;
       
-      di1D = new Interpolator1D();
+      di1D = new Dynamic1D();
       di1D.setDuration(mDuration);
       di1D.setNoise(mNoise);
       
-      di2D = new Interpolator2D();
+      di2D = new Dynamic2D();
       di2D.setDuration(mDuration);
       di2D.setNoise(mNoise);
       
-      di3D = new Interpolator3D();
+      di3D = new Dynamic3D();
       di3D.setDuration(mDuration);
       di3D.setNoise(mNoise);
         
@@ -325,7 +325,7 @@ public class InterpolatorSurfaceView extends GLSurfaceView
                        synchronized(lock)
                          {
                          if( len>=MAX_VECTORS ) di1D.removeAll();
-                         di1D.add(new Float1D(xDown)); 
+                         di1D.add(new Static1D(xDown));
                          }
                        }
                      break;
@@ -348,7 +348,7 @@ public class InterpolatorSurfaceView extends GLSurfaceView
                        synchronized(lock)
                          {
                          if( len>=MAX_VECTORS ) di2D.removeAll();
-                         di2D.add(new Float2D(xDown,yDown)); 
+                         di2D.add(new Static2D(xDown,yDown));
                          }
                        }
                      break;
@@ -386,11 +386,11 @@ public class InterpolatorSurfaceView extends GLSurfaceView
                     
                        if( currentDim==DIM_3DXY )
                          {
-                         di3D.add(new Float3D(xDown,yDown,InterpolatorRenderer.BHEI/2));
+                         di3D.add(new Static3D(xDown,yDown,InterpolatorRenderer.BHEI/2));
                          }
                        if( currentDim==DIM_3DXZ )
                          {
-                         di3D.add(new Float3D(xDown,InterpolatorRenderer.BHEI/2,yDown));
+                         di3D.add(new Static3D(xDown,InterpolatorRenderer.BHEI/2,yDown));
                          }
                        }
                      }
diff --git a/src/main/java/org/distorted/examples/listener/ListenerRenderer.java b/src/main/java/org/distorted/examples/listener/ListenerRenderer.java
index 4be0a8d..27eca31 100644
--- a/src/main/java/org/distorted/examples/listener/ListenerRenderer.java
+++ b/src/main/java/org/distorted/examples/listener/ListenerRenderer.java
@@ -31,9 +31,9 @@ import org.distorted.examples.R;
 import org.distorted.library.Distorted;
 import org.distorted.library.DistortedBitmap;
 import org.distorted.library.EffectTypes;
-import org.distorted.library.type.Float2D;
-import org.distorted.library.type.Float3D;
-import org.distorted.library.type.Float4D;
+import org.distorted.library.type.Static2D;
+import org.distorted.library.type.Static3D;
+import org.distorted.library.type.Static4D;
 import org.distorted.library.message.EffectListener;
 import org.distorted.library.message.EffectMessage;
 
@@ -71,9 +71,9 @@ class ListenerRenderer implements GLSurfaceView.Renderer,EffectListener
       int pointy   = mRnd.nextInt( (int)(0.8f*bmpHeight))+ (int)(0.1f*bmpHeight); // 
       int duration = 1000 + mRnd.nextInt(3000);                                   // for anytime from 3 to 4 seconds 
         
-      Float3D dp3d = new Float3D(0,0,height);
-      Float2D dp2d = new Float2D(pointx,pointy);
-      Float4D  dr  = new Float4D(0,0,radius,radius);
+      Static3D dp3d = new Static3D(0,0,height);
+      Static2D dp2d = new Static2D(pointx,pointy);
+      Static4D dr  = new Static4D(0,0,radius,radius);
      
       return water.distort(dp3d, dr, dp2d, duration, 1.0f);
       }
@@ -109,14 +109,18 @@ class ListenerRenderer implements GLSurfaceView.Renderer,EffectListener
       if( bmpHeight/bmpWidth > height/width )
         {
         int w = (height*bmpWidth)/bmpHeight;
-        water.move((width-w)/2 ,0, 0);
-        water.scale((float)height/bmpHeight);
+        float factor = (float)height/bmpHeight;
+
+        water.move( new Static3D((width-w)/2,0,0) );
+        water.scale( new Static3D(factor,factor,factor) );
         }
       else
         {
         int h = (width*bmpHeight)/bmpWidth;
-        water.move(0 ,(height-h)/2, 0);
-        water.scale((float)width/bmpWidth);
+        float factor = (float)width/bmpWidth;
+
+        water.move( new Static3D(0,(height-h)/2,0) );
+        water.scale( new Static3D(factor,factor,factor) );
         }
       
       Distorted.onSurfaceChanged(width, height); 
diff --git a/src/main/java/org/distorted/examples/macroblock/MacroblockRenderer.java b/src/main/java/org/distorted/examples/macroblock/MacroblockRenderer.java
index 56902a3..cbc9ad7 100644
--- a/src/main/java/org/distorted/examples/macroblock/MacroblockRenderer.java
+++ b/src/main/java/org/distorted/examples/macroblock/MacroblockRenderer.java
@@ -29,12 +29,12 @@ import org.distorted.examples.R;
 import org.distorted.library.Distorted;
 import org.distorted.library.DistortedBitmap;
 import org.distorted.library.EffectTypes;
-import org.distorted.library.type.Interpolator1D;
-import org.distorted.library.type.Interpolator3D;
-import org.distorted.library.type.Float1D;
-import org.distorted.library.type.Float2D;
-import org.distorted.library.type.Float3D;
-import org.distorted.library.type.Float4D;
+import org.distorted.library.type.Dynamic1D;
+import org.distorted.library.type.Dynamic3D;
+import org.distorted.library.type.Static1D;
+import org.distorted.library.type.Static2D;
+import org.distorted.library.type.Static3D;
+import org.distorted.library.type.Static4D;
 
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
@@ -47,9 +47,9 @@ class MacroblockRenderer implements GLSurfaceView.Renderer
 {
     private GLSurfaceView mView;
     private DistortedBitmap macroblock;
-    private Float4D Region;
+    private Static4D Region;
     private int bmpHeight, bmpWidth;
-    private Float2D traP, macP;
+    private Static2D traP, macP;
     
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -57,9 +57,9 @@ class MacroblockRenderer implements GLSurfaceView.Renderer
       {   
       mView = v;
       
-      Region = new Float4D(0,0,100,100);
-      macP   = new Float2D(530,200);
-      traP   = new Float2D(230,200);
+      Region = new Static4D(0,0,100,100);
+      macP   = new Static2D(530,200);
+      traP   = new Static2D(230,200);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -115,30 +115,30 @@ class MacroblockRenderer implements GLSurfaceView.Renderer
       {
       int duration = 10000;   
       
-      Interpolator3D diMove = new Interpolator3D();
+      Dynamic3D diMove = new Dynamic3D();
       diMove.setCount(0.0f);
       diMove.setDuration(duration);
-      diMove.add(new Float3D(width-bmpWidth,height-bmpHeight,0));
-      diMove.add(new Float3D(0,0,0));
+      diMove.add(new Static3D(width-bmpWidth,height-bmpHeight,0));
+      diMove.add(new Static3D(0,0,0));
       
-      Interpolator3D diScale = new Interpolator3D();
+      Dynamic3D diScale = new Dynamic3D();
       diScale.setCount(0.0f);
       diScale.setDuration(duration);
-      diScale.add(new Float3D(1,1,1));
-      diScale.add(new Float3D(0.33f,0.33f,1));
+      diScale.add(new Static3D(1,1,1));
+      diScale.add(new Static3D(0.33f,0.33f,1));
       
-      Interpolator1D diRotate = new Interpolator1D();
+      Dynamic1D diRotate = new Dynamic1D();
       diRotate.setCount(0.0f);
       diRotate.setDuration(duration);
-      diRotate.add(new Float1D(  0));
-      diRotate.add(new Float1D(360));
+      diRotate.add(new Static1D(  0));
+      diRotate.add(new Static1D(360));
       
       macroblock.abortEffects(EffectTypes.MATRIX);
 
       macroblock.move(diMove);
       macroblock.scale(diScale);
-      macroblock.rotate( new Float3D(bmpWidth/2,bmpHeight/2,0), diRotate, 0.0f, 0.0f, 1.0f);
-      
+      macroblock.rotate( new Static3D(bmpWidth/2,bmpHeight/2,0), diRotate, new Static3D(0,0,1) );
+
       Distorted.onSurfaceChanged(width, height); 
       }
 }
diff --git a/src/main/java/org/distorted/examples/monalisa/MonaLisaRenderer.java b/src/main/java/org/distorted/examples/monalisa/MonaLisaRenderer.java
index a1393fc..2c63d8e 100644
--- a/src/main/java/org/distorted/examples/monalisa/MonaLisaRenderer.java
+++ b/src/main/java/org/distorted/examples/monalisa/MonaLisaRenderer.java
@@ -29,9 +29,9 @@ import org.distorted.examples.R;
 import org.distorted.library.Distorted;
 import org.distorted.library.DistortedBitmap;
 import org.distorted.library.EffectTypes;
-import org.distorted.library.type.Float2D;
-import org.distorted.library.type.Float3D;
-import org.distorted.library.type.Float4D;
+import org.distorted.library.type.Static2D;
+import org.distorted.library.type.Static3D;
+import org.distorted.library.type.Static4D;
 
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
@@ -44,9 +44,9 @@ class MonaLisaRenderer implements GLSurfaceView.Renderer
 {
     private GLSurfaceView mView;
     private DistortedBitmap monaLisa;
-    private Float2D pLeft, pRight;
-    private Float4D rLeft, rRight;
-    private Float3D vLeft, vRight;
+    private Static2D pLeft, pRight;
+    private Static4D rLeft, rRight;
+    private Static3D vLeft, vRight;
     private int bmpHeight, bmpWidth;
     
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -55,14 +55,14 @@ class MonaLisaRenderer implements GLSurfaceView.Renderer
       {
       mView = v;
       
-      pLeft = new Float2D( 90, 258);
-      pRight= new Float2D(176, 255);
+      pLeft = new Static2D( 90, 258);
+      pRight= new Static2D(176, 255);
       
-      rLeft = new Float4D(-10,-10,25,25);
-      rRight= new Float4D( 10, -5,25,25);
+      rLeft = new Static4D(-10,-10,25,25);
+      rRight= new Static4D( 10, -5,25,25);
       
-      vLeft = new Float3D(-20,-20,0);
-      vRight= new Float3D( 20,-10,0);
+      vLeft = new Static3D(-20,-20,0);
+      vRight= new Static3D( 20,-10,0);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -84,14 +84,18 @@ class MonaLisaRenderer implements GLSurfaceView.Renderer
       if( bmpHeight/bmpWidth > height/width )
         {
         int w = (height*bmpWidth)/bmpHeight;
-        monaLisa.move((width-w)/2 ,0, 0);
-        monaLisa.scale((float)height/bmpHeight);
+        float factor = (float)height/bmpHeight;
+
+        monaLisa.move( new Static3D((width-w)/2,0,0) );
+        monaLisa.scale( new Static3D(factor,factor,factor) );
         }
       else
         {
         int h = (width*bmpHeight)/bmpWidth;
-        monaLisa.move(0 ,(height-h)/2, 0);
-        monaLisa.scale((float)width/bmpWidth);
+        float factor = (float)width/bmpWidth;
+
+        monaLisa.move( new Static3D(0,(height-h)/2,0) );
+        monaLisa.scale( new Static3D(factor,factor,factor) );
         }
       
       Distorted.onSurfaceChanged(width, height); 
diff --git a/src/main/java/org/distorted/examples/movingeffects/MovingEffectsRenderer.java b/src/main/java/org/distorted/examples/movingeffects/MovingEffectsRenderer.java
index 2f7b029..e40409c 100644
--- a/src/main/java/org/distorted/examples/movingeffects/MovingEffectsRenderer.java
+++ b/src/main/java/org/distorted/examples/movingeffects/MovingEffectsRenderer.java
@@ -32,6 +32,7 @@ import android.opengl.GLSurfaceView;
 import org.distorted.library.DistortedBitmap;
 import org.distorted.library.Distorted;
 import org.distorted.library.EffectTypes;
+import org.distorted.library.type.Static3D;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -101,7 +102,7 @@ public class MovingEffectsRenderer implements GLSurfaceView.Renderer
    public void onSurfaceChanged(GL10 glUnused, int width, int height)
      {
      mBackground.abortEffects(EffectTypes.MATRIX);
-     mBackground.scale((float)width/texWidth,(float)height/texHeight,1);
+     mBackground.scale( new Static3D((float)width/texWidth,(float)height/texHeight,1) );
    
      Distorted.onSurfaceChanged(width, height);
      MovingEffectsSurfaceView.setScreenSize(width, height);    
diff --git a/src/main/java/org/distorted/examples/movingeffects/MovingEffectsSurfaceView.java b/src/main/java/org/distorted/examples/movingeffects/MovingEffectsSurfaceView.java
index cd4904e..45a2394 100644
--- a/src/main/java/org/distorted/examples/movingeffects/MovingEffectsSurfaceView.java
+++ b/src/main/java/org/distorted/examples/movingeffects/MovingEffectsSurfaceView.java
@@ -29,11 +29,11 @@ import android.view.MotionEvent;
 import android.util.AttributeSet;
 
 import org.distorted.library.EffectTypes;
-import org.distorted.library.type.Float2D;
-import org.distorted.library.type.Float3D;
-import org.distorted.library.type.Float4D;
-import org.distorted.library.type.Interpolator2D;
-import org.distorted.library.type.Interpolator3D;
+import org.distorted.library.type.Dynamic2D;
+import org.distorted.library.type.Dynamic3D;
+import org.distorted.library.type.Static2D;
+import org.distorted.library.type.Static3D;
+import org.distorted.library.type.Static4D;
 
 ///////////////////////////////////////////////////////////////////
 
@@ -54,9 +54,9 @@ public class MovingEffectsSurfaceView extends GLSurfaceView
     private static int xDown,yDown;
     private static int mScrW, mScrH;
     
-    private static Interpolator2D di2D;
-    private static Interpolator3D di3D;
-    private static Float4D dr;
+    private static Dynamic2D di2D;
+    private static Dynamic3D di3D;
+    private static Static4D dr;
     
     private static Paint mPaint;
     private static int moving;
@@ -76,15 +76,15 @@ public class MovingEffectsSurfaceView extends GLSurfaceView
       mPaint.setStyle(Style.FILL);
       moving = -1;
       
-      di2D = new Interpolator2D();
+      di2D = new Dynamic2D();
       di2D.setCount(0.0f);
       di2D.setDuration(LOOP_TIME);
       
-      di3D = new Interpolator3D();
-      di3D.add(new Float3D(0,0, 0));
-      di3D.add(new Float3D(0,0,30));
+      di3D = new Dynamic3D();
+      di3D.add(new Static3D(0,0, 0));
+      di3D.add(new Static3D(0,0,30));
       
-      dr = new Float4D(0,0,60,60);
+      dr = new Static4D(0,0,60,60);
       
       if(!isInEditMode())
         {
@@ -214,7 +214,7 @@ public class MovingEffectsSurfaceView extends GLSurfaceView
         {  
         int len = di2D.getNumPoints();
         float[] drawCoord = new float[2];
-        Float2D cu;
+        Static2D cu;
         int lit = mTime> 0 ? (int)((float)(time-mTime)*NUM_INTERPOLATIONS/LOOP_TIME)  : 0; 
             
         if( len>=2 )
@@ -254,7 +254,7 @@ public class MovingEffectsSurfaceView extends GLSurfaceView
                                       yDown = (int)event.getY()*MovingEffectsRenderer.BHEI/mScrH;
                                     
                                       float gx, gy;
-                                      Float2D dv;
+                                      Static2D dv;
                                       int len = di2D.getNumPoints();
                                  
                                       for(int g=0; g<len; g++)
@@ -273,7 +273,7 @@ public class MovingEffectsSurfaceView extends GLSurfaceView
                                         {
                                         synchronized(lock)
                                           {
-                                          di2D.add(new Float2D(xDown,yDown)); 
+                                          di2D.add(new Static2D(xDown,yDown));
                                           }
                                         } 
                                       break;
diff --git a/src/main/java/org/distorted/examples/olimpic/OlimpicRenderer.java b/src/main/java/org/distorted/examples/olimpic/OlimpicRenderer.java
index 83dec41..37661ae 100644
--- a/src/main/java/org/distorted/examples/olimpic/OlimpicRenderer.java
+++ b/src/main/java/org/distorted/examples/olimpic/OlimpicRenderer.java
@@ -28,10 +28,10 @@ import javax.microedition.khronos.opengles.GL10;
 import org.distorted.examples.R;
 
 import org.distorted.library.EffectTypes;
-import org.distorted.library.type.Interpolator1D;
+import org.distorted.library.type.Dynamic1D;
 import org.distorted.library.DistortedNode;
-import org.distorted.library.type.Float3D;
-import org.distorted.library.type.Float1D;
+import org.distorted.library.type.Static3D;
+import org.distorted.library.type.Static1D;
 import org.distorted.library.Distorted;
 import org.distorted.library.DistortedBitmap;
 
@@ -52,7 +52,7 @@ class OlimpicRenderer implements GLSurfaceView.Renderer
    private DistortedNode[] mCircleNode;
    private DistortedNode mScreen;
    private DistortedBitmap mLeaf;
-   private Interpolator1D mRot;
+   private Dynamic1D mRot;
     
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -64,12 +64,12 @@ class OlimpicRenderer implements GLSurfaceView.Renderer
       
       mScreen = new DistortedNode(new DistortedBitmap(9*LEAF_SIZE,9*LEAF_SIZE,1));
      
-      mRot = new Interpolator1D();
-      mRot.setMode(Interpolator1D.MODE_JUMP);
+      mRot = new Dynamic1D();
+      mRot.setMode(Dynamic1D.MODE_JUMP);
       mRot.setCount(0.0f);
       mRot.setDuration(5000);
-      mRot.add(new Float1D(  0));
-      mRot.add(new Float1D(360));
+      mRot.add(new Static1D(  0));
+      mRot.add(new Static1D(360));
       
       mCircleNode = new DistortedNode[NUM_CIRCLES];
     
@@ -77,8 +77,10 @@ class OlimpicRenderer implements GLSurfaceView.Renderer
       int[] positions = new int[] {0*LEAF_SIZE,2*LEAF_SIZE,  3*LEAF_SIZE,2*LEAF_SIZE,  6*LEAF_SIZE,2*LEAF_SIZE,  3*LEAF_SIZE/2,9*LEAF_SIZE/2,  9*LEAF_SIZE/2,9*LEAF_SIZE/2};
       
       DistortedBitmap tmp;
-      Float3D center = new Float3D(3*LEAF_SIZE/2, 3*LEAF_SIZE/2, 0);
-      
+      Static3D center = new Static3D(3*LEAF_SIZE/2, 3*LEAF_SIZE/2, 0);
+      Static3D axis   = new Static3D(0,0,1);
+      Static3D moveVector = new Static3D(0,LEAF_SIZE,0);
+
       for(int i=0; i<NUM_CIRCLES; i++)
         {
         if( i==0 )
@@ -89,8 +91,8 @@ class OlimpicRenderer implements GLSurfaceView.Renderer
             {
             tmp = new DistortedBitmap(mLeaf, Distorted.CLONE_BITMAP);
             mCircleNode[i].attach(tmp);
-            tmp.rotate(center, j*(360/NUM_LEAVES)); 
-            tmp.move(0,LEAF_SIZE,0);
+            tmp.rotate(center, new Static1D(j*(360/NUM_LEAVES)), axis);
+            tmp.move(moveVector);
             }
           }
         else
@@ -100,9 +102,9 @@ class OlimpicRenderer implements GLSurfaceView.Renderer
       
         mScreen.attach(mCircleNode[i]);
         tmp = (DistortedBitmap)mCircleNode[i].getObject();
-        tmp.move(positions[2*i], positions[2*i+1], 0);
-        tmp.rotate( center, mRot, 0.0f, 0.0f, 1.0f);
-        tmp.chroma(0.8f, new Float3D(colors[3*i],colors[3*i+1], colors[3*i+2]));
+        tmp.move( new Static3D(positions[2*i], positions[2*i+1], 0) );
+        tmp.rotate( center, mRot, axis );
+        tmp.chroma(0.8f, new Static3D(colors[3*i],colors[3*i+1], colors[3*i+2]));
         }
       }
 
@@ -129,14 +131,18 @@ class OlimpicRenderer implements GLSurfaceView.Renderer
       if( bmpHeight/bmpWidth > height/width )
         {
         int w = (height*bmpWidth)/bmpHeight;
-        bmp.move((width-w)/2 ,0, 0);
-        bmp.scale((float)height/bmpHeight);
+        float factor = (float)height/bmpHeight;
+
+        bmp.move( new Static3D((width-w)/2 ,0, 0) );
+        bmp.scale( new Static3D(factor,factor,factor) );
         }
       else
         {
         int h = (width*bmpHeight)/bmpWidth;
-        bmp.move(0 ,(height-h)/2, 0);
-        bmp.scale((float)width/bmpWidth);
+        float factor = (float)width/bmpWidth;
+
+        bmp.move( new Static3D(0,(height-h)/2,0) );
+        bmp.scale( new Static3D(factor,factor,factor) );
         }
       
       Distorted.onSurfaceChanged(width, height); 
diff --git a/src/main/java/org/distorted/examples/plainmonalisa/RenderThread.java b/src/main/java/org/distorted/examples/plainmonalisa/RenderThread.java
index f80f029..8c918e5 100644
--- a/src/main/java/org/distorted/examples/plainmonalisa/RenderThread.java
+++ b/src/main/java/org/distorted/examples/plainmonalisa/RenderThread.java
@@ -34,9 +34,9 @@ import android.view.SurfaceView;
 import org.distorted.library.Distorted;
 import org.distorted.library.DistortedBitmap;
 import org.distorted.library.EffectTypes;
-import org.distorted.library.type.Float2D;
-import org.distorted.library.type.Float3D;
-import org.distorted.library.type.Float4D;
+import org.distorted.library.type.Static2D;
+import org.distorted.library.type.Static3D;
+import org.distorted.library.type.Static4D;
 import org.distorted.examples.R;
 
 import java.io.IOException;
@@ -63,9 +63,9 @@ public class RenderThread extends Thread
   private DistortedBitmap monaLisa;
   private int bmpHeight, bmpWidth;
 
-  private Float2D pLeft, pRight;
-  private Float4D rLeft, rRight;
-  private Float3D vLeft, vRight;
+  private Static2D pLeft, pRight;
+  private Static4D rLeft, rRight;
+  private Static3D vLeft, vRight;
 
   SurfaceView mView;
 
@@ -76,14 +76,14 @@ public class RenderThread extends Thread
     mSurfaceHolder = holder;
     mView = view;
 
-    pLeft = new Float2D( 90, 258);
-    pRight= new Float2D(176, 255);
+    pLeft = new Static2D( 90, 258);
+    pRight= new Static2D(176, 255);
 
-    rLeft = new Float4D(-10,-10,25,25);
-    rRight= new Float4D( 10, -5,25,25);
+    rLeft = new Static4D(-10,-10,25,25);
+    rRight= new Static4D( 10, -5,25,25);
 
-    vLeft = new Float3D(-20,-20,0);
-    vRight= new Float3D( 20,-10,0);
+    vLeft = new Static3D(-20,-20,0);
+    vRight= new Static3D( 20,-10,0);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -208,14 +208,18 @@ public class RenderThread extends Thread
     if( bmpHeight/bmpWidth > height/width )
       {
       int w = (height*bmpWidth)/bmpHeight;
-      monaLisa.move((width-w)/2 ,0, 0);
-      monaLisa.scale((float)height/bmpHeight);
+      float factor = (float)height/bmpHeight;
+
+      monaLisa.move( new Static3D((width-w)/2,0,0) );
+      monaLisa.scale( new Static3D(factor,factor,factor) );
       }
     else
       {
       int h = (width*bmpHeight)/bmpWidth;
-      monaLisa.move(0 ,(height-h)/2, 0);
-      monaLisa.scale((float)width/bmpWidth);
+      float factor = (float)width/bmpWidth;
+
+      monaLisa.move( new Static3D(0,(height-h)/2,0) );
+      monaLisa.scale( new Static3D(factor,factor,factor) );
       }
 
     Distorted.onSurfaceChanged(width, height);
diff --git a/src/main/java/org/distorted/examples/quaternion/QuaternionRenderer.java b/src/main/java/org/distorted/examples/quaternion/QuaternionRenderer.java
index a1a6049..656fc8a 100644
--- a/src/main/java/org/distorted/examples/quaternion/QuaternionRenderer.java
+++ b/src/main/java/org/distorted/examples/quaternion/QuaternionRenderer.java
@@ -29,11 +29,11 @@ import javax.microedition.khronos.opengles.GL10;
 import org.distorted.examples.R;
 
 import org.distorted.library.EffectTypes;
-import org.distorted.library.type.Interpolator;
-import org.distorted.library.type.InterpolatorQuat;
+import org.distorted.library.type.Dynamic;
+import org.distorted.library.type.DynamicQuat;
 import org.distorted.library.DistortedCubes;
-import org.distorted.library.type.Float4D;
-import org.distorted.library.type.Float3D;
+import org.distorted.library.type.Static4D;
+import org.distorted.library.type.Static3D;
 import org.distorted.library.Distorted;
 
 import android.graphics.Bitmap;
@@ -51,7 +51,7 @@ class QuaternionRenderer implements GLSurfaceView.Renderer
   private GLSurfaceView mView;
   private DistortedCubes mCube;
   private Random mRnd = new Random(System.currentTimeMillis());
-  private InterpolatorQuat mRot;
+  private DynamicQuat mRot;
     
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -60,7 +60,7 @@ class QuaternionRenderer implements GLSurfaceView.Renderer
     mView = v;
     mCube = new DistortedCubes( 3, "000010000", SIZE);
       
-    mRot = new InterpolatorQuat();
+    mRot = new DynamicQuat();
       
     float x,y,z,w, len;
       
@@ -73,12 +73,12 @@ class QuaternionRenderer implements GLSurfaceView.Renderer
     	 
       len = (float)Math.sqrt( x*x+y*y+z*z+w*w );
     		
-      mRot.add(new Float4D(x/len,y/len,z/len,w/len));
+      mRot.add(new Static4D(x/len,y/len,z/len,w/len));
       }
     
     mRot.setCount(0);
     mRot.setDuration(8000);
-    mRot.setMode(Interpolator.MODE_LOOP);
+    mRot.setMode(Dynamic.MODE_LOOP);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -99,16 +99,18 @@ class QuaternionRenderer implements GLSurfaceView.Renderer
 
     if( width > height )
       {
-      mCube.move((width-height)/2 ,0, 0);
-      mCube.scale(height/(3.0f*SIZE));
+      float factor = height/(3.0f*SIZE);
+      mCube.move( new Static3D((width-height)/2,0,0) );
+      mCube.scale( new Static3D(factor,factor,factor) );
       }  
     else
-      {   
-      mCube.move(0 ,(height-width)/2, 0);
-      mCube.scale(width/(3.0f*SIZE));
+      {
+      float factor = width/(3.0f*SIZE);
+      mCube.move( new Static3D(0,(height-width)/2,0) );
+      mCube.scale( new Static3D(factor,factor,factor) );
       }
      
-    mCube.quaternion( new Float3D(3*SIZE/2,3*SIZE/2,0), mRot);
+    mCube.quaternion( new Static3D(3*SIZE/2,3*SIZE/2,0), mRot);
        
     Distorted.onSurfaceChanged(width, height); 
     }
diff --git a/src/main/java/org/distorted/examples/save/SaveRenderer.java b/src/main/java/org/distorted/examples/save/SaveRenderer.java
index a5e062f..8632101 100644
--- a/src/main/java/org/distorted/examples/save/SaveRenderer.java
+++ b/src/main/java/org/distorted/examples/save/SaveRenderer.java
@@ -33,10 +33,11 @@ import org.distorted.examples.R;
 import org.distorted.library.Distorted;
 import org.distorted.library.DistortedBitmap;
 import org.distorted.library.EffectTypes;
-import org.distorted.library.type.Float1D;
-import org.distorted.library.type.Float2D;
-import org.distorted.library.type.Float4D;
-import org.distorted.library.type.Interpolator1D;
+import org.distorted.library.type.Dynamic1D;
+import org.distorted.library.type.Static1D;
+import org.distorted.library.type.Static2D;
+import org.distorted.library.type.Static3D;
+import org.distorted.library.type.Static4D;
 
 import android.app.Activity;
 import android.graphics.Bitmap;
@@ -51,10 +52,10 @@ class SaveRenderer implements GLSurfaceView.Renderer
   {
   private GLSurfaceView mView;
   private static DistortedBitmap mGirl;
-  private Float2D pLeft, pRight;
-  private Float4D sinkRegion;
-  private static Interpolator1D diSink;
-  private static Float1D s0;
+  private Static2D pLeft, pRight;
+  private Static4D sinkRegion;
+  private static Dynamic1D diSink;
+  private static Static1D s0;
 
   private int bmpHeight, bmpWidth;
   private static int scrHeight, scrWidth;
@@ -72,14 +73,14 @@ class SaveRenderer implements GLSurfaceView.Renderer
       
     boobsSink  = 1.0f;
       
-    pLeft = new Float2D(132, 264);
-    pRight= new Float2D(247, 264);
+    pLeft = new Static2D(132, 264);
+    pRight= new Static2D(247, 264);
       
-    sinkRegion = new Float4D(0,0,60,60);
+    sinkRegion = new Static4D(0,0,60,60);
       
-    s0 = new Float1D(boobsSink);
+    s0 = new Static1D(boobsSink);
       
-    diSink = new Interpolator1D();
+    diSink = new Dynamic1D();
     diSink.setCount(0.5f);
     diSink.setDuration(0);
     diSink.add(s0);
@@ -166,14 +167,18 @@ class SaveRenderer implements GLSurfaceView.Renderer
     if( bmpHeight/bmpWidth > height/width )
       {
       int w = (height*bmpWidth)/bmpHeight;
-      mGirl.move((width-w)/2 ,0, 0);
-      mGirl.scale((float)height/bmpHeight);
+      float factor = (float)height/bmpHeight;
+
+      mGirl.move( new Static3D((width-w)/2,0,0) );
+      mGirl.scale( new Static3D(factor,factor,factor) );
       }
     else
       {
       int h = (width*bmpHeight)/bmpWidth;
-      mGirl.move(0 ,(height-h)/2, 0);
-      mGirl.scale((float)width/bmpWidth);
+      float factor = (float)width/bmpWidth;
+
+      mGirl.move( new Static3D(0,(height-h)/2,0) );
+      mGirl.scale(new Static3D(factor,factor,factor));
       }
       
     Distorted.onSurfaceChanged(width, height);
diff --git a/src/main/java/org/distorted/examples/scratchpad/ScratchpadRenderer.java b/src/main/java/org/distorted/examples/scratchpad/ScratchpadRenderer.java
index 9e6466e..3027832 100644
--- a/src/main/java/org/distorted/examples/scratchpad/ScratchpadRenderer.java
+++ b/src/main/java/org/distorted/examples/scratchpad/ScratchpadRenderer.java
@@ -32,6 +32,7 @@ import android.opengl.GLSurfaceView;
 import org.distorted.library.DistortedBitmap;
 import org.distorted.library.Distorted;
 import org.distorted.library.EffectTypes;
+import org.distorted.library.type.Static3D;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -96,7 +97,7 @@ public class ScratchpadRenderer implements GLSurfaceView.Renderer
   public void onSurfaceChanged(GL10 glUnused, int width, int height)
     {
     mBackground.abortEffects(EffectTypes.MATRIX);
-    mBackground.scale((float)width/texWidth,(float)height/texHeight,1);
+    mBackground.scale( new Static3D((float)width/texWidth,(float)height/texHeight,1) );
     Distorted.onSurfaceChanged(width,height);
     ScratchpadSurfaceView.setScreenSize(width,height);     
     }
diff --git a/src/main/java/org/distorted/examples/scratchpad/ScratchpadSurfaceView.java b/src/main/java/org/distorted/examples/scratchpad/ScratchpadSurfaceView.java
index 69e7a07..cf13a8a 100644
--- a/src/main/java/org/distorted/examples/scratchpad/ScratchpadSurfaceView.java
+++ b/src/main/java/org/distorted/examples/scratchpad/ScratchpadSurfaceView.java
@@ -25,10 +25,10 @@ import android.os.Build;
 import android.view.MotionEvent;
 import android.util.AttributeSet;
 
-import org.distorted.library.type.Float2D;
-import org.distorted.library.type.Float3D;
-import org.distorted.library.type.Float4D;
-import org.distorted.library.type.Interpolator3D;
+import org.distorted.library.type.Static2D;
+import org.distorted.library.type.Static3D;
+import org.distorted.library.type.Static4D;
+import org.distorted.library.type.Dynamic3D;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -40,11 +40,11 @@ public class ScratchpadSurfaceView extends GLSurfaceView
   private static float mCount;
   private static int mScrW, mScrH;
     
-  private static Float4D region;
-  private static Float2D  point;
+  private static Static4D region;
+  private static Static2D point;
     
-  private static Interpolator3D di;
-  private static Float3D v0, v1, v2, v3;
+  private static Dynamic3D di;
+  private static Static3D v0, v1, v2, v3;
      
 ///////////////////////////////////////////////////////////////////////////////////////////////////
     
@@ -55,7 +55,7 @@ public class ScratchpadSurfaceView extends GLSurfaceView
     mDuration = 10000;
     mCount    = 1.0f;
       
-    di = new Interpolator3D();
+    di = new Dynamic3D();
 
     di.setDuration(mDuration);
     di.setCount(mCount);
@@ -75,16 +75,16 @@ public class ScratchpadSurfaceView extends GLSurfaceView
       mRenderer = new ScratchpadRenderer(this);
       setRenderer(mRenderer);
         
-      point = new Float2D(0,0);
-      region= new Float4D(0,0,60,60);
+      point = new Static2D(0,0);
+      region= new Static4D(0,0,60,60);
             
       int h = 30;
       int r = 20;
         
-      v0 = new Float3D( 0, r, h );
-      v1 = new Float3D(-r, 0, h );
-      v2 = new Float3D( 0,-r, h );
-      v3 = new Float3D( r, 0, h );
+      v0 = new Static3D( 0, r, h );
+      v1 = new Static3D(-r, 0, h );
+      v2 = new Static3D( 0,-r, h );
+      v3 = new Static3D( r, 0, h );
         
       di.add(v0);
       di.add(v1);
diff --git a/src/main/java/org/distorted/examples/sink/SinkRenderer.java b/src/main/java/org/distorted/examples/sink/SinkRenderer.java
index 8f34ef9..b269005 100644
--- a/src/main/java/org/distorted/examples/sink/SinkRenderer.java
+++ b/src/main/java/org/distorted/examples/sink/SinkRenderer.java
@@ -30,8 +30,9 @@ import org.distorted.examples.R;
 import org.distorted.library.Distorted;
 import org.distorted.library.DistortedBitmap;
 import org.distorted.library.EffectTypes;
-import org.distorted.library.type.Float2D;
-import org.distorted.library.type.Float4D;
+import org.distorted.library.type.Static2D;
+import org.distorted.library.type.Static3D;
+import org.distorted.library.type.Static4D;
 
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
@@ -44,8 +45,8 @@ class SinkRenderer implements GLSurfaceView.Renderer
   {
   private GLSurfaceView mView;
   private DistortedBitmap sinkBmp;
-  private Float2D pLeft, pRight;
-  private Float4D Region;
+  private Static2D pLeft, pRight;
+  private Static4D Region;
   private int bmpHeight, bmpWidth;
     
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -54,9 +55,9 @@ class SinkRenderer implements GLSurfaceView.Renderer
     { 
     mView = v;
       
-    pLeft = new Float2D(214, 206);
-    pRight= new Float2D(390, 212);
-    Region= new Float4D(0,0,60,60);
+    pLeft = new Static2D(214, 206);
+    pRight= new Static2D(390, 212);
+    Region= new Static4D(0,0,60,60);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -78,14 +79,18 @@ class SinkRenderer implements GLSurfaceView.Renderer
     if( bmpHeight/bmpWidth > height/width )
       {
       int w = (height*bmpWidth)/bmpHeight;
-      sinkBmp.move((width-w)/2 ,0, 0);
-      sinkBmp.scale((float)height/bmpHeight);
+      float factor = (float)height/bmpHeight;
+
+      sinkBmp.move( new Static3D((width-w)/2,0,0) );
+      sinkBmp.scale( new Static3D(factor,factor,factor) );
       }
     else
       {
       int h = (width*bmpHeight)/bmpWidth;
-      sinkBmp.move(0 ,(height-h)/2, 0);
-      sinkBmp.scale((float)width/bmpWidth);
+      float factor = (float)width/bmpWidth;
+
+      sinkBmp.move( new Static3D(0,(height-h)/2,0) );
+      sinkBmp.scale( new Static3D(factor,factor,factor) );
       }
       
     Distorted.onSurfaceChanged(width, height); 
diff --git a/src/main/java/org/distorted/examples/starwars/StarWarsRenderer.java b/src/main/java/org/distorted/examples/starwars/StarWarsRenderer.java
index 2c9efa5..c2dc4d3 100644
--- a/src/main/java/org/distorted/examples/starwars/StarWarsRenderer.java
+++ b/src/main/java/org/distorted/examples/starwars/StarWarsRenderer.java
@@ -28,13 +28,13 @@ import javax.microedition.khronos.opengles.GL10;
 
 import org.distorted.examples.R;
 
-import org.distorted.library.type.Interpolator1D;
-import org.distorted.library.type.Interpolator3D;
+import org.distorted.library.type.Dynamic1D;
+import org.distorted.library.type.Dynamic3D;
 import org.distorted.library.DistortedNode;
-import org.distorted.library.type.Float1D;
-import org.distorted.library.type.Float2D;
-import org.distorted.library.type.Float3D;
-import org.distorted.library.type.Float4D;
+import org.distorted.library.type.Static1D;
+import org.distorted.library.type.Static2D;
+import org.distorted.library.type.Static3D;
+import org.distorted.library.type.Static4D;
 import org.distorted.library.message.EffectListener;
 import org.distorted.library.message.EffectMessage;
 import org.distorted.library.Distorted;
@@ -162,8 +162,9 @@ class StarWarsRenderer implements GLSurfaceView.Renderer, EffectListener
     int randomA, randomX, randomY, randomTime;
     float randomS, randomAlpha1, randomAlpha2;
        
-    Float3D rot = new Float3D(0,0,0);
-      
+    Static3D center = new Static3D(0,0,0);
+    Static3D axis   = new Static3D(0,0,1);
+
     for(int i=0; i<NUM_STARS; i++)
       {
       randomX = mRnd.nextInt(w);
@@ -174,34 +175,34 @@ class StarWarsRenderer implements GLSurfaceView.Renderer, EffectListener
       randomAlpha2 = 0.8f + 0.2f*mRnd.nextFloat();
       randomTime = 500+mRnd.nextInt(2000);
       
-      mStars[i].move( randomX,randomY,0);
-      mStars[i].scale(randomS);
-      mStars[i].rotate( rot, randomA);
+      mStars[i].move( new Static3D(randomX,randomY,0) );
+      mStars[i].scale( new Static3D(randomS,randomS,randomS) );
+      mStars[i].rotate( center, new Static1D(randomA), axis);
       
-      Interpolator1D di = new Interpolator1D();
+      Dynamic1D di = new Dynamic1D();
       di.setDuration(randomTime);
       di.setCount(0.0f);
       di.setNoise(0.3f);
-      di.add(new Float1D(randomAlpha1));
-      di.add(new Float1D(randomAlpha2));
+      di.add(new Static1D(randomAlpha1));
+      di.add(new Static1D(randomAlpha2));
       
-      mStars[i].alpha(di, null, new Float2D(0,0));
+      mStars[i].alpha(di, null, new Static2D(0,0));
       
       mRoot.attach(mStars[i]);
       }
       
     float scale = (0.5f*w/mGFFA.getWidth());
     
-    Interpolator1D di = new Interpolator1D();
+    Dynamic1D di = new Dynamic1D();
     di.setDuration(6000);
     di.setCount(0.5f);
-    di.add(new Float1D(1.0f));
-    di.add(new Float1D(1.0f));
-    di.add(new Float1D(0.0f));
+    di.add(new Static1D(1.0f));
+    di.add(new Static1D(1.0f));
+    di.add(new Static1D(0.0f));
     
-    mGFFA.move( w/5, h/3, 0);
-    mGFFA.scale(scale);
-    mGFFA.alpha(di, null, new Float2D(0,0));
+    mGFFA.move( new Static3D(w/5,h/3,0) );
+    mGFFA.scale( new Static3D(scale,scale,scale) );
+    mGFFA.alpha(di, null, new Static2D(0,0));
       
     mRoot.attach(mGFFA);
     mGFFA.addEventListener(this); 
@@ -348,16 +349,16 @@ class StarWarsRenderer implements GLSurfaceView.Renderer, EffectListener
         int initSize= (int)(3.0f*screenW/logoW);
         int finaSize= (int)(0.1f*screenW/logoW);
       
-        Interpolator3D di = new Interpolator3D();
+        Dynamic3D di = new Dynamic3D();
       
-        di.add(new Float3D(initSize,initSize,1));
-        di.add(new Float3D(finaSize,finaSize,1));
+        di.add(new Static3D(initSize,initSize,1));
+        di.add(new Static3D(finaSize,finaSize,1));
         di.setCount(0.5f);
         di.setDuration(10000);
       
-        mLogo.move( screenW/2, screenH/2, 0);
+        mLogo.move( new Static3D(screenW/2,screenH/2,0) );
         mLogo.scale(di);
-        mLogo.move( -logoW/2, -logoH/2, 0);
+        mLogo.move( new Static3D(-logoW/2,-logoH/2,0) );
       
         mRoot.attach(mLogo);
         mLogo.addEventListener(this);
@@ -374,21 +375,21 @@ class StarWarsRenderer implements GLSurfaceView.Renderer, EffectListener
         int backH  = mCrawlBackground.getHeight();
         float scale= (float)screenW/crawlW;
       
-        Interpolator3D di = new Interpolator3D();
+        Dynamic3D di = new Dynamic3D();
         di.setCount(0.5f);
         di.setDuration(60000);
-        di.add(new Float3D(screenW/2,+backH       , 0));
-        di.add(new Float3D(screenW/2,-scale*crawlH, 0));
+        di.add(new Static3D(screenW/2,+backH       , 0));
+        di.add(new Static3D(screenW/2,-scale*crawlH, 0));
         
-        mCrawlBackground.move(0,screenH-backH,0);
-        mCrawlBackground.rotate(new Float3D(screenW/2,backH,0), CRAWL_ANGLE, 1.0f, 0.0f, 0.0f);
+        mCrawlBackground.move( new Static3D(0,screenH-backH,0) );
+        mCrawlBackground.rotate(new Static3D(screenW/2,backH,0), new Static1D(CRAWL_ANGLE), new Static3D(1,0,0) );
         
         final int transpDistance = 5;
-        mCrawlBackground.smooth_alpha((1-transpDistance/2)*1.0f, new Float4D(0,0,transpDistance*backH,transpDistance*backH), new Float2D(screenW/2,(1-transpDistance)*backH));
+        mCrawlBackground.smooth_alpha((1-transpDistance/2)*1.0f, new Static4D(0,0,transpDistance*backH,transpDistance*backH), new Static2D(screenW/2,(1-transpDistance)*backH));
         
         mCrawl.move(di);
-        mCrawl.scale(scale);
-        mCrawl.move(-crawlW/2,0,0);
+        mCrawl.scale( new Static3D(scale,scale,scale) );
+        mCrawl.move( new Static3D(-crawlW/2,0,0) );
         
         mBackground = mRoot.attach(mCrawlBackground);
         mBackground.attach(mCrawl);
