diff --git a/src/main/scala/errors/Either.scala b/src/main/scala/errors/Either.scala
index bec4e26e8ee04442845106e0cb9da0f6309349f6..db0b0d2db568d84fccd4c851aaaf87b750f48801 100644
--- a/src/main/scala/errors/Either.scala
+++ b/src/main/scala/errors/Either.scala
@@ -1,6 +1,9 @@
 package errors
 
-sealed trait Either[+E, +A]:
+enum Either[+E, +A]:
+  case Left(value: E)
+  case Right(value: A)
+
   def map[B](f: A => B): Either[E, B] = this match
     case Left(e) => Left(e)
     case Right(a) => Right(f(a))
@@ -11,5 +14,3 @@ sealed trait Either[+E, +A]:
 
   def map2[EE >: E, B, C](other: Either[EE, B])(f: (A, B) => C): Either[EE, C] = ???
 
-final case class Left[+E](value: E) extends Either[E, Nothing]
-final case class Right[+A](value: A) extends Either[Nothing, A]
diff --git a/src/main/scala/errors/Option.scala b/src/main/scala/errors/Option.scala
index 2c39eec502b372ae2be586f5a0d9596ef167267e..0e5a6f353cfb9f99db3a1f16251a3da7d7094b2c 100644
--- a/src/main/scala/errors/Option.scala
+++ b/src/main/scala/errors/Option.scala
@@ -1,6 +1,9 @@
 package errors
 
-sealed trait Option[+A]:
+enum Option[+A]:
+  case Some(get: A)
+  case None
+
   def map[B](f: A => B): Option[B] = ???
 
   def getOrElse[B >: A](default: => B): B = ???
@@ -9,8 +12,6 @@ sealed trait Option[+A]:
 
   def filter[B](f: A => Boolean): Option[A] = ???
 
-final case class Some[+A](get: A) extends Option[A]
-case object None extends Option[Nothing]
 
 object Option:
   def sequence[A](list: List[Option[A]]): Option[List[A]] = ???
diff --git a/src/main/scala/errors/Team.scala b/src/main/scala/errors/Team.scala
index 44245fa89a6f96d8eb11636dce5752d3c5e1dcba..b8b60665dd52df03c455fb886b28d0e9bfc5790f 100644
--- a/src/main/scala/errors/Team.scala
+++ b/src/main/scala/errors/Team.scala
@@ -1,18 +1,20 @@
 package errors 
 
-object Team:
-  val persons = List(
-    Person("Dagobert", "Finanzabteilung"),
-    Person("Donald", "Spassabteilung"),
-    Person("Daniel", "R&D"),
-  )
+// This allows us to write Some and None without prefix, as we would inside the Option enum
+import Option.{None, Some}
 
-  type Team = (Person, Person)
+val persons = List(
+  Person("Dagobert", "Finanzabteilung"),
+  Person("Donald", "Spassabteilung"),
+  Person("Daniel", "R&D"),
+)
+
+type Team = (Person, Person)
 
-  def lookup(name: String): Option[Person] =
-    persons.find(_.name == name).fold(None: Option[Person])(a => Some(a))
+def lookup(name: String): Option[Person] =
+  persons.find(_.name == name).fold(None)(a => Some(a))
 
-  def getTeam(name1: String, name2: String): Option[Team] = ???
+def getTeam(name1: String, name2: String): Option[Team] = ???
 
 final case class Person(
   name: String,
diff --git a/src/test/scala/errors/EitherSpec.scala b/src/test/scala/errors/EitherSpec.scala
index 5f551a392eb76f81da92149d9e3324992c0fea8a..3b263a29dc2bcefc08325115e43de9f571035d6d 100644
--- a/src/test/scala/errors/EitherSpec.scala
+++ b/src/test/scala/errors/EitherSpec.scala
@@ -6,10 +6,10 @@ import org.scalatest.flatspec.AnyFlatSpec
 import org.scalatest.matchers.should.Matchers
 
 class EitherSpec extends AnyFlatSpec with Matchers with AppendedClues with PendingIfUnimplemented {
-  val l1: Either[Int, Int] = Left(1)
-  val l2: Either[Int, Int] = Left(2)
-  val r1: Either[Int, Int] = Right(1)
-  val r2: Either[Int, Int] = Right(2)
+  val l1: Either[Int, Int] = Either.Left(1)
+  val l2: Either[Int, Int] = Either.Left(2)
+  val r1: Either[Int, Int] = Either.Right(1)
+  val r2: Either[Int, Int] = Either.Right(2)
 
   "Either" should "have a map2 method which correctly combines two values" in {
     l1.map2(r1)((a, b) => a+b) shouldBe l1
diff --git a/src/test/scala/errors/OptionSpec.scala b/src/test/scala/errors/OptionSpec.scala
index 6d7ffc4cb489f9148685b0cde4d7e69ec08312a9..c079f62c5147dd8c340e11d3902cc184b94e5261 100644
--- a/src/test/scala/errors/OptionSpec.scala
+++ b/src/test/scala/errors/OptionSpec.scala
@@ -5,6 +5,8 @@ import testutil.PendingIfUnimplemented
 import org.scalatest.flatspec.AnyFlatSpec
 import org.scalatest.matchers.should.Matchers
 
+import Option.{Some, None}
+
 class OptionSpec extends AnyFlatSpec with Matchers with AppendedClues with PendingIfUnimplemented {
   "An option" should "have a map function which transforms it's content" in {
     Some(3).map(_ + 1) shouldBe Some(4)
diff --git a/src/test/scala/errors/TeamSpec.scala b/src/test/scala/errors/TeamSpec.scala
index 16889fc2644b5f68da75321a61bb699596cb2cbb..da5536d3ce13f2039ffc8a4c2b4bcb95ff927611 100644
--- a/src/test/scala/errors/TeamSpec.scala
+++ b/src/test/scala/errors/TeamSpec.scala
@@ -7,7 +7,7 @@ import org.scalatest.matchers.should.Matchers
 
 class TeamSpec extends AnyFlatSpec with Matchers with AppendedClues with PendingIfUnimplemented {
   "getTeam" should "return both persons ore none" in {
-    Team.getTeam("blar", "Dagobert") shouldBe None
-    Team.getTeam("Daniel", "Dagobert") shouldBe Some((Team.persons(2), Team.persons(0)))
+    getTeam("blar", "Dagobert") shouldBe None
+    getTeam("Daniel", "Dagobert") shouldBe Some((persons(2), persons(0)))
   }
 }