private void onStartRun(){

	logPanel.add("Started exposing on <strong>" + _postedTarget + "</strong>", LogPanel.OK, true);

	if(_dataFormat.hasChanged()) _unsavedSettings = true;
	if(_unsavedSettings && !EXPERT_MODE) _disableAll();

	startRun_enabled        = false;
	stopRun_enabled         = true;
	postApp_enabled         = false;
	resetSDSU_enabled       = false;
	resetPCI_enabled        = false;
	setupServer_enabled     = false;
	powerOn_enabled         = false;
	powerOff_enabled        = false;
	
	_exposureTime.setText("0");
	_spaceUsed.setText("0");
	
	incrementRunNumber();
	
	// This is just a safety measure in case the program has been restarted and
	// a run started without an application being posted
	if(_nbytesPerImage == 0){
	    // Compute number of bytes and time per image for later use by exposure 
	    // meters 
	    _nbytesPerImage = nbytesPerImage();
	    _timePerImage   = speed(CYCLE_TIME_ONLY);						       
	    _nexposures     = numExpose;
	}
	
	_exposureMeter.restart();
	
	if(_nexposures > 0){
	    
	    // In this case we want to start a timer to check whether a run
	    // is still active. Start by estimating length of time to avoid
	    // polling the server more than necessary
	    // Timer is activated once per second
	    
	    int pollInterval = Math.max(1000, (int)(1000*_timePerImage));
	    int initialDelay = Math.max(2000, (int)(1000*(_nexposures*_timePerImage-60.)));
	    if(DEBUG){
		System.out.println("Run polling Interval = " + pollInterval + " millseconds");
		System.out.println("Initial delay        = " + initialDelay + " milliseconds");
	    }
	    if(_runActive != null) _runActive.stop();
	    _runActive = new Timer(pollInterval, _checkRun);
	    _runActive.setInitialDelay(initialDelay);
	    _runActive.start();
	    
	}	
	_setEnabledActions();
	_ucamServersOn.setEnabled(false);

    }