use more generic parameters