protected boolean compressSchedule(double refTime, boolean execute) {
    	if(jobOrder != null) {
    		Collections.sort(waitingJobs, jobOrder);
    	}
    	
    	Iterator<SSGridlet> iterQueue = waitingJobs.iterator();
        while(iterQueue.hasNext()) {
        	SSGridlet queuedSgl = iterQueue.next();
        	
        	// Skip as it cannot get better than this.
        	if(queuedSgl.getStartTime() <= refTime) {
        		continue;
        	}

        	// jobs with reservation cannot be moved
        	if(!queuedSgl.hasReserved()) {
        		profile.addTimeSlot(queuedSgl.getStartTime(), 
        				queuedSgl.getActualFinishTime(), queuedSgl.getPERangeList());
        	
	        	if(execute && startGridlet(queuedSgl)) {
	        		iterQueue.remove();
	        	}
	        	else {
	        		enqueueGridlet(queuedSgl);
	        	}
        	}
        }
        
        return true;
    }