diff --git a/MANIFEST.in b/MANIFEST.in
index 2676ed3bd4ac7bcee65b67daf8acde27342d7407..3332b747feab75a4763c54894f951856df9c0222 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -9,7 +9,7 @@ include requirements_continuous_integration.txt
 
 
 
-graft flatland/svg
+graft flatland/png
 graft env_data
 
 
diff --git a/flatland/png/Background_#91D1DD.png b/flatland/png/Background_#91D1DD.png
new file mode 100644
index 0000000000000000000000000000000000000000..6fb65bb2a11d2f0dd1ff1ffa8ef531dcb95013fa
Binary files /dev/null and b/flatland/png/Background_#91D1DD.png differ
diff --git a/flatland/png/Background_#9CCB89.png b/flatland/png/Background_#9CCB89.png
new file mode 100644
index 0000000000000000000000000000000000000000..37225578ba2f96d057f0c021e015298c8401072f
Binary files /dev/null and b/flatland/png/Background_#9CCB89.png differ
diff --git a/flatland/png/Background_#AA7B55.png b/flatland/png/Background_#AA7B55.png
new file mode 100644
index 0000000000000000000000000000000000000000..4612900b00ba98a45c5437f9c9d244a187c8eb2c
Binary files /dev/null and b/flatland/png/Background_#AA7B55.png differ
diff --git a/flatland/png/Background_#DEBDA0.png b/flatland/png/Background_#DEBDA0.png
new file mode 100644
index 0000000000000000000000000000000000000000..9b12f19a4968052e91eff8e7fb0d92742b63af7a
Binary files /dev/null and b/flatland/png/Background_#DEBDA0.png differ
diff --git a/flatland/png/Background_Light_green.png b/flatland/png/Background_Light_green.png
new file mode 100644
index 0000000000000000000000000000000000000000..08286a234bea95bc2b6696fdae2907260033ce50
Binary files /dev/null and b/flatland/png/Background_Light_green.png differ
diff --git a/flatland/png/Background_city.png b/flatland/png/Background_city.png
new file mode 100644
index 0000000000000000000000000000000000000000..e63f1c1e09566bdcd3905879f1b99063426f9e54
Binary files /dev/null and b/flatland/png/Background_city.png differ
diff --git a/flatland/png/Background_rail.png b/flatland/png/Background_rail.png
new file mode 100644
index 0000000000000000000000000000000000000000..9a5a9bd6f9ef1402b33fb2a5f5069579da5d5972
Binary files /dev/null and b/flatland/png/Background_rail.png differ
diff --git a/flatland/png/Background_white.png b/flatland/png/Background_white.png
new file mode 100644
index 0000000000000000000000000000000000000000..60e2e79a23effda1f878f7b4fdb49d3180432c54
Binary files /dev/null and b/flatland/png/Background_white.png differ
diff --git a/flatland/png/Background_white_filter.png b/flatland/png/Background_white_filter.png
new file mode 100644
index 0000000000000000000000000000000000000000..72aadb480418cc2ae93247a1768737d98c319fb6
Binary files /dev/null and b/flatland/png/Background_white_filter.png differ
diff --git a/flatland/png/Bahnhof_#d50000.png b/flatland/png/Bahnhof_#d50000.png
new file mode 100644
index 0000000000000000000000000000000000000000..03dec9edd361247593689fa497bc20831237dfdd
Binary files /dev/null and b/flatland/png/Bahnhof_#d50000.png differ
diff --git a/flatland/png/Bahnhof_#d50000_Deadend_links.png b/flatland/png/Bahnhof_#d50000_Deadend_links.png
new file mode 100644
index 0000000000000000000000000000000000000000..7d383d00cfd8761efda94e0e6152d55b5ef187b2
Binary files /dev/null and b/flatland/png/Bahnhof_#d50000_Deadend_links.png differ
diff --git a/flatland/png/Bahnhof_#d50000_Deadend_oben.png b/flatland/png/Bahnhof_#d50000_Deadend_oben.png
new file mode 100644
index 0000000000000000000000000000000000000000..9f6d5089bf929c6f997dd0cc35a75595f68df868
Binary files /dev/null and b/flatland/png/Bahnhof_#d50000_Deadend_oben.png differ
diff --git a/flatland/png/Bahnhof_#d50000_Deadend_rechts.png b/flatland/png/Bahnhof_#d50000_Deadend_rechts.png
new file mode 100644
index 0000000000000000000000000000000000000000..ebcba77e700bcda85bbc57e4c9120605c20431d7
Binary files /dev/null and b/flatland/png/Bahnhof_#d50000_Deadend_rechts.png differ
diff --git a/flatland/png/Bahnhof_#d50000_Deadend_unten.png b/flatland/png/Bahnhof_#d50000_Deadend_unten.png
new file mode 100644
index 0000000000000000000000000000000000000000..356f8f739442a80834859eb7660253ed80fe5018
Binary files /dev/null and b/flatland/png/Bahnhof_#d50000_Deadend_unten.png differ
diff --git a/flatland/png/Bahnhof_#d50000_Gleis_horizontal.png b/flatland/png/Bahnhof_#d50000_Gleis_horizontal.png
new file mode 100644
index 0000000000000000000000000000000000000000..c3069a08dfcd326cc20ff92a34f484281394e47e
Binary files /dev/null and b/flatland/png/Bahnhof_#d50000_Gleis_horizontal.png differ
diff --git a/flatland/png/Bahnhof_#d50000_Gleis_vertikal.png b/flatland/png/Bahnhof_#d50000_Gleis_vertikal.png
new file mode 100644
index 0000000000000000000000000000000000000000..a689dbe46d7c3ca4151049499f0fd6e811decb6e
Binary files /dev/null and b/flatland/png/Bahnhof_#d50000_Gleis_vertikal.png differ
diff --git a/flatland/png/Bahnhof_#d50000_target.png b/flatland/png/Bahnhof_#d50000_target.png
new file mode 100644
index 0000000000000000000000000000000000000000..202b12508c9fe0bd98ca03b3b8eaada329a8c9f0
Binary files /dev/null and b/flatland/png/Bahnhof_#d50000_target.png differ
diff --git a/flatland/png/Buildings-Bank.png b/flatland/png/Buildings-Bank.png
new file mode 100644
index 0000000000000000000000000000000000000000..7c43368579f031a7664868f5b485a539fbb32879
Binary files /dev/null and b/flatland/png/Buildings-Bank.png differ
diff --git a/flatland/png/Buildings-Bar.png b/flatland/png/Buildings-Bar.png
new file mode 100644
index 0000000000000000000000000000000000000000..e7d6100d7966554a1032188deeeae409d34868a9
Binary files /dev/null and b/flatland/png/Buildings-Bar.png differ
diff --git a/flatland/png/Buildings-Fabrik_A.png b/flatland/png/Buildings-Fabrik_A.png
new file mode 100644
index 0000000000000000000000000000000000000000..a0dae7e656c25d1ccf8207532883571dc1aaa6ab
Binary files /dev/null and b/flatland/png/Buildings-Fabrik_A.png differ
diff --git a/flatland/png/Buildings-Fabrik_B.png b/flatland/png/Buildings-Fabrik_B.png
new file mode 100644
index 0000000000000000000000000000000000000000..30fd8cef8d0a6b99850a9bbc12b45b49bc5b0313
Binary files /dev/null and b/flatland/png/Buildings-Fabrik_B.png differ
diff --git a/flatland/png/Buildings-Fabrik_C.png b/flatland/png/Buildings-Fabrik_C.png
new file mode 100644
index 0000000000000000000000000000000000000000..cbbeff18f60b5c5c8ef581be9fcac68f8c7c87e8
Binary files /dev/null and b/flatland/png/Buildings-Fabrik_C.png differ
diff --git a/flatland/png/Buildings-Fabrik_D.png b/flatland/png/Buildings-Fabrik_D.png
new file mode 100644
index 0000000000000000000000000000000000000000..411aa65db4f4bb040587c41b625591d15ebed23a
Binary files /dev/null and b/flatland/png/Buildings-Fabrik_D.png differ
diff --git a/flatland/png/Buildings-Fabrik_E.png b/flatland/png/Buildings-Fabrik_E.png
new file mode 100644
index 0000000000000000000000000000000000000000..c1e5a341b5f540ed151c48d36813f25006e4175a
Binary files /dev/null and b/flatland/png/Buildings-Fabrik_E.png differ
diff --git a/flatland/png/Buildings-Fabrik_F.png b/flatland/png/Buildings-Fabrik_F.png
new file mode 100644
index 0000000000000000000000000000000000000000..fb3e141882173110b710311400586de4a2e27f0e
Binary files /dev/null and b/flatland/png/Buildings-Fabrik_F.png differ
diff --git a/flatland/png/Buildings-Fabrik_G.png b/flatland/png/Buildings-Fabrik_G.png
new file mode 100644
index 0000000000000000000000000000000000000000..bf19757cd6fb5d21c970c3bca77b70ea2931b658
Binary files /dev/null and b/flatland/png/Buildings-Fabrik_G.png differ
diff --git a/flatland/png/Buildings-Fabrik_H.png b/flatland/png/Buildings-Fabrik_H.png
new file mode 100644
index 0000000000000000000000000000000000000000..cf64fd0e2ababc400706bf8df61da6172366577e
Binary files /dev/null and b/flatland/png/Buildings-Fabrik_H.png differ
diff --git a/flatland/png/Buildings-Fabrik_I.png b/flatland/png/Buildings-Fabrik_I.png
new file mode 100644
index 0000000000000000000000000000000000000000..4b3047bc000c7c0773d750d0aaf841f9842157d9
Binary files /dev/null and b/flatland/png/Buildings-Fabrik_I.png differ
diff --git a/flatland/png/Buildings-Hochhaus.png b/flatland/png/Buildings-Hochhaus.png
new file mode 100644
index 0000000000000000000000000000000000000000..d88f746902ec5b9b6589eebd728d38222d9d60f4
Binary files /dev/null and b/flatland/png/Buildings-Hochhaus.png differ
diff --git a/flatland/png/Buildings-Hotel.png b/flatland/png/Buildings-Hotel.png
new file mode 100644
index 0000000000000000000000000000000000000000..e5e3bcb0e5510e3366cb710d595c419cb47782e4
Binary files /dev/null and b/flatland/png/Buildings-Hotel.png differ
diff --git a/flatland/png/Buildings-Office.png b/flatland/png/Buildings-Office.png
new file mode 100644
index 0000000000000000000000000000000000000000..5a93cce74144e6f44c529d53e2052da5175c885f
Binary files /dev/null and b/flatland/png/Buildings-Office.png differ
diff --git a/flatland/png/Buildings-Polizei.png b/flatland/png/Buildings-Polizei.png
new file mode 100644
index 0000000000000000000000000000000000000000..a6d6c73f716acb585e8c82a60db4ea7bf8908055
Binary files /dev/null and b/flatland/png/Buildings-Polizei.png differ
diff --git a/flatland/png/Buildings-Post.png b/flatland/png/Buildings-Post.png
new file mode 100644
index 0000000000000000000000000000000000000000..cdbf3ab3432cec2e623b1a5dda14b63b9abd9433
Binary files /dev/null and b/flatland/png/Buildings-Post.png differ
diff --git a/flatland/png/Buildings-Supermarkt.png b/flatland/png/Buildings-Supermarkt.png
new file mode 100644
index 0000000000000000000000000000000000000000..e2a1c343c1a3dd4363559b3b03c581995c0b4155
Binary files /dev/null and b/flatland/png/Buildings-Supermarkt.png differ
diff --git a/flatland/png/Buildings-Tankstelle.png b/flatland/png/Buildings-Tankstelle.png
new file mode 100644
index 0000000000000000000000000000000000000000..b59703f50a2813ca75c3e3905f02c13eb1ae0a0d
Binary files /dev/null and b/flatland/png/Buildings-Tankstelle.png differ
diff --git a/flatland/png/Buildings-Wohnhaus.png b/flatland/png/Buildings-Wohnhaus.png
new file mode 100644
index 0000000000000000000000000000000000000000..2c5ee1f4fe8576215e6b47cf2b10e8f0a5afb76d
Binary files /dev/null and b/flatland/png/Buildings-Wohnhaus.png differ
diff --git a/flatland/png/Cell_occupied.png b/flatland/png/Cell_occupied.png
new file mode 100644
index 0000000000000000000000000000000000000000..fd4fd0cca086e768b8d4847f45db8629c23a0b78
Binary files /dev/null and b/flatland/png/Cell_occupied.png differ
diff --git a/flatland/png/Gleis_Deadend.png b/flatland/png/Gleis_Deadend.png
new file mode 100644
index 0000000000000000000000000000000000000000..bc6c61d59d9c744f4f56735e642fb51ab537a917
Binary files /dev/null and b/flatland/png/Gleis_Deadend.png differ
diff --git a/flatland/png/Gleis_Diamond_Crossing.png b/flatland/png/Gleis_Diamond_Crossing.png
new file mode 100644
index 0000000000000000000000000000000000000000..ac8d6e70d65abcc4b047d514880bfe2440eb8f42
Binary files /dev/null and b/flatland/png/Gleis_Diamond_Crossing.png differ
diff --git a/flatland/png/Gleis_Kurve_oben_links.png b/flatland/png/Gleis_Kurve_oben_links.png
new file mode 100644
index 0000000000000000000000000000000000000000..50385cf113a75ab0465c3095e281d4b4b3dd3748
Binary files /dev/null and b/flatland/png/Gleis_Kurve_oben_links.png differ
diff --git a/flatland/png/Gleis_Kurve_oben_links_unten_rechts.png b/flatland/png/Gleis_Kurve_oben_links_unten_rechts.png
new file mode 100644
index 0000000000000000000000000000000000000000..dfc4a2f2585429bf6a61383d05702fa3696e5f7c
Binary files /dev/null and b/flatland/png/Gleis_Kurve_oben_links_unten_rechts.png differ
diff --git a/flatland/png/Gleis_Kurve_oben_rechts.png b/flatland/png/Gleis_Kurve_oben_rechts.png
new file mode 100644
index 0000000000000000000000000000000000000000..be4c7183c6a4b3aea7cd74657abcf2ee1dacc607
Binary files /dev/null and b/flatland/png/Gleis_Kurve_oben_rechts.png differ
diff --git a/flatland/png/Gleis_Kurve_unten_links.png b/flatland/png/Gleis_Kurve_unten_links.png
new file mode 100644
index 0000000000000000000000000000000000000000..8c5b8c257bf2ac8bdb226f72009e68105c082352
Binary files /dev/null and b/flatland/png/Gleis_Kurve_unten_links.png differ
diff --git a/flatland/png/Gleis_Kurve_unten_rechts.png b/flatland/png/Gleis_Kurve_unten_rechts.png
new file mode 100644
index 0000000000000000000000000000000000000000..4fc6d8b256d8fc289678f11918ec8fe0b39ec24c
Binary files /dev/null and b/flatland/png/Gleis_Kurve_unten_rechts.png differ
diff --git a/flatland/png/Gleis_horizontal.png b/flatland/png/Gleis_horizontal.png
new file mode 100644
index 0000000000000000000000000000000000000000..4c50711239e5e3cb8d9303165f20af49d25cc5c8
Binary files /dev/null and b/flatland/png/Gleis_horizontal.png differ
diff --git a/flatland/png/Gleis_horizontal_Perron.png b/flatland/png/Gleis_horizontal_Perron.png
new file mode 100644
index 0000000000000000000000000000000000000000..a42c1fe5021a6fd07c9a97d8977a9a7710a2ef90
Binary files /dev/null and b/flatland/png/Gleis_horizontal_Perron.png differ
diff --git a/flatland/png/Gleis_vertikal.png b/flatland/png/Gleis_vertikal.png
new file mode 100644
index 0000000000000000000000000000000000000000..5c7b38353f6c8eac684ced4093bc4011fbbe7a7e
Binary files /dev/null and b/flatland/png/Gleis_vertikal.png differ
diff --git a/flatland/png/Gleis_vertikal_Perron.png b/flatland/png/Gleis_vertikal_Perron.png
new file mode 100644
index 0000000000000000000000000000000000000000..4161c9c9fbb33546f45cf4048dd8a66ed7494bae
Binary files /dev/null and b/flatland/png/Gleis_vertikal_Perron.png differ
diff --git a/flatland/png/Scenery-Bergwelt_A_Teil_1_links.png b/flatland/png/Scenery-Bergwelt_A_Teil_1_links.png
new file mode 100644
index 0000000000000000000000000000000000000000..854574dddaad767f3b1a2ed1c0f407d6e176f509
Binary files /dev/null and b/flatland/png/Scenery-Bergwelt_A_Teil_1_links.png differ
diff --git a/flatland/png/Scenery-Bergwelt_A_Teil_2_mitte.png b/flatland/png/Scenery-Bergwelt_A_Teil_2_mitte.png
new file mode 100644
index 0000000000000000000000000000000000000000..f2e4e42c57a1ebfa02bf628e15f02f536b395a2e
Binary files /dev/null and b/flatland/png/Scenery-Bergwelt_A_Teil_2_mitte.png differ
diff --git a/flatland/png/Scenery-Bergwelt_A_Teil_3_rechts.png b/flatland/png/Scenery-Bergwelt_A_Teil_3_rechts.png
new file mode 100644
index 0000000000000000000000000000000000000000..67a6635d631c52f9c3b68394362a16b6aa2bde80
Binary files /dev/null and b/flatland/png/Scenery-Bergwelt_A_Teil_3_rechts.png differ
diff --git a/flatland/png/Scenery-Bergwelt_B.png b/flatland/png/Scenery-Bergwelt_B.png
new file mode 100644
index 0000000000000000000000000000000000000000..28f45d22126047650c9cf160e8691ed0e21bae9c
Binary files /dev/null and b/flatland/png/Scenery-Bergwelt_B.png differ
diff --git a/flatland/png/Scenery-Bergwelt_C_Teil_1_links.png b/flatland/png/Scenery-Bergwelt_C_Teil_1_links.png
new file mode 100644
index 0000000000000000000000000000000000000000..8adaeed56c0da8a00b1bd30c2b6cdde9b8e0c561
Binary files /dev/null and b/flatland/png/Scenery-Bergwelt_C_Teil_1_links.png differ
diff --git a/flatland/png/Scenery-Bergwelt_C_Teil_2_rechts.png b/flatland/png/Scenery-Bergwelt_C_Teil_2_rechts.png
new file mode 100644
index 0000000000000000000000000000000000000000..462f804ce142b83423a278e30b2c2c979af85e98
Binary files /dev/null and b/flatland/png/Scenery-Bergwelt_C_Teil_2_rechts.png differ
diff --git a/flatland/png/Scenery-Laubbaume_A.png b/flatland/png/Scenery-Laubbaume_A.png
new file mode 100644
index 0000000000000000000000000000000000000000..ee456c85381b65f2d7fff9cedb86a39aaab416f2
Binary files /dev/null and b/flatland/png/Scenery-Laubbaume_A.png differ
diff --git a/flatland/png/Scenery-Laubbaume_B.png b/flatland/png/Scenery-Laubbaume_B.png
new file mode 100644
index 0000000000000000000000000000000000000000..472f7c77bb4b7a2089b22b868ddf1cbc9a842d87
Binary files /dev/null and b/flatland/png/Scenery-Laubbaume_B.png differ
diff --git a/flatland/png/Scenery-Laubbaume_C.png b/flatland/png/Scenery-Laubbaume_C.png
new file mode 100644
index 0000000000000000000000000000000000000000..04d83ea93cae15036f56295f00f2a2fe9fc77297
Binary files /dev/null and b/flatland/png/Scenery-Laubbaume_C.png differ
diff --git a/flatland/png/Scenery-Nadelbaume_A.png b/flatland/png/Scenery-Nadelbaume_A.png
new file mode 100644
index 0000000000000000000000000000000000000000..e768bf3d86a3ced97dd21138c6d3eef6097fef6e
Binary files /dev/null and b/flatland/png/Scenery-Nadelbaume_A.png differ
diff --git a/flatland/png/Scenery-Nadelbaume_B.png b/flatland/png/Scenery-Nadelbaume_B.png
new file mode 100644
index 0000000000000000000000000000000000000000..831b64931976f79c1dce7853618dd2c9d1754b83
Binary files /dev/null and b/flatland/png/Scenery-Nadelbaume_B.png differ
diff --git a/flatland/png/Scenery_Water.png b/flatland/png/Scenery_Water.png
new file mode 100644
index 0000000000000000000000000000000000000000..195e17afe8225c16516cb163b2b27c65a69681d2
Binary files /dev/null and b/flatland/png/Scenery_Water.png differ
diff --git a/flatland/png/Selected_Agent.png b/flatland/png/Selected_Agent.png
new file mode 100644
index 0000000000000000000000000000000000000000..d89edac21241634a1f7e581f7583ee3de7e3a2e3
Binary files /dev/null and b/flatland/png/Selected_Agent.png differ
diff --git a/flatland/png/Selected_Target.png b/flatland/png/Selected_Target.png
new file mode 100644
index 0000000000000000000000000000000000000000..547cdf09db30cd53780a71c1f9bc1f5f4de2b147
Binary files /dev/null and b/flatland/png/Selected_Target.png differ
diff --git a/flatland/png/Weiche_Double_Slip.png b/flatland/png/Weiche_Double_Slip.png
new file mode 100644
index 0000000000000000000000000000000000000000..17b76fef8621848cfc2d886c1dcef9a856308ae5
Binary files /dev/null and b/flatland/png/Weiche_Double_Slip.png differ
diff --git a/flatland/png/Weiche_Single_Slip.png b/flatland/png/Weiche_Single_Slip.png
new file mode 100644
index 0000000000000000000000000000000000000000..c1a539204cc58df8066ee9cfb0220198575b35a8
Binary files /dev/null and b/flatland/png/Weiche_Single_Slip.png differ
diff --git a/flatland/png/Weiche_Symetrical.png b/flatland/png/Weiche_Symetrical.png
new file mode 100644
index 0000000000000000000000000000000000000000..14755867a67471e1655ceb2e1d88a718dd944731
Binary files /dev/null and b/flatland/png/Weiche_Symetrical.png differ
diff --git a/flatland/png/Weiche_Symetrical_gerade.png b/flatland/png/Weiche_Symetrical_gerade.png
new file mode 100644
index 0000000000000000000000000000000000000000..e5f7ba79cb8f7baf69ffb6e8197535f053cf8844
Binary files /dev/null and b/flatland/png/Weiche_Symetrical_gerade.png differ
diff --git a/flatland/png/Weiche_horizontal_oben_links.png b/flatland/png/Weiche_horizontal_oben_links.png
new file mode 100644
index 0000000000000000000000000000000000000000..7cc6027a7a7187a195bdd67b559a6d761969c845
Binary files /dev/null and b/flatland/png/Weiche_horizontal_oben_links.png differ
diff --git a/flatland/png/Weiche_horizontal_oben_rechts.png b/flatland/png/Weiche_horizontal_oben_rechts.png
new file mode 100644
index 0000000000000000000000000000000000000000..2b7e311dfb902cda76dc506ee93545cf15ca1ae9
Binary files /dev/null and b/flatland/png/Weiche_horizontal_oben_rechts.png differ
diff --git a/flatland/png/Weiche_horizontal_unten_links.png b/flatland/png/Weiche_horizontal_unten_links.png
new file mode 100644
index 0000000000000000000000000000000000000000..398fba4941dfa985ae0b04ce5da0507f53ed2492
Binary files /dev/null and b/flatland/png/Weiche_horizontal_unten_links.png differ
diff --git a/flatland/png/Weiche_horizontal_unten_rechts.png b/flatland/png/Weiche_horizontal_unten_rechts.png
new file mode 100644
index 0000000000000000000000000000000000000000..6dd0774e58c357d1d6d4a6d88afea545f841fea2
Binary files /dev/null and b/flatland/png/Weiche_horizontal_unten_rechts.png differ
diff --git a/flatland/png/Weiche_vertikal_oben_links.png b/flatland/png/Weiche_vertikal_oben_links.png
new file mode 100644
index 0000000000000000000000000000000000000000..9f78446d114b6255e0cde1797b4c7f259035beb9
Binary files /dev/null and b/flatland/png/Weiche_vertikal_oben_links.png differ
diff --git a/flatland/png/Weiche_vertikal_oben_rechts.png b/flatland/png/Weiche_vertikal_oben_rechts.png
new file mode 100644
index 0000000000000000000000000000000000000000..a80b689bc567639d7d6d2018735f04d4f7d3624e
Binary files /dev/null and b/flatland/png/Weiche_vertikal_oben_rechts.png differ
diff --git a/flatland/png/Weiche_vertikal_unten_links.png b/flatland/png/Weiche_vertikal_unten_links.png
new file mode 100644
index 0000000000000000000000000000000000000000..ae5575ae956c266b73a2cffc000b919337289a60
Binary files /dev/null and b/flatland/png/Weiche_vertikal_unten_links.png differ
diff --git a/flatland/png/Weiche_vertikal_unten_rechts.png b/flatland/png/Weiche_vertikal_unten_rechts.png
new file mode 100644
index 0000000000000000000000000000000000000000..4c74ccc409b4c5da472e8edb9f12bd35ae64e997
Binary files /dev/null and b/flatland/png/Weiche_vertikal_unten_rechts.png differ
diff --git a/flatland/png/Zug_1_Weiche_#0091ea.png b/flatland/png/Zug_1_Weiche_#0091ea.png
new file mode 100644
index 0000000000000000000000000000000000000000..a7967fd643defe2a1ba1e25d342d545b11a43b95
Binary files /dev/null and b/flatland/png/Zug_1_Weiche_#0091ea.png differ
diff --git a/flatland/png/Zug_1_Weiche_#0091ea_old.png b/flatland/png/Zug_1_Weiche_#0091ea_old.png
new file mode 100644
index 0000000000000000000000000000000000000000..385d9361e5d03d3c14b567395127b873479cc76b
Binary files /dev/null and b/flatland/png/Zug_1_Weiche_#0091ea_old.png differ
diff --git a/flatland/png/Zug_1_Weiche_#00c853_old.png b/flatland/png/Zug_1_Weiche_#00c853_old.png
new file mode 100644
index 0000000000000000000000000000000000000000..cdc8a230c16fde7b81f3d03d9aaf67a41457ecfa
Binary files /dev/null and b/flatland/png/Zug_1_Weiche_#00c853_old.png differ
diff --git a/flatland/png/Zug_1_Weiche_#d50000.png b/flatland/png/Zug_1_Weiche_#d50000.png
new file mode 100644
index 0000000000000000000000000000000000000000..edb9e06c8157d3b4537717175f16abf222512a1f
Binary files /dev/null and b/flatland/png/Zug_1_Weiche_#d50000.png differ
diff --git a/flatland/png/Zug_2_Weiche_#0091ea.png b/flatland/png/Zug_2_Weiche_#0091ea.png
new file mode 100644
index 0000000000000000000000000000000000000000..c7f25ca3b66b78e9658566161d37c4fb9d51f957
Binary files /dev/null and b/flatland/png/Zug_2_Weiche_#0091ea.png differ
diff --git a/flatland/png/Zug_2_Weiche_#0091ea_old.png b/flatland/png/Zug_2_Weiche_#0091ea_old.png
new file mode 100644
index 0000000000000000000000000000000000000000..855514d974259276ff488bc3b80a11e7c309883d
Binary files /dev/null and b/flatland/png/Zug_2_Weiche_#0091ea_old.png differ
diff --git a/flatland/png/Zug_2_Weiche_#00c853_old.png b/flatland/png/Zug_2_Weiche_#00c853_old.png
new file mode 100644
index 0000000000000000000000000000000000000000..0de6eac28599a19612d223764e68fb096802f88c
Binary files /dev/null and b/flatland/png/Zug_2_Weiche_#00c853_old.png differ
diff --git a/flatland/png/Zug_Gleis_#0091ea.png b/flatland/png/Zug_Gleis_#0091ea.png
new file mode 100644
index 0000000000000000000000000000000000000000..37ea891c5b5eb2d515901284f8e69880005e75f6
Binary files /dev/null and b/flatland/png/Zug_Gleis_#0091ea.png differ
diff --git a/flatland/png/Zug_Gleis_#0091ea_old.png b/flatland/png/Zug_Gleis_#0091ea_old.png
new file mode 100644
index 0000000000000000000000000000000000000000..131c8518b640f0994a78cb5e5a5073d3ab9c2d7d
Binary files /dev/null and b/flatland/png/Zug_Gleis_#0091ea_old.png differ
diff --git a/flatland/png/Zug_Gleis_#00c853_old.png b/flatland/png/Zug_Gleis_#00c853_old.png
new file mode 100644
index 0000000000000000000000000000000000000000..2593d68b2b5cf8947da59ad68b4655313671a200
Binary files /dev/null and b/flatland/png/Zug_Gleis_#00c853_old.png differ
diff --git a/flatland/png/Zug_Gleis_#d50000.png b/flatland/png/Zug_Gleis_#d50000.png
new file mode 100644
index 0000000000000000000000000000000000000000..2a4623fd6076c0f53fa0d00889270ec258301fcc
Binary files /dev/null and b/flatland/png/Zug_Gleis_#d50000.png differ
diff --git a/flatland/png/__init__.py b/flatland/png/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/flatland/utils/graphics_pil.py b/flatland/utils/graphics_pil.py
index a7f47d4d821b5f1f6965ff4f39e265475264fa2b..2d0713b118344b8e26c041a120d9fdaed49e21ab 100644
--- a/flatland/utils/graphics_pil.py
+++ b/flatland/utils/graphics_pil.py
@@ -10,22 +10,6 @@ from pkg_resources import resource_string as resource_bytes
 
 from flatland.utils.graphics_layer import GraphicsLayer
 
