fix silly bug and refactored magic method __call