Added generics for better return types