working so far
TODO: optimization
Does the deed