avoid constructing objects if not needed