completed - not perfect