-
-def enable_windows_cairo_support():
-    if os.name == 'nt':
-        import site
-        import ctypes.util
-        default_os_path = os.environ['PATH']
-        os.environ['PATH'] = ''
-        for s in site.getsitepackages():
-            os.environ['PATH'] = os.environ['PATH'] + ';' + s + '\\cairo'
-        os.environ['PATH'] = os.environ['PATH'] + ';' + default_os_path
-        if ctypes.util.find_library('cairo') is None:
-            print("Error: cairo not installed")
-
-
-enable_windows_cairo_support()
-from cairosvg import svg2png  # noqa: E402
 from flatland.core.grid.rail_env_grid import RailEnvTransitions  # noqa: E402
 
 
@@ -284,98 +268,99 @@ class PILSVG(PILGL):
 
     def pil_from_svg_file(self, package, resource):
         bytestring = resource_bytes(package, resource)
-        bytesPNG = svg2png(bytestring=bytestring, output_height=self.nPixCell, output_width=self.nPixCell)
-        with io.BytesIO(bytesPNG) as fIn:
+        with io.BytesIO(bytestring) as fIn:
             pil_img = Image.open(fIn)
-            pil_img.load()
-
+            pil_img = pil_img.resize(
+                    (self.nPixCell, self.nPixCell),
+                    Image.ANTIALIAS
+                )
         return pil_img
 
     def load_buildings(self):
         lBuildingFiles = [
-            "Buildings-Bank.svg",
-            "Buildings-Bar.svg",
-            "Buildings-Wohnhaus.svg",
-            "Buildings-Hochhaus.svg",
-            "Buildings-Hotel.svg",
-            "Buildings-Office.svg",
-            "Buildings-Polizei.svg",
-            "Buildings-Post.svg",
-            "Buildings-Supermarkt.svg",
-            "Buildings-Tankstelle.svg",
-            "Buildings-Fabrik_A.svg",
-            "Buildings-Fabrik_B.svg",
-            "Buildings-Fabrik_C.svg",
-            "Buildings-Fabrik_D.svg",
-            "Buildings-Fabrik_E.svg",
-            "Buildings-Fabrik_F.svg",
-            "Buildings-Fabrik_G.svg",
-            "Buildings-Fabrik_H.svg",
-            "Buildings-Fabrik_I.svg"
+            "Buildings-Bank.png",
+            "Buildings-Bar.png",
+            "Buildings-Wohnhaus.png",
+            "Buildings-Hochhaus.png",
+            "Buildings-Hotel.png",
+            "Buildings-Office.png",
+            "Buildings-Polizei.png",
+            "Buildings-Post.png",
+            "Buildings-Supermarkt.png",
+            "Buildings-Tankstelle.png",
+            "Buildings-Fabrik_A.png",
+            "Buildings-Fabrik_B.png",
+            "Buildings-Fabrik_C.png",
+            "Buildings-Fabrik_D.png",
+            "Buildings-Fabrik_E.png",
+            "Buildings-Fabrik_F.png",
+            "Buildings-Fabrik_G.png",
+            "Buildings-Fabrik_H.png",
+            "Buildings-Fabrik_I.png"
         ]
 
