finish the basic functionality