public void run() {
		
		Iterator<Byte> iter;
		Byte tAck;
		byte rStack;
		boolean resend = false;
		
		while (true) {
			
			this.lock.lock();
			
			iter = this.oneToOne.keySet().iterator(); 
			while(iter.hasNext()) {
				rStack = iter.next();
				resend = true;
				tAck = this.ACKReceived.get(rStack);
				
				byte temp = 0;
				if(tAck != null){
					temp = tAck;
				} else {
					System.out.println("tAck == null");
					continue;
				}
				
				for (int i = 0; i < retransmitThreshold; i++) {
					if ((byte) tAck == (byte)this.oneToOne.get(rStack).getKey()) {
						resend = true;
						break;
					}
					tAck = this.nextSEQ(tAck);
				}
				
				if (resend == false && (byte) tAck != (byte) this.oneToOne.get(rStack).getKey()) {
					try {
						this.retransmit.invoke(Byte.valueOf(rStack), Byte.valueOf(this.nextSEQ(temp)));
					} catch (CallbackException e) {
						System.out.println("Error retransmitting!!");
						e.printStackTrace();
					}
				}
				
			}
			
			this.lock.unlock();
			try {
				Thread.sleep(checkTimeout);
			} catch (InterruptedException e) {}
			
		}
		
	}