complete. error checking to come.