breaks apart _extract_msg for better push/pull implementation