private void runPPD(ATMCell cell){
		boolean cellDropped = false;
		double dropProbability = 0.0;
		
		if (cell.getData().equals("")) {
			this.dropSamePacketCell = false;
		}
		
		if (this.dropSamePacketCell == false) {
			if (outputBuffer.size() > this.startDropAt) {
				if (outputBuffer.size() < this.maximumBufferCells) {
					dropProbability = (outputBuffer.size() - this.startDropAt) 
							/ (double)(this.maximumBufferCells - this.startDropAt);
				}
				else {
					dropProbability = 1;
				}
			}			
			if (dropProbability > 0) {
				double r = Math.random() * 1.0 / dropProbability;
				if (r <= 1.0) {
					cellDropped = true;
					this.dropSamePacketCell = true;
				}
			}
		}
		else {
			cellDropped = true;
		}		
		
		// 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");
		}
	}