Make Key a trait
Add dev comments