diff --git a/lib/pages/home_page.dart b/lib/pages/home_page.dart
index f6360dd75710ff78aa820b53e1ff9fa2c408d14f..4daeeec5760434fc1a60064232f81e4a954f97bf 100644
--- a/lib/pages/home_page.dart
+++ b/lib/pages/home_page.dart
@@ -1,5 +1,4 @@
 import 'dart:async';
-import 'dart:io';
 
 import 'package:flutter/material.dart';
 
@@ -48,7 +47,7 @@ class _HomePageState extends State<HomePage> {
   }
 
   void _showErrorDialog(String title, Object? error) {
-    stderr.write(error);
+    print(error);
     showDialog(
       context: context,
       builder: (context) => ErrorDialog(title: title, error: error),
diff --git a/lib/untis/fetch.dart b/lib/untis/fetch.dart
index c7a98cf6584b54ec5005851af2e63a7d29365d75..f40274589cc9f651f7b4f5edf7a82dc3220b1ccf 100644
--- a/lib/untis/fetch.dart
+++ b/lib/untis/fetch.dart
@@ -1,16 +1,18 @@
 import 'dart:convert';
-import 'dart:io';
 
 import 'package:flutter/foundation.dart';
+import 'package:http/http.dart' as http;
 
 import '../fetching/pageconfig.dart';
 import '../fetching/timetable.dart';
 import '../util/date_extension.dart';
-import 'class.dart';
 import '../util/serializable.dart';
+import 'class.dart';
 import 'element_type.dart';
 import 'lecture.dart';
 
+typedef Cookie = (String key, String value);
+
 typedef RequestOptions = (String path, String method, Json params);
 typedef RequestResult = (Json json, List<Cookie> cookies, FetchStats stats);
 
@@ -22,7 +24,7 @@ class UntisFetch {
     'traceId',
   };
 
-  final HttpClient client = HttpClient();
+  final http.Client client = http.Client();
   final Uri serverHost = Uri.https('poly.webuntis.com');
 
   final List<Cookie> _sessionCookies = [];
@@ -63,12 +65,17 @@ class UntisFetch {
     );
   }
 
-  Future<HttpClientResponse> _request(String method, Uri uri) async {
-    final request = await client.openUrl(method, uri);
-    request.cookies.add(Cookie('schoolname', idHsReutlingen));
+  Future<http.StreamedResponse> _request(String method, Uri uri) async {
+    final request = http.Request(method, uri);
 
-    request.cookies.addAll(_sessionCookies);
-    final response = await request.close();
+    final cookies = <Cookie>[];
+    cookies.add(('schoolname', idHsReutlingen));
+    cookies.addAll(_sessionCookies);
+
+    request.headers['Set-Cookie'] =
+        cookies.map((cookie) => '${cookie.$1}=${cookie.$2}').join('; ');
+
+    final response = await client.send(request);
     return response;
   }
 
@@ -78,18 +85,23 @@ class UntisFetch {
     final onStart = DateTime.now();
     final response = await _request(method, _makeUri(options));
 
-    final cookies = response.cookies;
+    final cookieStrings =
+        response.headersSplitValues['Set-Cookie'] ?? <String>[];
+    final cookies = cookieStrings
+        .map((cookieString) => cookieString.split('='))
+        .map<Cookie>((parts) => (parts[0], parts[1]));
+
     final resultCookies = <Cookie>[];
 
     for (final cookie in cookies) {
-      if (_sessionCookieNames.contains(cookie.name)) {
+      if (_sessionCookieNames.contains(cookie.$1)) {
         resultCookies.add(cookie);
       }
     }
 
     final onDownloadStart = DateTime.now();
 
-    final responseString = await utf8.decodeStream(response);
+    final responseString = await utf8.decodeStream(response.stream);
     final onDownloadEnd = DateTime.now();
 
     if (response.statusCode != 200) {