try to standardize the functional object creation