Index: framspy/evolalg/base/experiment_niching_abc.py
===================================================================
--- framspy/evolalg/base/experiment_niching_abc.py	(revision 1303)
+++ framspy/evolalg/base/experiment_niching_abc.py	(revision 1304)
@@ -85,6 +85,7 @@
             i.fitness = DeapFitness(tuple((d, i.rawfitness)))
 
-    def do_nslc_dissim(self, population):
-        dissim_matrix = self.dissimilarity(population)
+    def do_nslc_dissim(self, population_structures, pop_offspring):
+        population_archive = population_structures.archive + pop_offspring
+        dissim_matrix = self.dissimilarity(population_archive)
         normalized_matrix = self.normalize_dissim(dissim_matrix)
         for i in range(len(normalized_matrix)):
@@ -93,18 +94,19 @@
             dissim_value = np.mean(np.take_along_axis(
                 temp_dissim, index_array, axis=-1))
-            temp_fitness = population[i].rawfitness
+            temp_fitness = population_archive[i].rawfitness
             population_of_most_similar = list(
-                map(population.__getitem__, self.transform_indexes(i, index_array)))
+                map(population_archive.__getitem__, self.transform_indexes(i, index_array)))
             temp_ind_fit = sum(
                 [1 for ind in population_of_most_similar if ind.rawfitness < temp_fitness])
-            population[i].fitness = DeapFitness(
+            population_archive[i].fitness = DeapFitness(
                 tuple((dissim_value, temp_ind_fit)))
-
-    def make_new_population_nsga2(self, population, prob_mut, prob_xov):
+        population_structures.update_archive(dissim_matrix, population_archive)
+
+    def make_new_population_nsga2(self, population_structures, prob_mut, prob_xov):
         expected_mut = int(self.popsize * prob_mut)
         expected_xov = int(self.popsize * prob_xov)
         assert expected_mut + expected_xov <= self.popsize, "If probabilities of mutation (%g) and crossover (%g) added together exceed 1.0, then the population would grow every generation..." % (prob_mut, prob_xov)
-        assignCrowdingDist(population)
-        offspring = tools.selTournamentDCD(population, self.popsize)
+        assignCrowdingDist(population_structures.population)
+        offspring = tools.selTournamentDCD(population_structures.population, self.popsize)
 
         def addGenotypeIfValid(ind_list, genotype):
@@ -139,15 +141,15 @@
 
         # select clones to fill up the new population until we reach the same size as the input population
-        while len(newpop) < len(population):
+        while len(newpop) < len(population_structures.population):
             ind, counter = get_individual(offspring, counter)
             newpop.append(Individual().copyFrom(ind))
 
-        pop_offspring = population + newpop # this is OK for NSGA2, but TODO verify if this should also be used for NSLC? 
-        print(len(pop_offspring))
-        if self.fit == "nslc": # TODO should NSLC be also equipped with a novelty archive? (with an admittance threshold?)
-            self.do_nslc_dissim(pop_offspring)
+        pop_offspring = population_structures.population + newpop # used both for nsga2 and nslc 
+        # print(len(pop_offspring)) # for debugging
+        if self.fit == "nslc":
+            self.do_nslc_dissim(population_structures, pop_offspring)
         elif self.fit == "nsga2":
             self.do_nsga2_dissim(pop_offspring)
-        out_pop = tools.selNSGA2(pop_offspring, len(population))
+        out_pop = tools.selNSGA2(pop_offspring, len(population_structures.population))
         return out_pop
 
@@ -169,5 +171,5 @@
             if type(self.population_structures.population[0].fitness) == DeapFitness:
                 self.population_structures.population = self.make_new_population_nsga2(  # used both for nsga2 and nslc
-                    self.population_structures.population, pmut, pxov)
+                    self.population_structures, pmut, pxov)
             else:
                 self.population_structures.population = self.make_new_population(
Index: framspy/evolalg/frams_base/experiment_frams_niching.py
===================================================================
--- framspy/evolalg/frams_base/experiment_frams_niching.py	(revision 1303)
+++ framspy/evolalg/frams_base/experiment_frams_niching.py	(revision 1304)
@@ -43,5 +43,5 @@
             self.do_nsga2_dissim(self.population_structures.population)
         if self.fit == "nslc":
-            self.do_nslc_dissim(self.population_structures.population)
+            self.do_nslc_dissim(self.population_structures, self.population_structures.population)
 
     def dissimilarity(self, population):
