private static boolean propsEquals(Member member, Object o1, Object o2) {
		if (member == null) {
			throw new IllegalStateException("Member is null in propsEquals");
			//return false;
		}
		try {
			if (member instanceof Field) {
				Field f = (Field)member;
				System.out.println(String.format("EqualsUtils.propsEquals(%s)", f.getName()));
				Object val1 = f.get(o1);
				Object val2 = f.get(o2);
				return val1.equals(val2);
			} else if (member instanceof Method) {
				Method m = (Method)member;
				String methodName = m.getName();
				if (methodName.startsWith("set")) {
					// only test getters here - see TGS
					return true;
				}
				Object v1 = m.invoke(o1, new Object[0]);
				Object v2 = m.invoke(o2, new Object[0]);
				if (v1 == null && v2 == null) {
					return true;
				}
				if (v1 == null || v2 == null) {
					return false;
				}
				return v1.equals(v2);
			} else
				throw new IllegalArgumentException(
					"Internal error: member " + member + " neither Method nor Field");
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
		/*NOTREACHED*/
	}