fixed #3
added variable argument support