diff --git a/lib/eventslib.php b/lib/eventslib.php
index 6ceaf5e..2cfcbd8 100644
--- a/lib/eventslib.php
+++ b/lib/eventslib.php
@@ -315,7 +315,7 @@ function events_dispatch($handler, $eventdata, &$errormessage) {
  * @return boolean true means event processed, false means retry later, NULL means fatal failure
  */
 function events_process_queued_handler($qhandler) {
-    global $DB;
+    global $DB, $CFG;
 
     // get handler
     if (!$handler = $DB->get_record('events_handlers', array('id'=>$qhandler->handlerid))) {
@@ -325,6 +325,14 @@ function events_process_queued_handler($qhandler) {
         return NULL;
     }
 
+    if ($handler->eventname === 'assessable_file_uploaded') {
+        // HACK to pre-load file storage classes in case an event receives
+        // a stored_file class in its eventdata. PHP cannot fully resolve
+        // a class if it does not exist ahead of an unserialize() call.
+        // Would be better solved if autoloading
+        require_once($CFG->libdir.'/filelib.php');
+    }
+
     // get event object
     if (!$event = $DB->get_record('events_queue', array('id'=>$qhandler->queuedeventid))) {
         // can't proceed with no event object - might happen when two crons running at the same time
