diff --git a/src/api/schedule.py b/src/api/schedule.py
index 9fcd5049f8e66ad2b9257afa9477b4f62c71d3e4..0c37d9db0effaa12d7eb8daeac95886ccfc9b1bf 100644
--- a/src/api/schedule.py
+++ b/src/api/schedule.py
@@ -87,7 +87,7 @@ class ScheduleEncoder(json.JSONEncoder):
 
         days = duration.days
         hours = duration.seconds // 3600
-        minutes = duration.seconds // 60
+        minutes = (duration.seconds % 3600) // 60
         if days:
             return f"{days}:{hours:02d}:{minutes:02d}"
         return f"{hours:02d}:{minutes:02d}"
diff --git a/src/api/tests/schedule.py b/src/api/tests/schedule.py
index b890bc6fde1d1d5b9740df3a771141e71839aabd..9cff2b76bec8663ee6f4500d21866912919961a4 100644
--- a/src/api/tests/schedule.py
+++ b/src/api/tests/schedule.py
@@ -22,7 +22,7 @@ class ScheduleTest(TestCase):
         self.conf.save()
         self.conf.tracks.create(slug='community', name='Community').save()
         self.conf.tracks.create(slug='security', name='Security').save()
-        self.assembly = Assembly(name='TestAssembly', slug='asmbly', conference=self.conf)
+        self.assembly = Assembly(name='TestAssembly', slug='asmbly', conference=self.conf, state_assembly=Assembly.State.PLACED)
         self.assembly.save()
         self.room = Room(conference=self.conf, assembly=self.assembly, name='Foo Room', room_type=Room.RoomType.STAGE)
         self.room.save()
@@ -261,6 +261,34 @@ class ScheduleTest(TestCase):
 
         self.assertEqual(400, resp.status_code, f'Unexpected success result from POST: {resp.content}')
 
+    def testScheduleExport(self):
+        # TODO write this test. This just tests some duration formatting edge cases for now
+        r = self.assembly.rooms.create(conference=self.conf, name='Zelt', room_type='stage')
+        ev1 = Event(
+            conference=self.conf,
+            assembly=self.assembly,
+            room=r,
+            name='Example Event',
+            is_public=True,
+            schedule_start=self.conf.start,
+            schedule_duration=timedelta(minutes=120),
+        )
+        ev1.save()
+
+        resp = self.client.get(reverse('api:conference-schedule', kwargs={'conference': self.conf.slug}) + '.xml')
+        self.assertEqual(resp.status_code, 200)
+        content = ET.fromstring(resp.content.decode('utf-8'))
+        day1, *remaining_days = content.findall('day')
+        for remaining_day in remaining_days:
+            self.assertEqual(len(remaining_day), 0)
+
+        room, = day1
+        event1, = room
+        self.assertEqual(event1.findtext('title'), ev1.name)
+        self.assertEqual(event1.findtext('date'), '2020-12-27T01:23:45+01:00')
+        self.assertEqual(event1.findtext('start'), '01:23')
+        self.assertEqual(event1.findtext('duration'), '02:00')
+
     def test_cache(self):
         event = Event(conference=self.conf, assembly=self.assembly, name='Example Event', is_public=False)
         event.save()