diff --git a/05/gradle.properties b/05/gradle.properties
index c73810285a5952b812c24247d9afc7d8b316d4fd..098fbca8f66b1190fe9b6b71e1dd6be6d6f7b9a5 100644
--- a/05/gradle.properties
+++ b/05/gradle.properties
@@ -1,3 +1,4 @@
 junitVersion=5.7.1
 log4j2Version=2.14.1
-commons_lang3_version=3.12.0
\ No newline at end of file
+commons_lang3_version=3.12.0
+org.gradle.java.home=/usr/lib/jvm/java-11-openjdk
\ No newline at end of file
diff --git a/05/src/main/java/ohm/softa/a05/collections/SimpleFilter.java b/05/src/main/java/ohm/softa/a05/collections/SimpleFilter.java
index fb68e7e733530a2c3d40f946f96f90da0e1d92cb..458cc45bc9ef04ff5edd3f772307c98e54a2291f 100644
--- a/05/src/main/java/ohm/softa/a05/collections/SimpleFilter.java
+++ b/05/src/main/java/ohm/softa/a05/collections/SimpleFilter.java
@@ -8,7 +8,7 @@ package ohm.softa.a05.collections;
 public interface SimpleFilter<T> {
 
 	/**
-	 * Determines if a item matches a condition
+	 * Determines if an item matches a condition
 	 *
 	 * @param item Object to evaluate
 	 * @return true if the referenced object should be included.
diff --git a/05/src/main/java/ohm/softa/a05/collections/SimpleListImpl.java b/05/src/main/java/ohm/softa/a05/collections/SimpleListImpl.java
index cf1316d7aae3c1c37a2a14de67297c3a09e56da9..62bd773f7aecd953aad28de5d76caba95980bf90 100644
--- a/05/src/main/java/ohm/softa/a05/collections/SimpleListImpl.java
+++ b/05/src/main/java/ohm/softa/a05/collections/SimpleListImpl.java
@@ -59,7 +59,7 @@ public class SimpleListImpl<T> implements SimpleList<T> {
 
 	/**
 	 * Helper class which implements the Iterator<TE> interface
-	 * Has to be non static because otherwise it could not access the head of the list
+	 * Has to be non-static because otherwise it could not access the head of the list
 	 */
 	private class SimpleIterator implements Iterator<T> {
 
diff --git a/05/src/main/java/ohm/softa/a05/model/Flower.java b/05/src/main/java/ohm/softa/a05/model/Flower.java
new file mode 100644
index 0000000000000000000000000000000000000000..8fc7a9230329503d32cab957943a4d1ae7180aea
--- /dev/null
+++ b/05/src/main/java/ohm/softa/a05/model/Flower.java
@@ -0,0 +1,46 @@
+package ohm.softa.a05.model;
+
+import java.util.Objects;
+
+public class Flower extends Plant {
+    private final PlantColor color;
+    public Flower(double height, String family, String name, PlantColor color) {
+        super(height, family, name);
+        if (color == PlantColor.GREEN) throw new IllegalArgumentException();
+        this.color = color;
+    }
+
+    // we don't care about the rest
+    public Flower(PlantColor color) {
+        this(1.71, "foo", "bar", color);
+    }
+
+    @Override
+    public PlantColor getColor() {
+        return color;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        if (!super.equals(o)) return false;
+        Flower flower = (Flower) o;
+        return color == flower.color;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(super.hashCode(), color);
+    }
+
+    @Override
+    public String toString() {
+        return "Flower{" +
+                "color=" + color +
+                ", height=" + height +
+                ", family='" + family + '\'' +
+                ", name='" + name + '\'' +
+                '}';
+    }
+}
diff --git a/05/src/main/java/ohm/softa/a05/model/Plant.java b/05/src/main/java/ohm/softa/a05/model/Plant.java
new file mode 100644
index 0000000000000000000000000000000000000000..f3501b2c4e82a8e361677bdaa651bd17253ce08c
--- /dev/null
+++ b/05/src/main/java/ohm/softa/a05/model/Plant.java
@@ -0,0 +1,56 @@
+package ohm.softa.a05.model;
+
+import java.util.Objects;
+
+abstract public class Plant implements Comparable<Plant> {
+    public Plant(double height, String family, String name) {
+        this.height = height;
+        this.family = family;
+        this.name = name;
+    }
+
+    public double getHeight() {
+        return height;
+    }
+
+    public String getFamily() {
+        return family;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    abstract public PlantColor getColor();
+
+    final protected double height;
+    final protected String family;
+    final protected String name;
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Plant plant = (Plant) o;
+        return Double.compare(plant.height, height) == 0 && Objects.equals(family, plant.family) && Objects.equals(name, plant.name);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(height, family, name);
+    }
+
+    @Override
+    public int compareTo(Plant plant) {
+        return Double.compare(this.getHeight(), plant.getHeight());
+    }
+
+    @Override
+    public String toString() {
+        return "Plant{" +
+                "height=" + height +
+                ", family='" + family + '\'' +
+                ", name='" + name + '\'' +
+                '}';
+    }
+}
diff --git a/05/src/main/java/ohm/softa/a05/model/PlantBed.java b/05/src/main/java/ohm/softa/a05/model/PlantBed.java
new file mode 100644
index 0000000000000000000000000000000000000000..8c5964036bb11e55c63644eda6114c58dae6b7f2
--- /dev/null
+++ b/05/src/main/java/ohm/softa/a05/model/PlantBed.java
@@ -0,0 +1,47 @@
+package ohm.softa.a05.model;
+
+import ohm.softa.a05.collections.SimpleList;
+import ohm.softa.a05.collections.SimpleListImpl;
+
+import java.util.stream.Collectors;
+import java.util.stream.StreamSupport;
+
+public class PlantBed<T extends Plant> {
+
+    private SimpleList<T> plants;
+
+    public PlantBed() {
+        plants = new SimpleListImpl<>();
+    }
+
+    public PlantBed(SimpleList<T> list) {
+        plants = list;
+    }
+
+    public void add(T plant) {
+        plants.add(plant);
+    }
+
+    public void remove(T plant) {
+        this.plants = this.plants
+                .filter(p -> p != plant);
+    }
+
+    public int size() {
+        return plants.size();
+    }
+
+    public SimpleList<T> getPlantsByColor(PlantColor color) {
+        return plants.filter(p -> p.getColor() == color);
+    }
+
+    @Override
+    public String toString() {
+        return "PlantBed{" +
+                "size=" + size() +
+                ", plants=[" + StreamSupport
+                .stream(plants.map(Plant::toString).spliterator(), true)
+                .collect(Collectors.joining(", ")) +
+                "]}";
+    }
+}
diff --git a/05/src/main/java/ohm/softa/a05/model/PlantColor.java b/05/src/main/java/ohm/softa/a05/model/PlantColor.java
new file mode 100644
index 0000000000000000000000000000000000000000..edd254ac4bcc1c178f39a4cedb40f5f739f4f286
--- /dev/null
+++ b/05/src/main/java/ohm/softa/a05/model/PlantColor.java
@@ -0,0 +1,9 @@
+package ohm.softa.a05.model;
+
+public enum PlantColor {
+    GREEN,
+    YELLOW,
+    RED,
+    BLUE,
+    ORANGE
+}
diff --git a/05/src/main/java/ohm/softa/a05/model/Shrub.java b/05/src/main/java/ohm/softa/a05/model/Shrub.java
new file mode 100644
index 0000000000000000000000000000000000000000..0217362b1f41bb657300c2832327b989120d0e2d
--- /dev/null
+++ b/05/src/main/java/ohm/softa/a05/model/Shrub.java
@@ -0,0 +1,25 @@
+package ohm.softa.a05.model;
+
+public class Shrub extends Plant {
+    @SuppressWarnings({"NeverUsed", "unused"})
+    public Shrub(double height, String family, String name) {
+        super(height, family, name);
+    }
+
+    public Shrub() {
+        super(2.83, "head", "tail");
+    }
+    @Override
+    public PlantColor getColor() {
+        return PlantColor.GREEN;
+    }
+
+    @Override
+    public String toString() {
+        return "Shrub{" +
+                "height=" + height +
+                ", family='" + family + '\'' +
+                ", name='" + name + '\'' +
+                '}';
+    }
+}
diff --git a/05/src/main/java/ohm/softa/a05/utils/PlantBetUtilities.java b/05/src/main/java/ohm/softa/a05/utils/PlantBetUtilities.java
new file mode 100644
index 0000000000000000000000000000000000000000..133dd2ef9122858b327b05283e3dd79434568d31
--- /dev/null
+++ b/05/src/main/java/ohm/softa/a05/utils/PlantBetUtilities.java
@@ -0,0 +1,12 @@
+package ohm.softa.a05.utils;
+
+import ohm.softa.a05.model.Plant;
+import ohm.softa.a05.model.PlantBed;
+import ohm.softa.a05.model.PlantColor;
+
+public abstract class PlantBetUtilities {
+
+    public static <T extends Plant> void repot(PlantBed<T> takenFrom, PlantColor color, PlantBed<? super T> putInto) {
+        takenFrom.getPlantsByColor(color).forEach(p -> {takenFrom.remove(p); putInto.add(p);});
+    }
+}
diff --git a/05/src/test/java/ohm/softa/a05/tests/collections/SimpleListTests.java b/05/src/test/java/ohm/softa/a05/tests/collections/SimpleListTests.java
index a25c5b369864a1a776e17ef470b8159cad007ed0..9126f6249f6184f3c207f2fe1d3b70526d66f4f1 100644
--- a/05/src/test/java/ohm/softa/a05/tests/collections/SimpleListTests.java
+++ b/05/src/test/java/ohm/softa/a05/tests/collections/SimpleListTests.java
@@ -53,12 +53,7 @@ class SimpleListTests {
 	@Test
 	void testFilterAnonymousClass(){
 		logger.info("Testing the filter possibilities by filtering for all elements greater 2");
-		SimpleList<Integer> result = testList.filter(new SimpleFilter<Integer>() {
-			@Override
-			public boolean include(Integer item) {
-				return item > 2;
-			}
-		});
+		SimpleList<Integer> result = testList.filter(item -> item > 2);
 
 		for(Integer i : result){
 			assertTrue(i > 2);
@@ -70,7 +65,7 @@ class SimpleListTests {
 		logger.info("Testing the filter possibilities by filtering for all elements which are dividable by 2");
 		SimpleList<Integer> result = testList.filter(o -> o % 2 == 0);
 		for(Integer i : result){
-			assertTrue(i % 2 == 0);
+			assertEquals(i % 2, 0);
 		}
 	}
 
diff --git a/05/src/test/java/ohm/softa/a05/tests/models/FlowerTests.java b/05/src/test/java/ohm/softa/a05/tests/models/FlowerTests.java
new file mode 100644
index 0000000000000000000000000000000000000000..ceb3132739897714c58b7d5b1319bd670da29b89
--- /dev/null
+++ b/05/src/test/java/ohm/softa/a05/tests/models/FlowerTests.java
@@ -0,0 +1,48 @@
+package ohm.softa.a05.tests.models;
+
+import ohm.softa.a05.model.Flower;
+import ohm.softa.a05.model.PlantColor;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+import java.util.Random;
+import java.util.stream.Collectors;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+public class FlowerTests {
+
+    private static Random rnd;
+
+    @BeforeAll
+    static void init() {
+        rnd = new Random();
+    }
+
+    @Test
+    void testColor() {
+        assertEquals(new Flower(PlantColor.BLUE), new Flower(PlantColor.BLUE));
+        assertNotEquals(new Flower(PlantColor.YELLOW), new Flower(PlantColor.ORANGE));
+
+        assertDoesNotThrow(() -> new Flower(PlantColor.RED));
+        assertThrows(Throwable.class, () -> new Flower(PlantColor.GREEN));
+    }
+
+    @Test
+    void testCompare() {
+        var values =
+                rnd.doubles()
+                        .limit(10)
+                        .mapToObj((d) ->
+                                new Flower(d, "foo", "bar", PlantColor.RED)).collect(Collectors.toList());
+
+        values.forEach((left) ->
+                values.forEach((right) ->
+                        assertEquals(left.compareTo(right),
+                                     Double.compare(
+                                              left.getHeight(),
+                                              right.getHeight()))));
+
+
+    }
+}
diff --git a/05/src/test/java/ohm/softa/a05/tests/models/PlantBedTests.java b/05/src/test/java/ohm/softa/a05/tests/models/PlantBedTests.java
new file mode 100644
index 0000000000000000000000000000000000000000..429b083524d7bad1558e2698981bdfeb3d2f4ddd
--- /dev/null
+++ b/05/src/test/java/ohm/softa/a05/tests/models/PlantBedTests.java
@@ -0,0 +1,66 @@
+package ohm.softa.a05.tests.models;
+
+import ohm.softa.a05.model.*;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class PlantBedTests {
+    private PlantBed<Plant> empty_bed, full_bed;
+    private Plant p1, p2, p3;
+
+    @BeforeEach
+    void setUp() {
+        empty_bed = new PlantBed<>();
+        full_bed = new PlantBed<>();
+        p1 = new Flower(PlantColor.RED);
+        p2 = new Shrub();
+        p3 = new Flower(3.78, "hello", "world", PlantColor.BLUE);
+        full_bed.add(p1);
+        full_bed.add(p2);
+        full_bed.add(p3);
+    }
+
+    @SuppressWarnings("EmptyMethod")
+    @AfterEach
+    void tearDown() {
+    }
+    @Test
+    void addRemoveSize() {
+        assertEquals(empty_bed.size(), 0);
+        empty_bed.add(p1);
+        assertEquals(empty_bed.size(), 1);
+        empty_bed.add(p2);
+        assertEquals(empty_bed.size(), 2);
+        empty_bed.add(p3);
+        empty_bed.add(p1);
+        assertEquals(empty_bed.size(), 4);
+        empty_bed.remove(p2);
+        assertEquals(empty_bed.size(), 3);
+        empty_bed.remove(p1);
+        assertEquals(empty_bed.size(), 1);
+        empty_bed.remove(p3);
+        assertEquals(empty_bed.size(), 0);
+    }
+    @Test
+    void getPlantsByColor() {
+        assertEquals(full_bed.size(), 3);
+        var filtered_bed = new PlantBed<>(
+                full_bed
+                        .getPlantsByColor(PlantColor.BLUE)
+                        .filter(p -> p.getColor() == PlantColor.BLUE));
+        assertEquals(filtered_bed.size(), 1);
+        assertEquals(filtered_bed.toString(), "PlantBed{size=1, " +
+                                                              "plants=[Flower{color=BLUE, " +
+                                                                             "height=3.78, " +
+                                                                             "family='hello', " +
+                                                                             "name='world'}]}");
+    }
+
+    @Test
+    void _toString() {
+        assertEquals(full_bed.toString(), "PlantBed{size=3, plants=[Flower{color=RED, height=1.71, family='foo', name='bar'}, Shrub{height=2.83, family='head', name='tail'}, Flower{color=BLUE, height=3.78, family='hello', name='world'}]}");
+    }
+}
\ No newline at end of file
diff --git a/05/src/test/java/ohm/softa/a05/tests/models/ShrubTests.java b/05/src/test/java/ohm/softa/a05/tests/models/ShrubTests.java
new file mode 100644
index 0000000000000000000000000000000000000000..9015c74583f62dc51de58049869a04bfe972e76e
--- /dev/null
+++ b/05/src/test/java/ohm/softa/a05/tests/models/ShrubTests.java
@@ -0,0 +1,14 @@
+package ohm.softa.a05.tests.models;
+
+import ohm.softa.a05.model.PlantColor;
+import ohm.softa.a05.model.Shrub;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class ShrubTests {
+    @Test
+    void testColor() {
+        assertEquals(new Shrub().getColor(), PlantColor.GREEN);
+    }
+}
diff --git a/05/src/test/java/ohm/softa/a05/utils/PlantBetUtilitiesTests.java b/05/src/test/java/ohm/softa/a05/utils/PlantBetUtilitiesTests.java
new file mode 100644
index 0000000000000000000000000000000000000000..c382221c8325372f5f8a3cc023976d5207076c73
--- /dev/null
+++ b/05/src/test/java/ohm/softa/a05/utils/PlantBetUtilitiesTests.java
@@ -0,0 +1,29 @@
+package ohm.softa.a05.utils;
+
+import ohm.softa.a05.model.*;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class PlantBetUtilitiesTests {
+
+    @Test
+    void repot() {
+        var bet = new PlantBed<>();
+        bet.add(new Flower(PlantColor.YELLOW));
+        bet.add(new Shrub(0.9, "gooooooooood", "morning vietnam"));
+        bet.add(new Shrub());
+        assertEquals(bet.size(), 3);
+
+        var bet2 = new PlantBed<>();
+        assertEquals(bet2.size(), 0);
+
+        PlantBetUtilities.repot(bet, PlantColor.GREEN, bet2);
+        assertEquals(bet.size(), 1);
+        assertEquals(bet2.size(), 2);
+
+        assertEquals(bet.toString(), "PlantBed{size=1, plants=[Flower{color=YELLOW, height=1.71, family='foo', name='bar'}]}");
+        assertEquals(bet2.toString(), "PlantBed{size=2, plants=[Shrub{height=0.9, family='gooooooooood', name='morning vietnam'}, Shrub{height=2.83, family='head', name='tail'}]}");
+
+    }
+}
\ No newline at end of file
diff --git a/playground/.idea/gradle.xml b/playground/.idea/gradle.xml
index 14746e76663d64283939c97c4c25a1bea7131fa3..2a65317ef840e02bf2375483aba5bdca996fc1b3 100644
--- a/playground/.idea/gradle.xml
+++ b/playground/.idea/gradle.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
+  <component name="GradleMigrationSettings" migrationVersion="1" />
   <component name="GradleSettings">
     <option name="linkedExternalProjectsSettings">
       <GradleProjectSettings>