this is the retarded abstractions