add tests && bugfix