Index: trunk/FACT++/gui/MainWindow.cc
===================================================================
--- trunk/FACT++/gui/MainWindow.cc	(revision 11856)
+++ trunk/FACT++/gui/MainWindow.cc	(revision 11857)
@@ -565,4 +565,34 @@
 }
 
+void MainWindow::on_fBiasVoltDac_valueChanged(int val)
+{
+    if (fInHandler)
+        return;
+
+    if (fBiasApplyGlobal->isChecked())
+    {
+        Dim::SendCommand("BIAS_CONTROL/SET_GLOBAL_DAC", uint16_t(val));
+        return;
+    }
+
+    const int b = fBiasHvBoard->value();
+    const int c = fBiasHvChannel->value();
+
+    const uint16_t ihw = b*32+c;
+
+    const uint16_t dat[2] = { ihw, uint16_t(val) };
+    Dim::SendCommand("BIAS_CONTROL/SET_CHANNEL_DAC", dat);
+}
+
+void MainWindow::on_fBiasMin_valueChanged(int min)
+{
+    fBiasCam->SetMin(min);
+}
+
+void MainWindow::on_fBiasMax_valueChanged(int max)
+{
+    fBiasCam->SetMax(max);
+}
+
 void MainWindow::on_fChatSend_clicked()
 {
Index: trunk/FACT++/gui/MainWindow.h
===================================================================
--- trunk/FACT++/gui/MainWindow.h	(revision 11856)
+++ trunk/FACT++/gui/MainWindow.h	(revision 11857)
@@ -155,9 +155,16 @@
 
     // Tab: Bias
-    virtual void UpdateBiasIdx() = 0;
-    virtual void on_fBiasPixel_valueChanged(int) = 0;
-    void on_fBiasCrate_valueChanged(int) { UpdateBiasIdx(); }
-    void on_fBiasBoard_valueChanged(int) { UpdateBiasIdx(); }
-    void on_fBiasPatch_valueChanged(int) { UpdateBiasIdx(); }
+    virtual void BiasHvChannelChanged() = 0;
+    virtual void BiasCamChannelChanged() = 0;
+    void on_fBiasHvBoard_valueChanged(int)   { BiasHvChannelChanged(); }
+    void on_fBiasHvChannel_valueChanged(int) { BiasHvChannelChanged(); }
+    void on_fBiasCamCrate_valueChanged(int)  { BiasCamChannelChanged(); }
+    void on_fBiasCamBoard_valueChanged(int)  { BiasCamChannelChanged(); }
+    void on_fBiasCamPatch_valueChanged(int)  { BiasCamChannelChanged(); }
+    void on_fBiasCamPixel_valueChanged(int)  { BiasCamChannelChanged(); }
+    void on_fBiasVoltDac_valueChanged(int);
+
+    void on_fBiasMin_valueChanged(int); // FIXME: Could be set as slot in the designer
+    void on_fBiasMax_valueChanged(int); // FIXME: Could be set as slot in the designer
 
     // Tab: Rates
@@ -180,8 +187,9 @@
     virtual void on_fThresholdDisableOthers_clicked() = 0;
 
-    virtual void on_fRatePatch1_valueChanged(int) = 0;
-    virtual void on_fRatePatch2_valueChanged(int) = 0;
-    virtual void on_fRateBoard1_valueChanged(int) = 0;
-    virtual void on_fRateBoard2_valueChanged(int) = 0;
+    virtual void DisplayRates() = 0;
+    void on_fRatePatch1_valueChanged(int) { DisplayRates(); }
+    void on_fRatePatch2_valueChanged(int) { DisplayRates(); }
+    void on_fRateBoard1_valueChanged(int) { DisplayRates(); }
+    void on_fRateBoard2_valueChanged(int) { DisplayRates(); }
 
     // Tab: Chat
@@ -198,5 +206,5 @@
     virtual void slot_RootUpdate() = 0;
     virtual void slot_ChoosePixelThreshold(int) = 0;
-    virtual void slot_ChoosePixelBias(int) = 0;
+    virtual void slot_ChooseBiasChannel(int) = 0;
     virtual void slot_CameraDoubleClick(int) = 0;
     virtual void slot_CameraMouseMove(int) = 0;
