add push and pop functions