diff --git a/.stack-work/dist/29cc6475/build/choplifter/choplifter-tmp/Main.hi b/.stack-work/dist/29cc6475/build/choplifter/choplifter-tmp/Main.hi
index acb86521bc6735c758c61d7698bddcf7d2629d31..870037fa34b002eb939ba952aae8c70d1d47022b 100644
Binary files a/.stack-work/dist/29cc6475/build/choplifter/choplifter-tmp/Main.hi and b/.stack-work/dist/29cc6475/build/choplifter/choplifter-tmp/Main.hi differ
diff --git a/.stack-work/dist/29cc6475/build/choplifter/choplifter-tmp/Main.o b/.stack-work/dist/29cc6475/build/choplifter/choplifter-tmp/Main.o
index 99dafc9cdd93bcd581e808fec2888cda2f2cd0d6..cfdbb2a0613a4129cb309bd72d818159de2cfb08 100644
Binary files a/.stack-work/dist/29cc6475/build/choplifter/choplifter-tmp/Main.o and b/.stack-work/dist/29cc6475/build/choplifter/choplifter-tmp/Main.o differ
diff --git a/.stack-work/dist/29cc6475/build/choplifter/choplifter.exe b/.stack-work/dist/29cc6475/build/choplifter/choplifter.exe
index 094e4bc4bf5ce3ff2e8f9a63bac14bd8b0735015..0a66540561d496159f284f3e3969440723cd16f5 100644
Binary files a/.stack-work/dist/29cc6475/build/choplifter/choplifter.exe and b/.stack-work/dist/29cc6475/build/choplifter/choplifter.exe differ
diff --git a/.stack-work/dist/29cc6475/stack-build-caches/6eb920625479cbea8700e1720c6b6df9985d350a35c1107cb4b076b0c0ef5da3/exe-choplifter b/.stack-work/dist/29cc6475/stack-build-caches/6eb920625479cbea8700e1720c6b6df9985d350a35c1107cb4b076b0c0ef5da3/exe-choplifter
index 636d2d12af47bbe3209dac4f8ffdbff844a71f88..8a51d0818ac074061f76ce217e188900702074c9 100644
--- a/.stack-work/dist/29cc6475/stack-build-caches/6eb920625479cbea8700e1720c6b6df9985d350a35c1107cb4b076b0c0ef5da3/exe-choplifter
+++ b/.stack-work/dist/29cc6475/stack-build-caches/6eb920625479cbea8700e1720c6b6df9985d350a35c1107cb4b076b0c0ef5da3/exe-choplifter
@@ -7,6 +7,6 @@ C:\Users\Juuso\source\choplifter\choplifter.cabal:
   size: 1271
   modtime: 1603193097
 C:\Users\Juuso\source\choplifter\src\Main.hs:
-  hash: b7e12f343b8cd4b430b8311f28523946c2b8b3bfaa3736e2f2e3886840d85e33
-  size: 16467
-  modtime: 1603713654
+  hash: 5bd4807a924823ca1a2f2c3826216ce98094fc29afe0ae6e803270aaf6cd8e41
+  size: 17829
+  modtime: 1603717176
diff --git a/.stack-work/install/fe9ce87a/bin/choplifter.exe b/.stack-work/install/fe9ce87a/bin/choplifter.exe
index 692d8251554c1db5fdda2c434b0ea39337c9394b..6e4f938729e5cc7652a06ead33b98fc23406c8b0 100644
Binary files a/.stack-work/install/fe9ce87a/bin/choplifter.exe and b/.stack-work/install/fe9ce87a/bin/choplifter.exe differ
diff --git a/.stack-work/stack.sqlite3 b/.stack-work/stack.sqlite3
index 6bd0ff5c7b9333f0fb0891a519f1e0c3c11fea58..6b1a21b638c98bc1aef0222761b728793317b91b 100644
Binary files a/.stack-work/stack.sqlite3 and b/.stack-work/stack.sqlite3 differ
diff --git a/src/Main.hs b/src/Main.hs
index deaccd3d51a22aa65b3ea5de7672cd0ecaa2f775..1885e1feaad1ea53d7833beff2f4ad8a0ccd014c 100644
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -4,6 +4,7 @@ import Graphics.Gloss.Interface.Pure.Game
 import Graphics.Gloss.Geometry.Angle
 import Graphics.Gloss.Data.Vector
 import Graphics.Gloss.Geometry.Line
