diff --git a/MAC/APL/MainCU/src/ObservationControl/ObservationControl.cc b/MAC/APL/MainCU/src/ObservationControl/ObservationControl.cc
index b095208b69a19764c49960ddd1b0e7a6a9fd49a0..a431691d834505045411049576910c08b4876a80 100644
--- a/MAC/APL/MainCU/src/ObservationControl/ObservationControl.cc
+++ b/MAC/APL/MainCU/src/ObservationControl/ObservationControl.cc
@@ -155,7 +155,12 @@ void ObservationControl::sigintHandler(int signum)
 
 	// Note we can't call TRAN here because the siginthandler does not know our object.
 	if (thisObservationControl) {
-		thisObservationControl->finish();
+		if (signum == SIGABRT) {
+			thisObservationControl->abortObservation();
+		}
+		else {
+			thisObservationControl->finish();
+		}
 	}
 }
 
@@ -167,6 +172,20 @@ void ObservationControl::finish()
 	TRAN(ObservationControl::finishing_state);
 }
 
+//
+// abortObservation
+//
+void ObservationControl::abortObservation()
+{
+	LOG_WARN("Received manual interrupt to ABORT the observation");
+	if (itsState < CTState::RESUME) {
+		itsQuitReason = CT_RESULT_MANUAL_ABORT;
+	}
+	itsTimerPort->cancelTimer(itsStopTimer);	// cancel old timer
+	itsStopTimer = itsTimerPort->setTimer(0.0);	// expire immediately
+	// will result in F_TIMER in ::active_state
+}
+
 //
 // setState(CTstateNr)
 //
@@ -233,6 +252,7 @@ GCFEvent::TResult ObservationControl::starting_state(GCFEvent& event,
 		thisObservationControl = this;
 		signal (SIGINT,  ObservationControl::sigintHandler);	// ctrl-c
 		signal (SIGTERM, ObservationControl::sigintHandler);	// kill
+		signal (SIGABRT, ObservationControl::sigintHandler);	// kill -6
 
 		// register what we are doing
 		setState(CTState::CONNECT);
diff --git a/MAC/APL/MainCU/src/ObservationControl/ObservationControl.h b/MAC/APL/MainCU/src/ObservationControl/ObservationControl.h
index ba24199ae85efaae43e4d0d5d2655c9914275d01..7c768928583bac6fe244d3ac68bf3ac9f7b3fabd 100644
--- a/MAC/APL/MainCU/src/ObservationControl/ObservationControl.h
+++ b/MAC/APL/MainCU/src/ObservationControl/ObservationControl.h
@@ -82,6 +82,7 @@ public:
 	// Interrupt handler for switching to finishing_state when exiting program.
 	static void sigintHandler (int signum);
 	void finish ();
+	void abortObservation ();
 
 private:
 	// avoid defaultconstruction and copying