Added generic returns. Incomplete