diff --git a/src/api/tests/schedule.py b/src/api/tests/schedule.py
index afeea7f0ae3db02b2e122f370fd7ca0e74a82b79..6bd544d494d6a948103ce8529df925e249d1f406 100644
--- a/src/api/tests/schedule.py
+++ b/src/api/tests/schedule.py
@@ -8,22 +8,23 @@ from core.models import Assembly, Conference, Event, PlatformUser, Room
 
 
 class ScheduleTest(TestCase):
-    def test_push_event(self):
-        conf = Conference(slug='conf', name='TestConf', is_public=True)
-        conf.save()
-        conf.tracks.create(name='Community').save()
-        assembly = Assembly(name='TestAssembly', slug='asmbly', conference=conf)
-        assembly.save()
-        room = Room(conference=conf, assembly=assembly, name='Foo Room', room_type=Room.RoomType.STAGE)
-        room.save()
-
-        user = PlatformUser(username='bernd', is_active=True)
-        user.save()
-
-        token = Token(user=user)
-        token.save()
-
-        event = Event(conference=conf, assembly=assembly, name='Example Event')
+    def setUp(self):
+        self.conf = Conference(slug='conf', name='TestConf', is_public=True)
+        self.conf.save()
+        self.conf.tracks.create(name='Community').save()
+        self.assembly = Assembly(name='TestAssembly', slug='asmbly', conference=self.conf)
+        self.assembly.save()
+        self.room = Room(conference=self.conf, assembly=self.assembly, name='Foo Room', room_type=Room.RoomType.STAGE)
+        self.room.save()
+
+        self.user = PlatformUser(username='bernd', is_active=True)
+        self.user.save()
+
+        self.token = Token(user=self.user)
+        self.token.save()
+
+    def test_push_existing_event(self):
+        event = Event(conference=self.conf, assembly=self.assembly, name='Example Event')
         event.save()
 
         update = {
@@ -50,12 +51,50 @@ class ScheduleTest(TestCase):
             "attachments": []
         }
 
-        url = reverse('api:event-schedule', kwargs={'conference': conf.slug, 'pk': event.pk})
+        url = reverse('api:event-schedule', kwargs={'conference': self.conf.slug, 'pk': event.pk})
 
-        with self.modify_settings(API_USERS={'append': user.username}):
-            resp = self.client.post(url, json.dumps(update), content_type='application/json', HTTP_AUTHORIZATION=f'Token {token.key}')
+        with self.modify_settings(API_USERS={'append': self.user.username}):
+            resp = self.client.post(url, json.dumps(update), content_type='application/json', HTTP_AUTHORIZATION=f'Token {self.token.key}')
 
         self.assertEqual(201, resp.status_code, f'Unexpected result from POST: {resp.content}')
 
         event.refresh_from_db()
         self.assertTrue('rC3' in event.name, f'Expected "rC3" in event name "{event.name}".')
+
+    def test_push_new_event(self):
+        update = {
+            "url": "https://fahrplan.events.ccc.de/rc3/2020/Fahrplan/events/11583.html",
+            "id": 11583,
+            "guid": "d9334deb-f183-4aec-9c6c-137741f6ff73",
+            "logo": None,
+            "date": "2020-12-27T12:20:00+01:00",
+            "start": "12:20",
+            "duration": "00:30",
+            "room": "foo room",
+            "slug": "rc3-11583-rc3_eroffnung",
+            "title": "#rC3 Er\u00f6ffnung",
+            "subtitle": "",
+            "track": "Community",
+            "type": "Talk",
+            "language": "de",
+            "abstract": "Willkommen zur ersten und hoffentlich einzigen Remote Chaos Experience!",
+            "description": "",
+            "recording_license": "",
+            "do_not_record": False,
+            "persons": [{"id": 14151, "public_name": "blubbel"}],
+            "links": [],
+            "attachments": []
+        }
+
+        self.assertFalse(Event.objects.filter(pk=update['guid']).exists())
+
+        url = reverse('api:event-schedule', kwargs={'conference': self.conf.slug, 'pk': update['guid']})
+
+        with self.modify_settings(API_USERS={'append': self.user.username}):
+            resp = self.client.post(url, json.dumps(update), content_type='application/json', HTTP_AUTHORIZATION=f'Token {self.token.key}')
+
+        self.assertEqual(201, resp.status_code, f'Unexpected result from POST: {resp.content}')
+
+        self.assertTrue(Event.objects.filter(pk=update['guid']).exists())
+        event = Event.objects.get(pk=update['guid'])
+        self.assertTrue('rC3' in event.name, f'Expected "rC3" in event name "{event.name}".')
diff --git a/src/api/views/schedule.py b/src/api/views/schedule.py
index d4de2532563e4f6d58a31a7e878f6827251772dc..e9249d4e4001796431cd94477a7b1a747bdb944e 100644
--- a/src/api/views/schedule.py
+++ b/src/api/views/schedule.py
@@ -93,13 +93,13 @@ class EventSchedule(ConferenceSlugMixin, APIView):
         try:
             obj = Event.objects.get(conference=self.conference, pk=pk)
         except Event.DoesNotExist:
-            obj = Event(conference=self.conference)
+            obj = Event(conference=self.conference, pk=pk)
+            logger.warning('Event schedule POST: id %s did not exist yet, creating.', pk)
 
         try:
             if 'guid' in event:
                 if event['guid'] != str(obj.pk):
-                    print(f'Attempted update of event {obj.pk} with guid "{event["guid"]}".')
-                    logger.warning(f'Attempted update of event {obj.pk} with guid "{event["guid"]}".')
+                    logger.warning('Attempted update of event %s with guid "%s".', obj.pk, event["guid"])
                     return JsonResponse({'error': 'GUID mismatch.'})
 
             if 'slug' in event: