move more logic to GPUB