abstract and genrealize