public static Comparator printComparator() {
		if (Type.printComparator != null) {
			return (Type.printComparator);
		}

		Type.comparator = new Comparator() {
			public int compare(final Object o1, final Object o2) {
				// o1 < o2 : -1
				// o1 == o2 : 0
				// o1 > o2 : 1

				if (!(o1 instanceof Type)) {
					throw new IllegalArgumentException(o1 + " not a Type");
				}

				if (!(o2 instanceof Type)) {
					throw new IllegalArgumentException(o2 + " not a Type");
				}

				final Type t1 = (Type) o1;
				final Type t2 = (Type) o2;

				final String d1 = t1.toString();
				final String d2 = t2.toString();

				return (d1.compareToIgnoreCase(d2));

			}

			public boolean equals(final Object o) {
				if (o == this) {
					return (true);
				} else {
					return (false);
				}
			}
		};
		return (Type.comparator);
	}