diff --git a/src/Data/Course.php b/src/Data/Course.php
index 8bca6d6..f90764c 100644
--- a/src/Data/Course.php
+++ b/src/Data/Course.php
@@ -5,9 +5,11 @@ namespace Zoomyboy\LaravelNami\Data;
 use Carbon\Carbon;
 use Spatie\LaravelData\Attributes\MapInputName;
 use Spatie\LaravelData\Attributes\WithCast;
+use Spatie\LaravelData\Attributes\WithTransformer;
 use Spatie\LaravelData\Data;
 use Zoomyboy\LaravelNami\Casters\CarbonCast;
 use Zoomyboy\LaravelNami\Tests\Factories\CourseFactory;
+use Zoomyboy\LaravelNami\Transformers\CarbonTransformer;
 
 class Course extends Data
 {
@@ -25,6 +27,7 @@ class Course extends Data
 
         #[MapInputName('vstgTag')]
         #[WithCast(CarbonCast::class, format: 'Y-m-d H:i:s')]
+        #[WithTransformer(CarbonTransformer::class, format: 'Y-m-d H:i:s')]
         public Carbon $completedAt,
     ) {
     }
diff --git a/src/Data/MembershipEntry.php b/src/Data/MembershipEntry.php
index f37736a..2241c23 100644
--- a/src/Data/MembershipEntry.php
+++ b/src/Data/MembershipEntry.php
@@ -5,9 +5,12 @@ namespace Zoomyboy\LaravelNami\Data;
 use Carbon\Carbon;
 use Spatie\LaravelData\Attributes\MapInputName;
 use Spatie\LaravelData\Attributes\WithCast;
+use Spatie\LaravelData\Attributes\WithTransformer;
 use Spatie\LaravelData\Data;
 use Zoomyboy\LaravelNami\Casters\CarbonCast;
 use Zoomyboy\LaravelNami\Casters\StringCast;
+use Zoomyboy\LaravelNami\Tests\Factories\MembershipEntryFactory;
+use Zoomyboy\LaravelNami\Transformers\CarbonTransformer;
 
 class MembershipEntry extends Data
 {
@@ -19,10 +22,12 @@ class MembershipEntry extends Data
 
         #[MapInputName('entries_aktivVon')]
         #[WithCast(CarbonCast::class, format: 'Y-m-d H:i:s')]
+        #[WithTransformer(CarbonTransformer::class, format: 'Y-m-d H:i:s')]
         public Carbon $startsAt,
 
         #[MapInputName('entries_aktivBis')]
         #[WithCast(CarbonCast::class, format: 'Y-m-d H:i:s')]
+        #[WithTransformer(CarbonTransformer::class, format: 'Y-m-d H:i:s')]
         public ?Carbon $endsAt,
 
         #[MapInputName('entries_taetigkeit')]
@@ -33,4 +38,9 @@ class MembershipEntry extends Data
         public ?string $subactivity,
     ) {
     }
+
+    public static function factory(): MembershipEntryFactory
+    {
+        return MembershipEntryFactory::new();
+    }
 }
diff --git a/tests/Factories/CourseFactory.php b/tests/Factories/CourseFactory.php
index d934d78..574f221 100644
--- a/tests/Factories/CourseFactory.php
+++ b/tests/Factories/CourseFactory.php
@@ -22,7 +22,7 @@ class CourseFactory extends RequestFactory
     /**
      * @param array<string, mixed> $attributes
      */
-    public function toModel(array $attributes = []): Course
+    public function toCourse(array $attributes = []): Course
     {
         return Course::from($this->create($attributes));
     }
