large merge back from seejohnrun