diff --git a/Matopeli/Matopeli/Matopeli.cs b/Matopeli/Matopeli/Matopeli.cs
index 3de0e5fd0e8467ac7b34d70add6aa3411bee2b6b..86a3411aa81f34d8f610806c82e045884330470f 100644
--- a/Matopeli/Matopeli/Matopeli.cs
+++ b/Matopeli/Matopeli/Matopeli.cs
@@ -43,8 +43,8 @@ public class matopeli : PhysicsGame
     public List<Vector> MatoSijainti = new List<Vector>();
     public List<PhysicsObject> MatoKeho = new List<PhysicsObject>();
 
-    public int leveys = 40;
-    public int korkeus = 40;
+    public int leveys = 30;
+    public int korkeus = 30;
     
     private static readonly Image seinakuva = LoadImage("seina.png");
     private static readonly Image matopaakuva = LoadImage("matopaa.png");
@@ -57,6 +57,8 @@ public class matopeli : PhysicsGame
     private bool SuuntaOikea = false;
     private bool SuuntaVasen = false;
 
+    private bool MatoLiikkunut = true;
+
     private bool OmenaKentalla = true;
     public override void Begin()
     {
@@ -159,15 +161,19 @@ public class matopeli : PhysicsGame
     /// <summary>
     /// Tehdään aliohjelma, joka luo uusia osia madon perään.
     /// </summary>
-    private PhysicsObject LuoMatoKeho(Vector Paikka)
+    public PhysicsObject LuoMatoKeho()
     {
-        MatoMuu = new Objektit(leveys, korkeus);
+        MatoMuu = new Objektit(leveys-8, korkeus-8);
         MatoMuu.Tag = "matokeho";
         MatoMuu.Image = matokehokuva;
+        Vector Paikka = MatoSijainti[MatoSijainti.Count - 1 - MatoKeho.Count];
+        MatoMuu.IgnoresCollisionResponse = true;
         MatoMuu.Position = Paikka;
-        MatoMuu.AngularDamping = 0.0;
-        MatoKeho.Add(MatoMuu);
         Add(MatoMuu);
+        MatoKeho.Add(MatoMuu);
+       
+        
+
         return MatoMuu;
     }
     
@@ -175,7 +181,6 @@ public class matopeli : PhysicsGame
     {
         Omena.Destroy();
         OmenaKentalla = false;
-        LuoMatoKeho(MatoSijainti[MatoSijainti.Count-MatoKeho.Count-1]);
     }
     
      private void VaihdaSuuntaYlos()
@@ -266,54 +271,47 @@ public class matopeli : PhysicsGame
      /// </summary>
      private void PaivitaKentta()
      {
-         //Tämän on tarkoitus liikuttaa matoa, aina, kun se saapuu tasalukuun.
-         //tavoitteena oli,että mato ei liikkuisi, jos se on ruudun puolivälissä
-         
-         
-         
-         
-         
+         if (MatoLiikkunut == false)
+         {
+             return;
+         }
          if (OmenaKentalla == false)
          {
+             LuoMatoKeho();
              LuoOmena();
          }
+
+         MatoSijainti.Add(new Vector(Mato.X,Mato.Y));
          LiikutaMatoa();
-         if (MatoKeho.Count>0)
-         {
-             LiikutaKehoa();    
-         }
-         
+         LiikutaKehoa();
+         MatoSijainti.Add(new Vector(Mato.X,Mato.Y));    
+
      }
 
     private void LiikutaMatoa()
     {
         if (SuuntaYlos==true)
         {
-            Mato.Y = Mato.Y + leveys+5;
+            Mato.Y = Mato.Y + leveys;
             Mato.Angle = Angle.FromDegrees(90);
-            
         }
         if (SuuntaAlas==true)
         {
-            Mato.Y= Mato.Y - leveys+5;
+            Mato.Y= Mato.Y - leveys;
             Mato.Angle = Angle.FromDegrees(270);
-            
         }
         if (SuuntaOikea==true)
         {
-            Mato.X= Mato.X + leveys+5;
+            Mato.X= Mato.X + leveys;
             Mato.Angle = Angle.FromDegrees(0);
-            
+           
         }
         if (SuuntaVasen==true)
         {
-            Mato.X= Mato.X - leveys+5;
+            Mato.X= Mato.X - leveys;
             Mato.Angle = Angle.FromDegrees(180);
             
         }
-        
-        MatoSijainti.Add(Mato.Position);
-        
     }
 
     /// <summary>
@@ -322,13 +320,21 @@ public class matopeli : PhysicsGame
 
     private void LiikutaKehoa()
     {
-        MatoKeho[0].X = MatoSijainti[MatoSijainti.Count - 2].X;
-        MatoKeho[0].Y = MatoSijainti[MatoSijainti.Count - 2].Y;
-        for (int i = 1; i < MatoKeho.Count-1; i++)
+        if (MatoKeho.Count==0)
         {
-            MatoKeho[i].X = MatoKeho[i - 1].X;
-            MatoKeho[i].Y = MatoKeho[i - 1].Y;
+            return;
         }
+        MatoLiikkunut = false;
+        MatoKeho[0].X = MatoSijainti[MatoSijainti.Count - 1].X;
+        MatoKeho[0].Y = MatoSijainti[MatoSijainti.Count - 1].Y;
+        
+        for (int i = 1; i < MatoKeho.Count; i++)
+        {
+            MatoKeho[i].X = MatoSijainti[MatoSijainti.Count - 2*i].X;
+            MatoKeho[i].Y = MatoSijainti[MatoSijainti.Count - 2*i].Y;
+        }
+
+        MatoLiikkunut = true;
     }
 
 
@@ -337,7 +343,7 @@ public class matopeli : PhysicsGame
          public Objektit(double leveys, double korkeus)
         : base(leveys, korkeus)
         {
-            Mass = 10000;
+            Mass = 0;
             IsUpdated = true;
         }
     }