Index: src/edu/ucsb/nceas/metacat/harvesterClient/HarvestDetailLog.java
===================================================================
--- src/edu/ucsb/nceas/metacat/harvesterClient/HarvestDetailLog.java	(revision 2138)
+++ src/edu/ucsb/nceas/metacat/harvesterClient/HarvestDetailLog.java	(revision 2139)
@@ -37,7 +37,8 @@
  * @author  costa
  */
 public class HarvestDetailLog {
-    
+
+  private Connection conn;    
   private Harvester harvester;              // The parent Harvester object
   private int detailLogID;
   private int harvestLogID;
@@ -50,17 +51,22 @@
    * the HARVEST_DETAIL_LOG table.
    *
    * @param  harvester       the Harvester parent object
+   * @param  conn            the database connection
+   * @param  detailLogID     primary key in the HARVEST_LOG table
    * @param  harvestLogID    foreign key value matching the HARVEST_LOG table
    * @param  harvestDocument HarvestDocument object that generated an error
    * @param  errorMessage    text of the error message
    */
   public HarvestDetailLog(Harvester       harvester,
+                          Connection      conn,
+                          int             detailLogID,
                           int             harvestLogID,
                           HarvestDocument harvestDocument,
                           String          errorMessage
                          ) {
     this.harvester = harvester;
-    this.detailLogID = harvester.getDetailLogID();  // Primary key for record
+    this.conn = conn;
+    this.detailLogID = detailLogID;
     this.harvestLogID = harvestLogID;
     this.harvestDocument = harvestDocument;
     this.errorMessage = errorMessage;
@@ -95,7 +101,7 @@
                    ")";
                    
 		try {
-			stmt = harvester.conn.createStatement();
+			stmt = conn.createStatement();
 			stmt.executeUpdate(insertString);
 			stmt.close();
 		}
@@ -110,7 +116,7 @@
    * 
    * @param out   the PrintStream to write to
    */
-  void printOutput(PrintStream out) {
+  public void printOutput(PrintStream out) {
     out.println("* detailLogID:          " + detailLogID);
     out.println("* errorMessage:         " + errorMessage);
     harvestDocument.printOutput(out);
Index: src/edu/ucsb/nceas/metacat/harvesterClient/Harvester.java
===================================================================
--- src/edu/ucsb/nceas/metacat/harvesterClient/Harvester.java	(revision 2138)
+++ src/edu/ucsb/nceas/metacat/harvesterClient/Harvester.java	(revision 2139)
@@ -59,7 +59,7 @@
   private static final String marker =
 "*****************************************************************************";
 
-  static Properties properties;
+  public static Properties properties;
    
 
   /* 
@@ -77,8 +77,7 @@
   /**
    * Loads Harvester properties from a configuration file.
    */
-  private static void loadProperties() {
-    File configfile = new File("../../lib/harvester", "harvester.properties");
+  public static void loadProperties(File configfile) {
     properties = new Properties();
 
     try {
@@ -100,6 +99,7 @@
     * @throws ParserConfigurationException
     */
   public static void main(String[] args) {
+    File configfile = new File("../../lib/harvester", "harvester.properties");
     Integer delayDefault = new Integer(0); // Default number of hours delay
     int delay = delayDefault.intValue();  // Delay in hours before first harvest
     Integer d;                            // Used for determining delay
@@ -118,8 +118,7 @@
 
     System.out.println(marker);
     System.out.println("Starting Harvester");
-    Harvester.loadProperties();
-    //properties.list(System.out);
+    Harvester.loadProperties(configfile);
 
     // Parse the delay property. Use default if necessary.    
     try {
@@ -216,7 +215,7 @@
    */
 
   /** Database connection */
-  Connection conn;
+  private Connection conn = null;
   
   /** Used during development to determine whether to connect to metacat 
    *  Sometimes it's useful to test parts of the code without actually
@@ -283,16 +282,21 @@
                    String errorMessage
                   ) {
     HarvestLog harvestLog;
+    int harvestLogID = getHarvestLogID();
+    int detailLogID;
 
     /* If there is no associated harvest document, call the basic constructor;
      * else call the extended constructor.
      */
     if (harvestDocument == null) {    
-      harvestLog = new HarvestLog(this, harvestStartTime, status, message,
-                                  harvestOperationCode, siteScheduleID);
+      harvestLog = new HarvestLog(this, conn, harvestLogID, harvestStartTime, 
+                                  status, message, harvestOperationCode, 
+                                  siteScheduleID);
     }
     else {
-      harvestLog = new HarvestLog(this, harvestStartTime, status, message,
+      detailLogID = getDetailLogID();
+      harvestLog = new HarvestLog(this, conn, harvestLogID, detailLogID, 
+                                  harvestStartTime, status, message,
                                   harvestOperationCode, siteScheduleID,
                                   harvestDocument, errorMessage);
     }
@@ -299,6 +303,18 @@
     
     harvestLogList.add(harvestLog);
   }
+  
+  
+  public void closeConnection() {
+    try {
+      // Close the database connection
+      System.out.println("Closing the database connection.");
+      conn.close();
+    }
+    catch (SQLException e) {
+      System.out.println("Database access failed " + e);
+    }    
+  }
 
 
   /**
@@ -322,7 +338,7 @@
    * @param text  the original string
    * @return      a string containing the normalized text
    */
-  String dequoteText(String text) {
+  public String dequoteText(String text) {
     char c;
     StringBuffer stringBuffer = new StringBuffer();
     
@@ -343,8 +359,77 @@
     
     return stringBuffer.toString();
   }
+  
+  /**
+   * Returns a connection to the database. Opens the connection if a connection
+   * has not already been made previously.
+   * 
+   * @return  conn  the database Connection object
+   */
+  public Connection getConnection() {
+    String database;
+    String dbDriver = "";
+		String defaultDB;
+    String password;
+    Properties properties = Harvester.properties;
+    String user;
+    SQLWarning warn;
+    
+    if (conn == null) {
+      database = properties.getProperty("database");
+    
+      if (database.equalsIgnoreCase("oracle")) {
+        dbDriver = "oracle.jdbc.driver.OracleDriver";
+      }
+      else if (database.equalsIgnoreCase("postgresql")) {
+        dbDriver = "org.postgresql.Driver";
+      }
+      else if (database.equalsIgnoreCase("sqlserver")) {
+        dbDriver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
+      }
 
+      defaultDB = properties.getProperty("defaultDB");
+      password = properties.getProperty("password");
+      user = properties.getProperty("user");
 
+      // Load the jdbc driver
+      try {
+        Class.forName(dbDriver);
+      }
+      catch (ClassNotFoundException e) {
+        System.out.println("Can't load driver " + e);
+        System.exit(1);
+      } 
+
+      // Make the database connection
+      try {
+        System.out.println("Getting connection to Harvester tables");
+        conn = DriverManager.getConnection(defaultDB, user, password);
+
+        // If a SQLWarning object is available, print its warning(s).
+        // There may be multiple warnings chained.
+        warn = conn.getWarnings();
+      
+        if (warn != null) {
+          while (warn != null) {
+            System.out.println("SQLState: " + warn.getSQLState());
+            System.out.println("Message:  " + warn.getMessage());
+            System.out.println("Vendor: " + warn.getErrorCode());
+            System.out.println("");
+            warn = warn.getNextWarning();
+          }
+        }
+      }
+      catch (SQLException e) {
+        System.out.println("Database access failed " + e);
+        System.exit(1);
+      }
+    }
+    
+    return conn;
+  }
+
+
   /**
    * Gets the current value of the detailLogID for storage as a primary key in
    * the DETAIL_LOG_ID field of the HARVEST_DETAIL_LOG table.
@@ -351,7 +436,7 @@
    * 
    * @return  the current value of the detailLogID
    */
-  int getDetailLogID() {
+  public int getDetailLogID() {
     int currentValue = detailLogID;
     
     detailLogID++;
@@ -365,7 +450,7 @@
    * 
    * @return  the current value of the detailLogID
    */
-  int getHarvestLogID() {
+  public int getHarvestLogID() {
     int currentValue = harvestLogID;
     
     harvestLogID++;
@@ -381,7 +466,7 @@
    * @return  the maximum integer stored in the fieldName field of tableName
    */
   private int getMaxValue(String tableName, String fieldName) {
-    int maxValue = 100;
+    int maxValue = 0;
     int fieldValue;
 		String query = "SELECT " + fieldName + " FROM " + tableName;
 		Statement stmt;
@@ -465,7 +550,7 @@
    * Initializes the detailLogID and harvestLogID values to their current
    * maximums + 1.
    */
-  private void initLogIDs() {
+  public void initLogIDs() {
     detailLogID = getMaxValue("HARVEST_DETAIL_LOG", "DETAIL_LOG_ID") + 1;
     harvestLogID = getMaxValue("HARVEST_LOG", "HARVEST_LOG_ID") + 1;
   }
@@ -737,8 +822,18 @@
         System.out.println("There was a problem sending email to " + to);
         System.out.println("IOException: " + e.getMessage());
       }
+    }
   }
-}
+  
+
+  /**
+   * Sets the harvest start time for this harvest run.
+   * 
+   * @param date
+   */
+  public void setHarvestStartTime(Date date) {
+    harvestStartTime = date;
+  }
     
 
   /**
@@ -755,15 +850,7 @@
     addLogEntry(0, "Shutting Down Harvester", "HarvesterShutdown", 0, null, "");
     pruneHarvestLog();
     pruneHarvestDetailLog();
-
-    try {
-      // Close the database connection
-      conn.close();
-    }
-    catch (SQLException e) {
-      System.out.println("Database access failed " + e);
-    }
-    
+    closeConnection();
     // Print log to standard output and then email the Harvester administrator
     printHarvestLog(System.out, maxCodeLevel, siteScheduleID);
     reportToAdministrator(maxCodeLevel);      // Send a copy to harvester admin
@@ -779,43 +866,19 @@
    */
   private void startup(int nHarvests, int maxHarvests) {
     Boolean ctm;
-    String database;
-    String dbDriver = "";
-		String defaultDB;
     Integer lp;
     String metacatURL;
-    Date now;
-    String password;
-    Properties properties;
-    //String response;
-    String sessionId;
-    String user;
-    String userName = System.getProperty("user.name");
-    SQLWarning warn;
+    Date now = new Date();
+    Properties properties = Harvester.properties;
     
-    // Log startup operation
+    timestamp = now.toString();
     System.out.println(Harvester.marker);
-    now = new Date();
-    timestamp = now.toString();
     System.out.println(timestamp + ": Starting Next Harvest (" +
                        nHarvests + "/" + maxHarvests + ")");
-    Harvester.loadProperties();
-    properties = Harvester.properties;
     ctm = Boolean.valueOf(properties.getProperty("connectToMetacat", "true"));
     connectToMetacat = ctm.booleanValue();
-    database = properties.getProperty("database");
-    
-    if (database.equalsIgnoreCase("oracle")) {
-      dbDriver = "oracle.jdbc.driver.OracleDriver";
-    }
-    else if (database.equalsIgnoreCase("postgresql")) {
-      dbDriver = "org.postgresql.Driver";
-    }
-    else if (database.equalsIgnoreCase("sqlserver")) {
-      dbDriver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
-    }
-
     harvesterAdministrator = properties.getProperty("harvesterAdministrator");
+    smtpServer = properties.getProperty("smtpServer", "localhost");
 
     try {
       lp = Integer.valueOf(properties.getProperty("logPeriod", "90"));
@@ -828,51 +891,15 @@
       logPeriod = 90;
     }
 
-    defaultDB = properties.getProperty("defaultDB");
-    metacatURL = properties.getProperty("metacatURL");
-    password = properties.getProperty("password");
-    smtpServer = properties.getProperty("smtpServer", "localhost");
-    user = properties.getProperty("user");
-
-    // Load the jdbc driver
-    try {
-      Class.forName(dbDriver);
-    }
-    catch (ClassNotFoundException e) {
-      System.out.println("Can't load driver " + e);
-      System.exit(1);
-    } 
-
-    // Make the database connection
-    try {
-      System.out.println("Getting connection to Harvester tables");
-      conn = DriverManager.getConnection(defaultDB, user, password);
-
-      // If a SQLWarning object is available, print its warning(s).
-      // There may be multiple warnings chained.
-      warn = conn.getWarnings();
-      
-      if (warn != null) {
-        while (warn != null) {
-          System.out.println("SQLState: " + warn.getSQLState());
-          System.out.println("Message:  " + warn.getMessage());
-          System.out.println("Vendor: " + warn.getErrorCode());
-          System.out.println("");
-          warn = warn.getNextWarning();
-        }
-      }
-    }
-    catch (SQLException e) {
-      System.out.println("Database access failed " + e);
-      System.exit(1);
-    }
-    
+    conn = getConnection();
     initLogIDs();
-    harvestStartTime = new Date();
+    setHarvestStartTime(now);
+    // Log startup operation
     addLogEntry(0, "Starting Up Harvester", "HarvesterStartup", 0, null, "");
       
     if (connectToMetacat()) {      
       try {
+        metacatURL = properties.getProperty("metacatURL");
         System.out.println("Connecting to Metacat: " + metacatURL);
         metacat = MetacatFactory.createMetacatConnection(metacatURL);
       } 
@@ -885,5 +912,4 @@
     }
   }
 
-
 }
Index: src/edu/ucsb/nceas/metacat/harvesterClient/HarvestDocument.java
===================================================================
--- src/edu/ucsb/nceas/metacat/harvesterClient/HarvestDocument.java	(revision 2138)
+++ src/edu/ucsb/nceas/metacat/harvesterClient/HarvestDocument.java	(revision 2139)
@@ -31,6 +31,7 @@
 import java.io.StringReader;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.sql.Connection;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
@@ -74,7 +75,7 @@
    * @param documentType         the value of the <documentType> element
    * @param documentURL          the value of the <documentURL> element
    */
-  public HarvestDocument(
+  public HarvestDocument (
                           Harvester harvester,
                           HarvestSiteSchedule harvestSiteSchedule,
                           String scope,
@@ -101,7 +102,7 @@
    * 
    * @return   A StringReader containing the document string.
    */
-  private StringReader getSiteDocument() {
+  public StringReader getSiteDocument() {
     String documentString;
     InputStream inputStream;
     InputStreamReader inputStreamReader;
@@ -223,7 +224,8 @@
    *          Metacat. Returns -1 if Metacat does not currently hold the
    *          document.
    */
-  private int metacatHighestRevision() {
+  public int metacatHighestRevision() {
+    Connection conn = harvester.getConnection();
     int         highestRevision = -1;
 		String query = "SELECT REV FROM XML_DOCUMENTS WHERE DOCID = " +
                    "'" + docid + "'";
@@ -230,7 +232,7 @@
 		Statement stmt;
     
 		try {
-			stmt = harvester.conn.createStatement();							
+			stmt = conn.createStatement();							
 			ResultSet rs = stmt.executeQuery(query);
 	
 			while (rs.next()) {
@@ -252,7 +254,7 @@
    * 
    * @param out   the PrintStream to write to
    */
-  void printOutput(PrintStream out) {
+  public void printOutput(PrintStream out) {
     out.println("* scope:                " + scope);
     out.println("* identifier:           " + identifier);
     out.println("* revision:             " + revision);
Index: src/edu/ucsb/nceas/metacat/harvesterClient/HarvestLog.java
===================================================================
--- src/edu/ucsb/nceas/metacat/harvesterClient/HarvestLog.java	(revision 2138)
+++ src/edu/ucsb/nceas/metacat/harvesterClient/HarvestLog.java	(revision 2139)
@@ -42,7 +42,8 @@
  * @author  costa
  */
 public class HarvestLog {
-    
+
+  private Connection conn;    
   private Harvester harvester;              // The parent Harvester object
   private int harvestLogID;
   private Date harvestDate;
@@ -64,6 +65,8 @@
    * (For that type of log entry, use the alternate constructor below.)
    *
    * @param  harvester       the parent Harvester object
+   * @param  conn            the database connection
+   * @param  harvestLogID    the primary key in the HARVEST_LOG table
    * @param  harvestDate     the date of this harvest
    * @param  status          the status of the harvest operation
    * @param  message         the message text of the harvest operation
@@ -73,6 +76,8 @@
    *                         involve a particular harvest site.
    */
   public HarvestLog(Harvester  harvester,
+                    Connection conn,
+                    int        harvestLogID,
                     Date       harvestDate,
                     int        status,
                     String     message, 
@@ -83,7 +88,8 @@
     timestamp = now.toString();
 
     this.harvester = harvester;
-    this.harvestLogID = harvester.getHarvestLogID();
+    this.conn = conn;
+    this.harvestLogID = harvestLogID;
     this.harvestDate = harvestDate;
     this.status = status;
     this.message = message;
@@ -103,6 +109,9 @@
    * HarvestDetailLog object and inserts it to the HARVEST_DETAIL_LOG table.
    *
    * @param  harvester       the parent Harvester object
+   * @param  conn            the database connection
+   * @param  harvestLogID    the primary key in the HARVEST_LOG table
+   * @param  detailLogID     the primary key in the HARVEST_DETAIL_LOG table
    * @param  harvestDate     the date of this harvest
    * @param  status          the status of the harvest operation
    * @param  message         the message text of the harvest operation
@@ -114,6 +123,9 @@
    * @param  errorMessage    the error message generated by this operation
    */
   public HarvestLog(Harvester  harvester,
+                    Connection conn,
+                    int        harvestLogID,
+                    int        detailLogID,
                     Date       harvestDate,
                     int        status,
                     String     message, 
@@ -126,19 +138,21 @@
     timestamp = now.toString();
 
     this.harvester = harvester;
-    this.harvestLogID = harvester.getHarvestLogID();
+    this.conn = conn;
+    this.harvestLogID = harvestLogID;
     this.harvestDate = harvestDate;
     this.status = status;
     this.message = message;
     this.harvestOperationCode = harvestOperationCode;
     this.siteScheduleID = siteScheduleID;
-    this.harvestDetailLog = new HarvestDetailLog(harvester, harvestLogID, 
-                                                 harvestDocument, errorMessage);
+    this.harvestDetailLog = new HarvestDetailLog(harvester, conn, detailLogID,
+                                                 harvestLogID, harvestDocument,
+                                                 errorMessage);
     harvestOperationCodeLevel = 
             getHarvestOperationCodeLevel(harvestOperationCode);
     explanation = getExplanation(harvestOperationCode);
     dbInsertHarvestLogEntry();               // Insert to the HARVEST_LOG table
-    harvestDetailLog.dbInsertHarvestDetailLogEntry(); // and HARVEST_DETAIL_LOG
+    harvestDetailLog.dbInsertHarvestDetailLogEntry(); //  HARVEST_DETAIL_LOG
   }
     
 
@@ -165,7 +179,7 @@
                    ")";
                    
 		try {
-			stmt = harvester.conn.createStatement();							
+			stmt = conn.createStatement();							
 			stmt.executeUpdate(insertString);
 			stmt.close();
 		}
@@ -182,7 +196,7 @@
    *                         "info", or "debug"
    * @return codeLevelValue  the corresponding code level value
    */
-  int getCodeLevelValue(String codeLevel) {
+  public int getCodeLevelValue(String codeLevel) {
     int codeLevelValue = 0;
     
     if (codeLevel.equalsIgnoreCase("error")) {
@@ -213,7 +227,7 @@
    * @param  harvestOperationCode  string value of the harvest operation code
    * @return the explanation for this harvest operation, a String
    */
-  String getExplanation(String harvestOperationCode) {
+  public String getExplanation(String harvestOperationCode) {
     String explanation;
     String fieldName = "EXPLANATION";
     
@@ -270,7 +284,7 @@
    * @return the code level value, a String, one of the following:
    *         "error", "warning", "notice", "info", or "debug"
    */
-  String getHarvestOperationCodeLevel(String harvestOperationCode) {
+  public String getHarvestOperationCodeLevel(String harvestOperationCode) {
     String harvestOperationCodeLevel;
     String fieldName = "HARVEST_OPERATION_CODE_LEVEL";
     
@@ -316,7 +330,7 @@
    *                  (level 1), then anything lower ("warning", "notice", etc.)
    *                  will not generate any output.
    */
-  void printOutput(PrintStream out, String maxLevel) {
+  public void printOutput(PrintStream out, String maxLevel) {
     int codeLevelValue = getCodeLevelValue(harvestOperationCodeLevel);
     int maxLevelValue = getCodeLevelValue(maxLevel);
     
@@ -331,8 +345,8 @@
       out.println("* harvestOperationCode: " + harvestOperationCode);
       out.println("* description:          " + explanation);
 
-      if (harvestOperationCode.equals("GetDocListSuccess") ||
-        harvestOperationCode.equals("GetDocListError")) {
+      if (harvestOperationCode.equals("GetHarvestListSuccess") ||
+        harvestOperationCode.equals("GetHarvestListError")) {
         if (siteScheduleID != 0) {
           harvester.printHarvestSiteSchedule(out, siteScheduleID);
         }
Index: src/edu/ucsb/nceas/metacat/harvesterClient/HarvestSiteSchedule.java
===================================================================
--- src/edu/ucsb/nceas/metacat/harvesterClient/HarvestSiteSchedule.java	(revision 2138)
+++ src/edu/ucsb/nceas/metacat/harvesterClient/HarvestSiteSchedule.java	(revision 2139)
@@ -63,7 +63,7 @@
  * 
  * @author  costa
  */
-class HarvestSiteSchedule {
+public class HarvestSiteSchedule {
     
   private String contactEmail;
   private String dateLastHarvest;
@@ -77,6 +77,8 @@
   private String ldapDN;
   private String ldapPwd;
   final private long millisecondsPerDay = (1000 * 60 * 60 * 24);
+  private String schemaLocation = 
+    "eml://ecoinformatics.org/harvestList ../../lib/harvester/harvestList.xsd";
   int siteScheduleID;
   private String unit;
   private int updateFrequency;
@@ -150,7 +152,7 @@
 		Statement stmt;
     long timeNextHarvest;
     
-    conn = harvester.conn;
+    conn = harvester.getConnection();
     now = new Date();
     currentTime = now.getTime();
     timeNextHarvest = currentTime + delta;
@@ -182,7 +184,7 @@
    * 
    * @retrun     true if due for harvest, otherwise false
    */
-  private boolean dueForHarvest() {
+  public boolean dueForHarvest() {
     boolean dueForHarvest = false;
     DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
     Date now = new Date();
@@ -208,8 +210,18 @@
     
     return dueForHarvest;
   }
+  
 
+  /**
+   * Accessor method for the schemaLocation field.
+   * 
+   * @return schemaLocation  the schema location string
+   */
+  public String getSchemaLocation() {
+    return schemaLocation;
+  }
 
+
   /**
    * Harvests each document in the site document list.
    * 
@@ -223,7 +235,7 @@
     
     if (dueForHarvest()) {
       try {
-        success = parseDocumentList();
+        success = parseHarvestList();
 
         /* If the document list was validated, then proceed with harvesting
          * the documents
@@ -255,16 +267,15 @@
   /**
    * Login to Metacat using the ldapDN and ldapPwd
    */
-  private void metacatLogin() {
+  public void metacatLogin() {
     Metacat metacat = harvester.metacat;
+    String response;
 
     if (harvester.connectToMetacat()) {
       try {
         System.out.println("Logging in to Metacat: " + ldapDN);
-        metacat.login(ldapDN, ldapPwd);
+        response = metacat.login(ldapDN, ldapPwd);
         //System.out.println("Metacat login response: " + response);
-        //sessionId = metacat.getSessionId();
-        //System.out.println("Session ID: " + sessionId);
       } 
       catch (MetacatInaccessibleException e) {
         System.out.println("Metacat login failed." + e.getMessage());
@@ -299,17 +310,17 @@
   
 
   /**
-   * Parse the site document list to find out which documents to harvest.
+   * Parses the site harvest list XML file to find out which documents to 
+   * harvest.
    * 
    * @return  true if successful, otherwise false
    */
-  private boolean parseDocumentList() 
+  public boolean parseHarvestList() 
           throws ParserConfigurationException {
     DocumentListHandler documentListHandler = new DocumentListHandler();
     InputStream inputStream;
     InputStreamReader inputStreamReader;
-    String schemaLocation = 
-    "eml://ecoinformatics.org/harvestList ../../lib/harvester/harvestList.xsd";
+    String schemaLocation = getSchemaLocation();
     boolean success = false;
     URL url;
 
@@ -318,7 +329,7 @@
       inputStream = url.openStream();
       harvester.addLogEntry(0,
                             "Retrieved: " + documentListURL,
-                            "GetDocListSuccess",
+                            "GetHarvestListSuccess",
                             siteScheduleID,
                             null,
                             "");
@@ -326,7 +337,7 @@
       documentListHandler.runParser(inputStreamReader, schemaLocation);
       harvester.addLogEntry(0,
                             "Validated: " + documentListURL,
-                            "ValidateDocListSuccess",
+                            "ValidateHarvestListSuccess",
                             siteScheduleID,
                             null,
                             "");
@@ -334,23 +345,23 @@
     }
     catch (MalformedURLException e){
       harvester.addLogEntry(1, "MalformedURLException: " + e.getMessage(), 
-                            "GetDocListError", siteScheduleID, null, "");
+                            "GetHarvestListError", siteScheduleID, null, "");
     }
     catch (FileNotFoundException e) {
       harvester.addLogEntry(1, "FileNotFoundException: " + e.getMessage(), 
-                            "GetDocListError", siteScheduleID, null, "");
+                            "GetHarvestListError", siteScheduleID, null, "");
     }
     catch (SAXException e) {
       harvester.addLogEntry(1, "SAXException: " + e.getMessage(), 
-                            "ValidateDocListError", siteScheduleID, null, "");
+                            "ValidateHarvestListError", siteScheduleID, null, "");
     }
     catch (ClassNotFoundException e) {
       harvester.addLogEntry(1, "ClassNotFoundException: " + e.getMessage(),
-                            "ValidateDocListError", siteScheduleID, null, "");
+                            "ValidateHarvestListError", siteScheduleID, null, "");
     }
     catch (IOException e) {
       harvester.addLogEntry(1, "IOException: " + e.getMessage(), 
-                            "GetDocListError", siteScheduleID, null, "");
+                            "GetHarvestListError", siteScheduleID, null, "");
     }
     
     return success;
@@ -362,7 +373,7 @@
    * 
    * @param out   the PrintStream to write to
    */
-  void printOutput(PrintStream out) {
+  public void printOutput(PrintStream out) {
     out.println("* siteScheduleID:       " + siteScheduleID);
     out.println("* documentListURL:      " + documentListURL);
     out.println("* ldapDN:               " + ldapDN);
@@ -408,6 +419,16 @@
     
 
   /**
+   * Accessor method for setting the value of the schemaLocation field.
+   * 
+   * @param schemaLocation  the new value of the schemaLocation field
+   */
+  public void setSchemaLocation(String schemaLocation) {
+    this.schemaLocation = schemaLocation;
+  }
+
+
+  /**
    * This inner class extends DefaultHandler. It parses the document list,
    * creating a new HarvestDocument object every time it finds a </Document>
    * end tag.
