)
 
 #define job_waiting(jcr) \
+ (jcr->job_started &&    \
   (jcr->JobStatus == JS_WaitFD       || \
    jcr->JobStatus == JS_WaitSD       || \
    jcr->JobStatus == JS_WaitMedia    || \
    jcr->SDJobStatus == JS_WaitMedia  || \
    jcr->SDJobStatus == JS_WaitMount  || \
    jcr->SDJobStatus == JS_WaitDevice || \
-   jcr->SDJobStatus == JS_WaitMaxJobs)
+   jcr->SDJobStatus == JS_WaitMaxJobs))
 
 
 
    void setJobLevel(int32_t JobLevel) { m_JobLevel = JobLevel; };
    void setJobType(int32_t JobType) { m_JobType = JobType; };
    void forceJobStatus(int32_t aJobStatus) { JobStatus = aJobStatus; };
+   void setJobStarted();
    int32_t getJobType() const { return m_JobType; };
    int32_t getJobLevel() const { return m_JobLevel; };
    int32_t getJobStatus() const { return JobStatus; };
    time_t end_time;                   /* job end time */
    time_t wait_time_sum;              /* cumulative wait time since job start */
    time_t wait_time;                  /* timestamp when job have started to wait */
+   time_t job_started_time;           /* Time when the MaxRunTime start to count */
    POOLMEM *client_name;              /* client name */
    POOLMEM *JobIds;                   /* User entered string of JobIds */
    POOLMEM *RestoreBootstrap;         /* Bootstrap file to restore */
    bool accurate;                     /* true if job is accurate */
    bool HasBase;                      /* True if job use base jobs */
    bool rerunning;                    /* rerunning an incomplete job */
+   bool job_started;                  /* Set when the job is actually started */
 
    void *Python_job;                  /* Python Job Object */
    void *Python_events;               /* Python Events Object */