Feature/generic collection interfaces

**check this out**