Added Generic implementation