diff --git a/tests/Factories/MembershipEntryFactory.php b/tests/Factories/MembershipEntryFactory.php
new file mode 100644
index 0000000..b4f5f70
--- /dev/null
+++ b/tests/Factories/MembershipEntryFactory.php
@@ -0,0 +1,34 @@
+<?php
+
+namespace Zoomyboy\LaravelNami\Tests\Factories;
+
+use Worksome\RequestFactories\RequestFactory;
+use Zoomyboy\LaravelNami\Data\MembershipEntry;
+
+class MembershipEntryFactory extends RequestFactory
+{
+    public function definition(): array
+    {
+        return [
+            'id' => $this->faker->numberBetween(100, 200),
+            'group' => $this->faker->word(),
+            'startsAt' => $this->faker->dateTime()->format('Y-m-d').' 00:00:00',
+            'endsAt' => $this->faker->dateTime()->format('Y-m-d').' 00:00:00',
+            'activity' => $this->faker->word(),
+            'subactivity' => $this->faker->word(),
+        ];
+    }
+
+    /**
+     * @param array<string, mixed> $attributes
+     */
+    public function toMembership(array $attributes = []): MembershipEntry
+    {
+        return MembershipEntry::from($this->create($attributes));
+    }
+
+    public function id(int $id): self
+    {
+        return $this->state(['id' => $id]);
+    }
+}
diff --git a/tests/Unit/CourseFactoryTest.php b/tests/Unit/CourseFactoryTest.php
new file mode 100644
index 0000000..de89988
--- /dev/null
+++ b/tests/Unit/CourseFactoryTest.php
@@ -0,0 +1,33 @@
+<?php
+
+namespace Zoomyboy\LaravelNami\Tests\Unit;
+
+use Carbon\Carbon;
+use ReflectionClass;
+use Zoomyboy\LaravelNami\Data\Course;
+use Zoomyboy\LaravelNami\Tests\TestCase;
+
+class CourseFactoryTest extends TestCase
+{
+    public function testItCanRenderACourseAsJson(): void
+    {
+        $course = Course::factory()->toCourse();
+
+        $json = $course->toArray();
+        $data = json_decode(json_encode($json));
+
+        $newCourse = Course::from($data);
+
+        foreach ((new ReflectionClass(Course::class))->getMethod('__construct')->getParameters() as $parameter) {
+            $name = $parameter->getName();
+
+            if (!is_object($course->{$name})) {
+                $this->assertSame($newCourse->{$name}, $course->{$name});
+            }
+
+            if (is_a($course->{$name}, Carbon::class)) {
+                $this->assertSame($course->{$name}->toDateTimeString(), $newCourse->{$name}->toDateTimeString());
+            }
+        }
+    }
+}
diff --git a/tests/Unit/CourseTest.php b/tests/Unit/CourseTest.php
index 72109a5..57cdcd5 100644
--- a/tests/Unit/CourseTest.php
+++ b/tests/Unit/CourseTest.php
@@ -17,7 +17,7 @@ class CourseTest extends TestCase
     {
         app(CourseFake::class)
             ->fetches(11111, [788])
-            ->shows(11111, Course::factory()->toModel([
+            ->shows(11111, Course::factory()->toCourse([
                 'bausteinId' => 506,
                 'id' => 788,
                 'veranstalter' => 'KJA',
@@ -41,8 +41,8 @@ class CourseTest extends TestCase
     {
         app(CourseFake::class)
             ->fetches(11111, [788, 789])
-            ->shows(11111, Course::factory()->id(788)->toModel())
-            ->shows(11111, Course::factory()->id(789)->toModel());
+            ->shows(11111, Course::factory()->id(788)->toCourse())
+            ->shows(11111, Course::factory()->id(789)->toCourse());
 
         $courses = $this->login()->coursesOf(11111);
 
@@ -54,7 +54,7 @@ class CourseTest extends TestCase
         app(CourseFake::class)
             ->fetches(11111, [788, 789])
             ->failsShowingWithHtml(11111, 788)
-            ->shows(11111, Course::factory()->id(789)->toModel());
+            ->shows(11111, Course::factory()->id(789)->toCourse());
 
         $courses = $this->login()->coursesOf(11111);
 
diff --git a/tests/Unit/MembershipEntryFactoryTest.php b/tests/Unit/MembershipEntryFactoryTest.php
new file mode 100644
index 0000000..922156f
--- /dev/null
+++ b/tests/Unit/MembershipEntryFactoryTest.php
@@ -0,0 +1,33 @@
+<?php
+
+namespace Zoomyboy\LaravelNami\Tests\Unit;
+
+use Carbon\Carbon;
+use ReflectionClass;
+use Zoomyboy\LaravelNami\Data\MembershipEntry;
+use Zoomyboy\LaravelNami\Tests\TestCase;
+
+class MembershipEntryFactoryTest extends TestCase
+{
+    public function testItCanRenderACourseAsJson(): void
+    {
+        $membership = MembershipEntry::factory()->toMembership();
+
+        $json = $membership->toArray();
+        $data = json_decode(json_encode($json));
+
+        $newMembership = MembershipEntry::from($data);
+
+        foreach ((new ReflectionClass(MembershipEntry::class))->getMethod('__construct')->getParameters() as $parameter) {
+            $name = $parameter->getName();
+
+            if (!is_object($membership->{$name})) {
+                $this->assertSame($newMembership->{$name}, $membership->{$name});
+            }
+
+            if (is_a($membership->{$name}, Carbon::class)) {
+                $this->assertSame($membership->{$name}->toDateTimeString(), $newMembership->{$name}->toDateTimeString());
+            }
+        }
+    }
+}