         super.init(
             axis: .vertical,
             spacing: 2,
-            sublayouts: layouts
+            sublayouts: layouts,
+            config: { view in
+                // add action button here instead of to the image
+                if has_action_btn {
+                    let button = UIButton(type: .custom)
+                    let buttonPading = label_left_padding / 2
+                    button.frame = button.isHidden ? .zero :
+                        CGRect(x: view.bounds.size.width - buttonPading - action_btn_size.width,
+                               y: buttonPading,
+                               width: action_btn_size.width,
+                               height: action_btn_size.height)
+                    
+                    button.backgroundColor = action_btn_background_color
+                    
+                    button.setTitle(action_btn_txt, for: .normal)
+                    button.setTitle(action_btn_txt, for: .highlighted)
+                    
+                    button.titleLabel?.font = action_btn_font
+                    
+                    button.setTitleColor(action_btn_tint_color, for: .normal)
+                    button.setTitleColor(action_btn_tint_color, for: .highlighted)
+                    
+                    button.setImage(action_btn_icon, for: .normal)
+                    button.setImage(action_btn_icon, for: .highlighted)
+                    
+                    button.tintColor = action_btn_tint_color
+
+                    view.addSubview(button)
+                    button.tag = ViProductCardTag.actionBtnTag.rawValue
+                    // ensure the button is at the top of view
+                    button.layer.zPosition = 1
+                }
+            }
         )
         
     }

          err_img: UIImage?,
          
            // action button configuration e.g. like icon
            has_action_btn: Bool = true,
            action_btn_icon: UIImage? = ViIcon.like,
            action_btn_txt: String = "" , // default to empty
            action_btn_font: UIFont = ViTheme.sharedInstance.default_btn_font,

            img_contentMode: img_contentMode,
            loading_img: loading_img, err_img: err_img ,
            
            // NOTE: move action button out of imageview and into our product card
            has_action_btn: false,
            action_btn_icon: action_btn_icon,
            action_btn_txt: action_btn_txt ,
            action_btn_font: action_btn_font,
