         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)
     }
     

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

        self._handleChange(.Insert([index], elT))
    }
    
    internal func _getItem(atIndexPath indexPath: [Int]) throws -> Any {
        let index = indexPath.first!
        let restIndexPath = Array(indexPath.dropFirst())
        if restIndexPath.count > 0 {
            let section = try self._getSubsection(atIndex: index)
            return try section._getItem(atIndexPath: restIndexPath)
        }
        return self._items[index]
    }
    
    internal func _removeItem(atIndexPath indexPath: [Int]) throws -> Any {
        let index = indexPath.first!
        let restIndexPath = Array(indexPath.dropFirst())
        if restIndexPath.count > 0 {
