cleanups; outsourced a lot to libinternal.a