added tests, adjusted docs, and added :timeout feature