implemented the methods found in header. still missing move