Finished

Still can be improved