-        imgBg = self.pil_from_svg_file('flatland.svg', "Background_city.svg")
+        imgBg = self.pil_from_svg_file('flatland.png', "Background_city.png")
         imgBg = imgBg.convert("RGBA")
         #print("imgBg mode:", imgBg.mode)
 
         self.lBuildings = []
         for sFile in lBuildingFiles:
             #print("Loading:", sFile)
-            img = self.pil_from_svg_file('flatland.svg', sFile)
+            img = self.pil_from_svg_file('flatland.png', sFile)
             #print("img mode:", img.mode)
             img = Image.alpha_composite(imgBg, img)
             self.lBuildings.append(img)
 
     def load_scenery(self):
         scenery_files = [
-            "Scenery-Laubbaume_A.svg",
-            "Scenery-Laubbaume_B.svg",
-            "Scenery-Laubbaume_C.svg",
-            "Scenery-Nadelbaume_A.svg",
-            "Scenery-Nadelbaume_B.svg",
-            "Scenery-Bergwelt_B.svg"
+            "Scenery-Laubbaume_A.png",
+            "Scenery-Laubbaume_B.png",
+            "Scenery-Laubbaume_C.png",
+            "Scenery-Nadelbaume_A.png",
+            "Scenery-Nadelbaume_B.png",
+            "Scenery-Bergwelt_B.png"
         ]
 
         scenery_files_d2 = [
-            "Scenery-Bergwelt_C_Teil_1_links.svg",
-            "Scenery-Bergwelt_C_Teil_2_rechts.svg"
+            "Scenery-Bergwelt_C_Teil_1_links.png",
+            "Scenery-Bergwelt_C_Teil_2_rechts.png"
         ]
 
         scenery_files_d3 = [
-            "Scenery-Bergwelt_A_Teil_1_links.svg",
-            "Scenery-Bergwelt_A_Teil_2_mitte.svg",
-            "Scenery-Bergwelt_A_Teil_3_rechts.svg"
+            "Scenery-Bergwelt_A_Teil_1_links.png",
+            "Scenery-Bergwelt_A_Teil_2_mitte.png",
+            "Scenery-Bergwelt_A_Teil_3_rechts.png"
         ]
 
         scenery_files_water = [
-            "Scenery_Water.svg"
+            "Scenery_Water.png"
         ]
 
