implement push and pull -- now all the base functionality is in there
in one form or another