diff --git a/src/moodle-provider.c b/src/moodle-provider.c
index 5b41b705e725e876bbbb5f72dfc4208506f5621a..e7138b442aa12a9078d4381eef4b16cab89e15a2 100644
--- a/src/moodle-provider.c
+++ b/src/moodle-provider.c
@@ -243,7 +243,8 @@ moodle_downloaded_file_cb (GInputStream       *is,
     write_g_input_stream_to_file (is, real_filename ?: filename_looked_for);
   }
 
-  final_cb (user_data, g_strdup (filename_looked_for));
+  if (final_cb)
+    final_cb (user_data, g_strdup (filename_looked_for));
 }
 
 void
@@ -346,7 +347,8 @@ got_course_content_cb (GInputStream       *is,
   struct CourseContent content = moodle_parse_course_content (html, html_size, filename);
   if (should_save_to_disk)
     write_file_async (filename, g_steal_pointer (&html), html_size);
-  final_cb (user_data, &content);
+  if (final_cb)
+    final_cb (user_data, &content);
 }
 
 
@@ -364,7 +366,8 @@ got_folder_content_cb (GInputStream       *is,
   struct FolderContent content = moodle_parse_folder_content (html, html_size, filename);
   if (should_save_to_disk)
     write_file_async (filename, g_steal_pointer (&html), html_size);
-  final_cb (user_data, &content);
+  if (final_cb)
+    final_cb (user_data, &content);
 }
 
 void
diff --git a/src/moodle-provider.h b/src/moodle-provider.h
index e0e5cd9306da5610ba7355682e6299ce5d4a9569..22b3643aef5567425050a7a0b024c07ef7b49d9b 100644
--- a/src/moodle-provider.h
+++ b/src/moodle-provider.h
@@ -25,6 +25,7 @@ typedef void (*courses_cb)       (gpointer user_data, struct Courses);
 typedef void (*provider_cb) (gpointer user_data, gpointer retrieved_content);
 // retrieved_content will be a struct Courses *, struct FolderContent *
 // according to the called function name.
+// when giving to a function a provider_cb, you can pass NULL instead.
 
 enum moodle_error {
   MOODLE_ERROR_OK,