All essential methods implemented, it needs more tests and to finish some details