cleaned up names and abstractions