             self.view.addSubview(newPreviousCardViewController!.cardView)
             self.addChildViewController(newPreviousCardViewController!)
             self.previousCardViewTrailingConstraint = newPreviousCardViewController!.cardView.trailingAnchor.constraint(equalTo: previousCardViewController.cardView.leadingAnchor, constant: -6)
-            constraintsToActivate += [self.previousCardViewTrailingConstraint!]
+            constraintsToActivate += [newPreviousCardViewController!.cardView.topAnchor.constraint(equalTo: view.topAnchor, constant: cardViewTopAnchorConstant),
+                                         newPreviousCardViewController!.cardView.widthAnchor.constraint(equalToConstant: cardViewWidthConstant),
+                                         self.previousCardViewTrailingConstraint!]
         } else {
             previousCardViewTrailingConstraint = nil
-        }
+            springDamping = 0.8
+        }
+
+        nextCardViewController?.cardView.isHidden = true
+
+        // deactivate and remove next view controller leading constraint
+        if let nextCardViewLeadingConstraint = nextCardViewLeadingConstraint {
+            constraintsToDeactivate += [nextCardViewLeadingConstraint]
+        }
+        self.nextCardViewLeadingConstraint = currentCardViewController.cardView.leadingAnchor.constraint(equalTo: previousCardViewController.cardView.trailingAnchor, constant: 6)
+        constraintsToActivate += [self.nextCardViewLeadingConstraint!]
 
         NSLayoutConstraint.deactivate(constraintsToDeactivate)
         NSLayoutConstraint.activate(constraintsToActivate, translatesAutoresizingMaskIntoConstraints: false)
 
-
-        UIView.animate(withDuration: animationDuration, delay: 0.0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0.0, options: .curveEaseOut, animations: {
+        view.layoutIfNeeded()
+
+        // deactivate and remove current view controller center constraint
+        if let currentCardViewCenterXConstraint = currentCardViewCenterXConstraint {
+            NSLayoutConstraint.deactivate([currentCardViewCenterXConstraint])
+        }
+
+        self.currentCardViewCenterXConstraint = previousCardViewController.cardView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor)
+        NSLayoutConstraint.activate([currentCardViewCenterXConstraint!])
+
+
+        UIView.animate(withDuration: animationDuration, delay: 0.0, usingSpringWithDamping: springDamping, initialSpringVelocity: 0.0, options: .curveEaseOut, animations: {
             self.imageCarousel.alpha = 0
             previousCardImageCarousel.alpha = 1
             self.view.layoutIfNeeded()

                self.currentCardViewController.cardView.removeGestureRecognizer(self.panGestureRecognizer)
                if let nextCardViewController = self.nextCardViewController {
                    nextCardViewController.cardView.removeFromSuperview()
                    nextCardViewController.removeFromParentViewController()
                    self.unusedPlaceCardViewControllers.append(nextCardViewController)
                }

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