GP implementation