Index: /trunk/FACT++/src/HeadersBIAS.h
===================================================================
--- /trunk/FACT++/src/HeadersBIAS.h	(revision 12107)
+++ /trunk/FACT++/src/HeadersBIAS.h	(revision 12108)
@@ -38,5 +38,7 @@
         kRamping,
         kOverCurrent,
-        kAtReference,
+        kVoltageOff,
+        kNotReferenced,
+        kVoltageOn,
         kExpertMode // 'forward' declaration to be used in StateMachineBias
     };
Index: /trunk/FACT++/src/biasctrl.cc
===================================================================
--- /trunk/FACT++/src/biasctrl.cc	(revision 12107)
+++ /trunk/FACT++/src/biasctrl.cc	(revision 12108)
@@ -1361,8 +1361,12 @@
 
         for (int ch=0; ch<kNumChannels; ch++)
+            if (fPresent[ch/kNumChannelsPerBoard] && fVolt[ch]==0)
+                return BIAS::kVoltageOff;
+
+        for (int ch=0; ch<kNumChannels; ch++)
             if (fPresent[ch/kNumChannelsPerBoard] && fVolt[ch]!=fVoltRef[ch])
-                return BIAS::kConnected;
-
-        return BIAS::kAtReference;
+                return BIAS::kNotReferenced;
+
+        return BIAS::kVoltageOn;
     }
 };
@@ -1724,6 +1728,12 @@
                         "USB connection to bias-power supply established.");
 
