     
     override init(identifier: String?, source: UIViewController, destination: UIViewController) {
         
+        // By default, transition starts from the center of the screen,
+        // so let's find the center when segue is first initialized
         let centerX = UIScreen.mainScreen().bounds.width*0.5
         let centerY = UIScreen.mainScreen().bounds.height*0.5
         let centerOfScreen = CGPointMake(centerX, centerY)

    
    private func startAndEndPaths(shouldUnwind: Bool) -> (start: CGPathRef, end: CGPathRef) {
        
        // The hypothenuse is the diaonal of the screen
        // The diagonal of the screen is the diameter we
        // need the big circle to be to cover the whole screen
        let width = UIScreen.mainScreen().bounds.size.width
        let height = UIScreen.mainScreen().bounds.size.height
        let rw = width + fabs(width/2 - circleOrigin.x)

        let hyp = CGFloat(sqrtf(powf(Float(rw), 2) + powf(Float(rh), 2)))
        let dia = h1 + hyp
        
        //print("h1: \(h1) hyp: \(hyp) rw: \(rw) rh: \(rh) width: \(width) height: \(height)")
        
        // The two circle sizes we will animate to/from
        let path1 = UIBezierPath(ovalInRect: CGRectZero).CGPath
        let path2 = UIBezierPath(ovalInRect: CGRectMake(-dia/2, -dia/2, dia, dia)).CGPath
        
        // If shouldUnwind flag is true, we should go from big to small circle, or else go from small to big
        return shouldUnwind ? (path1, path2) : (path2, path1)
    }
    
    // MARK: Stack implementation
    
    // Simple stack implementation for keeping track of our view controllers
    private class Stack {
        
        private var stackArray = Array<UIViewController>()