+import Data.List (partition) -- importtaa vain partitionin (ei haluta kaikkia nimiä sotkemaan koodia)
 import Prelude hiding (Down) -- peruskirjastossa oli määritelmä Down, joka nyt piilotettiin (vaikuttaa sort funktion järjestystä)
 
 alkutilanne :: PeliTilanne
@@ -16,8 +17,8 @@ alkutilanne =
         0
         0
         0 -- hemmoja
-    [Talo 100 300 500]
-    [Hemmo (700, 800), Hemmo (900, 800)]
+    [Talo 100 400 500]
+    [Hemmo (400, 100), Hemmo (600, 100)]
     )
 
 -- main :: IO ()
@@ -65,7 +66,7 @@ pysäytäPystyssä (vx, vy) = (vx, max 0 vy)
 
 onkoHyväLaskeutuminen :: Vector -> Float -> Bool  -- nopeus, kulma ja -> Bool
 onkoHyväLaskeutuminen nopeus kulma
-  | magV nopeus < 120 && abs kulma <= 10  = True -- magV laskee vektoreista niiden kokonaismitan (kuinka pitkä vektori)
+  | magV nopeus < 250 && abs kulma <= 13  = True -- magV laskee vektoreista niiden kokonaismitan (kuinka pitkä vektori)
   | otherwise = False
 
 päivitäPeliTilanne :: Float -> PeliTilanne -> PeliTilanne
@@ -86,7 +87,16 @@ päivitäPeliTilanne aikaedellisestä pelitilanne =
 päivitäPeliä :: Float -> Choplifter -> Choplifter
 päivitäPeliä aikaEdellisestä edellinenTila
   = case edellinenTila of 
-      Peli aika (kopteriX,kopteriY) teho (vX, vY) kulma kiihtyvyysKerroin hemmojKyydis talot hemmot
+      Peli
+        aika
+        (kopteriX,kopteriY)
+        teho 
+        (vX, vY)
+        kulma
+        kiihtyvyysKerroin
+        hemmojaKyydissä
+        talot
+        hemmot
         -> let
             (dX,dY) = kulmaJaTehoKiihtyvyydeksi teho kulma -- mites saa hidastumaan...? Mieti itse! §
             laskeKiihtyvKerroin = case teho < 0.01 of
@@ -94,18 +104,18 @@ päivitäPeliä aikaEdellisestä edellinenTila
                                               True -> kiihtyvyysKerroin + 0.07
                                               False -> 6
                                     False -> 1 -- asetetaan kiihtKerroin ykköseen
-                                                    
-              -- HUOM! Nyt tuo nopeus muuttuukin "realistisesti". Jos haluat, lisää myös se, että liikkuu "itsestään" ilman tehoakin (eli muuttaa suoraan x ja y koordinaatteja).
+            nouseekoKyytiin hemmo = magV (hemmo_sijainti hemmo #- (kopteriX,kopteriY)) < 50
+            (hemmotKopteriin, _hemmotUlkona) = partition nouseekoKyytiin hemmot
         in Peli (aika + aikaEdellisestä)
                 (kopteriX+aikaEdellisestä * vX,   -- tässä tuo vanha liikkuminen talteen: + (vX*aikaEdellisestä*10),
-                max 0 (kopteriY+aikaEdellisestä * vY)) -- köyhän miehen painovoima tuo miinus... Kato perkele, tässä on määrätty että ei voi mennä "maasta läpi". Toisin sanoen kopterin y-koordinaatti ei voi alittaa kohtaa 0.
+                  max 0 (kopteriY+aikaEdellisestä * vY)) -- köyhän miehen painovoima tuo miinus... Kato perkele, tässä on määrätty että ei voi mennä "maasta läpi". Toisin sanoen kopterin y-koordinaatti ei voi alittaa kohtaa 0.
                 teho
                 ((vX + dX) * 0.97, ((vY + dY) * 0.97) - 10 * kiihtyvyysKerroin)  -- olkoon tuo kerroin kuin ilmanvastus
                 kulma
                 laskeKiihtyvKerroin
