diff --git a/.gradle/8.10.2/executionHistory/executionHistory.bin b/.gradle/8.10.2/executionHistory/executionHistory.bin
index c46e15bd854f8e4e06bb1f69e356793676d553ff..79b0d723d31ff37e4eea1d84977005e31f62efe3 100644
Binary files a/.gradle/8.10.2/executionHistory/executionHistory.bin and b/.gradle/8.10.2/executionHistory/executionHistory.bin differ
diff --git a/.gradle/8.10.2/executionHistory/executionHistory.lock b/.gradle/8.10.2/executionHistory/executionHistory.lock
index 8f2e2b22a73cbbc959fa8af0ea18b150e32d3fe2..307db83672e538674ed8b6338798b3a55784fdeb 100644
Binary files a/.gradle/8.10.2/executionHistory/executionHistory.lock and b/.gradle/8.10.2/executionHistory/executionHistory.lock differ
diff --git a/.gradle/8.10.2/fileHashes/fileHashes.bin b/.gradle/8.10.2/fileHashes/fileHashes.bin
index 29469af9bfec929b3ec262caa5d5dd5f3c1f200c..79e3df825b257fac852c91d6262a46d7e5b7da21 100644
Binary files a/.gradle/8.10.2/fileHashes/fileHashes.bin and b/.gradle/8.10.2/fileHashes/fileHashes.bin differ
diff --git a/.gradle/8.10.2/fileHashes/fileHashes.lock b/.gradle/8.10.2/fileHashes/fileHashes.lock
index b687070073f9e85118e808cb30bf176a52616281..58bede2f2faaa5a1bc1493b8d9cbd7f542fefa91 100644
Binary files a/.gradle/8.10.2/fileHashes/fileHashes.lock and b/.gradle/8.10.2/fileHashes/fileHashes.lock differ
diff --git a/.gradle/8.10.2/fileHashes/resourceHashesCache.bin b/.gradle/8.10.2/fileHashes/resourceHashesCache.bin
index b472b2cc413fd0fd118ee8dac74ca66214808905..4aad651704930416be0bbd4272f5e3bcd5bedc3a 100644
Binary files a/.gradle/8.10.2/fileHashes/resourceHashesCache.bin and b/.gradle/8.10.2/fileHashes/resourceHashesCache.bin differ
diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index 5cee72757e140b9a4d5fc93caf5dfb26900fdc9f..ff44e921e770cbad55d19a4ae5b5a927c45f57e2 100644
Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe
index f6feff7a4a86dd2b895588b1211eaad6fc39b658..a3d4a94b71e9983be62a435feb3614d4a70768dc 100644
Binary files a/.gradle/file-system.probe and b/.gradle/file-system.probe differ
diff --git a/build/classes/java/main/controller/Controller.class b/build/classes/java/main/controller/Controller.class
index 5460b69e4ad124b6ba3858a79d483e32eb5cc8da..725bc8a981235faf4b67dbf84001e86c19fb9060 100644
Binary files a/build/classes/java/main/controller/Controller.class and b/build/classes/java/main/controller/Controller.class differ
diff --git a/build/classes/java/main/model/BoardData.class b/build/classes/java/main/model/BoardData.class
index 07eb07f10a711f6f8ef0f19cf60c4172975d4ba7..5ecb3fd49ec9702999371a36debb898ef6c96aed 100644
Binary files a/build/classes/java/main/model/BoardData.class and b/build/classes/java/main/model/BoardData.class differ
diff --git a/build/classes/java/main/model/ChargerBehavior.class b/build/classes/java/main/model/ChargerBehavior.class
deleted file mode 100644
index 4238416ce3f365b11d891c5a082fe00394159839..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/model/ChargerBehavior.class and /dev/null differ
diff --git a/build/classes/java/main/model/CloudBehavior.class b/build/classes/java/main/model/CloudBehavior.class
deleted file mode 100644
index c2d7aa58956927feef07442c96829a6a395b0877..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/model/CloudBehavior.class and /dev/null differ
diff --git a/build/classes/java/main/model/Element.class b/build/classes/java/main/model/Element.class
index 8e2eb1350365848b15dcaf78c2b55cde5c7ddfb1..4e131073a6ff16adce78c3e911ce85d4d22fdef6 100644
Binary files a/build/classes/java/main/model/Element.class and b/build/classes/java/main/model/Element.class differ
diff --git a/build/classes/java/main/model/FFBehavior.class b/build/classes/java/main/model/FFBehavior.class
deleted file mode 100644
index 291fe9094bbfeaa70d5df89ff86cc3f4924868ba..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/model/FFBehavior.class and /dev/null differ
diff --git a/build/classes/java/main/model/FFBoard.class b/build/classes/java/main/model/FFBoard.class
deleted file mode 100644
index 07ae6a6b5b6269f978eae54e251a9faa5b1be31f..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/model/FFBoard.class and /dev/null differ
diff --git a/build/classes/java/main/model/FFBoardData.class b/build/classes/java/main/model/FFBoardData.class
deleted file mode 100644
index 083bf54eef3faaf8e51274d1d229a5ee5f7d084d..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/model/FFBoardData.class and /dev/null differ
diff --git a/build/classes/java/main/model/FFUpdater.class b/build/classes/java/main/model/FFUpdater.class
deleted file mode 100644
index 3e585d7404d70b661e216810cc914f7a9c8d105b..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/model/FFUpdater.class and /dev/null differ
diff --git a/build/classes/java/main/model/Fire.class b/build/classes/java/main/model/Fire.class
deleted file mode 100644
index 360986a08a7cb0be7450bcd306c3e8e7a6573fd0..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/model/Fire.class and /dev/null differ
diff --git a/build/classes/java/main/model/FireBehavior.class b/build/classes/java/main/model/FireBehavior.class
deleted file mode 100644
index a63c2a3b6535781cf1e152bbb4645a4accf42d73..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/model/FireBehavior.class and /dev/null differ
diff --git a/build/classes/java/main/model/FireFactory.class b/build/classes/java/main/model/FireFactory.class
deleted file mode 100644
index 13b6a7ffccc0f19df29c8c02b35aa50668a243d6..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/model/FireFactory.class and /dev/null differ
diff --git a/build/classes/java/main/model/FireFighter.class b/build/classes/java/main/model/FireFighter.class
deleted file mode 100644
index 1e2297e2ca73c58649903e7346f5ad3fa4f6f0b8..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/model/FireFighter.class and /dev/null differ
diff --git a/build/classes/java/main/model/FireFighterBehavior.class b/build/classes/java/main/model/FireFighterBehavior.class
deleted file mode 100644
index 2bca188bdc18f223c28a8b7a8294d8cb2036cb8f..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/model/FireFighterBehavior.class and /dev/null differ
diff --git a/build/classes/java/main/model/Forest.class b/build/classes/java/main/model/Forest.class
deleted file mode 100644
index 354d9304df5d6afe682c51ea4339f6f37a45017e..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/model/Forest.class and /dev/null differ
diff --git a/build/classes/java/main/model/Land.class b/build/classes/java/main/model/Land.class
deleted file mode 100644
index cc196ad2cb290b7506aebcb8074e7378df7e0631..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/model/Land.class and /dev/null differ
diff --git a/build/classes/java/main/model/ModelElement.class b/build/classes/java/main/model/ModelElement.class
deleted file mode 100644
index d3db593cc6c61187e3068ed32b7fe61f64ac09e4..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/model/ModelElement.class and /dev/null differ
diff --git a/build/classes/java/main/model/MotorizedFireFighter.class b/build/classes/java/main/model/MotorizedFireFighter.class
deleted file mode 100644
index 8f8c31c07c776f0bb418023db3a336f14f691707..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/model/MotorizedFireFighter.class and /dev/null differ
diff --git a/build/classes/java/main/model/Mountain.class b/build/classes/java/main/model/Mountain.class
deleted file mode 100644
index 55d91ac26b769014e955292d6c7e4faa355cd59e..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/model/Mountain.class and /dev/null differ
diff --git a/build/classes/java/main/model/Printable.class b/build/classes/java/main/model/Printable.class
deleted file mode 100644
index 4a4da6580c0bf74116ba0d997894b5afc5b6981a..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/model/Printable.class and /dev/null differ
diff --git a/build/classes/java/main/model/QuickFire.class b/build/classes/java/main/model/QuickFire.class
deleted file mode 100644
index 1ac9b326dbb7181d986e03b52463b3233ce6b556..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/model/QuickFire.class and /dev/null differ
diff --git a/build/classes/java/main/model/Road.class b/build/classes/java/main/model/Road.class
deleted file mode 100644
index 2e08aedd4f1bc69add1182c39883ce9eeed2d03e..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/model/Road.class and /dev/null differ
diff --git a/build/classes/java/main/model/RoadFactory.class b/build/classes/java/main/model/RoadFactory.class
deleted file mode 100644
index a4a505e1971afaf8930b6866d401267bed2b6359..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/model/RoadFactory.class and /dev/null differ
diff --git a/build/classes/java/main/model/Rock.class b/build/classes/java/main/model/Rock.class
deleted file mode 100644
index 41ee410a25e815c5d9cb896015db1ce726e96037..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/model/Rock.class and /dev/null differ
diff --git a/build/classes/java/main/model/RockBehavior.class b/build/classes/java/main/model/RockBehavior.class
deleted file mode 100644
index 8368e7bb46ff97155f4bdbaaeca48fcd19e2da9e..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/model/RockBehavior.class and /dev/null differ
diff --git a/build/classes/java/main/model/StandardFire.class b/build/classes/java/main/model/StandardFire.class
deleted file mode 100644
index 81358e7c16260b8d1d77d2d7a0650163f6d5df8f..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/model/StandardFire.class and /dev/null differ
diff --git a/build/classes/java/main/model/StandardFireFighter.class b/build/classes/java/main/model/StandardFireFighter.class
deleted file mode 100644
index 55c39846baf5e76796aa09fdd55f52ff13aa28bf..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/model/StandardFireFighter.class and /dev/null differ
diff --git a/build/classes/java/main/model/TangibleBehavior.class b/build/classes/java/main/model/TangibleBehavior.class
deleted file mode 100644
index 02e1e1bca2906667c62dbe82da8609e9e78ddf6a..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/model/TangibleBehavior.class and /dev/null differ
diff --git a/build/classes/java/main/model/ChargeTarget.class b/build/classes/java/main/model/elementTokens/ChargeTarget.class
similarity index 68%
rename from build/classes/java/main/model/ChargeTarget.class
rename to build/classes/java/main/model/elementTokens/ChargeTarget.class
index 7d6138fb55f9758dc3a69a92972c313c6360a1f9..3504616201080376dfac3ad2e31d51764da2e29d 100644
Binary files a/build/classes/java/main/model/ChargeTarget.class and b/build/classes/java/main/model/elementTokens/ChargeTarget.class differ
diff --git a/build/classes/java/main/model/ConnexElement.class b/build/classes/java/main/model/elementTokens/ConnexElement.class
similarity index 52%
rename from build/classes/java/main/model/ConnexElement.class
rename to build/classes/java/main/model/elementTokens/ConnexElement.class
index 009ee88fb0b1b2fb782a0dcf081694bb509ef62e..3129347567bb5858e80e647a1149460922eeffbb 100644
Binary files a/build/classes/java/main/model/ConnexElement.class and b/build/classes/java/main/model/elementTokens/ConnexElement.class differ
diff --git a/build/classes/java/main/model/elementTokens/Printable.class b/build/classes/java/main/model/elementTokens/Printable.class
new file mode 100644
index 0000000000000000000000000000000000000000..03cb5b5ed644d4abdec319524b85bdda7b8f88f1
Binary files /dev/null and b/build/classes/java/main/model/elementTokens/Printable.class differ
diff --git a/build/classes/java/main/model/Updatable.class b/build/classes/java/main/model/elementTokens/Updatable.class
similarity index 72%
rename from build/classes/java/main/model/Updatable.class
rename to build/classes/java/main/model/elementTokens/Updatable.class
index ca0085ffcc16197c036e8b623d6aa133f687c3a6..af10710a0343086bf1d8952096c056d89064eefe 100644
Binary files a/build/classes/java/main/model/Updatable.class and b/build/classes/java/main/model/elementTokens/Updatable.class differ
diff --git a/build/classes/java/main/model/ZoneDependent.class b/build/classes/java/main/model/elementTokens/ZoneDependent.class
similarity index 57%
rename from build/classes/java/main/model/ZoneDependent.class
rename to build/classes/java/main/model/elementTokens/ZoneDependent.class
index 2aae31c665e51fc937c9336a7923a3127d04148b..1693f21c87060c8aef493e964fac32ea9a8277bd 100644
Binary files a/build/classes/java/main/model/ZoneDependent.class and b/build/classes/java/main/model/elementTokens/ZoneDependent.class differ
diff --git a/build/classes/java/main/model/Cell.class b/build/classes/java/main/model/firefighter/Cell.class
similarity index 51%
rename from build/classes/java/main/model/Cell.class
rename to build/classes/java/main/model/firefighter/Cell.class
index c5b5ebd6bb02a92a57e1e05dacdf52857fba1e74..e86d6fd1e276fec06f0c963885a2b5a611e619ce 100644
Binary files a/build/classes/java/main/model/Cell.class and b/build/classes/java/main/model/firefighter/Cell.class differ
diff --git a/build/classes/java/main/model/firefighter/FFBehavior.class b/build/classes/java/main/model/firefighter/FFBehavior.class
new file mode 100644
index 0000000000000000000000000000000000000000..e4fae041b0ed6b7626683259fad57a27044f9449
Binary files /dev/null and b/build/classes/java/main/model/firefighter/FFBehavior.class differ
diff --git a/build/classes/java/main/model/firefighter/FFBoard.class b/build/classes/java/main/model/firefighter/FFBoard.class
new file mode 100644
index 0000000000000000000000000000000000000000..bb69b25a7fc67a5c9e5a369d9400532907aafa1d
Binary files /dev/null and b/build/classes/java/main/model/firefighter/FFBoard.class differ
diff --git a/build/classes/java/main/model/firefighter/FFBoardData.class b/build/classes/java/main/model/firefighter/FFBoardData.class
new file mode 100644
index 0000000000000000000000000000000000000000..1de7ad925e48fd349ced009e30664cf491578a2b
Binary files /dev/null and b/build/classes/java/main/model/firefighter/FFBoardData.class differ
diff --git a/build/classes/java/main/model/firefighter/FFUpdater.class b/build/classes/java/main/model/firefighter/FFUpdater.class
new file mode 100644
index 0000000000000000000000000000000000000000..0d3fecd7515128679f788a66768f60b762d7450a
Binary files /dev/null and b/build/classes/java/main/model/firefighter/FFUpdater.class differ
diff --git a/build/classes/java/main/model/firefighter/FFboardFiller.class b/build/classes/java/main/model/firefighter/FFboardFiller.class
new file mode 100644
index 0000000000000000000000000000000000000000..0a18c45b10b7a0191181ab4444d4ecddfb42808b
Binary files /dev/null and b/build/classes/java/main/model/firefighter/FFboardFiller.class differ
diff --git a/build/classes/java/main/model/firefighter/ModelElement.class b/build/classes/java/main/model/firefighter/ModelElement.class
new file mode 100644
index 0000000000000000000000000000000000000000..59bad8e1e6896f95c620a867b5829c2a4bc251f4
Binary files /dev/null and b/build/classes/java/main/model/firefighter/ModelElement.class differ
diff --git a/build/classes/java/main/model/firefighter/behaviors/CloudBehavior.class b/build/classes/java/main/model/firefighter/behaviors/CloudBehavior.class
new file mode 100644
index 0000000000000000000000000000000000000000..f2999e416ccfedf6152d1f7a5e548c53117a53e0
Binary files /dev/null and b/build/classes/java/main/model/firefighter/behaviors/CloudBehavior.class differ
diff --git a/build/classes/java/main/model/firefighter/behaviors/FireBehavior.class b/build/classes/java/main/model/firefighter/behaviors/FireBehavior.class
new file mode 100644
index 0000000000000000000000000000000000000000..0af75da9d61e3f3166c42263024b4869c4883fd5
Binary files /dev/null and b/build/classes/java/main/model/firefighter/behaviors/FireBehavior.class differ
diff --git a/build/classes/java/main/model/firefighter/behaviors/FireFighterBehavior.class b/build/classes/java/main/model/firefighter/behaviors/FireFighterBehavior.class
new file mode 100644
index 0000000000000000000000000000000000000000..b7c4b6baa792bfe0f89471a68c0222da55288d43
Binary files /dev/null and b/build/classes/java/main/model/firefighter/behaviors/FireFighterBehavior.class differ
diff --git a/build/classes/java/main/model/firefighter/behaviors/RockBehavior.class b/build/classes/java/main/model/firefighter/behaviors/RockBehavior.class
new file mode 100644
index 0000000000000000000000000000000000000000..37e1e3e5884ebb52c8c6e579c694e4e320451235
Binary files /dev/null and b/build/classes/java/main/model/firefighter/behaviors/RockBehavior.class differ
diff --git a/build/classes/java/main/model/Cloud.class b/build/classes/java/main/model/firefighter/elements/Cloud.class
similarity index 50%
rename from build/classes/java/main/model/Cloud.class
rename to build/classes/java/main/model/firefighter/elements/Cloud.class
index 8abe5c73fad43333b2acc6717f97fb586a2837cf..6ff5a5b8934d063f9dea4e981282302ad1988ee3 100644
Binary files a/build/classes/java/main/model/Cloud.class and b/build/classes/java/main/model/firefighter/elements/Cloud.class differ
diff --git a/build/classes/java/main/model/firefighter/elements/Fire.class b/build/classes/java/main/model/firefighter/elements/Fire.class
new file mode 100644
index 0000000000000000000000000000000000000000..bc112da7789e82cdd1fc00b3bcf0ec26a35cdab1
Binary files /dev/null and b/build/classes/java/main/model/firefighter/elements/Fire.class differ
diff --git a/build/classes/java/main/model/firefighter/elements/FireFighter.class b/build/classes/java/main/model/firefighter/elements/FireFighter.class
new file mode 100644
index 0000000000000000000000000000000000000000..20616250a287bd3a56d845d99422ee50fffdcc37
Binary files /dev/null and b/build/classes/java/main/model/firefighter/elements/FireFighter.class differ
diff --git a/build/classes/java/main/model/firefighter/elements/Forest.class b/build/classes/java/main/model/firefighter/elements/Forest.class
new file mode 100644
index 0000000000000000000000000000000000000000..bdf0bb3c4786f091837f0981528313c070d8b4e9
Binary files /dev/null and b/build/classes/java/main/model/firefighter/elements/Forest.class differ
diff --git a/build/classes/java/main/model/firefighter/elements/Land.class b/build/classes/java/main/model/firefighter/elements/Land.class
new file mode 100644
index 0000000000000000000000000000000000000000..3f654275a0745607259319e8d1180c8141ecea79
Binary files /dev/null and b/build/classes/java/main/model/firefighter/elements/Land.class differ
diff --git a/build/classes/java/main/model/firefighter/elements/MotorizedFireFighter.class b/build/classes/java/main/model/firefighter/elements/MotorizedFireFighter.class
new file mode 100644
index 0000000000000000000000000000000000000000..c9e3f019f0719a6393176887f88b9b0d261595f6
Binary files /dev/null and b/build/classes/java/main/model/firefighter/elements/MotorizedFireFighter.class differ
diff --git a/build/classes/java/main/model/firefighter/elements/Mountain.class b/build/classes/java/main/model/firefighter/elements/Mountain.class
new file mode 100644
index 0000000000000000000000000000000000000000..557ae945ee6f625190b1d30b748a5d55ebc04932
Binary files /dev/null and b/build/classes/java/main/model/firefighter/elements/Mountain.class differ
diff --git a/build/classes/java/main/model/firefighter/elements/QuickFire.class b/build/classes/java/main/model/firefighter/elements/QuickFire.class
new file mode 100644
index 0000000000000000000000000000000000000000..7511097f47850f71541b1cc44413e5456a086d26
Binary files /dev/null and b/build/classes/java/main/model/firefighter/elements/QuickFire.class differ
diff --git a/build/classes/java/main/model/firefighter/elements/Road.class b/build/classes/java/main/model/firefighter/elements/Road.class
new file mode 100644
index 0000000000000000000000000000000000000000..812d9321d19e026d3be6f676d9001cf9025642f1
Binary files /dev/null and b/build/classes/java/main/model/firefighter/elements/Road.class differ
diff --git a/build/classes/java/main/model/firefighter/elements/Rock.class b/build/classes/java/main/model/firefighter/elements/Rock.class
new file mode 100644
index 0000000000000000000000000000000000000000..ab7626815300e9357ddfdaf44838931b60bc0d65
Binary files /dev/null and b/build/classes/java/main/model/firefighter/elements/Rock.class differ
diff --git a/build/classes/java/main/model/firefighter/elements/StandardFire.class b/build/classes/java/main/model/firefighter/elements/StandardFire.class
new file mode 100644
index 0000000000000000000000000000000000000000..ec18ebd1cbd96d461fc6e91a9e3a47b404d04b07
Binary files /dev/null and b/build/classes/java/main/model/firefighter/elements/StandardFire.class differ
diff --git a/build/classes/java/main/model/firefighter/elements/StandardFireFighter.class b/build/classes/java/main/model/firefighter/elements/StandardFireFighter.class
new file mode 100644
index 0000000000000000000000000000000000000000..06dcbc0ddd250c4a23bcc488d0113268548f9620
Binary files /dev/null and b/build/classes/java/main/model/firefighter/elements/StandardFireFighter.class differ
diff --git a/build/classes/java/main/model/firefighter/factories/FireFactory.class b/build/classes/java/main/model/firefighter/factories/FireFactory.class
new file mode 100644
index 0000000000000000000000000000000000000000..098813a0c87d9ce0784ea8490f698c7190ea7772
Binary files /dev/null and b/build/classes/java/main/model/firefighter/factories/FireFactory.class differ
diff --git a/build/classes/java/main/model/firefighter/factories/RoadFactory.class b/build/classes/java/main/model/firefighter/factories/RoadFactory.class
new file mode 100644
index 0000000000000000000000000000000000000000..1a24a970eb3c45593d6bb6f3223020d86381ac8b
Binary files /dev/null and b/build/classes/java/main/model/firefighter/factories/RoadFactory.class differ
diff --git a/build/classes/java/main/model/genericBehavior/ChargerBehavior.class b/build/classes/java/main/model/genericBehavior/ChargerBehavior.class
new file mode 100644
index 0000000000000000000000000000000000000000..a87e64a382904905e3ae820d5b023d0e750d5fa1
Binary files /dev/null and b/build/classes/java/main/model/genericBehavior/ChargerBehavior.class differ
diff --git a/build/classes/java/main/model/RemoverBehavior.class b/build/classes/java/main/model/genericBehavior/RemoverBehavior.class
similarity index 66%
rename from build/classes/java/main/model/RemoverBehavior.class
rename to build/classes/java/main/model/genericBehavior/RemoverBehavior.class
index be0680b2517d2851ae5e140a9a5d233c854ae81a..c65c2b9c3873764c75e84043991e64a6035c561c 100644
Binary files a/build/classes/java/main/model/RemoverBehavior.class and b/build/classes/java/main/model/genericBehavior/RemoverBehavior.class differ
diff --git a/build/classes/java/main/model/genericBehavior/TangibleBehavior.class b/build/classes/java/main/model/genericBehavior/TangibleBehavior.class
new file mode 100644
index 0000000000000000000000000000000000000000..37567a968a82d2a3745640193908bc180ae5352b
Binary files /dev/null and b/build/classes/java/main/model/genericBehavior/TangibleBehavior.class differ
diff --git a/build/classes/java/main/view/ViewElement.class b/build/classes/java/main/view/ViewElement.class
index ac4ba6fa8c7ba43a1de3a562d2867c1f129d1fff..934b0ab6c6bdd0f5fa313bb7f0f00074b7d7e26d 100644
Binary files a/build/classes/java/main/view/ViewElement.class and b/build/classes/java/main/view/ViewElement.class differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/FFBoard.class.uniqueId2 b/build/tmp/compileJava/compileTransaction/stash-dir/FFBoard.class.uniqueId2
new file mode 100644
index 0000000000000000000000000000000000000000..bb69b25a7fc67a5c9e5a369d9400532907aafa1d
Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/FFBoard.class.uniqueId2 differ
diff --git a/build/classes/java/main/model/FFboardFiller.class b/build/tmp/compileJava/compileTransaction/stash-dir/FFboardFiller.class.uniqueId0
similarity index 58%
rename from build/classes/java/main/model/FFboardFiller.class
rename to build/tmp/compileJava/compileTransaction/stash-dir/FFboardFiller.class.uniqueId0
index 11c72f5ec52221d0df0e243cf8394242f6bea792..04c93ff60c8f5e70125ba22c9fb2351d3ccb0a26 100644
Binary files a/build/classes/java/main/model/FFboardFiller.class and b/build/tmp/compileJava/compileTransaction/stash-dir/FFboardFiller.class.uniqueId0 differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/module-info.class.uniqueId1 b/build/tmp/compileJava/compileTransaction/stash-dir/module-info.class.uniqueId1
new file mode 100644
index 0000000000000000000000000000000000000000..f0b28b3b4966d6d1c1eac55f53fff160e8e01b67
Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/module-info.class.uniqueId1 differ
diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin
index bcdd475d8fa9ab9d476b27463bf53c14f1b7aa66..d636099d99cb14df4b364c87e61a0b95010edce9 100644
Binary files a/build/tmp/compileJava/previous-compilation-data.bin and b/build/tmp/compileJava/previous-compilation-data.bin differ
diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java
index 5aa4624c3fa57190544753c551538faca4affa00..d23f4b46d06dedadf365cfcec786f858bacd70cf 100644
--- a/src/main/java/controller/Controller.java
+++ b/src/main/java/controller/Controller.java
@@ -13,8 +13,8 @@ import javafx.scene.control.ToggleGroup;
 import javafx.util.Duration;
 import javafx.util.Pair;
 import model.Board;