-        img_back_ground = self.pil_from_svg_file('flatland.svg', "Background_Light_green.svg").convert("RGBA")
+        img_back_ground = self.pil_from_svg_file('flatland.png', "Background_Light_green.png").convert("RGBA")
 
-        self.scenery_background_white = self.pil_from_svg_file('flatland.svg', "Background_white.svg").convert("RGBA")
+        self.scenery_background_white = self.pil_from_svg_file('flatland.png', "Background_white.png").convert("RGBA")
 
         self.scenery = []
         for file in scenery_files:
-            img = self.pil_from_svg_file('flatland.svg', file)
+            img = self.pil_from_svg_file('flatland.png', file)
             img = Image.alpha_composite(img_back_ground, img)
             self.scenery.append(img)
 
         self.scenery_d2 = []
         for file in scenery_files_d2:
-            img = self.pil_from_svg_file('flatland.svg', file)
+            img = self.pil_from_svg_file('flatland.png', file)
             img = Image.alpha_composite(img_back_ground, img)
             self.scenery_d2.append(img)
 
         self.scenery_d3 = []
         for file in scenery_files_d3:
-            img = self.pil_from_svg_file('flatland.svg', file)
+            img = self.pil_from_svg_file('flatland.png', file)
             img = Image.alpha_composite(img_back_ground, img)
             self.scenery_d3.append(img)
 
         self.scenery_water = []
         for file in scenery_files_water:
