Changed a little on the structure and started the implementation but not finished yet.