generic types instead of object