new abstract, incorporate @rtobes suggestions