refactored args into an interface with diff imlpementations