public List<Interval<Type>> query(Interval<?> target) {
		List<Interval<Type>> result = new ArrayList<Interval<Type>>();
		
		for(Entry<Interval<Type>, List<Interval<Type>>> entry : intervals.entrySet()) {
			if(entry.getKey().intersects(target))
				for(Interval<Type> interval : entry.getValue())
					result.add(interval);
			else if(entry.getKey().getStart() > target.getEnd())
				break;
		}
		
		if(target.getStart() < center && leftNode != null)
			result.addAll(leftNode.query(target));
		if(target.getEnd() > center && rightNode != null)
			result.addAll(rightNode.query(target));
		return result;
	}