-            img = self.pil_from_svg_file('flatland.svg', file)
+            img = self.pil_from_svg_file('flatland.png', file)
             img = Image.alpha_composite(img_back_ground, img)
             self.scenery_water.append(img)
 
@@ -383,55 +368,55 @@ class PILSVG(PILGL):
         """ Load the rail SVG images, apply rotations, and store as PIL images.
         """
         rail_files = {
-            "": "Background_Light_green.svg",
-            "WE": "Gleis_Deadend.svg",
-            "WW EE NN SS": "Gleis_Diamond_Crossing.svg",
-            "WW EE": "Gleis_horizontal.svg",
-            "EN SW": "Gleis_Kurve_oben_links.svg",
-            "WN SE": "Gleis_Kurve_oben_rechts.svg",
-            "ES NW": "Gleis_Kurve_unten_links.svg",
-            "NE WS": "Gleis_Kurve_unten_rechts.svg",
-            "NN SS": "Gleis_vertikal.svg",
-            "NN SS EE WW ES NW SE WN": "Weiche_Double_Slip.svg",
-            "EE WW EN SW": "Weiche_horizontal_oben_links.svg",
-            "EE WW SE WN": "Weiche_horizontal_oben_rechts.svg",
-            "EE WW ES NW": "Weiche_horizontal_unten_links.svg",
-            "EE WW NE WS": "Weiche_horizontal_unten_rechts.svg",
-            "NN SS EE WW NW ES": "Weiche_Single_Slip.svg",
-            "NE NW ES WS": "Weiche_Symetrical.svg",
-            "NN SS EN SW": "Weiche_vertikal_oben_links.svg",
-            "NN SS SE WN": "Weiche_vertikal_oben_rechts.svg",
-            "NN SS NW ES": "Weiche_vertikal_unten_links.svg",
-            "NN SS NE WS": "Weiche_vertikal_unten_rechts.svg",
-            "NE NW ES WS SS NN": "Weiche_Symetrical_gerade.svg",
-            "NE EN SW WS": "Gleis_Kurve_oben_links_unten_rechts.svg"
+            "": "Background_Light_green.png",
+            "WE": "Gleis_Deadend.png",
+            "WW EE NN SS": "Gleis_Diamond_Crossing.png",
+            "WW EE": "Gleis_horizontal.png",
+            "EN SW": "Gleis_Kurve_oben_links.png",
+            "WN SE": "Gleis_Kurve_oben_rechts.png",
+            "ES NW": "Gleis_Kurve_unten_links.png",
+            "NE WS": "Gleis_Kurve_unten_rechts.png",
+            "NN SS": "Gleis_vertikal.png",
+            "NN SS EE WW ES NW SE WN": "Weiche_Double_Slip.png",
+            "EE WW EN SW": "Weiche_horizontal_oben_links.png",
+            "EE WW SE WN": "Weiche_horizontal_oben_rechts.png",
+            "EE WW ES NW": "Weiche_horizontal_unten_links.png",
+            "EE WW NE WS": "Weiche_horizontal_unten_rechts.png",
+            "NN SS EE WW NW ES": "Weiche_Single_Slip.png",
+            "NE NW ES WS": "Weiche_Symetrical.png",
+            "NN SS EN SW": "Weiche_vertikal_oben_links.png",
+            "NN SS SE WN": "Weiche_vertikal_oben_rechts.png",
+            "NN SS NW ES": "Weiche_vertikal_unten_links.png",
+            "NN SS NE WS": "Weiche_vertikal_unten_rechts.png",
+            "NE NW ES WS SS NN": "Weiche_Symetrical_gerade.png",
+            "NE EN SW WS": "Gleis_Kurve_oben_links_unten_rechts.png"
         }
 
         target_files = {
-            "EW": "Bahnhof_#d50000_Deadend_links.svg",
-            "NS": "Bahnhof_#d50000_Deadend_oben.svg",
-            "WE": "Bahnhof_#d50000_Deadend_rechts.svg",
-            "SN": "Bahnhof_#d50000_Deadend_unten.svg",
-            "EE WW": "Bahnhof_#d50000_Gleis_horizontal.svg",
-            "NN SS": "Bahnhof_#d50000_Gleis_vertikal.svg"}
+            "EW": "Bahnhof_#d50000_Deadend_links.png",
+            "NS": "Bahnhof_#d50000_Deadend_oben.png",
+            "WE": "Bahnhof_#d50000_Deadend_rechts.png",
+            "SN": "Bahnhof_#d50000_Deadend_unten.png",
+            "EE WW": "Bahnhof_#d50000_Gleis_horizontal.png",
+            "NN SS": "Bahnhof_#d50000_Gleis_vertikal.png"}
 
         # Dict of rail cell images indexed by binary transitions
         pil_rail_files_org = self.load_svgs(rail_files, rotate=True)
