diff --git a/src/HushGP/GP.hs b/src/HushGP/GP.hs
index 5f74f19..3bc4853 100644
--- a/src/HushGP/GP.hs
+++ b/src/HushGP/GP.hs
@@ -7,6 +7,8 @@ import Data.List (sort, uncons)
 import HushGP.GP.PushArgs
 import HushGP.Genome
 import HushGP.State
+import HushGP.GP.Variation
+import HushGP.GP.Downsample
 
 -- import Debug.Trace (trace, traceStack)
 
@@ -58,7 +60,8 @@ gpLoop' pushArgs generation evaluations population indexedTrainingData = do
           print "Incomplete Run, saving the best so far."
         | otherwise = gpLoop' pushArgs (succ generation)
             (evaluations + (populationSize pushArgs * length (fst $ trainingData pushArgs)) + (if generation `mod` downsampleParentsGens pushArgs == 0 then length parentReps * (length (fst indexedTrainingData) - length (fst $ trainingData pushArgs)) else 0) + (if bestIndPassesDownsample then length (fst indexedTrainingData) - length (fst $ trainingData pushArgs) else 0))
-            (if elitism then bestInd : )
+            (if elitism pushArgs then bestInd : replicate (populationSize epsilonPushArgs - 1) (newIndividual epsilonPushArgs evaledPop) else replicate (populationSize epsilonPushArgs) (newIndividual epsilonPushArgs evaledPop))
+            (if enableDownsampling pushArgs then if (generation `mod` downsampleParentsGens pushArgs) == 0 then updateCaseDistances repEvaluatedPop indexedTrainingData indexedTrainingData (informedDownsamplingType pushArgs) (solutionErrorThreshold pushArgs / fromIntegral @Int @Double (length $ fst indexedTrainingData)) else indexedTrainingData else indexedTrainingData)
   nextAction
   where
     -- \| This will have downsampling added to it later.