public int compareTo(Object o) {
			Handler second = (Handler) o;

			/* First sort by start offsets, highest address first... */
			if (start.getAddr() != second.start.getAddr())
				/* this subtraction is save since addresses are only 16 bit */
				return second.start.getAddr() - start.getAddr();

			/*
			 * ...Second sort by end offsets, lowest address first... this will
			 * move the innermost blocks to the beginning.
			 */
			if (endAddr != second.endAddr)
				return endAddr - second.endAddr;

			/* ...Last sort by handler offsets, lowest first */
			if (handler.getAddr() != second.handler.getAddr())
				return handler.getAddr() - second.handler.getAddr();

			/*
			 * ...Last sort by typecode signature. Shouldn't happen to often.
			 */
			if (type == second.type)
				return 0;
			if (type == null)
				return -1;
			if (second.type == null)
				return 1;
			return type.getTypeSignature().compareTo(
					second.type.getTypeSignature());
		}