abstractions and rescaling added