public static <T extends Comparable<? super T>> List<T> merge(List<T> l1, List<T> l2){
		
		List<T> merged = new ArrayList<T>();		
		Iterator<T> i1 = l1.iterator(), i2=l2.iterator();
		
		for(T x1 = i1.next(), x2 = i2.next(); x1 != null || x2 != null;) {
			if( x1 == null || (x2 != null && x1.compareTo(x2) > 0)) {
				merged.add(x2);
				x2 = i2.hasNext() ? i2.next() : null;
			} else {
				merged.add(x1);
				x1 = i1.hasNext() ? i1.next() : null;
			}
		}		
		return merged;
	}