implemented IPF as class