private static void shortPrintStackTrace2(final Throwable throwable, final StackTraceElement[] causedTrace, final Object cause)
	{
		final StackTraceElement[] trace = throwable.getStackTrace();
		int m = trace.length - 1, n = causedTrace.length - 1;
		while (m >= 0 && n >= 0 && trace[m].equals(causedTrace[n]))
		{
			m--;
			n--;
		}
		final int framesInCommon = trace.length - 1 - m;
		System.err.println("Caused by: " + cause);
		for (int i = 0; i <= m; i++)
			System.err.println("\tat " + trace[i]);
		if (framesInCommon != 0)
			System.err.println("\t... " + framesInCommon + " more");
		// Recurse if we have a cause
		final Throwable ourCause = throwable.getCause();
		if (ourCause != null)
			shortPrintStackTrace2(ourCause, trace, cause);
	}