fully working and put into easy method calls