Index: /trunk/FACT++/src/drivectrl.cc
===================================================================
--- /trunk/FACT++/src/drivectrl.cc	(revision 18802)
+++ /trunk/FACT++/src/drivectrl.cc	(revision 18803)
@@ -1308,9 +1308,16 @@
     }
 
-    bool HasError() const
+    bool HasWarning() const
     {
         const uint8_t typ0 = fErrCode[0]>>16;
         const uint8_t typ1 = fErrCode[1]>>16;
-        return typ0==0xe || typ0==0xf || typ1==0xe || typ1==0xf;
+        return typ0==0xe || typ1==0xe;
+    }
+
+    bool HasError() const
+    {
+        const uint8_t typ0 = fErrCode[0]>>16;
+        const uint8_t typ1 = fErrCode[1]>>16;
+        return typ0==0xf || typ1==0xf;
     }
 
@@ -2511,5 +2518,5 @@
         // FIXME: This can prevent parking in case e.g.
         // of e8029 Position limit exceeded
-        if (fDrive.HasError())
+        if (fDrive.HasWarning() || fDrive.HasError())
         {
             if (T::GetCurrentState()==State::kOnTrack  ||
@@ -2521,4 +2528,10 @@
             if (T::GetCurrentState()==State::kStopping && fDrive.IsMoving())
                 return State::kStopping;
+
+            if (fDrive.HasError())
+                return State::kHardwareError;
+
+            if (fDrive.HasWarning())
+                return State::kHardwareWarning;
 
             return StateMachineImp::kSM_Error;
@@ -2728,4 +2741,9 @@
         T::AddStateName(State::kInvalidCoordinates, "InvalidCoordinates",
                         "Tracking coordinates out of range");
+
+        T::AddStateName(State::kHardwareWarning, "HwardwareWarning",
+                        "At least one IndraDrive in a warning condition... check carefully!");
+        T::AddStateName(State::kHardwareError, "HwardwareError",
+                        "At least one IndraDrive in an error condition... this is a serious incident!");
 
 
@@ -2817,5 +2835,5 @@
 
         // FIXME: What to do in error state?
-        T::AddEvent("PARK", State::kInitialized, State::kMoving, State::kTracking, State::kOnTrack)
+        T::AddEvent("PARK", State::kInitialized, State::kMoving, State::kTracking, State::kOnTrack, State::kHardwareWarning)
             (bind(&StateMachineDrive::Park, this))
             ("Park the telescope");
@@ -2825,7 +2843,7 @@
             ("Stop any kind of movement.");
 
-        T::AddEvent("RESET", State::kPositioningFailed, State::kAllowedRangeExceeded)
+        T::AddEvent("RESET", State::kPositioningFailed, State::kAllowedRangeExceeded, State::kInvalidCoordinates)
             (bind(&StateMachineDrive::ResetError, this))
-            ("Acknoledge an internal error (PositioningFailed, AllowedRangeExceeded)");
+            ("Acknowledge an internal drivectrl error (PositioningFailed, AllowedRangeExceeded, InvalidCoordinates)");
 
         T::AddEvent("TPOINT", State::kOnTrack)
