I see like refactors in your refactor so I moved a bunch repetitous tableView:cellForRowAtIndexPath: into SFDataTableDataSource and made a method for creating the SFCellData object for a datasource. You can still override tableView:cellForRowAtIndexPath:, just like SFActionTableDataSource does. But you don't have to.