method implementations