Tryed to make it more encapsulated, I think I'm on to something but it may be a bit too complex for what it needs to be.