Index: source/ariba/utility/system/Timer.cpp
===================================================================
--- source/ariba/utility/system/Timer.cpp	(revision 4758)
+++ source/ariba/utility/system/Timer.cpp	(revision 4828)
@@ -84,6 +84,16 @@
 }
 
+void Timer::reset(){
+#ifndef UNDERLAY_OMNET
+	if(timerThread == NULL) return;
+	timerThread->interrupt();
+#else
+	#error timer interruption not implemented for omnet
+#endif
+}
+
 void Timer::stop() {
 	running = false;
+	reset(); // cause the sleep to abort
 }
 
@@ -97,5 +107,12 @@
 
 	while( obj->running ) {
-		boost::this_thread::sleep( boost::posix_time::milliseconds(obj->millis) );
+
+		try{
+			boost::this_thread::sleep( boost::posix_time::milliseconds(obj->millis) );
+		}catch(boost::thread_interrupted e){
+			// exception called when Timer::reset is called
+			// don't need to handle the exception
+		}
+
 		if (obj->running) SystemQueue::instance().scheduleEvent( SystemEvent( obj, TimerEventType, NULL), 0 );
 		if( obj->oneshot ) break;
Index: source/ariba/utility/system/Timer.h
===================================================================
--- source/ariba/utility/system/Timer.h	(revision 4758)
+++ source/ariba/utility/system/Timer.h	(revision 4828)
@@ -65,7 +65,27 @@
 	~Timer();
 
+	/**
+	 * Set the interval for the timer
+	 *
+	 * @param millis Timer interval in milliseconds
+	 * @param oneshot Is this a one-shot or periodic timer
+	 */
 	void setInterval(unsigned int millis, bool oneshot=false);
+
+	/**
+	 * Start the timer
+	 */
 	void start();
+
+	/**
+	 * Stop the timer
+	 */
 	void stop();
+
+	/**
+	 * Reset a running timer and ignore the remaining interval
+	 * time. Start the timer with a new timer interval.
+	 */
+	void reset();
 
 protected:
