diff --git a/Manifest.toml b/Manifest.toml
index cd64321ea3d56e86071173728f7d37dc9db3f594..556bb3293c810c289aebfa80104d14363fa0408a 100644
--- a/Manifest.toml
+++ b/Manifest.toml
@@ -2,7 +2,12 @@
 
 julia_version = "1.9.3"
 manifest_format = "2.0"
-project_hash = "75d54abf5eeb3f6918bd64a71e5b724e43cc9f03"
+project_hash = "4d5b11ea26978b228752be7c1554ae6a3bf688b4"
+
+[[deps.ANSIColoredPrinters]]
+git-tree-sha1 = "574baf8110975760d391c710b6341da1afa48d8c"
+uuid = "a4c015fc-c6ff-483c-b24f-f7ea428134e9"
+version = "0.0.1"
 
 [[deps.AbstractFFTs]]
 deps = ["LinearAlgebra"]
@@ -390,6 +395,12 @@ version = "1.0.0"
 deps = ["Printf"]
 uuid = "ade2ca70-3891-5945-98fb-dc099432e06a"
 
+[[deps.DefaultApplication]]
+deps = ["InteractiveUtils"]
+git-tree-sha1 = "c0dfa5a35710a193d83f03124356eef3386688fc"
+uuid = "3f0dd361-4fe0-5fc6-8523-80b14ec94d85"
+version = "1.1.0"
+
 [[deps.DefineSingletons]]
 git-tree-sha1 = "0fba8b706d0178b4dc7fd44a96a92382c9065c2c"
 uuid = "244e2a9f-e319-4986-a169-4d1fe445cd52"
@@ -476,6 +487,12 @@ git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d"
 uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae"
 version = "0.9.3"
 
+[[deps.Documenter]]
+deps = ["ANSIColoredPrinters", "AbstractTrees", "Base64", "Dates", "DocStringExtensions", "Downloads", "IOCapture", "InteractiveUtils", "JSON", "LibGit2", "Logging", "Markdown", "MarkdownAST", "Pkg", "PrecompileTools", "REPL", "RegistryInstances", "SHA", "Test", "Unicode"]
+git-tree-sha1 = "662fb21ae7fad33e044c2b59ece832fdce32c171"
+uuid = "e30172f5-a6a5-5a46-863b-614d45cd2de4"
+version = "1.1.2"
+
 [[deps.Downloads]]
 deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"]
 uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6"
@@ -516,6 +533,12 @@ git-tree-sha1 = "2140cd04483da90b2da7f99b2add0750504fc39c"
 uuid = "411431e0-e8b7-467b-b5e0-f676ba4f2910"
 version = "0.1.2"
 
+[[deps.EzXML]]
+deps = ["Printf", "XML2_jll"]
+git-tree-sha1 = "0fa3b52a04a4e210aeb1626def9c90df3ae65268"
+uuid = "8f5d6c58-4d21-5cfd-889c-e3ad7ee6a615"
+version = "1.1.0"
+
 [[deps.FFMPEG]]
 deps = ["FFMPEG_jll"]
 git-tree-sha1 = "b57e3acbe22f8484b4b5ff66a7499717fe1a9cc8"
@@ -780,6 +803,12 @@ git-tree-sha1 = "f218fe3736ddf977e0e772bc9a586b2383da2685"
 uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a"
 version = "0.3.23"
 
+[[deps.IOCapture]]
+deps = ["Logging", "Random"]
+git-tree-sha1 = "d75853a0bdbfb1ac815478bacd89cd27b550ace6"
+uuid = "b5f81e59-6552-4d32-b1f0-c071b021bf89"
+version = "0.2.3"
+
 [[deps.ImageAxes]]
 deps = ["AxisArrays", "ImageBase", "ImageCore", "Reexport", "SimpleTraits"]
 git-tree-sha1 = "2e4520d67b0cef90865b3ef727594d2a58e0e1f8"
@@ -804,18 +833,6 @@ git-tree-sha1 = "bca20b2f5d00c4fbc192c3212da8fa79f4688009"
 uuid = "82e4d734-157c-48bb-816b-45c225c6df19"
 version = "0.6.7"
 
