refactoring
new testcases
refactoring
bug fix