diff -urN ./quartz_recentjobs.patch ../quartz-1.2.3_new/quartz_recentjobs.patch
--- ./quartz_recentjobs.patch	Wed Nov 19 16:43:04 2003
+++ ../quartz-1.2.3_new/quartz_recentjobs.patch	Thu Jan  1 01:00:00 1970
@@ -1,11 +0,0 @@
-diff -urN ./examples/quartz.properties ../quartz-1.2.3_new/examples/quartz.properties
---- ./examples/quartz.properties	Wed Sep 24 00:38:49 2003
-+++ ../quartz-1.2.3_new/examples/quartz.properties	Tue Nov 18 12:23:46 2003
-@@ -5,6 +5,7 @@
- 
- org.quartz.scheduler.instanceName = TestScheduler
- org.quartz.scheduler.instanceId = one
-+org.quartz.scheduler.executedJobsListSize = 10
- 
- #============================================================================
- # Configure ThreadPool  
diff -urN ./src/java/main/org/quartz/Scheduler.java ../quartz-1.2.3_new/src/java/main/org/quartz/Scheduler.java
--- ./src/java/main/org/quartz/Scheduler.java	Sat Jul  5 22:19:27 2003
+++ ../quartz-1.2.3_new/src/java/main/org/quartz/Scheduler.java	Tue Nov 18 14:16:28 2003
@@ -244,6 +244,18 @@
    * @see JobExecutionContext
    */
   public List getCurrentlyExecutingJobs() throws SchedulerException;
+  
+  /**
+   * <p>Return a list of <code>JobExecutionContext</code> objects that
+   * represent last executed Jobs. </p>
+   *
+   * <p>Note that the number of the jobs could be configured in the properties file
+   * with <code>org.quartz.scheduler.executedJobsListSize</code> parameter (it could be switched off 
+   *  by specifying value 0 or deleting the entry)</p>
+   *
+   * @see JobExecutionContext
+   */
+  public List getExecutedJobs() throws SchedulerException;  
 
   ///////////////////////////////////////////////////////////////////////////
   ///
diff -urN ./src/java/main/org/quartz/core/QuartzScheduler.java ../quartz-1.2.3_new/src/java/main/org/quartz/core/QuartzScheduler.java
--- ./src/java/main/org/quartz/core/QuartzScheduler.java	Mon Aug 18 19:12:46 2003
+++ ../quartz-1.2.3_new/src/java/main/org/quartz/core/QuartzScheduler.java	Wed Nov 19 16:42:11 2003
@@ -34,6 +34,7 @@
 import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Random;
 import java.util.Set;
@@ -141,7 +142,7 @@
     if(idleWaitTime > 0)
       this.schedThread.setIdleWaitTime(idleWaitTime);
       
-    jobMgr = new ExecutingJobsManager();
+    jobMgr = new ExecutingJobsManager(resources.getExecutedJobsListSize());
     addGlobalJobListener(jobMgr);
     errLogger = new ErrorLogger();
     addSchedulerListener(errLogger);
@@ -457,6 +458,18 @@
   public List getCurrentlyExecutingJobs() {
     return jobMgr.getExecutingJobs();
   }
+  
+  /**
+   * <p>Return a list of <code>JobExecutionContext</code> objects that
+   * represent last executed Jobs. </p>
+   *
+   * <p>Note that the number of the jobs could be configured in the properties file
+   * with <code>org.quartz.scheduler.executedJobsListSize</code> parameter (it could be switched off 
+   *  by specifying value 0 or deleting the entry)</p>
+   */
+  public List getExecutedJobs() {
+	return jobMgr.getExecutedJobs();
+  }
 
   ///////////////////////////////////////////////////////////////////////////
   ///
@@ -1719,10 +1732,13 @@
 
 class ExecutingJobsManager implements JobListener {
   HashMap executingJobs = new HashMap();
+  LinkedList executedJobs = new LinkedList();
 
   int numJobsFired = 0;
+  int executedJobsListSize = 0;
 
-  ExecutingJobsManager() {
+  ExecutingJobsManager(int executedJobsListSize) {
+  	this.executedJobsListSize = executedJobsListSize; 
   }
 
   public String getName() {
@@ -1749,6 +1765,16 @@
     synchronized (executingJobs) {
       executingJobs.remove(context.getTrigger().getFireInstanceId());
     }
+    
+    synchronized (executedJobs) {
+
+		if (executedJobsListSize > 0) {
+		  executedJobs.add(0, context);
+		  if (executedJobs.size() > executedJobsListSize)
+			  executedJobs.removeLast();
+		}
+    }
+    
   }
 
   public int getNumJobsFired() {
@@ -1759,5 +1785,11 @@
     synchronized (executingJobs) {
       return new ArrayList(executingJobs.values());
     }
+  }
+  
+  public List getExecutedJobs() {
+  	synchronized (executedJobs) {
+  		return executedJobs;
+  	}
   }
 }
diff -urN ./src/java/main/org/quartz/core/QuartzSchedulerResources.java ../quartz-1.2.3_new/src/java/main/org/quartz/core/QuartzSchedulerResources.java
--- ./src/java/main/org/quartz/core/QuartzSchedulerResources.java	Sat Jun  7 19:54:01 2003
+++ ../quartz-1.2.3_new/src/java/main/org/quartz/core/QuartzSchedulerResources.java	Tue Nov 18 16:16:41 2003
@@ -61,6 +61,7 @@
   private ThreadPool threadPool;
   private JobStore jobStore;
   private JobRunShellFactory jobRunShellFactory;
+  private int size;
 
   /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
    *
@@ -261,6 +262,21 @@
 
     this.jobRunShellFactory = jobRunShellFactory;
   }
