public void updateFrame(Region newFrame){


		double prevMinLat = 0;
		double prevMaxLat = 0;
		double prevMinLon = 0;
		double prevMaxLon = 0;		
		double minLat = 0;
		double maxLat = 0;
		double minLon = 0;
		double maxLon = 0;

		synchronized (newFrame) {		
			prevMinLat = _frame.getMinLat();
			prevMaxLat = _frame.getMaxLat();
			prevMinLon = _frame.getMinLon();
			prevMaxLon = _frame.getMaxLon();

			_frame = newFrame.copy();

			minLat = _frame.getMinLat();
			maxLat = _frame.getMaxLat();
			minLon = _frame.getMinLon();
			maxLon = _frame.getMaxLon();

		}
		
		if (maxLat < prevMinLat || minLat > prevMaxLat || minLon > prevMaxLon || maxLon < prevMinLon) {

			Region r = new Region(minLat, maxLat, minLon, maxLon);
			synchronized (_regionQueue) {
				_regionQueue.add(r);
				_regionQueue.notifyAll();
			}

		} else {

			if (maxLat > prevMaxLat) {
				Region r = new Region(prevMaxLat + 0.01, maxLat, minLon, maxLon);
				synchronized (_regionQueue) {
					_regionQueue.add(r);
					_regionQueue.notifyAll();
				}

			} if (minLat < prevMinLat) {
				Region r = new Region(minLat, prevMinLat - 0.01, minLon, maxLon);
				synchronized (_regionQueue) {
					_regionQueue.add(r);
					_regionQueue.notifyAll();
				}

			} if (minLon < prevMinLon) {
				Region r = new Region(Math.max(minLat, prevMinLat), Math.min(maxLat, prevMaxLat), minLon, prevMinLon - 0.01);
				synchronized (_regionQueue) {
					_regionQueue.add(r);
					_regionQueue.notifyAll();
				}

			} if (maxLon > prevMaxLon){
				Region r = new Region(Math.max(minLat, prevMinLat), Math.min(maxLat, prevMaxLat), prevMaxLon + 0.01, maxLon);
				synchronized (_regionQueue) {
					_regionQueue.add(r);
					_regionQueue.notifyAll();
				}

			}
		}
	}