remove arguments from constructor
support lazy evalucation