Index: fact/BIASctrl/Crate.cc
===================================================================
--- fact/BIASctrl/Crate.cc	(revision 10107)
+++ fact/BIASctrl/Crate.cc	(revision 10118)
@@ -32,5 +32,4 @@
 	  Present[i][j] = false;
 	  Current[i][j] = 0;
-	  CurrentOffset[i][j] = 0;
 	}
   }
@@ -293,21 +292,4 @@
 
 
-// ***** Determine offset for current measurement *****
-bool Crate::CurrentCalib(double Voltage) {
-
-  // Set voltage of all channels and wait for current to settle
-  if (GlobalSet((int) (Voltage/90*0xfff)) != 1) return false;
-  sleep(1);
-  
-  // Measure current of all channels
-  if (ReadAll() != 1) return false;
-
-  for (int i=0; i<MAX_NUM_BOARDS; i++) for (int j=0; j<NUM_CHANNELS; j++) {
- 	CurrentOffset[i][j] = Current[i][j];
-  }
-  return true;
-}
-
-
 // ***** Set all voltages of board to zero *****
 void Crate::ClearVoltageArrays() {
@@ -343,5 +325,5 @@
 
   if (Channel >= MAX_NUM_BOARDS*NUM_CHANNELS) return 0;
-  else return Current[Channel/NUM_CHANNELS][Channel%NUM_CHANNELS]-CurrentOffset[Channel/NUM_CHANNELS][Channel%NUM_CHANNELS]; 
+  else return Current[Channel/NUM_CHANNELS][Channel%NUM_CHANNELS]; 
 }
 
Index: fact/BIASctrl/Crate.h
===================================================================
--- fact/BIASctrl/Crate.h	(revision 10107)
+++ fact/BIASctrl/Crate.h	(revision 10118)
@@ -35,5 +35,4 @@
 	double Volt[MAX_NUM_BOARDS][NUM_CHANNELS];	// Voltage in Volt
 	float Current[MAX_NUM_BOARDS][NUM_CHANNELS];
-	float CurrentOffset[MAX_NUM_BOARDS][NUM_CHANNELS]; // Offset for current measurement
 
 	std::vector<unsigned char> Communicate(std::string);
@@ -63,5 +62,4 @@
 	int GlobalSet(double);
 	bool Synch();
-	bool CurrentCalib(double);
 	double GetVoltage(unsigned int);
 	unsigned int GetDAC(unsigned int);
Index: fact/BIASctrl/User.cc
===================================================================
--- fact/BIASctrl/User.cc	(revision 10107)
+++ fact/BIASctrl/User.cc	(revision 10118)
@@ -16,8 +16,8 @@
   } CommandList[] = 
    {{"synch", &User::cmd_synch, 0, "", "Synchronize board"},
-    {"hv", &User::cmd_hv, 2, "<id>|<ch>|<all> <v>", "Change bias of pixel or (all) chan. of active boards"},
+    {"pixel", &User::cmd_hv, 2, "<pixel id> <v>", "Change bias of pixel"},
+	{"channel", &User::cmd_hv, 2, "<channel|all> <v>", "Change bias of (all) channels of active boards"},
     {"gs", &User::cmd_gs, 1, "[crate] <volt>", "Global voltage set"},
 	{"status", &User::cmd_status, 0, "[dac|current]", "Show status information (DAC values if requested)"},
-	{"ccal", &User::cmd_ccal, 1, "<volt>", "Calibrate current measurement at given voltage"},
 	{"mode", &User::cmd_mode, 1, "<static|dynamic>", "Set voltage stabilization mode"},
 	{"load", &User::cmd_load, 1, "<file>", "Load and set bias settings from file"},
@@ -63,6 +63,8 @@
   }
 
-  // Create instances
-  pm 	 = new PixelMap(GetConfig("PixMapTable"));
+  // Create PixelMap instance (map from config server)
+  DimRpcInfo RPC((char *) "ConfigRequest", (char *) "");
+  RPC.setData((char *) "Misc PixelMap");
+  PixMap = new PixelMap(std::string(RPC.getString(), RPC.getSize()));
   
   // Install DIM command (after all initialized)
@@ -90,5 +92,5 @@
 
   delete DIMCommand;    
-  delete pm;
+  delete PixMap;
   delete ConsoleOut;	
   free(ConsoleText);  
@@ -169,9 +171,15 @@
   for (unsigned int n=1; n < Parameter.size()-1; n+=2) {
 
-	// Extract channel identification
-	if (pm->Pixel_to_HVboard(Parameter[n]) != 999999999) {
-      Crt.Min = Crt.Max = pm->Pixel_to_HVboard(Parameter[n]);
-      Chan.Min = Chan.Max = pm->Pixel_to_HVchain(Parameter[n])*NUM_CHANNELS + pm->Pixel_to_HVchannel(Parameter[n]);
-	}
+	// Pixel identification?
+	if (Match(Parameter[0], "pixel")) {
+	  // Skip if first character is not digit
+	  if (isdigit(Parameter[n][0] == 0)) continue;
+	  // Skip if pixel ID not existing 
+	  if (PixMap->Pixel_to_HVcrate(atoi(Parameter[n].c_str())) == PixMap->PM_ERROR_CODE) continue;
+
+      Crt.Min = Crt.Max = PixMap->Pixel_to_HVcrate(atoi(Parameter[n].c_str()));
+      Chan.Min = Chan.Max = PixMap->Pixel_to_HVboard(atoi(Parameter[n].c_str()))*NUM_CHANNELS + PixMap->Pixel_to_HVchannel(atoi(Parameter[n].c_str()));
+	}
+	// Channel identification
 	else {
       vector<string> T = Tokenize(Parameter[n], "/");
@@ -181,6 +189,4 @@
 	  Chan.Max = MAX_NUM_BOARDS*NUM_CHANNELS-1;
 	  
-	  if (Parameter[n] == "-") continue;
-
 	  if (T.size() == 2) {
 		if(!ConvertToRange(T[0], Crt) || !ConvertToRange(T[1], Chan)) {
@@ -204,5 +210,4 @@
 	}
 
-
 	// Loop over given crates and channels
 	for (int i=Crt.Min; i<=Crt.Max; i++) for (int j=Chan.Min; j<=Chan.Max; j++) {
@@ -342,27 +347,4 @@
 	}
   }    
-}
-
-//
-// Determine current measurement offset
-//
-void User::cmd_ccal() {
-
-  double Voltage;
-    
-  if (!ConvertToDouble(Parameter[1], &Voltage)) {
-    PrintMessage("Error with format of voltage parameter\n");  
-	return;
-  }
-
-  // Execute current offset determination
-  for (unsigned int i=0; i<Crates.size(); i++) {
-	if (!Crates[i]->CurrentCalib(Voltage)) {
-      PrintMessage("Error with current calibration of crate %d\n", i);
-	  return;
-	}
-
-	PrintMessage("Current calibration of crate %d done\n", i);
-  }
 }
 
Index: fact/BIASctrl/User.h
===================================================================
--- fact/BIASctrl/User.h	(revision 10107)
+++ fact/BIASctrl/User.h	(revision 10118)
@@ -26,5 +26,5 @@
 	enum RunMode {mode_static, mode_dynamic};
 
-	PixelMap *pm;
+	PixelMap *PixMap;
 	DimCommand *DIMCommand;
 	DimService *ConsoleOut;
@@ -66,6 +66,5 @@
 	void cmd_exit();	void cmd_rate();
 	void cmd_timeout();	void cmd_reset();
-	void cmd_help();	void cmd_ccal();
-	void cmd_mode();
+	void cmd_help();	void cmd_mode();
 };
 