-        pil_rail_files = self.load_svgs(rail_files, rotate=True, background_image="Background_rail.svg",
-                                        whitefilter="Background_white_filter.svg")
+        pil_rail_files = self.load_svgs(rail_files, rotate=True, background_image="Background_rail.png",
+                                        whitefilter="Background_white_filter.png")
 
         # Load the target files (which have rails and transitions of their own)
         # They are indexed by (binTrans, iAgent), ie a tuple of the binary transition and the agent index
         pil_target_files_org = self.load_svgs(target_files, rotate=False, agent_colors=self.agent_colors)
         pil_target_files = self.load_svgs(target_files, rotate=False, agent_colors=self.agent_colors,
-                                          background_image="Background_rail.svg",
-                                          whitefilter="Background_white_filter.svg")
+                                          background_image="Background_rail.png",
+                                          whitefilter="Background_white_filter.png")
 
         # Load station and recolorize them
-        station = self.pil_from_svg_file('flatland.svg', "Bahnhof_#d50000_target.svg")
+        station = self.pil_from_svg_file('flatland.png', "Bahnhof_#d50000_target.png")
         self.station_colors = self.recolor_image(station, [0, 0, 0], self.agent_colors, False)
 
-        cell_occupied = self.pil_from_svg_file('flatland.svg', "Cell_occupied.svg")
+        cell_occupied = self.pil_from_svg_file('flatland.png', "Cell_occupied.png")
         self.cell_occupied = self.recolor_image(cell_occupied, [0, 0, 0], self.agent_colors, False)
 
         # Merge them with the regular rails.
