public STTPoint getNextPoint() {
		long timeSinceLastPull = System.currentTimeMillis() - this.lastDataPullTime.getTime();
		
		if (timeSinceLastPull > this.pointPollingTimeMS) {
			ArrayList<STTPoint> newData = this.wrapperReference.getWrappedData();
			this.mostRecentPoints = newData;
			this.lastDataPullTime = new Timestamp(System.currentTimeMillis());
			
			this.emagePointQueue.addAll(newData);
			this.pointIterator = newData.iterator();
			return getNextPoint();
		} else {
			if (pointIterator == null || !pointIterator.hasNext()) {
				long sleepTime = 5 + this.pointPollingTimeMS - (System.currentTimeMillis() - this.lastDataPullTime.getTime());
				try {
					Thread.sleep(sleepTime);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				return getNextPoint();
			} else {
				return pointIterator.next();
			}
		}
	}