separate gui from core