diff --git a/middletier/cta/ArchivalRequest.cpp b/middletier/cta/ArchivalRequest.cpp
index 7a1f5047ae1193d21c147f4891c1de70866bf8ac..2eea7f1c478633f22a176090ad2f68eb328c615c 100644
--- a/middletier/cta/ArchivalRequest.cpp
+++ b/middletier/cta/ArchivalRequest.cpp
@@ -17,7 +17,9 @@ cta::ArchivalRequest::~ArchivalRequest() throw() {
 // constructor
 //------------------------------------------------------------------------------
 cta::ArchivalRequest::ArchivalRequest(const std::string &storageClassName,
-  const uint64_t priority):
+  const uint64_t priority, const std::string &id, const SecurityIdentity &user, 
+  const time_t creationTime):
+  UserRequest(id, user, creationTime),
   m_storageClassName(storageClassName),
   m_priority(priority) {
 }
diff --git a/middletier/cta/ArchivalRequest.hpp b/middletier/cta/ArchivalRequest.hpp
index 48d23120ab9407ebda1581ba2bd0a5493b60dc59..4a89d15a93968ae6041c77b81f76b190c9bb477f 100644
--- a/middletier/cta/ArchivalRequest.hpp
+++ b/middletier/cta/ArchivalRequest.hpp
@@ -28,8 +28,14 @@ public:
    *
    * @param storageClassName The name of the storage class.
    * @param priority The priority of the request.
+   * @param id The identifier of the request.
+   * @param user The identity of the user who made the request.
+   * @param creationTime Optionally the absolute time at which the user request
+   * was created.  If no value is given then the current time is used.
    */
-  ArchivalRequest(const std::string &storageClassName, const uint64_t priority);
+  ArchivalRequest(const std::string &storageClassName, const uint64_t priority,
+    const std::string &id, const SecurityIdentity &user,
+    const time_t creationTime = time(NULL));
 
   /**
    * Returns the name of the storage class.
diff --git a/middletier/cta/RetrievalRequest.cpp b/middletier/cta/RetrievalRequest.cpp
index 7528063841053849b5e7b9b29899b483833a7b14..be670a0300a761f5323f81f716090f1037a41e15 100644
--- a/middletier/cta/RetrievalRequest.cpp
+++ b/middletier/cta/RetrievalRequest.cpp
@@ -16,7 +16,10 @@ cta::RetrievalRequest::~RetrievalRequest() throw() {
 //------------------------------------------------------------------------------
 // constructor
 //------------------------------------------------------------------------------
-cta::RetrievalRequest::RetrievalRequest(const uint64_t priority):
+cta::RetrievalRequest::RetrievalRequest(const uint64_t priority,
+  const std::string &id, const SecurityIdentity &user,
+  const time_t creationTime):
+  UserRequest(id, user, creationTime),
   m_priority(priority) {
 }
 
diff --git a/middletier/cta/RetrievalRequest.hpp b/middletier/cta/RetrievalRequest.hpp
index 89e5313c144a5f8d33039de2fb7f473a2bfe7ba8..1189c37ff65d44286bc1772916c15cac3eb50785 100644
--- a/middletier/cta/RetrievalRequest.hpp
+++ b/middletier/cta/RetrievalRequest.hpp
@@ -26,8 +26,13 @@ public:
    * Constructor.
    *
    * @param priority The priority of the request.
+   * @param id The identifier of the request.
+   * @param user The identity of the user who made the request.
+   * @param creationTime Optionally the absolute time at which the user request
+   * was created.  If no value is given then the current time is used.
    */
-  RetrievalRequest(const uint64_t priority);
+  RetrievalRequest(const uint64_t priority, const std::string &id,
+    const SecurityIdentity &user, const time_t creationTime = time(NULL));
 
   /**
    * Returns the priority of the request.
diff --git a/middletier/cta/UserRequest.cpp b/middletier/cta/UserRequest.cpp
index ffa847c6f7ba07de94a3b721acea97db4b7f72c3..0aa14515c3e575c1262705a55b4e6015bdb6d820 100644
--- a/middletier/cta/UserRequest.cpp
+++ b/middletier/cta/UserRequest.cpp
@@ -12,10 +12,10 @@ cta::UserRequest::UserRequest():
 // constructor
 //------------------------------------------------------------------------------
 cta::UserRequest::UserRequest(const std::string &id,
-  const SecurityIdentity &user):
+  const SecurityIdentity &user, const time_t creationTime):
   m_id(id),
   m_user(user),
-  m_creationTime(time(NULL)) {
+  m_creationTime(creationTime) {
 }
 
 //------------------------------------------------------------------------------
diff --git a/middletier/cta/UserRequest.hpp b/middletier/cta/UserRequest.hpp
index c35ffad098b95c3b546df1a5c1c958b1f153bc27..aefa42c41d4a3aba6703ab7d6d025427bd89c6b5 100644
--- a/middletier/cta/UserRequest.hpp
+++ b/middletier/cta/UserRequest.hpp
@@ -21,15 +21,18 @@ public:
   /**
    * Destructor.
    */
-  virtual ~UserRequest() throw();
+  virtual ~UserRequest() throw() = 0;
 
   /**
    * Constructor.
    *
    * @param id The identifier of the request.
    * @param user The identity of the user who made the request.
+   * @param creationTime Optionally the absolute time at which the user request
+   * was created.  If no value is given then the current time is used.
    */
-  UserRequest(const std::string &id, const SecurityIdentity &user);
+  UserRequest(const std::string &id, const SecurityIdentity &user,
+    const time_t creationTime = time(NULL));
 
   /**
    * Returns the identifier of the request.