-                hemmojKyydis
+                (hemmojaKyydissä + genericLength hemmotKopteriin)  -- kadotetaan loput
                 talot
-                hemmot
+                (map (päivitäHemmoa edellinenTila) hemmot)
   -- HUOM! TODO: Oikeasti kaikki missä summataan tässä päivitäPeliä, pitäisi
   -- oikeasti kertoa tuolla aikaEdellisestä, mutta se vaatii vähän arvojen
   -- ja ehkä koodinkin muokkaamista!
@@ -250,18 +260,47 @@ data Choplifter  -- modelin tilalle tehdäänkin tämä  -- tehdään tietotyypp
       ,cl_hemmot :: [Hemmo]
   } -- Annettiin cl_nimet koska muuten voisi tulla inhimillisiä virheitä helpommin
 
+korkeusKohdassa :: Float -> Choplifter -> Float  -- korkeuskoordinaatti eka arg
+korkeusKohdassa kohta peli = maybe 0 maximum1 . nonEmpty . map osuukoTaloon . cl_talot $ peli
+-- selkeämpi kylläkin tehdä näin: maybe 0 maximum1 (nonEmpty (map osuukoTaloon (cl_talot peli)))
+  where
+    osuukoTaloon :: Talo -> Float
+    osuukoTaloon talo
+      | abs (talo_sijainti talo - kohta) < (talo_leveys talo / 2) = talo_korkeus
+        talo
+      | otherwise = 0
+
 data Hemmo = Hemmo {hemmo_sijainti :: Point}
 
--- päivitäHemmoa :: Point -> Hemmo -> Hemmo
--- päivitäHemmoa kopteri hemmo
---         | liikkuu = hemmo {hemmo_sijainti = hemmo_sijainti hemmo #+ (suunta,0)}
---   where
---       liikkuu = magV (kopteri #- hemmo_sijainti hemmo) > 600
---       suunta
---         | fst kopteri < fst (hemmo_sijainti hemmo)
---             = -2
---         | otherwise             = 2
---     in if liikkuu
+haluaakoLiikkua :: Choplifter -> Hemmo -> Bool
+haluaakoLiikkua peli hemmo = haluaaLiikkua && not putoaako
+     where
+        kopterinPaikka = cl_paikka peli
+
+        putoaako = abs (korkeusEdessä - snd (hemmo_sijainti hemmo)) > 50
+        korkeusEdessä = korkeusKohdassa (fst (hemmo_sijainti hemmo) + suunta * 2)
+                                        peli  
+
+        haluaaLiikkua = magV (kopterinPaikka #- hemmo_sijainti hemmo) < 600
+        suunta = minneHemmoMenisi peli hemmo
+
+minneHemmoMenisi :: Choplifter -> Hemmo -> Float
+minneHemmoMenisi peli hemmo
+            | fst kopterinPaikka < fst (hemmo_sijainti hemmo)  
+                = -1
+            | otherwise             
+                =  1
+     where
+        kopterinPaikka = cl_paikka peli
+
+päivitäHemmoa :: Choplifter -> Hemmo -> Hemmo
+päivitäHemmoa peli hemmo 
+        | haluaakoLiikkua peli hemmo 
+            = hemmo{hemmo_sijainti = hemmo_sijainti hemmo #+ (suunta,0)}
+        | otherwise 
+            = hemmo
+    where   
+     suunta = minneHemmoMenisi peli hemmo
 
 piirräHemmo :: Float -> Hemmo -> Picture
 piirräHemmo aika hemmo = let