diff --git a/lib/private/backgroundjob/joblist.php b/lib/private/backgroundjob/joblist.php
index 6641097cf9076dc947ca0561e4ef289272eb6f5b..09bba53edb8e783b7fc0ff951fbc39e55f91606c 100644
--- a/lib/private/backgroundjob/joblist.php
+++ b/lib/private/backgroundjob/joblist.php
@@ -152,6 +152,10 @@ class JobList implements IJobList {
 		if ($class === 'OC_Cache_FileGlobalGC') {
 			$class = '\OC\Cache\FileGlobalGC';
 		}
+		if (class_exists($class)) {
+			// job from disabled app or old version of an app, no need to do anything
+			return null;
+		}
 		$job = new $class();
 		$job->setId($row['id']);
 		$job->setLastRun($row['last_run']);
diff --git a/lib/private/backgroundjob/legacy/queuedjob.php b/lib/private/backgroundjob/legacy/queuedjob.php
index 2bc001103b8607008d1dbb27a6466555a51880cb..c5705abb467e38d4d90665cd4d1af619b678f41a 100644
--- a/lib/private/backgroundjob/legacy/queuedjob.php
+++ b/lib/private/backgroundjob/legacy/queuedjob.php
@@ -13,6 +13,8 @@ class QueuedJob extends \OC\BackgroundJob\QueuedJob {
 		$class = $argument['klass'];
 		$method = $argument['method'];
 		$parameters = $argument['parameters'];
-		call_user_func(array($class, $method), $parameters);
+		if (is_callable(array($class, $method))) {
+			call_user_func(array($class, $method), $parameters);
+		}
 	}
 }
diff --git a/lib/private/backgroundjob/legacy/regularjob.php b/lib/private/backgroundjob/legacy/regularjob.php
index d4cfa348ceace0ecd286df18d6d2a2f51bafa592..eb85a30b4bed6e54721dcdbb1cc66be75680abf6 100644
--- a/lib/private/backgroundjob/legacy/regularjob.php
+++ b/lib/private/backgroundjob/legacy/regularjob.php
@@ -10,6 +10,8 @@ namespace OC\BackgroundJob\Legacy;
 
 class RegularJob extends \OC\BackgroundJob\Job {
 	public function run($argument) {
-		call_user_func($argument);
+		if (is_callable($argument)) {
+			call_user_func($argument);
+		}
 	}
 }