Time redundancy is an effective method for achieving fault tolerance in a real-time system, when space redundancy cannot be used for cost or weight constraints. This paper presents a fault-tolerant scheduling algorithm for real-time systems consisting of firm and hard periodic tasks. Firm tasks can occasionally skip one instance according to a predefined quality-of- service parameter whereas hard tasks include a primary and a backup job. The proposed scheduling algorithm ensures that each task instance is satisfied within its timing constraints by either the primary or the backup job. Moreover the algorithm maximizes the processor idle time available for processing primary jobs and automatically reclaims the spare time saved by deallocating backup jobs. A very interesting feature of the algorithm is that it can be tuned to balance performance versus complexity, so easily conforming to application's requirements.