implement shift & pop