     var newCellWrapperNewBounds = CGRect.zero
     newCellWrapperNewBounds.size = cellFrame.size
     let newCellWrapperNewBoundsValue = AnimationValue.bounds(newCellWrapperNewBounds)
+    
+    newCellShadowView.layer.anchorPoint = newCellWrapperLayer.anchorPoint
+    newCellShadowView.layer.position = newCellWrapperLayer.position
+    newCellShadowView.layer.bounds = .zero
+    
+    animate(newCellShadowView, newValue: newCellWrapperNewBoundsValue, item: .newCellShadow, delay: newCellAnimationDelay, index: index)
     animate(newCellWrapperView, newValue: newCellWrapperNewBoundsValue, item: .newCellWrapper, delay: newCellAnimationDelay, index: index)
+    
     
     // MARK: Animate cell snapshot
     let newCellSnapshotLayer = newCellSnapshotView.layer
-    newCellSnapshotLayer.anchorPoint = up ? CGPoint(x: 0, y: 1) : CGPoint(x: 0, y: 0)
-    newCellSnapshotLayer.position = up ? CGPoint(x: 0, y: cellFrame.height) : CGPoint(x: 0, y: 0)
-    var newCellSnapshotNewBounds = CGRect.zero
-    newCellSnapshotNewBounds.size = cellFrame.size
-    let newCellSnapshotNewBoundsValue = AnimationValue.bounds(newCellSnapshotNewBounds)
-    newCellSnapshotLayer.bounds = .zero
-    animate(newCellSnapshotView, newValue: newCellSnapshotNewBoundsValue, item: .newCell, delay: newCellAnimationDelay, index: index)
+    newCellSnapshotLayer.anchorPoint = .zero
+    newCellSnapshotLayer.position = up ? CGPoint(x: 0, y: -cellFrame.height) : CGPoint(x: 0, y: 0)
+    let newCellNewPosition = CGPoint.zero
+    let newCellNewValue = AnimationValue.position(newCellNewPosition)
+    animate(newCellSnapshotView, newValue: newCellNewValue, item: AnimationItem.newCell, delay: newCellAnimationDelay, index: index)
     
     // MARK: Animate new right side
     let position = CGPoint(x: cellFrame.maxX + space, y: cellFrame.minY)
     let newRightSideLayer = newRightSideSnapshotView.layer
     newRightSideLayer.anchorPoint = .zero
-    newRightSideLayer.position = CGPoint(x: bounds.width, y: cellFrame.minY)
+    newRightSideLayer.position = CGPoint(x: bounds.width + space, y: cellFrame.minY)
     let newRightSideNewValue = AnimationValue.position(position)
     let newRightSideDelay = duration + newCellAnimationDelay
     animate(newRightSideSnapshotView, newValue: newRightSideNewValue, item: .newRightSide, duration: config.animationDuration * 2, delay: newRightSideDelay, index: index)

    case .newCell: return 3
    case .newCellWrapper: return 4
    case .newRightSide: return 5
    }
  }
}

    let oldCellSnapshotView = UIImageView()
    
    let newCellWrapperView = UIView()
    let newCellShadowView = UIView()
    let newCellSnapshotView = UIImageView()
    let newRightSideSnapshotView = UIImageView()
    
