A computer implemented method for providing fault tolerance to a plurality of instances of an application in a system, wherein one or more instances may be failing and jobs assigned to the failing instances are orphaned jobs, the system further including a plurality of surviving instances which are not failing, the method comprising: determining, by a fault tolerance system for each of the surviving instances, an aggregate load by: retrieving a job load of each job assigned to the respective surviving instance; and summing the job loads of all of the jobs assigned to the respective surviving instance; and selecting, by the fault tolerance system, for each orphaned job a subset of the surviving instances to recover and perform the orphaned job based upon the aggregate loads of the surviving instances, the method further comprising: retrieving, by the fault tolerance system, a job load of each orphaned job; calculating, by the fault tolerance system, for each selected surviving instance: a load discount, if the surviving instance is already performing jobs that are similar in nature to the orphaned job; or a load penalty, if the surviving instance is performing completely different jobs than the orphaned job, of each orphaned job if it were to be accepted by the respective surviving instance; and accepting, by one of the subset of surviving instances, an orphaned job of the plurality of orphaned jobs for which it was selected based upon: (i) the job loads of the orphaned jobs; (ii) the load discounts or penalties of the orphaned job calculated for the respective surviving instance; and (iii) the aggregate loads of the surviving instances, until all of the orphaned jobs have been accepted to be recovered and performed by the surviving instances. determining, by a fault tolerance system for each of the surviving instances, an aggregate load by: retrieving a job load of each job assigned to the respective surviving instance; and summing the job loads of all of the jobs assigned to the respective surviving instance; and retrieving a job load of each job assigned to the respective surviving instance; and summing the job loads of all of the jobs assigned to the respective surviving instance; and selecting, by the fault tolerance system, for each orphaned job a subset of the surviving instances to recover and perform the orphaned job based upon the aggregate loads of the surviving instances, retrieving, by the fault tolerance system, a job load of each orphaned job; calculating, by the fault tolerance system, for each selected surviving instance: a load discount, if the surviving instance is already performing jobs that are similar in nature to the orphaned job; or a load penalty, if the surviving instance is performing completely different jobs than the orphaned job, a load discount, if the surviving instance is already performing jobs that are similar in nature to the orphaned job; or a load penalty, if the surviving instance is performing completely different jobs than the orphaned job, of each orphaned job if it were to be accepted by the respective surviving instance; and accepting, by one of the subset of surviving instances, an orphaned job of the plurality of orphaned jobs for which it was selected based upon: (i) the job loads of the orphaned jobs; (ii) the load discounts or penalties of the orphaned job calculated for the respective surviving instance; and (iii) the aggregate loads of the surviving instances, (i) the job loads of the orphaned jobs; (ii) the load discounts or penalties of the orphaned job calculated for the respective surviving instance; and (iii) the aggregate loads of the surviving instances,