-import model.ModelElement;
-import model.FFBoard;
+import model.firefighter.ModelElement;
+import model.firefighter.FFBoard;
 import util.Position;
 import view.Grid;
 import view.ViewElement;
diff --git a/src/main/java/model/BoardData.java b/src/main/java/model/BoardData.java
index 2cad06371a2db77d49df8292fcb06e1b96f55d4a..78f4a6b30db303618045dda3964ce83e1f487329 100644
--- a/src/main/java/model/BoardData.java
+++ b/src/main/java/model/BoardData.java
@@ -1,5 +1,6 @@
 package model;
 
+import model.firefighter.Cell;
 import util.Position;
 
 import java.util.List;
diff --git a/src/main/java/model/Element.java b/src/main/java/model/Element.java
index 014f446ae0ca7a4e62c824edf8762d06286c1a8c..b39cca08c8f681fc8c1c71ffd8cacee47c336e81 100644
--- a/src/main/java/model/Element.java
+++ b/src/main/java/model/Element.java
@@ -1,5 +1,6 @@
 package model;
 
+import model.firefighter.ModelElement;
 import util.Position;
 
 public interface Element {
diff --git a/src/main/java/model/QuickFire.java b/src/main/java/model/QuickFire.java
deleted file mode 100644
index d70ec9f3f465ac157a1cdb4ab74a34e6ad7d42ae..0000000000000000000000000000000000000000
--- a/src/main/java/model/QuickFire.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package model;
-
-import util.Position;
-
-public class QuickFire extends Fire implements Updatable{
-    public QuickFire(Position position) {
-        super(1, ModelElement.SLOWFIRE, position);
-    }
-}
diff --git a/src/main/java/model/RemoverBehavior.java b/src/main/java/model/RemoverBehavior.java
deleted file mode 100644
index 07190d26c14befed97a5d2ad6c36539a96ced31e..0000000000000000000000000000000000000000
--- a/src/main/java/model/RemoverBehavior.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package model;
-
-import util.Position;
-
-import java.util.List;
-
-public interface RemoverBehavior<E> extends Behavior {
-    public void extinguish(BoardData boardData,Position position);
-
-}
diff --git a/src/main/java/model/Road.java b/src/main/java/model/Road.java
deleted file mode 100644
index a769a7f01ad56fcd1ffc23924d15fc6353cfaeb0..0000000000000000000000000000000000000000
--- a/src/main/java/model/Road.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package model;
-
-import util.Position;
-
-public class Road extends Land implements Element,ConnexElement {
-    public static ElementFactory factory=new RoadFactory();
-    public Road(Position position) {
-        super(position);
-        type=ModelElement.ROAD;
-    }
-
-    @Override
-    public ElementFactory getFactory() {
-        return factory;
-    }
-}
diff --git a/src/main/java/model/TangibleBehavior.java b/src/main/java/model/TangibleBehavior.java
deleted file mode 100644
index 8aaa13c3f58d34411a364d3289508851437ac5bf..0000000000000000000000000000000000000000
--- a/src/main/java/model/TangibleBehavior.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package model;
-
-import util.Position;
-
-import java.util.List;
-
-public interface TangibleBehavior<E> extends Behavior {
-    public List<E> getObstacles();
-    public Boolean isLegal(BoardData boardData,Position position);
-}
diff --git a/src/main/java/model/ChargeTarget.java b/src/main/java/model/elementTokens/ChargeTarget.java
similarity index 84%
rename from src/main/java/model/ChargeTarget.java
rename to src/main/java/model/elementTokens/ChargeTarget.java
index 3fbab15bce0218b31ce61515fd590ad3389dadec..e09d0738d55b65da0c2ef88f9de9df09a5de2461 100644
--- a/src/main/java/model/ChargeTarget.java
+++ b/src/main/java/model/elementTokens/ChargeTarget.java
@@ -1,4 +1,4 @@
-package model;
+package model.elementTokens;
 
 public interface ChargeTarget {
     public int getCounter();
diff --git a/src/main/java/model/ConnexElement.java b/src/main/java/model/elementTokens/ConnexElement.java
similarity index 53%
rename from src/main/java/model/ConnexElement.java
rename to src/main/java/model/elementTokens/ConnexElement.java
index 5057c05fe82200cef5deb19f43fc82d90daf8f20..4dc5a1869ce5d281d35779e07387ed5b0efaf33a 100644
--- a/src/main/java/model/ConnexElement.java
+++ b/src/main/java/model/elementTokens/ConnexElement.java
@@ -1,4 +1,7 @@
-package model;
+package model.elementTokens;
+
+import model.Element;
+import model.ElementFactory;
 
 public interface ConnexElement extends Element {
     public ElementFactory getFactory();
diff --git a/src/main/java/model/Printable.java b/src/main/java/model/elementTokens/Printable.java
similarity index 73%
rename from src/main/java/model/Printable.java
rename to src/main/java/model/elementTokens/Printable.java
index ee65b3a57e88f73d3153e5c8e51f2f9ddf3c9b52..4802d711d5bbd6c14ac0967efc78fde81ee22ea7 100644
--- a/src/main/java/model/Printable.java
+++ b/src/main/java/model/elementTokens/Printable.java
@@ -1,4 +1,4 @@
-package model;
+package model.elementTokens;
 
 import util.Position;
 
diff --git a/src/main/java/model/Updatable.java b/src/main/java/model/elementTokens/Updatable.java
similarity index 72%
rename from src/main/java/model/Updatable.java
rename to src/main/java/model/elementTokens/Updatable.java
index a40eaafe0053fe285c918778f71295cc38aaecb6..d406deabace1e3d05d9b40ddaf42820197c7a162 100644
--- a/src/main/java/model/Updatable.java
+++ b/src/main/java/model/elementTokens/Updatable.java
@@ -1,5 +1,6 @@
-package model;
+package model.elementTokens;
 
+import model.BoardData;
 import util.Position;
 
 import java.util.List;
diff --git a/src/main/java/model/ZoneDependent.java b/src/main/java/model/elementTokens/ZoneDependent.java
similarity index 71%
rename from src/main/java/model/ZoneDependent.java
rename to src/main/java/model/elementTokens/ZoneDependent.java
index 19e501e1a244edf9b8f555d6e3848ef9dac643c4..b1a9283e4f033023fae5a1b590aa9f3ac7e1d4ff 100644
--- a/src/main/java/model/ZoneDependent.java
+++ b/src/main/java/model/elementTokens/ZoneDependent.java
@@ -1,5 +1,6 @@
-package model;
+package model.elementTokens;
 
+import model.ElementFactory;
 import util.Position;
 
 import java.util.List;
diff --git a/src/main/java/model/Cell.java b/src/main/java/model/firefighter/Cell.java
similarity index 71%
rename from src/main/java/model/Cell.java
rename to src/main/java/model/firefighter/Cell.java
index 4430300eeef30376deb2419f264fff8a1ed331ad..726044b7c4f2843487410070d7696a3537d52ca9 100644
--- a/src/main/java/model/Cell.java
+++ b/src/main/java/model/firefighter/Cell.java
@@ -1,4 +1,4 @@
-package model;
+package model.firefighter;
 
 import util.Position;
 
@@ -6,8 +6,8 @@ import java.util.ArrayList;
 import java.util.List;
 
 public class Cell <E>{
-    List<E> Content;
-    Position position;
+    public List<E> Content;
+    public Position position;
 
     public Cell(Position position) {
         this.position=position;
diff --git a/src/main/java/model/FFBehavior.java b/src/main/java/model/firefighter/FFBehavior.java
similarity index 74%
rename from src/main/java/model/FFBehavior.java
rename to src/main/java/model/firefighter/FFBehavior.java
index 744a30c8b0c802011c595d57e5264b8fdf54dfb1..5db4eb7a6c56ab62dd6673b22fe1344793a34df4 100644
--- a/src/main/java/model/FFBehavior.java
+++ b/src/main/java/model/firefighter/FFBehavior.java
@@ -1,5 +1,7 @@
-package model;
+package model.firefighter;
 
+import model.Behavior;
+import model.Element;
 import util.Position;
 
 import java.util.ArrayList;
diff --git a/src/main/java/model/FFBoard.java b/src/main/java/model/firefighter/FFBoard.java
similarity index 95%
rename from src/main/java/model/FFBoard.java
rename to src/main/java/model/firefighter/FFBoard.java
index ad2a6752708410f8ef0a6ea549006e49e7b1d098..06159263a94b0f5fa55925c25556d4f444a6cebb 100644
--- a/src/main/java/model/FFBoard.java
+++ b/src/main/java/model/firefighter/FFBoard.java
@@ -1,9 +1,10 @@
-package model;
+package model.firefighter;
 
+import model.Board;
+import model.BoardData;
+import model.Element;
 import util.Position;
-import util.TargetStrategy;
 
-import java.lang.reflect.InvocationTargetException;
 import java.util.*;
 
 
diff --git a/src/main/java/model/FFBoardData.java b/src/main/java/model/firefighter/FFBoardData.java
similarity index 94%
rename from src/main/java/model/FFBoardData.java
rename to src/main/java/model/firefighter/FFBoardData.java
index fe999bf185001a2a0685820ad79666127fd8ba11..508a9f585beef2c93bd01dcd9c7809a7586709f5 100644
--- a/src/main/java/model/FFBoardData.java
+++ b/src/main/java/model/firefighter/FFBoardData.java
@@ -1,10 +1,13 @@
-package model;
+package model.firefighter;
 
+import model.BoardData;
+import model.Element;
+import model.genericBehavior.TangibleBehavior;
 import util.Position;
 
 import java.util.*;
 
-public class FFBoardData implements BoardData{
+public class FFBoardData implements BoardData {
 
     private List<List<Element>> elementList;
     private Map<Position, List<Position>> neighbors = new HashMap<Position, List<Position>>();
diff --git a/src/main/java/model/FFUpdater.java b/src/main/java/model/firefighter/FFUpdater.java
similarity index 87%
rename from src/main/java/model/FFUpdater.java
rename to src/main/java/model/firefighter/FFUpdater.java
index f3f8ab4600de709c4cbdaf1311fdb20e16437716..80ddbd78d9b655cdec376a7b81940161482faa55 100644
--- a/src/main/java/model/FFUpdater.java
+++ b/src/main/java/model/firefighter/FFUpdater.java
@@ -1,9 +1,12 @@
-package model;
+package model.firefighter;
 
+import model.BoardData;
+import model.Element;
+import model.elementTokens.Updatable;
+import model.Updater;
 import util.Position;
 
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.List;
 
 public class FFUpdater implements Updater {
diff --git a/src/main/java/model/FFboardFiller.java b/src/main/java/model/firefighter/FFboardFiller.java
similarity index 81%
rename from src/main/java/model/FFboardFiller.java
rename to src/main/java/model/firefighter/FFboardFiller.java
index 6669df0c950b0919d27eb4d554932e459557dd0d..87e82be0906bcb991a0a7db0a50f0c25cfe28333 100644
--- a/src/main/java/model/FFboardFiller.java
+++ b/src/main/java/model/firefighter/FFboardFiller.java
@@ -1,18 +1,18 @@
-package model;
+package model.firefighter;
 
+import model.BoardData;
+import model.elementTokens.ConnexElement;
+import model.Element;
 import util.Position;
 import view.ViewElement;
 
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Modifier;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Random;
-import java.util.Set;
 
 public class FFboardFiller {
     Random random=new Random();
-    public void fillBoard(BoardData boardData,int[] counter){
+    public void fillBoard(BoardData boardData, int[] counter){
         List<Position> positions= new ArrayList<>(List.copyOf(boardData.getNeighbors().keySet()));
         for(ViewElement ve:ViewElement.values()){
             if (ve!=ViewElement.EMPTY)
@@ -25,7 +25,7 @@ public class FFboardFiller {
                 }while (!boardData.addElement(element));
                 if (element instanceof ConnexElement) {
                     positions.removeAll(boardData.getElements().get(element.getType().ordinal()).stream().map(x ->x.getPosition()).toList());
-                    System.out.println("0");}
+                }
                 positions.remove(p);
                 counter[ve.ordinal()]--;
             }
diff --git a/src/main/java/model/ModelElement.java b/src/main/java/model/firefighter/ModelElement.java
similarity index 91%
rename from src/main/java/model/ModelElement.java
rename to src/main/java/model/firefighter/ModelElement.java
index f9c7bcf9bd1f1d6e9b59ba9bffe8784d7b89bc77..228a6865cb8d9ed2d9813dcdbbe0173315ea0788 100644
--- a/src/main/java/model/ModelElement.java
+++ b/src/main/java/model/firefighter/ModelElement.java
@@ -1,5 +1,9 @@
-package model;
+package model.firefighter;
 
+import model.Element;
+import model.elementTokens.Printable;
+import model.elementTokens.Updatable;
+import model.firefighter.elements.*;
 import util.Position;
 
 import java.lang.reflect.InvocationTargetException;
diff --git a/src/main/java/model/CloudBehavior.java b/src/main/java/model/firefighter/behaviors/CloudBehavior.java
similarity index 81%
rename from src/main/java/model/CloudBehavior.java
rename to src/main/java/model/firefighter/behaviors/CloudBehavior.java
index 0c8eeabb04a4b1cb4c5f455b4406d6deacc86935..f106cd6cf37c3f33032b03bc5868b284c87f1bfb 100644
--- a/src/main/java/model/CloudBehavior.java
+++ b/src/main/java/model/firefighter/behaviors/CloudBehavior.java
@@ -1,9 +1,11 @@
-package model;
+package model.firefighter.behaviors;
 
 import model.BoardData;
-import model.FFBehavior;
-import model.ModelElement;
-import model.RemoverBehavior;
+import model.Element;
+import model.genericBehavior.RemoverBehavior;
+import model.firefighter.FFBehavior;
+import model.firefighter.ModelElement;
+import model.firefighter.elements.Fire;
 import util.Position;
 
 import java.util.*;
@@ -12,7 +14,7 @@ public class CloudBehavior extends FFBehavior implements RemoverBehavior<ModelEl
     private final Random random=new Random();
 
     @Override
-    public List<Position> update(BoardData boardData,Element element) {
+    public List<Position> update(BoardData boardData, Element element) {
         Position position;
         position=boardData.getNeighbor(element.getPosition()).get(random.nextInt(boardData.getNeighbor(element.getPosition()).size()));
         extinguish(boardData,position);
diff --git a/src/main/java/model/FireBehavior.java b/src/main/java/model/firefighter/behaviors/FireBehavior.java
similarity index 82%
rename from src/main/java/model/FireBehavior.java
rename to src/main/java/model/firefighter/behaviors/FireBehavior.java
index adb1378d356075e8bca3d3385aab64ca8edca861..060c70513f86c8d4fb4a8266aa8df36b65f6503e 100644
--- a/src/main/java/model/FireBehavior.java
+++ b/src/main/java/model/firefighter/behaviors/FireBehavior.java
@@ -1,5 +1,12 @@
-package model;
+package model.firefighter.behaviors;
 
+import model.*;
+import model.elementTokens.ChargeTarget;
+import model.firefighter.FFBehavior;
+import model.firefighter.ModelElement;
+import model.firefighter.elements.Fire;
+import model.genericBehavior.ChargerBehavior;
+import model.genericBehavior.TangibleBehavior;
 import util.Position;
 
 import java.util.ArrayList;
@@ -7,12 +14,12 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-public class FireBehavior extends FFBehavior  implements TangibleBehavior<ModelElement>,ChargerBehavior<ModelElement> {
+public class FireBehavior extends FFBehavior implements TangibleBehavior<ModelElement>, ChargerBehavior<ModelElement> {
     private List<ModelElement> obstacles=List.of(ModelElement.MOUNTAIN,ModelElement.ROAD);
     private List<ModelElement> chargeTargets=List.of(ModelElement.ROCK);
 
     @Override
-    public List<Position> update(BoardData boardData,Element element) {
+    public List<Position> update(BoardData boardData, Element element) {
         List<Position> positions=new ArrayList<>();
         if (((Fire)element).counter%((Fire)element).delay==0){
             positions=legalNeighbors(boardData,element.getPosition());
diff --git a/src/main/java/model/FireFighterBehavior.java b/src/main/java/model/firefighter/behaviors/FireFighterBehavior.java
similarity index 84%
rename from src/main/java/model/FireFighterBehavior.java
rename to src/main/java/model/firefighter/behaviors/FireFighterBehavior.java
index 31d9a12deec47c5283532946a7ec95cb75818388..0ce78e7633baf27ff891bed2fdd22f626f5eb004 100644
--- a/src/main/java/model/FireFighterBehavior.java
+++ b/src/main/java/model/firefighter/behaviors/FireFighterBehavior.java
@@ -1,10 +1,19 @@
-package model;
+package model.firefighter.behaviors;
 
+import model.*;
+import model.elementTokens.ChargeTarget;
+import model.firefighter.FFBehavior;
+import model.firefighter.ModelElement;
+import model.firefighter.elements.Fire;
+import model.firefighter.elements.FireFighter;
+import model.genericBehavior.ChargerBehavior;
+import model.genericBehavior.RemoverBehavior;
+import model.genericBehavior.TangibleBehavior;
 import util.Position;
 import util.TargetStrategy;
 import java.util.*;
 
-public class FireFighterBehavior extends FFBehavior implements TangibleBehavior<ModelElement>,RemoverBehavior<ModelElement>,ChargerBehavior<ModelElement> {
+public class FireFighterBehavior extends FFBehavior implements TangibleBehavior<ModelElement>, RemoverBehavior<ModelElement>, ChargerBehavior<ModelElement> {
     private List<ModelElement> obstacles=List.of(ModelElement.MOUNTAIN);
     private TargetStrategy ts=new TargetStrategy();
     private List chargeTarget=List.of(ModelElement.ROCK);
@@ -23,7 +32,7 @@ public class FireFighterBehavior extends FFBehavior implements TangibleBehavior<
     public List<Position> update(BoardData boardData,Element element) {
         Position position=element.getPosition();
         List<Position> targets=initializeTargets(boardData);
-        for (int i=0;i<((FireFighter)element).speed;i++) {
+        for (int i = 0; i<((FireFighter)element).speed; i++) {
             position=ts.neighborClosestToFire(position,targets,allLegalNeighbors(boardData));
             extinguish(boardData,position);
             targets.remove(position);
diff --git a/src/main/java/model/RockBehavior.java b/src/main/java/model/firefighter/behaviors/RockBehavior.java
similarity index 74%
rename from src/main/java/model/RockBehavior.java
rename to src/main/java/model/firefighter/behaviors/RockBehavior.java
index bee781329dcb6e425cea70abaa34a5a2ba7562d0..60436bab5729cb88ffd7f317cf14c565381473f0 100644
--- a/src/main/java/model/RockBehavior.java
+++ b/src/main/java/model/firefighter/behaviors/RockBehavior.java
@@ -1,11 +1,16 @@
-package model;
+package model.firefighter.behaviors;
 
+import model.Behavior;
+import model.BoardData;
+import model.elementTokens.ChargeTarget;
+import model.Element;
+import model.firefighter.elements.Fire;
 import util.Position;
 
 import java.util.List;
 import java.util.Map;
 
-public class RockBehavior implements Behavior{
+public class RockBehavior implements Behavior {
 
     @Override
     public List<Position> update(BoardData boardData, Element element) {
diff --git a/src/main/java/model/Cloud.java b/src/main/java/model/firefighter/elements/Cloud.java
similarity index 78%
rename from src/main/java/model/Cloud.java
rename to src/main/java/model/firefighter/elements/Cloud.java
index 1e8f9bf631a687eabcb32bc2c546bc4c9901d2fc..3c8b0a2e45025093793b02e575079650210e77c2 100644
--- a/src/main/java/model/Cloud.java
+++ b/src/main/java/model/firefighter/elements/Cloud.java
@@ -1,11 +1,16 @@
-package model;
+package model.firefighter.elements;
 
+import model.*;
+import model.elementTokens.Printable;
+import model.elementTokens.Updatable;
+import model.firefighter.behaviors.CloudBehavior;
+import model.firefighter.ModelElement;
 import util.Position;
 
 import java.util.ArrayList;
 import java.util.List;
 
-public class Cloud implements Element,Updatable,Printable{
+public class Cloud implements Element, Updatable, Printable {
         ModelElement type;
         Position position;
 static Behavior behavior=new CloudBehavior();
diff --git a/src/main/java/model/Fire.java b/src/main/java/model/firefighter/elements/Fire.java
similarity index 70%
rename from src/main/java/model/Fire.java
rename to src/main/java/model/firefighter/elements/Fire.java
index c83de9d9fd0345fb764dbd7c1d47199cd9da251c..cbd93b8cf0359128c779c80977846b318f7846f9 100644
--- a/src/main/java/model/Fire.java
+++ b/src/main/java/model/firefighter/elements/Fire.java
@@ -1,15 +1,19 @@
-package model;
-
+package model.firefighter.elements;
+
+import model.*;
+import model.elementTokens.Printable;
+import model.elementTokens.Updatable;
+import model.elementTokens.ZoneDependent;
+import model.firefighter.behaviors.FireBehavior;
+import model.firefighter.factories.FireFactory;
+import model.firefighter.ModelElement;
 import util.Position;
 
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
-import java.util.stream.Stream;
 
-public abstract class Fire implements Element,Updatable,Printable,ZoneDependent{
-    int counter;
-    int delay;
+public abstract class Fire implements Element, Updatable, Printable, ZoneDependent {
+    public int counter;
+    public int delay;
     ModelElement type;
     Position position;
     static Behavior behavior=new FireBehavior();
diff --git a/src/main/java/model/FireFighter.java b/src/main/java/model/firefighter/elements/FireFighter.java
similarity index 76%
rename from src/main/java/model/FireFighter.java
rename to src/main/java/model/firefighter/elements/FireFighter.java
index c3db79510b5bd5a41c2c71ae9194d23fc93301b6..0b14a224298882123a912c4a8da8867167a324f3 100644
--- a/src/main/java/model/FireFighter.java
+++ b/src/main/java/model/firefighter/elements/FireFighter.java
@@ -1,12 +1,17 @@
-package model;
+package model.firefighter.elements;
 
+import model.*;
+import model.elementTokens.Printable;
+import model.elementTokens.Updatable;
+import model.firefighter.behaviors.FireFighterBehavior;
+import model.firefighter.ModelElement;
 import util.Position;
 
 import java.util.ArrayList;
 import java.util.List;
 
-public abstract class FireFighter implements Element,Updatable,Printable{
-        int speed;
+public abstract class FireFighter implements Element, Updatable, Printable {
+        public int speed;
         ModelElement type;
         Position position;
 static Behavior behavior=new FireFighterBehavior();
diff --git a/src/main/java/model/Forest.java b/src/main/java/model/firefighter/elements/Forest.java
similarity index 71%
rename from src/main/java/model/Forest.java
rename to src/main/java/model/firefighter/elements/Forest.java
index d2361826daf863bb1795b2310e53c6c5c418b43e..99b5f7f9c8fdf10962cd485c2047aaf2160dfba8 100644
--- a/src/main/java/model/Forest.java
+++ b/src/main/java/model/firefighter/elements/Forest.java
@@ -1,11 +1,13 @@
-package model;
+package model.firefighter.elements;
 
+import model.Element;
+import model.firefighter.ModelElement;
 import util.Position;
 
 public class Forest extends Land implements Element {
     //explanation : while reading the subject, I thought that any FIRE that was ON a ROCK took 4 turns instead of 2 (i changed slowfire into quickfire (1 turn) and did the forest);
     public Forest(Position position) {
         super(position);
-        type=ModelElement.FOREST;
+        type= ModelElement.FOREST;
     }
 }
diff --git a/src/main/java/model/Land.java b/src/main/java/model/firefighter/elements/Land.java
similarity index 64%
rename from src/main/java/model/Land.java
rename to src/main/java/model/firefighter/elements/Land.java
index 0bc0183fd3937bdee7abce53ea620b0bc595b725..ff0d7a347c765257025f19e905d500c3dd39f3b2 100644
--- a/src/main/java/model/Land.java
+++ b/src/main/java/model/firefighter/elements/Land.java
@@ -1,8 +1,12 @@
-package model;
+package model.firefighter.elements;
 
+import model.Behavior;
+import model.Element;
+import model.elementTokens.Printable;
+import model.firefighter.ModelElement;
 import util.Position;
 
-public abstract class Land implements Element ,Printable{
+public abstract class Land implements Element, Printable {
     Position position;
     ModelElement type;
 
diff --git a/src/main/java/model/MotorizedFireFighter.java b/src/main/java/model/firefighter/elements/MotorizedFireFighter.java
similarity index 62%
rename from src/main/java/model/MotorizedFireFighter.java
rename to src/main/java/model/firefighter/elements/MotorizedFireFighter.java
index 828bff5639cada8756c98794233bffc6adf96695..d0fc1fa7672ddb3f173c2d37173607aabd4eba87 100644
--- a/src/main/java/model/MotorizedFireFighter.java
+++ b/src/main/java/model/firefighter/elements/MotorizedFireFighter.java
@@ -1,8 +1,10 @@
-package model;
+package model.firefighter.elements;
 
+import model.elementTokens.Updatable;
+import model.firefighter.ModelElement;
 import util.Position;
 
-public class MotorizedFireFighter extends FireFighter implements Updatable{
+public class MotorizedFireFighter extends FireFighter implements Updatable {
     public MotorizedFireFighter(Position position) {
         super(2, ModelElement.MOTORIZEDFIREFIGHTER, position);
     }
diff --git a/src/main/java/model/Mountain.java b/src/main/java/model/firefighter/elements/Mountain.java
similarity index 61%
rename from src/main/java/model/Mountain.java
rename to src/main/java/model/firefighter/elements/Mountain.java
index 1c66058c70be1579478b506c33f267ad0b858c51..89db0aa2fe38ba6b9a7bec5ad9a45d063ce7735e 100644
--- a/src/main/java/model/Mountain.java
+++ b/src/main/java/model/firefighter/elements/Mountain.java
@@ -1,13 +1,12 @@
-package model;
+package model.firefighter.elements;
 
 import model.Element;
+import model.firefighter.ModelElement;
 import util.Position;
 
-import java.util.List;
-
 public class Mountain extends Land implements Element {
     public Mountain(Position position) {
         super(position);
-        type=ModelElement.MOUNTAIN;
+        type= ModelElement.MOUNTAIN;
     }
 }
diff --git a/src/main/java/model/firefighter/elements/QuickFire.java b/src/main/java/model/firefighter/elements/QuickFire.java
new file mode 100644
index 0000000000000000000000000000000000000000..6654b2ed9cee3b0bdcca74e4c436a34a0e5887dd
--- /dev/null
+++ b/src/main/java/model/firefighter/elements/QuickFire.java
@@ -0,0 +1,11 @@
+package model.firefighter.elements;
+
+import model.elementTokens.Updatable;
+import model.firefighter.ModelElement;
+import util.Position;
+
+public class QuickFire extends Fire implements Updatable {
+    public QuickFire(Position position) {
+        super(1, ModelElement.SLOWFIRE, position);
+    }
+}
diff --git a/src/main/java/model/firefighter/elements/Road.java b/src/main/java/model/firefighter/elements/Road.java
new file mode 100644
index 0000000000000000000000000000000000000000..df5a5fa31dd3fd7d73c0f2f2c314d1f54123e0d7
--- /dev/null
+++ b/src/main/java/model/firefighter/elements/Road.java
@@ -0,0 +1,21 @@
+package model.firefighter.elements;
+
+import model.elementTokens.ConnexElement;
+import model.Element;
+import model.ElementFactory;
+import model.firefighter.ModelElement;
+import model.firefighter.factories.RoadFactory;
+import util.Position;
+
+public class Road extends Land implements Element, ConnexElement {
+    public static ElementFactory factory=new RoadFactory();
+    public Road(Position position) {
+        super(position);
+        type= ModelElement.ROAD;
+    }
+
+    @Override
+    public ElementFactory getFactory() {
+        return factory;
+    }
+}
diff --git a/src/main/java/model/Rock.java b/src/main/java/model/firefighter/elements/Rock.java
similarity index 75%
rename from src/main/java/model/Rock.java
rename to src/main/java/model/firefighter/elements/Rock.java
index 9e1e80f5aa836ebd185a9b11566e064a5debff1a..35b8a27bd482130360a7ad13e456117e73ed21d4 100644
--- a/src/main/java/model/Rock.java
+++ b/src/main/java/model/firefighter/elements/Rock.java
@@ -1,10 +1,16 @@
-package model;
+package model.firefighter.elements;
 
+import model.*;
+import model.elementTokens.ChargeTarget;
+import model.elementTokens.Printable;
+import model.elementTokens.Updatable;
+import model.firefighter.ModelElement;
+import model.firefighter.behaviors.RockBehavior;
 import util.Position;
 
 import java.util.List;
 
-public class Rock implements Element,ChargeTarget,Updatable,Printable {
+public class Rock implements Element, ChargeTarget, Updatable, Printable {
     Position position;
     ModelElement type=ModelElement.ROCK;
     static Behavior behavior=new RockBehavior();
diff --git a/src/main/java/model/StandardFire.java b/src/main/java/model/firefighter/elements/StandardFire.java
similarity index 68%
rename from src/main/java/model/StandardFire.java
rename to src/main/java/model/firefighter/elements/StandardFire.java
index 61a5d159b38dac15ba93bdaddb2856ae85d20286..762ae09bc0c9e2b067cf8773c806bcb7ba23c658 100644
--- a/src/main/java/model/StandardFire.java
+++ b/src/main/java/model/firefighter/elements/StandardFire.java
@@ -1,5 +1,6 @@
-package model;
+package model.firefighter.elements;
 
+import model.firefighter.ModelElement;
 import util.Position;
 
 public class StandardFire extends Fire{
diff --git a/src/main/java/model/StandardFireFighter.java b/src/main/java/model/firefighter/elements/StandardFireFighter.java
similarity index 71%
rename from src/main/java/model/StandardFireFighter.java
rename to src/main/java/model/firefighter/elements/StandardFireFighter.java
index bd573e354d53a64393d4cac1e52a97a552d266eb..37be06d76aa50800af40f3305d417a31c365e59b 100644
--- a/src/main/java/model/StandardFireFighter.java
+++ b/src/main/java/model/firefighter/elements/StandardFireFighter.java
@@ -1,5 +1,6 @@
-package model;
+package model.firefighter.elements;
 
+import model.firefighter.ModelElement;
 import util.Position;
 
 public class StandardFireFighter extends FireFighter{
diff --git a/src/main/java/model/FireFactory.java b/src/main/java/model/firefighter/factories/FireFactory.java
similarity index 72%
rename from src/main/java/model/FireFactory.java
rename to src/main/java/model/firefighter/factories/FireFactory.java
index 672d44424892d5821ec8fba5d2f61efa299837e9..a190637c6dc618dfeb71a074b64f2cccf527e791 100644
--- a/src/main/java/model/FireFactory.java
+++ b/src/main/java/model/firefighter/factories/FireFactory.java
@@ -1,12 +1,17 @@
-package model;
+package model.firefighter.factories;
 
+import model.BoardData;
+import model.Element;
+import model.ElementFactory;
+import model.firefighter.ModelElement;
+import model.firefighter.elements.StandardFire;
 import util.Position;
 
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-public class FireFactory implements ElementFactory{
+public class FireFactory implements ElementFactory {
     static Map<ModelElement,ModelElement> fireDictionary=new HashMap<>();
     static{
         fireDictionary.put(ModelElement.FOREST,ModelElement.SLOWFIRE);
diff --git a/src/main/java/model/RoadFactory.java b/src/main/java/model/firefighter/factories/RoadFactory.java
similarity index 72%
rename from src/main/java/model/RoadFactory.java
rename to src/main/java/model/firefighter/factories/RoadFactory.java
index 3211861223eb7b2ba7d6b92a9c52e1a13857205a..9e145a2de6f74f9fee6419b9b9e2279825db8077 100644
--- a/src/main/java/model/RoadFactory.java
+++ b/src/main/java/model/firefighter/factories/RoadFactory.java
@@ -1,21 +1,22 @@
-package model;
+package model.firefighter.factories;
 
+import model.BoardData;
+import model.Element;
+import model.ElementFactory;
+import model.firefighter.elements.Road;
 import util.Position;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
 import java.util.Random;
 
-public class RoadFactory implements ElementFactory{
+public class RoadFactory implements ElementFactory {
     Random random = new Random();
 
     public Element getNewElement(BoardData boardData, Position position){
         int[][] dir={{0,1},{0,-1},{1,0},{-1,0},{1,1},{1,-1},{-1,1},{-1,-1}};
         int[] currentDirection1,currentDirection2;
         do{
-            currentDirection1 = dir[random.nextInt(8)];
-            currentDirection2 = dir[random.nextInt(8)];
+            currentDirection1 = dir[random.nextInt(4)];//put to 8 to enable diagonals
+            currentDirection2 = dir[random.nextInt(4)];//put to 8 to enable diagonals
         }while(currentDirection1==currentDirection2);
 
         for (int i = position.row(),j= position.column();
diff --git a/src/main/java/model/ChargerBehavior.java b/src/main/java/model/genericBehavior/ChargerBehavior.java
similarity index 65%
rename from src/main/java/model/ChargerBehavior.java
rename to src/main/java/model/genericBehavior/ChargerBehavior.java
index aa26a9bd9dd69e5b264aa089717385360504a085..062362c9ae9e757772d00e93684f855e3dad957d 100644
--- a/src/main/java/model/ChargerBehavior.java
+++ b/src/main/java/model/genericBehavior/ChargerBehavior.java
@@ -1,6 +1,7 @@
-package model;
+package model.genericBehavior;
 
-import util.Position;
+import model.Behavior;
+import model.elementTokens.ChargeTarget;
 
 import java.util.List;
 
diff --git a/src/main/java/model/genericBehavior/RemoverBehavior.java b/src/main/java/model/genericBehavior/RemoverBehavior.java
new file mode 100644
index 0000000000000000000000000000000000000000..557853bb804b0a946d6bcd23e8a7e1255d985839
--- /dev/null
+++ b/src/main/java/model/genericBehavior/RemoverBehavior.java
@@ -0,0 +1,12 @@
+package model.genericBehavior;
+
+import model.Behavior;
+import model.BoardData;
+import util.Position;
+
+import java.util.List;
+
+public interface RemoverBehavior<E> extends Behavior {
+    public void extinguish(BoardData boardData, Position position);
+
+}
diff --git a/src/main/java/model/genericBehavior/TangibleBehavior.java b/src/main/java/model/genericBehavior/TangibleBehavior.java
new file mode 100644
index 0000000000000000000000000000000000000000..3f859024396b6a99fb81858e33fa9d62877e394c
--- /dev/null
+++ b/src/main/java/model/genericBehavior/TangibleBehavior.java
@@ -0,0 +1,12 @@
+package model.genericBehavior;
+
+import model.Behavior;
+import model.BoardData;
+import util.Position;
+
+import java.util.List;
+
+public interface TangibleBehavior<E> extends Behavior {
+    public List<E> getObstacles();
+    public Boolean isLegal(BoardData boardData, Position position);
+}
diff --git a/src/main/java/view/ViewElement.java b/src/main/java/view/ViewElement.java
index 102436b6218d61cdea74ae0d3255d40b2a23d065..56c6c1659a6c225bf9f3e5cb0dd069964f4e32cb 100644
--- a/src/main/java/view/ViewElement.java
+++ b/src/main/java/view/ViewElement.java
@@ -2,6 +2,7 @@ package view;
 
 import javafx.scene.paint.Color;
 import model.*;
+import model.firefighter.elements.*;
 import util.Position;
 
 import java.lang.reflect.InvocationTargetException;
@@ -14,7 +15,7 @@ public enum ViewElement {
   FIREFIGHTER(Color.LIGHTBLUE, StandardFireFighter.class),
   MOTORIZEDFIREFIGHTER(Color.DARKBLUE, MotorizedFireFighter.class),
   CLOUD(Color.gray(0.8), Cloud.class),
-  FIRE(Color.RED,Fire.class,Fire.factory),
+  FIRE(Color.RED, Fire.class,Fire.factory),
 
   EMPTY(Color.WHITE, null);
   final Color color;
diff --git a/src/test/java/model/FFBoardTest.java b/src/test/java/model/FFBoardTest.java
index ab86f9297ac43dc2c76b22dd81528acd13b47a4a..05f19ec930deb7274702ff0eb3e215bfb2e43ec8 100644
--- a/src/test/java/model/FFBoardTest.java
+++ b/src/test/java/model/FFBoardTest.java
@@ -1,5 +1,7 @@
 package model;
 
+import model.firefighter.FFBoard;
+import model.firefighter.ModelElement;
 import org.junit.jupiter.api.Test;
 import util.Position;