   babies: ->
     cradles = @makeCradles()
     orchards = @makeCradles()
+    organisms = []
     @visitThings(
       (t) =>
         points = @pointsNear t.x, t.y, t.radius * 2
+        organisms.push t if t instanceof Organism
         @removeCradles cradles, points unless t instanceof Plant
         @removeCradles orchards, points unless t instanceof Stone
       false, true
     )
-    @visitThings (t) ->
-      if t instanceof Organism
-        c = if t instanceof Plant then orchards else cradles
-        t.reproduce c
+    for t in shuffle organisms
+      c = if t instanceof Plant then orchards else cradles
+      t.reproduce c
   findCradles: (allCradles, newCradles) ->
     grep newCradles, (pt) -> allCradles[pt[0]][pt[1]]
   removeCradles: (allCradles, points) ->

      switch t.type
        when Herbivore
          for other in t.touching()
            t.eat other if other instanceof Plant
        when Carnivore
          for other in t.touching()
            t.eat other if other instanceof Herbivore
      if t instanceof Animal and t.hp <= 0 or t.succumbs()
        @remThing t

      mutationRange: [ .1, 0.01, 1 ]
    }
  # how far away from its mother a baby can be "born"
  dispersalRadius: -> 2.5 * @radius
  # utility function for extending default genes
  mergeGenes: ( base, ext ) ->
    genes = {}
