more hardware stuff
implementation basically written