                 self.currentCardViewController.cardView.removeGestureRecognizer(self.panGestureRecognizer)
                 if let previousCardViewController = self.previousCardViewController {
                     previousCardViewController.cardView.removeFromSuperview()
+                    previousCardViewController.cardView.isHidden = false
                     previousCardViewController.removeFromParentViewController()
                     self.unusedPlaceCardViewControllers.append(previousCardViewController)
                 }

            self.view.addSubview(newPreviousCardViewController!.cardView)
            self.addChildViewController(newPreviousCardViewController!)
            self.previousCardViewTrailingConstraint = newPreviousCardViewController!.cardView.trailingAnchor.constraint(equalTo: previousCardViewController.cardView.leadingAnchor, constant: -6)
            constraintsToActivate += [self.previousCardViewTrailingConstraint!]
        } else {
            previousCardViewTrailingConstraint = nil
        }

        NSLayoutConstraint.deactivate(constraintsToDeactivate)
        NSLayoutConstraint.activate(constraintsToActivate, translatesAutoresizingMaskIntoConstraints: false)


        UIView.animate(withDuration: animationDuration, delay: 0.0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0.0, options: .curveEaseOut, animations: {
            self.imageCarousel.alpha = 0
            previousCardImageCarousel.alpha = 1
            self.view.layoutIfNeeded()

            newNextCardViewController = dequeuePlaceCardViewController(forPlace:newNext)
            self.view.addSubview(newNextCardViewController!.cardView)
            self.addChildViewController(newNextCardViewController!)
            self.nextCardViewLeadingConstraint = newNextCardViewController!.cardView.leadingAnchor.constraint(equalTo: nextCardViewController.cardView.trailingAnchor, constant: cardViewSpacingConstant)
            constraintsToActivate += [newNextCardViewController!.cardView.topAnchor.constraint(equalTo: view.topAnchor, constant: cardViewTopAnchorConstant),
                                        newNextCardViewController!.cardView.widthAnchor.constraint(equalToConstant: cardViewWidthConstant),
                                        self.nextCardViewLeadingConstraint!]
        } else {
            nextCardViewLeadingConstraint = nil
            springDamping = 0.8
        }

        previousCardViewController?.cardView.isHidden = true

        // setup constraints for new previous card
        if let previousCardViewTrailingConstraint = previousCardViewTrailingConstraint {
            constraintsToDeactivate += [previousCardViewTrailingConstraint]
        }
        self.previousCardViewTrailingConstraint = currentCardViewController.cardView.trailingAnchor.constraint(equalTo: nextCardViewController.cardView.leadingAnchor, constant: -cardViewSpacingConstant)
        constraintsToActivate += [self.previousCardViewTrailingConstraint!]

        NSLayoutConstraint.deactivate(constraintsToDeactivate)
        NSLayoutConstraint.activate(constraintsToActivate, translatesAutoresizingMaskIntoConstraints: false)

        view.layoutIfNeeded()

        // setup constraints for new central card
        if let currentCardViewCenterXConstraint = currentCardViewCenterXConstraint {
            NSLayoutConstraint.deactivate([currentCardViewCenterXConstraint])
        }

        self.currentCardViewCenterXConstraint = nextCardViewController.cardView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor)
        NSLayoutConstraint.activate([self.currentCardViewCenterXConstraint!])

        // animate the constraint changes
        UIView.animate(withDuration: animationDuration, delay: 0.0, usingSpringWithDamping: springDamping, initialSpringVelocity: 0.0, options: .curveEaseOut, animations: {
            self.imageCarousel.alpha = 0
            nextCardImageCarousel.alpha = 1
            self.view.layoutIfNeeded()