-        T::AddStateName(kAtReference, "Referenced",
-                        "Internal reference voltage matches last sent voltage.");
+        T::AddStateName(kNotReferenced, "NotReferenced",
+                        "Internal reference voltage does not match last sent voltage.");
+
+        T::AddStateName(kVoltageOff, "VoltageOff",
+                        "All voltages are supposed to be switched off.");
+
+        T::AddStateName(kVoltageOn, "VoltageOn",
+                        "At least one voltage is switched on and all are at reference.");
 
         T::AddStateName(kOverCurrent, "OverCurrent",
@@ -1743,9 +1753,9 @@
 
         // Conenction commands
-        T::AddEvent("DISCONNECT", kConnected, kAtReference)
+        T::AddEvent("DISCONNECT", kConnected, kVoltageOff)
             (bind(&StateMachineBias::Disconnect, this))
             ("disconnect from USB");
 
-        T::AddEvent("RECONNECT", "O", kDisconnected, kConnected, kAtReference)
+        T::AddEvent("RECONNECT", "O", kDisconnected, kConnected, kVoltageOff)
             (bind(&StateMachineBias::Reconnect, this, placeholders::_1))
             ("(Re)connect USB connection to Bias power supply, a new address can be given"
@@ -1754,5 +1764,5 @@
 
 
-        T::AddEvent("REQUEST_STATUS", kConnected, kAtReference, kOverCurrent)
+        T::AddEvent("REQUEST_STATUS", kConnected, kVoltageOn, kVoltageOff, kNotReferenced, kOverCurrent)
             (Wrapper(bind(&ConnectionBias::ReadAllChannels, &fBias, false)))
             ("Asynchronously request the status (current) of all channels.");
@@ -1764,35 +1774,35 @@
 
 
-        T::AddEvent("SET_GLOBAL_VOLTAGE", "F:1", kConnected, kAtReference, kOverCurrent)
+        T::AddEvent("SET_GLOBAL_VOLTAGE", "F:1", kConnected, kVoltageOff, kVoltageOn, kNotReferenced, kOverCurrent)
             (bind(&StateMachineBias::SetGlobalVolt, this, placeholders::_1))
             ("Set all channels to a new reference voltage. Starts ramping if necessary. (This command is not realized with the GLOBAL SET command.)"
              "|voltage[V]:Global target voltage in volts (will be converted to DAC units)");
 
-        T::AddEvent("SET_GLOBAL_DAC", "S:1", kConnected, kAtReference, kOverCurrent)
+        T::AddEvent("SET_GLOBAL_DAC", "S:1", kConnected, kVoltageOff, kVoltageOn, kNotReferenced, kOverCurrent)
             (bind(&StateMachineBias::SetGlobalDac, this, placeholders::_1))
             ("Set all channels to a new DAC reference. Starts ramping if necessary. (This command is not realized with the GLOBAL SET command.)"
              "|voltage[dac]:Global target voltage as DAC counts.");
 
-        T::AddEvent("INCREASE_GLOBAL_VOLTAGE", "F:1", kConnected, kAtReference, kOverCurrent)
+        T::AddEvent("INCREASE_GLOBAL_VOLTAGE", "F:1", kConnected, kVoltageOff, kVoltageOn, kNotReferenced, kOverCurrent)
             (bind(&StateMachineBias::IncGlobalVolt, this, placeholders::_1))
             ("Set all channels to a new reference voltage. Starts ramping if necessary. (This command is not realized with the GLOBAL SET command.)"
              "|offset[V]:Offset to be added to all channels (will be converted to DAC counts)");
 
-        T::AddEvent("INCREASE_GLOBAL_DAC", "S:1", kConnected, kAtReference, kOverCurrent)
+        T::AddEvent("INCREASE_GLOBAL_DAC", "S:1", kConnected, kVoltageOff, kVoltageOn, kNotReferenced, kOverCurrent)
             (bind(&StateMachineBias::IncGlobalDac, this, placeholders::_1))
             ("Set all channels to a new DAC reference. Starts ramping if necessary. (This command is not realized with the GLOBAL SET command.)"
              "|offset[dac]:Offset to be added to all channels as DAC counts");
 
-        T::AddEvent("DECREASE_GLOBAL_VOLTAGE", "F:1", kConnected, kAtReference, kOverCurrent)
+        T::AddEvent("DECREASE_GLOBAL_VOLTAGE", "F:1", kConnected, kVoltageOff, kVoltageOn, kNotReferenced, kOverCurrent)
             (bind(&StateMachineBias::DecGlobalVolt, this, placeholders::_1))
             ("Set all channels to a new reference voltage. Starts ramping if necessary. (This command is not realized with the GLOBAL SET command.)"
              "|offset[V]:Offset to be subtracted from all channels (will be converted to DAC counts)");
 
-        T::AddEvent("DECREASE_GLOBAL_DAC", "S:1", kConnected, kAtReference, kOverCurrent)
+        T::AddEvent("DECREASE_GLOBAL_DAC", "S:1", kConnected, kVoltageOff, kVoltageOn, kNotReferenced, kOverCurrent)
             (bind(&StateMachineBias::DecGlobalDac, this, placeholders::_1))
             ("Set all channels to a new DAC reference. Starts ramping if necessary. (This command is not realized with the GLOBAL SET command.)"
              "|offset[dac]:Offset to be subtracted from all channels as DAC counts");
 
-        T::AddEvent("SET_CHANNEL_VOLTAGE", "S:1;F:1", kConnected, kAtReference, kOverCurrent)
+        T::AddEvent("SET_CHANNEL_VOLTAGE", "S:1;F:1", kConnected, kVoltageOff, kVoltageOn, kNotReferenced, kOverCurrent)
             (bind(&StateMachineBias::SetChannelVolt, this, placeholders::_1))
             ("Set a single channel to a new reference voltage. Starts ramping if necessary."
@@ -1800,5 +1810,5 @@
              "|voltage[V]:Target voltage in volts for the given channel (will be converted to DAC units)");
 
-        T::AddEvent("SET_CHANNEL_DAC", "S:1;S:1", kConnected, kAtReference, kOverCurrent)
+        T::AddEvent("SET_CHANNEL_DAC", "S:1;S:1", kConnected, kVoltageOff, kVoltageOn, kNotReferenced, kOverCurrent)
             (bind(&StateMachineBias::SetChannelDac, this, placeholders::_1))
             ("Set a single channel to a new DAC reference value. Starts ramping if necessary."
@@ -1806,38 +1816,38 @@
              "|voltage[dac]:Target voltage in DAC units for the given channel");
 
-        T::AddEvent("SET_GLOBAL_GAPD_REFERENCE_VOLTAGE", kConnected, kAtReference, kOverCurrent)
+        T::AddEvent("SET_GLOBAL_GAPD_REFERENCE_VOLTAGE", kConnected, kVoltageOff, kVoltageOn, kNotReferenced, kOverCurrent)
             (Wrapper(bind(&ConnectionBias::SetGapdVoltage, &fBias, 0.)))
             ("Set all channels to their G-APD reference voltage. Starts ramping if necessary.");
 
-        T::AddEvent("SET_CHANNEL_GAPD_REFERENCE_VOLTAGE", "S:1", kConnected, kAtReference, kOverCurrent)
+        T::AddEvent("SET_CHANNEL_GAPD_REFERENCE_VOLTAGE", "S:1", kConnected, kVoltageOff, kVoltageOn, kNotReferenced, kOverCurrent)
             (bind(&StateMachineBias::SetGapdReferenceCh, this, placeholders::_1))
             ("Set a single channel channels to its G-APD reference voltage. Starts ramping if necessary."
              "|channel[short]:Channel for which to set the target voltage [0-416]");
 
-        T::AddEvent("SET_GAPD_REFERENCE_OFFSET", "F:1", kConnected, kAtReference, kOverCurrent)
+        T::AddEvent("SET_GAPD_REFERENCE_OFFSET", "F:1", kConnected, kVoltageOff, kVoltageOn, kNotReferenced, kOverCurrent)
             (bind(&StateMachineBias::SetGapdVoltage, this, placeholders::_1))
             ("Set all channels to their G-APD reference voltage plus the given offset. Starts ramping if necessary."
              "|offset[V]:Offset to be added to teh G-APD reference voltage globally");
 
-        T::AddEvent("SET_ZERO_VOLTAGE", kConnected, kAtReference, kOverCurrent)
+        T::AddEvent("SET_ZERO_VOLTAGE", kConnected, kVoltageOff, kVoltageOn, kNotReferenced, kOverCurrent)
             (Wrapper(bind(&ConnectionBias::SetZero, &fBias)))
             ("Set all channels to a zero reference voltage. Starts ramping if necessary.");
 
-        T::AddEvent("SET_REFERENCE_VOLTAGES", "F:416", kConnected, kAtReference, kOverCurrent)
+        T::AddEvent("SET_REFERENCE_VOLTAGES", "F:416", kConnected, kVoltageOff, kVoltageOn, kNotReferenced, kOverCurrent)
             (bind(&StateMachineBias::SetReferenceVolt, this, placeholders::_1))
             ("Set all channels to the given new reference voltage. Starts ramping if necessary."
              "voltage[V]:New reference voltage for all channels");
 
-        T::AddEvent("SET_REFERENCE_DACS", "S:416", kConnected, kAtReference, kOverCurrent)
+        T::AddEvent("SET_REFERENCE_DACS", "S:416", kConnected, kVoltageOff, kVoltageOn, kNotReferenced, kOverCurrent)
             (bind(&StateMachineBias::SetReferenceDac, this, placeholders::_1))
             ("Set all channels to the given new reference voltage. Starts ramping if necessary."
              "voltage[dac]:New reference voltage for all channels in DAC units");
 
-        T::AddEvent("ADD_REFERENCE_VOLTAGES", "F:416", kConnected, kAtReference, kOverCurrent)
+        T::AddEvent("ADD_REFERENCE_VOLTAGES", "F:416", kConnected, kVoltageOff, kVoltageOn, kNotReferenced, kOverCurrent)
             (bind(&StateMachineBias::AddReferenceVolt, this, placeholders::_1))
             ("Add the given voltages to the current reference voltages. Starts ramping if necessary."
              "offset[V]:Offsets to be added to the reference voltage of all channels in volts");
 
-        T::AddEvent("ADD_REFERENCE_DACS", "S:416", kConnected, kAtReference, kOverCurrent)
+        T::AddEvent("ADD_REFERENCE_DACS", "S:416", kConnected, kVoltageOff, kVoltageOn, kNotReferenced, kOverCurrent)
             (bind(&StateMachineBias::AddReferenceDac, this, placeholders::_1))
             ("Add the given voltages to the current reference voltages. Starts ramping if necessary."
@@ -1847,9 +1857,9 @@
 
 
-        T::AddEvent("STOP", kConnected, kRamping, kAtReference, kOverCurrent)
+        T::AddEvent("STOP", kConnected, kRamping)
             (Wrapper(bind(&ConnectionBias::RampStop, &fBias)))
             ("Stop an on-going ramping");
 
-        T::AddEvent("START", kConnected, kOverCurrent)
+        T::AddEvent("START", kConnected, kNotReferenced)
             (Wrapper(bind(&ConnectionBias::RampStart, &fBias)))
             ("Start a ramping if no ramping is in progress and if reference values differ from current voltages");
