generic form class