all functions implemented
all functions implemented