refactored to use the service model again since it is apparently the best way to go