added more abstractions