all this arg passing get gross :(