lots of changes to functionality and style