@@ -460,14 +445,14 @@ class PILSVG(PILGL):
             transition_16_bit_string = "".join(transition_16_bit)
             binary_trans = int(transition_16_bit_string, 2)
 
-            pil_rail = self.pil_from_svg_file('flatland.svg', file).convert("RGBA")
+            pil_rail = self.pil_from_svg_file('flatland.png', file).convert("RGBA")
 
             if background_image is not None:
-                img_bg = self.pil_from_svg_file('flatland.svg', background_image).convert("RGBA")
+                img_bg = self.pil_from_svg_file('flatland.png', background_image).convert("RGBA")
                 pil_rail = Image.alpha_composite(img_bg, pil_rail)
 
             if whitefilter is not None:
-                img_bg = self.pil_from_svg_file('flatland.svg', whitefilter).convert("RGBA")
+                img_bg = self.pil_from_svg_file('flatland.png', whitefilter).convert("RGBA")
                 pil_rail = Image.alpha_composite(pil_rail, img_bg)
 
             if rotate:
@@ -559,7 +544,7 @@ class PILSVG(PILGL):
 
         if target is not None:
             if is_selected:
-                svgBG = self.pil_from_svg_file('flatland.svg', "Selected_Target.svg")
+                svgBG = self.pil_from_svg_file('flatland.png', "Selected_Target.png")
                 self.clear_layer(PILGL.SELECTED_TARGET_LAYER, 0)
                 self.draw_image_row_col(svgBG, (row, col), layer=PILGL.SELECTED_TARGET_LAYER)
 