-[[deps.ImageMagick]]
-deps = ["FileIO", "ImageCore", "ImageMagick_jll", "InteractiveUtils"]
-git-tree-sha1 = "b0b765ff0b4c3ee20ce6740d843be8dfce48487c"
-uuid = "6218d12a-5da1-5696-b52f-db25d2ecc6d1"
-version = "1.3.0"
-
-[[deps.ImageMagick_jll]]
-deps = ["JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pkg", "Zlib_jll", "libpng_jll"]
-git-tree-sha1 = "1c0a2295cca535fabaf2029062912591e9b61987"
-uuid = "c73af94c-d91f-53ed-93a7-00f77d67a9d7"
-version = "6.9.10-12+3"
-
 [[deps.ImageMetadata]]
 deps = ["AxisArrays", "ImageAxes", "ImageBase", "ImageCore"]
 git-tree-sha1 = "355e2b974f2e3212a75dfb60519de21361ad3cb7"
@@ -977,6 +994,11 @@ git-tree-sha1 = "f2355693d6778a178ade15952b7ac47a4ff97996"
 uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f"
 version = "1.3.0"
 
+[[deps.LazilyInitializedFields]]
+git-tree-sha1 = "8f7f3cabab0fd1800699663533b6d5cb3fc0e612"
+uuid = "0e77f7df-68c5-4e49-93ce-4cd80f5598bf"
+version = "1.2.2"
+
 [[deps.LazyArtifacts]]
 deps = ["Artifacts", "Pkg"]
 uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3"
@@ -1166,6 +1188,12 @@ version = "0.4.2"
 deps = ["Base64"]
 uuid = "d6f4376e-aef5-505a-96c1-9c027394607a"
 
+[[deps.MarkdownAST]]
+deps = ["AbstractTrees", "Markdown"]
+git-tree-sha1 = "465a70f0fc7d443a00dcdc3267a497397b8a3899"
+uuid = "d0879d2d-cac2-40c8-9cee-1863dc0c7391"
+version = "0.1.2"
+
 [[deps.Match]]
 git-tree-sha1 = "1d9bc5c1a6e7ee24effb93f175c9342f9154d97f"
 uuid = "7eb4fadd-790c-5f42-8a69-bfa0b872bfbf"
@@ -1410,12 +1438,12 @@ uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0"
 version = "2.7.2"
 
 [[deps.Persefone]]
-deps = ["Agents", "ArgParse", "CSV", "CairoMakie", "DataFrames", "DataFramesMeta", "Dates", "Distributed", "FileIO", "GeoArrays", "ImageMagick", "Logging", "LoggingExtras", "Pkg", "Random", "Serialization", "StableRNGs", "StatsBase", "TOML", "Test", "TiffImages"]
-git-tree-sha1 = "80a1b800473aff48d57c321505d77846fa04f66e"
+deps = ["Agents", "ArgParse", "CSV", "CairoMakie", "DataFrames", "DataFramesMeta", "Dates", "Distributed", "Documenter", "FileIO", "GeoArrays", "Logging", "LoggingExtras", "Pkg", "Random", "Serialization", "StableRNGs", "StatsBase", "TOML", "Test", "TiffImages"]
+git-tree-sha1 = "f203aeee6b8a2e235f98bea62d8d43503d6e4f5a"
 repo-rev = "master"
 repo-url = "https://git.idiv.de/persefone/persefone-model.git"
 uuid = "039acd1d-2a07-4b33-b082-83a1ff0fd136"
-version = "0.3.6"
+version = "0.4.0"
 
 [[deps.Pixman_jll]]
 deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LLVMOpenMP_jll", "Libdl"]
@@ -1428,6 +1456,12 @@ deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "
 uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
 version = "1.9.2"
 
