void AMDetectorInitializeAction::startImplementation(){
	// If you still don't have a detector, check the exposed detectors one last time.
	if(!detector_)
		detector_ = AMBeamline::bl()->exposedDetectorByInfo(*(detectorInitializeInfo()->detectorInfo()));

	if(!detector_) {
		AMErrorMon::alert(this,
						  AMDETECTORINITIALIZEACTION_NO_VALID_DETECTOR,
						  QString("There was an error initializing the detector '%1', because the detector was not found. Please report this problem to the Acquaman developers.").arg(detectorInitializeInfo()->name()));
		setFailed();
		return;
	}

	if(detector_->initializationState() == AMDetector::InitializationRequired){
		// connect to detector initialization signals
		connect(detector_, SIGNAL(initializing()), this, SLOT(onInitializeStarted()));
		connect(detector_, SIGNAL(initialized()), this, SLOT(onInitializeFinished()));

		detector_->initialize();
	}
	else{
		setStarted();
		setSucceeded();
	}
}
	connect(this, SIGNAL(requestStop(QtTaskHandle)), &lib, SLOT(stopAsync(QtTaskHandle)));
	connect(this, SIGNAL(requestUtilPingUnit(QtTaskHandle)), &lib, SLOT(utilPingUnitAsync(QtTaskHandle)));
	connect(this, SIGNAL(requestMeasureUncalibrated(QtTaskHandle,QtComplexData,QtComplexData,QtComplexData,QtComplexData,QtComplexData)),
			&lib, SLOT(measureUncalibratedAsync(QtTaskHandle, QtComplexData, QtComplexData, QtComplexData, QtComplexData, QtComplexData)));
	connect(this, SIGNAL(requestMeasure2PortCalibrated(QtTaskHandle,QtComplexData,QtComplexData,QtComplexData,QtComplexData)),
			&lib, SLOT(measure2PortCalibratedAsync(QtTaskHandle, QtComplexData, QtComplexData, QtComplexData, QtComplexData)));
	connect(this, SIGNAL(requestMeasureCalibrationStep(QtTaskHandle,QtCalibrationStep)),
			&lib, SLOT(measureCalibrationStepAsync(QtTaskHandle, QtCalibrationStep)));
	connect(this, SIGNAL(requestImportCalibrationAsync(QtTaskHandle,const double*,uint,QtComplexData,QtComplexData,QtComplexData,QtComplexData,QtComplexData,QtComplexData,QtComplexData,QtComplexData,QtComplexData,QtComplexData,QtComplexData,QtComplexData)),
			&lib, SLOT(importCalibrationAsync(QtTaskHandle,const double*,uint,QtComplexData,QtComplexData,QtComplexData,QtComplexData,QtComplexData,QtComplexData,QtComplexData,QtComplexData,QtComplexData,QtComplexData,QtComplexData,QtComplexData)));
	connect(this, SIGNAL(requestClearCalibration(QtTaskHandle)), &lib, SLOT(clearCalibrationAsync(QtTaskHandle)));

	// VNALibrary to MainWindow
	connect(&lib, SIGNAL(loadFinished(bool)), this, SLOT(onLoadFinished(bool)));
	connect(&lib, SIGNAL(initializeProgress(int,Qtvoidptr)), this, SLOT(onInitializeProgress(int,Qtvoidptr)));
	connect(&lib, SIGNAL(initializeFinished(QtErrCode)), this, SLOT(onInitializeFinished(QtErrCode)));
	connect(&lib, SIGNAL(startFinished(QtErrCode)), this, SLOT(onStartFinished(QtErrCode)));
	connect(&lib, SIGNAL(stopFinished(QtErrCode)), this, SLOT(onStopFinished(QtErrCode)));
	connect(&lib, SIGNAL(utilPingUnitFinished(QtErrCode)), this, SLOT(onUtilPingUnitFinished(QtErrCode)));
	connect(&lib, SIGNAL(measureUncalibratedFinished(QtErrCode)), this, SLOT(onMeasureUncalibratedFinished(QtErrCode)));
	connect(&lib, SIGNAL(measure2PortCalibratedFinished(QtErrCode)), this, SLOT(onMeasure2PortCalibratedFinished(QtErrCode)));
	connect(&lib, SIGNAL(measureCalibrationStepFinished(QtErrCode)), this, SLOT(onMeasureCalibrationStepFinished(QtErrCode)));
	connect(&lib, SIGNAL(importCalibrationFinished(QtErrCode)), this, SLOT(onImportCalibrationFinished(QtErrCode)));
	connect(&lib, SIGNAL(clearCalibrationFinished(QtErrCode)), this, SLOT(onClearCalibrationFinished(QtErrCode)));

	// Cal buttons
	connect(ui->doP1Open,  SIGNAL(clicked(bool)), this, SLOT(onP1Open(bool)));
	connect(ui->doP1Short, SIGNAL(clicked(bool)), this, SLOT(onP1Short(bool)));
	connect(ui->doP1Load,  SIGNAL(clicked(bool)), this, SLOT(onP1Load(bool)));
	connect(ui->doP2Open,  SIGNAL(clicked(bool)), this, SLOT(onP2Open(bool)));
	connect(ui->doP2Short, SIGNAL(clicked(bool)), this, SLOT(onP2Short(bool)));