my implemention of abstract server stuff