private void runEPD(ATMCell cell){
		boolean cellDropped = false;
		
		if (cell.getData().equals("")) {
			this.dropSamePacketCell = false;
			
			double totalDropProbability = 1.0;
			int size = cell.getPacketData().getSize() / (48*8) + 1;
			
			for (int i = 0; i < size; i ++) {
				double dropProbability = 0.0;
				if (outputBuffer.size() + i > this.startDropAt) {
					if (outputBuffer.size() + i < this.maximumBufferCells) {
						dropProbability = (outputBuffer.size() + i - this.startDropAt) 
								/ (double)(this.maximumBufferCells - this.startDropAt);
					}
					else {
						dropProbability = 1;
					}
				}							
				totalDropProbability *= 1.0 - dropProbability;
			}
			totalDropProbability = 1.0 - totalDropProbability;
			
			if (totalDropProbability > 0) {
				double r = Math.random() * 1.0 / totalDropProbability;
				if (r <= 1.0) {
					cellDropped = true;
					this.dropSamePacketCell = true;
				}
			}
		}
		else {
			if (this.dropSamePacketCell) {
				cellDropped = true;
			}
		}		
		
		//outputBuffer.add(cell);
		
		// Output to the console what happened
		if(cellDropped)
			System.out.println("The cell " + cell.getTraceID() + " was dropped");
		else {
			outputBuffer.add(cell);
			if(this.trace)
				System.out.println("The cell " + cell.getTraceID() + " was added to the output queue");
		}
	}