working, not testes, input to do, revision to do