added edit abstraction