many modifications
new definitions