implemented several methods