diff --git a/Matopeli/Matopeli/Matopeli.cs b/Matopeli/Matopeli/Matopeli.cs
index 0762800f9a00c5423d4e5b7b6d90457273b19a26..3de0e5fd0e8467ac7b34d70add6aa3411bee2b6b 100644
--- a/Matopeli/Matopeli/Matopeli.cs
+++ b/Matopeli/Matopeli/Matopeli.cs
@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using System.Linq;
 using System.Security.Cryptography.X509Certificates;
 using Jypeli;
 using Jypeli.Assets;
@@ -90,7 +91,7 @@ public class matopeli : PhysicsGame
     }
     private PhysicsObject LuoMato()
     {
-        Mato = new Objektit(leveys, korkeus, new Vector(0,0));
+        Mato = new Objektit(leveys, korkeus);
         Mato.Image = matopaakuva;
         Add(Mato);
         Mato.Tag = "mato";
@@ -107,40 +108,37 @@ public class matopeli : PhysicsGame
         
         Vector paikka = Level.GetRandomPosition();
 
-        for (int i = 0; i < 20; i++)
+        for (int i = 0; i < 100; i++)
         {
-            if (paikka.X-Mato.X<20)
+            if (paikka.X-Mato.X<5)
             {
-                if (paikka.Y-Mato.Y<20)
-                {
-                    paikka = Level.GetRandomPosition();
-                }
+                paikka = Level.GetRandomPosition();
             }
-            if (paikka.X<70)
+            if (paikka.X-Mato.Y<5)
             {
-                if (paikka.X<-70)
-                {
-                    paikka = Level.GetRandomPosition();
-                } 
+                paikka= Level.GetRandomPosition();
             }
-            else
+            if (paikka.X<30)
             {
-                paikka = Level.GetRandomPosition();
+                if (paikka.X < -30)
+                {
+                    paikka = Level.GetRandomPosition();
+                }
             }
-            if (paikka.Y<70)
+            if (paikka.Y<30)
             {
-                if (paikka.Y<-70)
+                if (paikka.Y<-30)
                 {
                     paikka = Level.GetRandomPosition();
                 } 
             }
             else
             {
-                paikka = Level.GetRandomPosition();
+                break;
             }
         }
         
-        Omena = new Objektit(korkeus, leveys, paikka);
+        Omena = new Objektit(korkeus, leveys);
         Omena.Shape = Shape.Circle;
         Omena.Position = paikka;
         Omena.Image = omenakuva;
@@ -163,10 +161,11 @@ public class matopeli : PhysicsGame
     /// </summary>
     private PhysicsObject LuoMatoKeho(Vector Paikka)
     {
-        MatoMuu = new Objektit(leveys, korkeus, Paikka);
+        MatoMuu = new Objektit(leveys, korkeus);
         MatoMuu.Tag = "matokeho";
         MatoMuu.Image = matokehokuva;
         MatoMuu.Position = Paikka;
+        MatoMuu.AngularDamping = 0.0;
         MatoKeho.Add(MatoMuu);
         Add(MatoMuu);
         return MatoMuu;
@@ -176,6 +175,7 @@ public class matopeli : PhysicsGame
     {
         Omena.Destroy();
         OmenaKentalla = false;
+        LuoMatoKeho(MatoSijainti[MatoSijainti.Count-MatoKeho.Count-1]);
     }
     
      private void VaihdaSuuntaYlos()
@@ -255,7 +255,7 @@ public class matopeli : PhysicsGame
      private void LuoAikalaskuri()
         {
             Timer aikalaskuri = new Timer();
-            aikalaskuri.Interval = 0.11;
+            aikalaskuri.Interval = 0.1;
             aikalaskuri.Timeout += PaivitaKentta;
             aikalaskuri.Start();
         }
@@ -269,19 +269,19 @@ public class matopeli : PhysicsGame
          //Tämän on tarkoitus liikuttaa matoa, aina, kun se saapuu tasalukuun.
          //tavoitteena oli,että mato ei liikkuisi, jos se on ruudun puolivälissä
          
-
-         MatoSijainti.Add(Mato.Position);
-         LiikutaMatoa();
-             
+         
          
          
          
          if (OmenaKentalla == false)
          {
-             LuoMatoKeho(MatoSijainti[MatoSijainti.Count-MatoKeho.Count-1]);
-             
              LuoOmena();
          }
+         LiikutaMatoa();
+         if (MatoKeho.Count>0)
+         {
+             LiikutaKehoa();    
+         }
          
      }
 
@@ -289,35 +289,52 @@ public class matopeli : PhysicsGame
     {
         if (SuuntaYlos==true)
         {
-            Mato.Y = Mato.Y + leveys;
+            Mato.Y = Mato.Y + leveys+5;
             Mato.Angle = Angle.FromDegrees(90);
+            
         }
         if (SuuntaAlas==true)
         {
-            Mato.Y= Mato.Y - leveys;
+            Mato.Y= Mato.Y - leveys+5;
             Mato.Angle = Angle.FromDegrees(270);
+            
         }
         if (SuuntaOikea==true)
         {
-            Mato.X= Mato.X + leveys;
+            Mato.X= Mato.X + leveys+5;
             Mato.Angle = Angle.FromDegrees(0);
+            
         }
         if (SuuntaVasen==true)
         {
-            Mato.X= Mato.X - leveys;
+            Mato.X= Mato.X - leveys+5;
             Mato.Angle = Angle.FromDegrees(180);
+            
         }
-
+        
+        MatoSijainti.Add(Mato.Position);
+        
     }
 
     /// <summary>
     /// Tehdään silmukka, joka käy madon kaikki sijainnit ja liikuttaa madon muut osat niiden mukaan.
     /// </summary>
 
+    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++)
+        {
+            MatoKeho[i].X = MatoKeho[i - 1].X;
+            MatoKeho[i].Y = MatoKeho[i - 1].Y;
+        }
+    }
+
 
     public class Objektit : PhysicsObject
     {
-         public Objektit(double leveys, double korkeus, Vector paikka)
+         public Objektit(double leveys, double korkeus)
         : base(leveys, korkeus)
         {
             Mass = 10000;