+[[deps.PkgGraph]]
+deps = ["DefaultApplication", "EzXML", "Pkg", "TOML", "URIs", "UUIDs"]
+git-tree-sha1 = "9423eabd388f50d669ec13cddddda2709dc4fa28"
+uuid = "f9c1b9e4-72e8-4a14-ade5-14f45fc35f11"
+version = "0.6.0"
+
 [[deps.PkgVersion]]
 deps = ["Pkg"]
 git-tree-sha1 = "f9501cc0430a26bc3d156ae1b5b0c1b47af4d6da"
@@ -1593,6 +1627,12 @@ git-tree-sha1 = "ec9bde2e30bc221e05e20fcec9a36a9c315e04a6"
 uuid = "74f56ac7-18b3-5285-802d-d4bd4f104033"
 version = "3.0.0"
 
+[[deps.RegistryInstances]]
+deps = ["LazilyInitializedFields", "Pkg", "TOML", "Tar"]
+git-tree-sha1 = "ffd19052caf598b8653b99404058fce14828be51"
+uuid = "2792f1a3-b283-48e8-9a74-f99dce5104f3"
+version = "0.1.0"
+
 [[deps.RelocatableFolders]]
 deps = ["SHA", "Scratch"]
 git-tree-sha1 = "22c5201127d7b243b9ee1de3b43c408879dff60f"
diff --git a/Project.toml b/Project.toml
index 4e49c2b2342be08f53c4718ab561e2d78836f0ed..f40e61e7cd7076f8f30e296428a9cafec7eaa4f0 100644
--- a/Project.toml
+++ b/Project.toml
@@ -15,6 +15,7 @@ GeometryBasics = "5c1252a2-5f33-56bf-86c9-59e7332b4326"
 Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a"
 Observables = "510215fc-4207-5dde-b226-833fc4488ee2"
 Persefone = "039acd1d-2a07-4b33-b082-83a1ff0fd136"
+PkgGraph = "f9c1b9e4-72e8-4a14-ade5-14f45fc35f11"
 QML = "2db162a6-7e43-52c3-8d84-290c1c42d82a"
 Qt6Base_jll = "c0090381-4147-56d7-9ebc-da0b1113ec56"
 ResumableFunctions = "c5292f4c-5179-55e1-98c5-05642aab7184"
diff --git a/guiparams.toml b/guiparams.toml
index e4c4e0b57db11563dc48a6ef2d379eae58cd97fe..b3ba1e8279cf0d8cdb8865e657fbdbcc97062ac9 100644
--- a/guiparams.toml
+++ b/guiparams.toml
@@ -30,8 +30,8 @@ weatherfile = "data/regions/jena-small/weather.csv" # location of the weather da
 farmmodel = "FieldManager" # which version of the farm model to use (not yet implemented)
 
 [nature]
-targetspecies = ["Wolpertinger", "Wyvern"] # list of target species to simulate
-#targetspecies = ["Skylark"] # species to be simulated
+#targetspecies = ["Wolpertinger", "Wyvern"] # list of target species to simulate
+targetspecies = ["Skylark"] # species to be simulated
 popoutfreq = "daily" # output frequency population-level data, daily/monthly/yearly/end/never
 indoutfreq = "daily" # output frequency individual-level data, daily/monthly/yearly/end/never
 insectmodel = ["season", "habitat", "pesticides", "weather"] # factors affecting insect growth
diff --git a/src/GUI.jl b/src/GUI.jl
index 89fed748580b488744e32e3558d61077b98c23a0..cf461a4dd1e74c4a29611dd12f458879cb46d4d3 100644
--- a/src/GUI.jl
+++ b/src/GUI.jl
@@ -67,15 +67,13 @@ function render_map(screen)
         inds = @lift(@transform!(@subset(model.datatables["individuals"],
                                          :Date .== $date-Day(1)),
                                  :Y = size(landcover)[2] .- :Y))
