         return self[index]
     }
     
-    public func objectAtIndexPath<Z>(indexPath: [Int]) -> Z {
+    public func objectAtIndexPath(indexPath: [Int]) -> Any {
         return try! self._getItem(atIndexPath: indexPath)
     }
     
-    public func objectAtIndexPath<Z>(indexPath: NSIndexPath) -> Z {
+    public func objectAtIndexPath(indexPath: NSIndexPath) -> Any {
         return self.objectAtIndexPath(indexPath.asArray)
     }
     

internal protocol MutableCollectionSectionProtocol: WithID {
    var _anyItems: [Any] { get }
    func _getSubsection(atIndex _: Int) throws -> MutableCollectionSectionProtocol
    func _getItem<Z>(atIndexPath _: [Int]) throws -> Z
    func _removeItem<Z>(atIndexPath _: [Int]) throws -> Z
    func addParent(_: MutableCollectionSectionProtocol)
    func _handleChange(_: MutableCollectionChange)
    func _insert<Z>(_: Z, atIndexPath _: [Int]) throws
}

public enum MutableCollectionSectionError: ErrorType {

    public func removeAtIndexPath(indexPath: [Int]) {
        self.assertIndexPathNotEmpty(indexPath)
        self._transition {
            try! self._removeItem(atIndexPath: indexPath)
        }
    }
    