@@ -584,9 +569,9 @@ class PILSVG(PILGL):
 
         # Seed initial train/zug files indexed by tuple(iDirIn, iDirOut):
         file_directory = {
-            (0, 0): "Zug_Gleis_#0091ea.svg",
-            (1, 2): "Zug_1_Weiche_#0091ea.svg",
-            (0, 3): "Zug_2_Weiche_#0091ea.svg"
+            (0, 0): "Zug_Gleis_#0091ea.png",
+            (1, 2): "Zug_1_Weiche_#0091ea.png",
+            (0, 3): "Zug_2_Weiche_#0091ea.png"
         }
 
         # "paint" color of the train images we load - this is the color we will change.
@@ -599,7 +584,7 @@ class PILSVG(PILGL):
         for directions, path_svg in file_directory.items():
             in_direction, out_direction = directions
 
-            pil_zug = self.pil_from_svg_file('flatland.svg', path_svg)
+            pil_zug = self.pil_from_svg_file('flatland.png', path_svg)
 
             # Rotate both the directions and the image and save in the dict
             for rot_direction in range(4):
@@ -629,7 +614,7 @@ class PILSVG(PILGL):
                 self.draw_image_row_col(self.scenery_background_white, (row, col), layer=PILGL.RAIL_LAYER)
 
         if is_selected:
-            bg_svg = self.pil_from_svg_file('flatland.svg', "Selected_Agent.svg")
+            bg_svg = self.pil_from_svg_file('flatland.png', "Selected_Agent.png")
             self.clear_layer(PILGL.SELECTED_AGENT_LAYER, 0)
             self.draw_image_row_col(bg_svg, (row, col), layer=PILGL.SELECTED_AGENT_LAYER)
         if show_debug:
diff --git a/requirements_dev.txt b/requirements_dev.txt
index 0ab724bc490026c20b0d070a9c97f0a6651869ef..75ed1bf26924a366e3aabd8da1e2e34480f647bd 100644
--- a/requirements_dev.txt
+++ b/requirements_dev.txt
@@ -8,7 +8,6 @@ numpy>=1.16.2
 recordtype>=1.3
 matplotlib>=3.0.2
 Pillow>=5.4.1
-CairoSVG>=2.3.1
 msgpack==0.6.1
 msgpack-numpy>=0.4.4.0
 svgutils>=0.3.1
diff --git a/scripts/convert_svg_2_png.py b/scripts/convert_svg_2_png.py
new file mode 100755
index 0000000000000000000000000000000000000000..021c4ef593e87bb54a5351f8e69053e705eb6ca4
--- /dev/null
+++ b/scripts/convert_svg_2_png.py
@@ -0,0 +1,52 @@
+#!/usr/bin/env python
+
+import glob
+from cairosvg import svg2png
+import os
+import shutil
+import tqdm
+
+import io
+from PIL import Image
+
+########################################################
+########################################################
+# 
+# Converts SVG assets into PNG assets
+# 
+# We use this approach to drop the CairoSVG dependency
+# from the flatland requirements.
+# 
+# Usage Requires :
+#
+# conda install cairo
+#
+########################################################
+########################################################
+
+TARGET_PNG_WIDTH=300
+TARGET_PNG_HEIGHT=300
+
+SVG_FOLDER="../flatland/svg"
+TARGET_FOLDER="../flatland/png"
+
+# Delete target PNG files, if they exist
+for _png_file in glob.glob(os.path.join(TARGET_FOLDER, "*.png")):
+    os.remove(_png_file)
+
+# Convert all SVG files into PNG files
+for _source_svg_path in tqdm.tqdm(glob.glob(os.path.join(SVG_FOLDER, "*.svg"))):
+    base_filename = os.path.basename(_source_svg_path)
+    target_filename = base_filename.replace(".svg", ".png")
+    target_filepath = os.path.join(
+        TARGET_FOLDER,
+        target_filename
+    )
+    bytesPNG = svg2png(file_obj=open(_source_svg_path, "rb"))
+    with io.BytesIO(bytesPNG) as fIn:
+        im = Image.open(fIn)
+        im = im.resize((TARGET_PNG_WIDTH, TARGET_PNG_WIDTH))
+        im.load()
+        assert im.size == (TARGET_PNG_WIDTH, TARGET_PNG_HEIGHT)
+        im.save(target_filepath)
+