-        if size(inds[])[1] > 0
-            update_theme!(palette=(color=cgrad(:seaborn_bright,
-                                               length(@param(nature.targetspecies))),),
-                          cycle=[:color])
-            for s in @param(nature.targetspecies)
-                points = @lift(Matrix{Float32}(
-                    @select!(@subset($inds, :Species .== s), :X, :Y)))
-                scatter!(mapimage[1,1], points, markersize=8)
-            end
+        ncolors = max(2, length(@param(nature.targetspecies)))
+        update_theme!(palette=(color=cgrad(:seaborn_bright, ncolors),),
+                      cycle=[:color])
+        for s in @param(nature.targetspecies)
+            points = @lift(Matrix{Float32}(
+                @select!(@subset($inds, :Species .== s), :X, :Y)))
+            scatter!(mapimage[1,1], points, markersize=8)
         end
     end
     display(screen, mapimage.scene)
@@ -92,9 +90,8 @@ function render_plot(screen)
         end
         #XXX other colour schemes: :tab10, :Accent_8, :Dark2_8, :Paired_12, :Set1_9
         # https://juliagraphics.github.io/ColorSchemes.jl/stable/catalogue/
-        update_theme!(palette=(color=cgrad(:seaborn_bright,
-                                           length(@param(nature.targetspecies))),),
-                      cycle=[:color])
+        ncolors = max(2, length(@param(nature.targetspecies)))
+        update_theme!(palette=(color=cgrad(:seaborn_bright, ncolors),), cycle=[:color])
         plotimage = Figure()
         dates = @param(core.startdate):@param(core.enddate)
         axlimits = @lift((1, length(dates), 0, maximum($pops[!,:Abundance])))
diff --git a/src/PersefoneDesktop.jl b/src/PersefoneDesktop.jl
index 66ed3d04b17f4589d343b00f0feb726fbad774a5..bbcfa13b88a53d266c7ad34be5fddbcf7ee77be8 100644
--- a/src/PersefoneDesktop.jl
+++ b/src/PersefoneDesktop.jl
@@ -27,6 +27,8 @@ using
     DataFramesMeta,
     ResumableFunctions
 
+# To visualise dependencies, see here: https://tfiers.github.io/PkgGraph.jl/v0.6/
+
 include("variables.jl")
 include("logic.jl")
 include("config.jl")
diff --git a/src/config.jl b/src/config.jl
index 33c17a73aed9c967526308cf47cebceb27521cdc..c64f7daf1b99309ffb665678441b1c02a2590c44 100644
--- a/src/config.jl
+++ b/src/config.jl
@@ -37,6 +37,7 @@ function configwindow()
                                     "enddatemonth" => enddatemonth,
                                     "enddateyear" => enddateyear,
                                     "region" => region,
-                                    "cropmodel" => cropmodel))
+                                    "cropmodel" => cropmodel,
+                                    "species" => species))
     exec()
 end
diff --git a/src/config.qml b/src/config.qml
index 299db81625df173d556ef0d9d5c4339ed8443b89..69453e9ead2d7fed2a3c98f31e5d9b5d11273161 100644
--- a/src/config.qml
+++ b/src/config.qml
@@ -87,6 +87,15 @@ ApplicationWindow {
 				onCurrentIndexChanged: conf.cropmodel = currentText
 			}
 		}
+		
+		RowLayout { //TODO how can I enable multi-species selection?
+			Label { text: "Species:" }
+			ComboBox {
+				currentIndex: 0
+				model: ["Skylark", "Wolpertinger"]
+				onCurrentIndexChanged: conf.species = currentText
+			}
+		}
 
 		//XXX For which years do I actually have data?
 		RowLayout {
diff --git a/src/variables.jl b/src/variables.jl
index baa4e4233d59185848cb778aa2488e2625c9f270..af18c911d1a01b17e0d30df6668c1222137b2b60 100644
--- a/src/variables.jl
+++ b/src/variables.jl
@@ -40,6 +40,7 @@ const enddatemonth = Observable(12)
 const enddateyear = Observable(2022)
 const region = Observable("Jena") #XXX alternatives not yet implemented
 #const farmmodel = Observable("FieldManager") #XXX not yet implemented
+const species = Observable("Skylark")
 #const targetspecies = Observable() #TODO not sure how to configure a list?
 #const insectmodel = Observable() #TODO not sure how to configure a list?
 const cropmodel = Observable("ALMaSS") #XXX alternatives not yet implemented