Not perfect but I have the start of a decent working user service.