everything except error catching is complete