On second func generic type changed from T to TRet
On processing refactored to using LINQ
Feature complete