Updated with BeforeKeyable, AfterKeyable, BeforePutable interfaces. Not confident in working state