diff --git a/src/nature/species.jl b/src/nature/species.jl
index 433fe3124c1423c67196f8496beed69dc6ee35da..9cef46320f807d64beadaca1e137e89fd0512758 100644
--- a/src/nature/species.jl
+++ b/src/nature/species.jl
@@ -3,33 +3,33 @@
 ### This file implements the macros needed for the species DSL.
 ###
 
-#TODO configure species traits via a separate TOML file
+#XXX configure species traits via a separate TOML file?
 
 ##TODO replace the current registerspecies()
 function registerspecies(speciesdict)
-    speciesdict["testphase"]()
+    println(speciesdict)
+    processeddict = Dict{String,Any}()
+    for k in keys(speciesdict)
+        processeddict[string(k)] = speciesdict[k]
+    end
+    processeddict["testphase"]()
 end
 
+##TODO docstring
 macro species(name, body)
-    speciesdict = gensym()
+    speciesfun = gensym()
     quote
-        $speciesdict = Dict{String, Any}("name"=>string($(QuoteNode(name))))
-        for line in $(body.args)
-            (typeof(line) == LineNumberNode) && continue
-            if line.head == :macrocall
-                line = macroexpand($(__module__), line)
-                line.args[2] = Core.eval($(__module__), line.args[2])
-            end
-            if line.head == :(=)
-                $speciesdict[string(line.args[1])] = line.args[2]
-            end
+        Core.@__doc__ $speciesfun = function()
+            $(esc(:name)) = string($(QuoteNode(name)))
+            $(esc(body))
+            return Base.@locals
         end
-        registerspecies($speciesdict)
+        registerspecies($speciesfun())
     end
 end
 
+##TODO docstring
 macro phase(name, body)
-    #:($(esc(name)) = function() $body end) #for testing
     :($(esc(name)) = function(animal::Animal, model::AgentBasedModel) $body end)
+    #:($(esc(name)) = function() $body end) #for testing
 end
-