untested implement(i'll do it later)
beta