pid abstraction