diff --git a/inky_convert.sh b/inky_convert.sh
index 858c77c1f4046eeb9a47d26a9c051847331503a8..09e2297c02580dd1e51301cd05c4ff81c4860c3e 100644
--- a/inky_convert.sh
+++ b/inky_convert.sh
@@ -1,2 +1,2 @@
 #!/bin/bash
-convert "$1" -resize '800x480!' -define modulate:colorspace=HSB -modulate 100,120 -level 2% -quality 70 "${1%.*}.inky.jpeg"
+convert "$1" -resize '800x480!' -define modulate:colorspace=HSB -modulate 100,120 -level 2% -quality 60 -define jpeg:extent=120kb "${1%.*}.inky.jpeg"
diff --git a/main.py b/main.py
index 34d08eacc34a075ac4d4c63330aa20c3173d4be0..a91fd0af87e7b480715dddc8cd755230e7ed1882 100644
--- a/main.py
+++ b/main.py
@@ -5,20 +5,25 @@ import inky_frame
 import gc
 import random
 
+def write_err(text):
+    with open('/sd/errors.log', 'a+') as error_log:
+        error_log.write(f'{text} \n')
+
+gc.enable()
+gc.threshold(50000)
 
 sd_spi = machine.SPI(0, sck=machine.Pin(18, machine.Pin.OUT), mosi=machine.Pin(19, machine.Pin.OUT), miso=machine.Pin(16, machine.Pin.OUT))
 sd = sdcard.SDCard(sd_spi, machine.Pin(22))
 uos.mount(sd, "/sd")
-gc.collect()
 
 from secrets import WIFI_SSID, WIFI_PASSWORD, NEXTCLOUD_USERNAME, NEXTCLOUD_PASSWORD
 try:
     ih.network_connect_better(WIFI_SSID, WIFI_PASSWORD)
 except RuntimeError as e:
     print(e)
-    with open('/sd/errors.log', 'a+') as error_log:
-        error_log.write(f'{e} \n')
+    write_err(e)
     #Likely a network oops, try starting again
+    uos.umount("/sd")
     machine.soft_reset()
 
 try:
@@ -27,9 +32,9 @@ try:
     response = nc.get_folder_items("eink-frame")
 except OSError as e:
     print(e)
-    with open('/sd/errors.log', 'a+') as error_log:
-        error_log.write(f'{e} \n')
+    write_err(e)
     #Likely a network oops, try starting again
+    uos.umount("/sd")
     machine.soft_reset()
 
 try:
@@ -48,9 +53,8 @@ if response != None:
         with open('/sd/last_wallpaper', 'w+') as update_last:
             update_last.write(ran.url_path)
         print(ran.url_path)
-        gc.collect()
+        print(gc.mem_free())
         nc.download_file_to_path(ran.url_path, "/sd/current_image.jpg")
-        gc.collect()
         from picographics import PicoGraphics, DISPLAY_INKY_FRAME_7 as DISPLAY
         from jpegdec import JPEG
         graphics = PicoGraphics(DISPLAY)
@@ -60,4 +64,5 @@ if response != None:
         j.decode()
         graphics.update()
         
+uos.umount("/sd")
 inky_frame.sleep_for(180)
diff --git a/uNextcloud.py b/uNextcloud.py
index 1b52b67d1f6cef3a582c90a779b66cb62c6e8596..9fb492eb1c1b278de8d5f904b30f300bd6a564d5 100644
--- a/uNextcloud.py
+++ b/uNextcloud.py
@@ -1,5 +1,4 @@
 import urequests
-import gc, sys
 import ElementTree
 
 
@@ -40,33 +39,28 @@ class uNextcloud:
                     if content_type != None:
                         file_list.append(self.File(href.text, content_type.text))
                 response.close()
-                gc.collect()
                 return file_list
             except AttributeError:
                 response.close()
-                gc.collect()
                 return None
         else:
             response.close()
-            gc.collect()
             return None
     
     def download_file_to_path(self, url_path, destination_path):
         response = urequests.request("GET", self.url+url_path, auth=(self.username, self.password))
         if 200 <= response.status_code < 300:
-            dest = open(destination_path, 'wb')
-            data = bytearray(1024)
             len = 0
-            while True:
-                print(f"downloaded {len}")
-                gc.collect()
-                if response.raw.readinto(data) == 0:
-                    break
-                len += 1024
-                dest.write(data)
-            dest.close()
+            with open(destination_path, 'wb') as dest:
+                data = bytearray(1024)
+                while True:
+                    print(f"downloaded {len}")
+                    if response.raw.readinto(data) == 0:
+                        break
+                    len += 1024
+                    dest.write(data)
+                    dest.flush()
             response.close()
-            gc.collect()
         else:
             response.close()
             raise Exception()