also, I'd like it if we could remove the duplication, maybe with use `implements`