-
+  
+  /**
+   * 
+   *
+   */
+  public void setExecutedJobsListSize(int size) {
+  	this.size = size;
+  }
+  
+  /**
+   * 
+   *
+   */
+  public int getExecutedJobsListSize(){
+  	return this.size; 
+  }
 
 }
diff -urN ./src/java/main/org/quartz/core/RemotableQuartzScheduler.java ../quartz-1.2.3_new/src/java/main/org/quartz/core/RemotableQuartzScheduler.java
--- ./src/java/main/org/quartz/core/RemotableQuartzScheduler.java	Sat Jun  7 19:54:01 2003
+++ ../quartz-1.2.3_new/src/java/main/org/quartz/core/RemotableQuartzScheduler.java	Tue Nov 18 14:19:47 2003
@@ -82,6 +82,9 @@
 
   public List getCurrentlyExecutingJobs()
     throws SchedulerException, RemoteException;
+    
+  public List getExecutedJobs()
+	  throws SchedulerException, RemoteException;    
 
   public Date scheduleJob(
     SchedulingContext ctxt,
diff -urN ./src/java/main/org/quartz/impl/RemoteScheduler.java ../quartz-1.2.3_new/src/java/main/org/quartz/impl/RemoteScheduler.java
--- ./src/java/main/org/quartz/impl/RemoteScheduler.java	Sat Jun  7 19:54:02 2003
+++ ../quartz-1.2.3_new/src/java/main/org/quartz/impl/RemoteScheduler.java	Tue Nov 18 14:19:58 2003
@@ -266,6 +266,20 @@
         re);
     }
   }
+  
+  /**
+   * <p>Calls the equivalent method on the 'proxied'
+   * <code>QuartzScheduler</code>.</p>
+   */
+  public List getExecutedJobs() throws SchedulerException {
+	try {
+	  return sched.getExecutedJobs();
+	} catch (RemoteException re) {
+	  throw new SchedulerException(
+		"Error communicating with remote scheduler.",
+		re);
+	}
+  }  
 
   ///////////////////////////////////////////////////////////////////////////
   ///
diff -urN ./src/java/main/org/quartz/impl/StdScheduler.java ../quartz-1.2.3_new/src/java/main/org/quartz/impl/StdScheduler.java
--- ./src/java/main/org/quartz/impl/StdScheduler.java	Sat Jun  7 19:54:02 2003
+++ ../quartz-1.2.3_new/src/java/main/org/quartz/impl/StdScheduler.java	Tue Nov 18 13:15:30 2003
@@ -195,6 +195,14 @@
   public List getCurrentlyExecutingJobs() {
     return sched.getCurrentlyExecutingJobs();
   }
+  
+  /**
+   * <p>Calls the equivalent method on the 'proxied'
+   * <code>QuartzScheduler</code>.</p>  
+   */
+  public List getExecutedJobs() {
+  	return sched.getExecutedJobs();
+  }
 
   ///////////////////////////////////////////////////////////////////////////
   ///
diff -urN ./src/java/main/org/quartz/impl/StdSchedulerFactory.java ../quartz-1.2.3_new/src/java/main/org/quartz/impl/StdSchedulerFactory.java
--- ./src/java/main/org/quartz/impl/StdSchedulerFactory.java	Tue Jul 22 17:21:08 2003
+++ ../quartz-1.2.3_new/src/java/main/org/quartz/impl/StdSchedulerFactory.java	Tue Nov 18 16:18:36 2003
@@ -129,6 +129,8 @@
     "org.quartz.scheduler.idleWaitTime";
   public static final String PROP_SCHED_CLASS_LOAD_HELPER_CLASS =
     "org.quartz.scheduler.classLoadHelper.class";
+  public static final String PROP_SCHED_EXECUTED_LIST_SIZE =
+  	"org.quartz.scheduler.executedJobsListSize";   
 
   public static final String PROP_THREAD_POOL_PREFIX = "org.quartz.threadPool";
   public static final String PROP_THREAD_POOL_CLASS =
@@ -155,6 +157,7 @@
   public static final String PROP_PLUGIN_CLASS = "class";
 
   public static final String DEFAULT_INSTANCE_ID = "NON_CLUSTERED";
+  
 
   /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
    *
@@ -396,6 +399,8 @@
 
     String schedInstId =
       cfg.getStringProperty(PROP_SCHED_INSTANCE_ID, DEFAULT_INSTANCE_ID);
+      
+    int executedJobListSize = cfg.getIntProperty(PROP_SCHED_EXECUTED_LIST_SIZE, 0);
 
     userTXLocation = cfg.getStringProperty(PROP_SCHED_USER_TX_URL, userTXLocation);
     if(userTXLocation != null && userTXLocation.trim().length() == 0)
@@ -659,6 +664,7 @@
     rsrcs.setName(schedName);
     rsrcs.setInstanceId(schedInstId);
     rsrcs.setJobRunShellFactory(jrsf);
+    rsrcs.setExecutedJobsListSize(executedJobListSize);
 
     if (rmiExport) {
       rsrcs.setRMIRegistryHost(rmiHost);
