             PXLayout.setHeight(owner: receiptView, height: receiptView.frame.height).isActive = true
         }
 
-        //Add Top Custom Component
-        self.topCustomView = buildTopCustomView()
-        if let topCustomView = self.topCustomView {
-            topCustomView.clipsToBounds = true
-            contentView.addSubviewToBottom(topCustomView)
-            PXLayout.matchWidth(ofView: topCustomView).isActive = true
-            self.view.layoutIfNeeded()
-            PXLayout.setHeight(owner: topCustomView, height: topCustomView.frame.height).isActive = true
-        }
-
-        //Add Body
-        self.bodyView = self.buildBodyView()
-        if let bodyView = self.bodyView {
-            contentView.addSubviewToBottom(bodyView)
-            PXLayout.matchWidth(ofView: bodyView).isActive = true
-            PXLayout.centerHorizontally(view: bodyView).isActive = true
-        }
-
-        //Add Bottom Custom Component
-        self.bottomCustomView = buildBottomCustomView()
-        if let bottomCustomView = self.bottomCustomView {
-            bottomCustomView.clipsToBounds = true
-            contentView.addSubviewToBottom(bottomCustomView)
-            PXLayout.matchWidth(ofView: bottomCustomView).isActive = true
-            self.view.layoutIfNeeded()
-            PXLayout.setHeight(owner: bottomCustomView, height: bottomCustomView.frame.height).isActive = true
+        //Add Body + Custom Components
+        self.bodyContentView = buildBodyContentView()
+        if let bodyContentView = self.bodyContentView {
+            contentView.addSubviewToBottom(bodyContentView)
+            PXLayout.matchWidth(ofView: bodyContentView).isActive = true
+            PXLayout.centerHorizontally(view: bodyContentView).isActive = true
         }
 
         //Add Footer

    override open var screenId: String { return TrackingUtil.SCREEN_ID_PAYMENT_RESULT }

    let viewModel: PXResultViewModelInterface
    var headerView: UIView?
    var receiptView: UIView?
    var topCustomView: UIView?
    var bottomCustomView: UIView?
    var bodyView: UIView?

        return nil
    }

    func buildBodyContentView() -> UIView? {
        let view = PXComponentView()
        view.translatesAutoresizingMaskIntoConstraints = false

        if let topCustomView = buildTopCustomView() {
            self.topCustomView = topCustomView
            topCustomView.clipsToBounds = true
            view.addSubviewToBottom(topCustomView)
            PXLayout.matchWidth(ofView: topCustomView).isActive = true
            PXLayout.centerHorizontally(view: topCustomView).isActive = true
            topCustomView.layoutIfNeeded()
            PXLayout.setHeight(owner: topCustomView, height: topCustomView.frame.height).isActive = true
        }

        if let bodyView = buildBodyView() {
            self.bodyView = bodyView
            view.addSubviewToBottom(bodyView)
            PXLayout.matchWidth(ofView: bodyView).isActive = true
            PXLayout.centerHorizontally(view: bodyView).isActive = true
        }

        if let bottomCustomView = buildBottomCustomView() {
            self.bottomCustomView = bottomCustomView
            bottomCustomView.clipsToBounds = true
            view.addSubviewToBottom(bottomCustomView)
            PXLayout.matchWidth(ofView: bottomCustomView).isActive = true
            PXLayout.centerHorizontally(view: bottomCustomView).isActive = true
            bottomCustomView.layoutIfNeeded()
            PXLayout.setHeight(owner: bottomCustomView, height: bottomCustomView.frame.height).isActive = true
        }

        view.pinLastSubviewToBottom()?.isActive = true
        view.layoutIfNeeded()
        self.view.layoutIfNeeded()

        if view.getContentView().subviews.isEmpty {
            return nil
        }
        return view
    }

    func buildBodyView() -> UIView? {
        let bodyComponent = viewModel.buildBodyComponent()
        return bodyComponent?.render()
