added generic types