added some generic approach