diff --git a/BUILD.gn b/BUILD.gn
index 962e20c..a54f6e4 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -1179,10 +1179,8 @@
       "xfa/fwl/core/cfwl_themetext.h",
       "xfa/fwl/core/cfwl_widget.cpp",
       "xfa/fwl/core/cfwl_widget.h",
-      "xfa/fwl/core/cfwl_widgetimpproperties.h",
       "xfa/fwl/core/cfwl_widgetmgr.cpp",
       "xfa/fwl/core/cfwl_widgetmgr.h",
-      "xfa/fwl/core/cfwl_widgetproperties.cpp",
       "xfa/fwl/core/cfwl_widgetproperties.h",
       "xfa/fwl/core/cfx_barcode.cpp",
       "xfa/fwl/core/cfx_barcode.h",
diff --git a/xfa/fwl/core/cfwl_barcode.cpp b/xfa/fwl/core/cfwl_barcode.cpp
index d738f68..b12a875 100644
--- a/xfa/fwl/core/cfwl_barcode.cpp
+++ b/xfa/fwl/core/cfwl_barcode.cpp
@@ -26,7 +26,7 @@
   ASSERT(!m_pIface);
 
   m_pIface = pdfium::MakeUnique<IFWL_Barcode>(
-      m_pApp, m_pProperties->MakeWidgetImpProperties(&m_barcodeData));
+      m_pApp, pdfium::MakeUnique<CFWL_WidgetProperties>(&m_barcodeData));
 
   CFWL_Widget::Initialize();
 }
diff --git a/xfa/fwl/core/cfwl_barcode.h b/xfa/fwl/core/cfwl_barcode.h
index 8df93ff6..b5642d2 100644
--- a/xfa/fwl/core/cfwl_barcode.h
+++ b/xfa/fwl/core/cfwl_barcode.h
@@ -12,7 +12,6 @@
 #include "xfa/fwl/core/ifwl_barcode.h"
 
 class CFWL_Widget;
-class CFWL_WidgetProperties;
 
 class CFWL_Barcode : public CFWL_Edit {
  public:
diff --git a/xfa/fwl/core/cfwl_checkbox.cpp b/xfa/fwl/core/cfwl_checkbox.cpp
index 4fbb048..9baea41 100644
--- a/xfa/fwl/core/cfwl_checkbox.cpp
+++ b/xfa/fwl/core/cfwl_checkbox.cpp
@@ -27,7 +27,7 @@
   ASSERT(!m_pIface);
 
   m_pIface = pdfium::MakeUnique<IFWL_CheckBox>(
-      m_pApp, m_pProperties->MakeWidgetImpProperties(&m_checkboxData));
+      m_pApp, pdfium::MakeUnique<CFWL_WidgetProperties>(&m_checkboxData));
 
   CFWL_Widget::Initialize();
 }
diff --git a/xfa/fwl/core/cfwl_combobox.cpp b/xfa/fwl/core/cfwl_combobox.cpp
index e8dde06..60b6e50 100644
--- a/xfa/fwl/core/cfwl_combobox.cpp
+++ b/xfa/fwl/core/cfwl_combobox.cpp
@@ -32,7 +32,7 @@
   ASSERT(!m_pIface);
 
   m_pIface = pdfium::MakeUnique<IFWL_ComboBox>(
-      m_pApp, m_pProperties->MakeWidgetImpProperties(&m_comboBoxData));
+      m_pApp, pdfium::MakeUnique<CFWL_WidgetProperties>(&m_comboBoxData));
 
   CFWL_Widget::Initialize();
 }
diff --git a/xfa/fwl/core/cfwl_combobox.h b/xfa/fwl/core/cfwl_combobox.h
index 9511a36..c85b0e7 100644
--- a/xfa/fwl/core/cfwl_combobox.h
+++ b/xfa/fwl/core/cfwl_combobox.h
@@ -13,7 +13,6 @@
 #include "xfa/fwl/core/cfwl_widget.h"
 #include "xfa/fwl/core/ifwl_combobox.h"
 
-class CFWL_WidgetProperties;
 class IFWL_ComboBoxDP;
 class CFWL_ComboBoxDP;
 class CFWL_ComboBoxItem;
diff --git a/xfa/fwl/core/cfwl_datetimepicker.cpp b/xfa/fwl/core/cfwl_datetimepicker.cpp
index 8e377c2..fba04b6 100644
--- a/xfa/fwl/core/cfwl_datetimepicker.cpp
+++ b/xfa/fwl/core/cfwl_datetimepicker.cpp
@@ -30,7 +30,7 @@
   ASSERT(!m_pIface);
 
   m_pIface = pdfium::MakeUnique<IFWL_DateTimePicker>(
-      m_pApp, m_pProperties->MakeWidgetImpProperties(&m_DateTimePickerDP));
+      m_pApp, pdfium::MakeUnique<CFWL_WidgetProperties>(&m_DateTimePickerDP));
 
   CFWL_Widget::Initialize();
 }
diff --git a/xfa/fwl/core/cfwl_edit.cpp b/xfa/fwl/core/cfwl_edit.cpp
index 3d19e57..579442b 100644
--- a/xfa/fwl/core/cfwl_edit.cpp
+++ b/xfa/fwl/core/cfwl_edit.cpp
@@ -31,7 +31,7 @@
   ASSERT(!m_pIface);
 
   m_pIface = pdfium::MakeUnique<IFWL_Edit>(
-      m_pApp, m_pProperties->MakeWidgetImpProperties(nullptr), nullptr);
+      m_pApp, pdfium::MakeUnique<CFWL_WidgetProperties>(), nullptr);
 
   CFWL_Widget::Initialize();
 }
diff --git a/xfa/fwl/core/cfwl_edit.h b/xfa/fwl/core/cfwl_edit.h
index 8fc0a13..2f2983b 100644
--- a/xfa/fwl/core/cfwl_edit.h
+++ b/xfa/fwl/core/cfwl_edit.h
@@ -12,7 +12,6 @@
 #include "xfa/fwl/core/cfwl_widget.h"
 #include "xfa/fwl/core/ifwl_edit.h"
 
-class CFWL_WidgetProperties;
 class IFDE_TxtEdtDoRecord;
 
 class CFWL_Edit : public CFWL_Widget {
diff --git a/xfa/fwl/core/cfwl_listbox.cpp b/xfa/fwl/core/cfwl_listbox.cpp
index f7e1671..8590540 100644
--- a/xfa/fwl/core/cfwl_listbox.cpp
+++ b/xfa/fwl/core/cfwl_listbox.cpp
@@ -27,7 +27,7 @@
   ASSERT(!m_pIface);
 
   m_pIface = pdfium::MakeUnique<IFWL_ListBox>(
-      m_pApp, m_pProperties->MakeWidgetImpProperties(&m_ListBoxDP), nullptr);
+      m_pApp, pdfium::MakeUnique<CFWL_WidgetProperties>(&m_ListBoxDP), nullptr);
 
   CFWL_Widget::Initialize();
 }
diff --git a/xfa/fwl/core/cfwl_picturebox.cpp b/xfa/fwl/core/cfwl_picturebox.cpp
index dcd716c..a0e1c30 100644
--- a/xfa/fwl/core/cfwl_picturebox.cpp
+++ b/xfa/fwl/core/cfwl_picturebox.cpp
@@ -18,7 +18,7 @@
   ASSERT(!m_pIface);
 
   m_pIface = pdfium::MakeUnique<IFWL_PictureBox>(
-      m_pApp, m_pProperties->MakeWidgetImpProperties(&m_PictureBoxDP));
+      m_pApp, pdfium::MakeUnique<CFWL_WidgetProperties>(&m_PictureBoxDP));
 
   CFWL_Widget::Initialize();
 }
diff --git a/xfa/fwl/core/cfwl_pushbutton.cpp b/xfa/fwl/core/cfwl_pushbutton.cpp
index 1510cc1..1b98d25 100644
--- a/xfa/fwl/core/cfwl_pushbutton.cpp
+++ b/xfa/fwl/core/cfwl_pushbutton.cpp
@@ -18,7 +18,7 @@
   ASSERT(!m_pIface);
 
   m_pIface = pdfium::MakeUnique<IFWL_PushButton>(
-      m_pApp, m_pProperties->MakeWidgetImpProperties(&m_buttonData));
+      m_pApp, pdfium::MakeUnique<CFWL_WidgetProperties>(&m_buttonData));
 
   CFWL_Widget::Initialize();
 }
diff --git a/xfa/fwl/core/cfwl_widget.cpp b/xfa/fwl/core/cfwl_widget.cpp
index 0748037..98f73cf 100644
--- a/xfa/fwl/core/cfwl_widget.cpp
+++ b/xfa/fwl/core/cfwl_widget.cpp
@@ -19,9 +19,7 @@
 #define FWL_WGT_CalcMultiLineDefWidth 120.0f
 
 CFWL_Widget::CFWL_Widget(const IFWL_App* app)
-    : m_pApp(app),
-      m_pWidgetMgr(app->GetWidgetMgr()),
-      m_pProperties(new CFWL_WidgetProperties) {
+    : m_pApp(app), m_pWidgetMgr(app->GetWidgetMgr()) {
   ASSERT(m_pWidgetMgr);
 }
 
diff --git a/xfa/fwl/core/cfwl_widget.h b/xfa/fwl/core/cfwl_widget.h
index 0c590e2..b3c09f9 100644
--- a/xfa/fwl/core/cfwl_widget.h
+++ b/xfa/fwl/core/cfwl_widget.h
@@ -10,7 +10,6 @@
 #include <memory>
 
 #include "xfa/fwl/core/cfwl_event.h"
-#include "xfa/fwl/core/cfwl_widgetproperties.h"
 #include "xfa/fwl/core/ifwl_widget.h"
 
 class CFWL_Event;
@@ -60,7 +59,6 @@
   const IFWL_App* m_pApp;
   std::unique_ptr<IFWL_Widget> m_pIface;
   CFWL_WidgetMgr* const m_pWidgetMgr;
-  std::unique_ptr<CFWL_WidgetProperties> m_pProperties;
 };
 
 #endif  // XFA_FWL_CORE_CFWL_WIDGET_H_
diff --git a/xfa/fwl/core/cfwl_widgetimpproperties.h b/xfa/fwl/core/cfwl_widgetimpproperties.h
deleted file mode 100644
index 4d7dee6..0000000
--- a/xfa/fwl/core/cfwl_widgetimpproperties.h
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2016 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef XFA_FWL_CORE_CFWL_WIDGETIMPPROPERTIES_H_
-#define XFA_FWL_CORE_CFWL_WIDGETIMPPROPERTIES_H_
-
-#include "core/fxcrt/fx_coordinates.h"
-#include "core/fxcrt/fx_system.h"
-#include "xfa/fwl/core/fwl_widgetdef.h"
-
-class IFWL_DataProvider;
-class IFWL_ThemeProvider;
-class IFWL_Widget;
-
-class CFWL_WidgetImpProperties {
- public:
-  CFWL_WidgetImpProperties();
-  ~CFWL_WidgetImpProperties();
-  CFWL_WidgetImpProperties(const CFWL_WidgetImpProperties& other);
-
-  CFX_Matrix m_ctmOnParent;
-  CFX_RectF m_rtWidget;
-  uint32_t m_dwStyles;
-  uint32_t m_dwStyleExes;
-  uint32_t m_dwStates;
-  IFWL_ThemeProvider* m_pThemeProvider;
-  IFWL_DataProvider* m_pDataProvider;
-  IFWL_Widget* m_pParent;
-  IFWL_Widget* m_pOwner;
-};
-
-inline CFWL_WidgetImpProperties::CFWL_WidgetImpProperties()
-    : m_dwStyles(FWL_WGTSTYLE_Child),
-      m_dwStyleExes(0),
-      m_dwStates(0),
-      m_pThemeProvider(nullptr),
-      m_pDataProvider(nullptr),
-      m_pParent(nullptr),
-      m_pOwner(nullptr) {
-  m_ctmOnParent.SetIdentity();
-  m_rtWidget.Set(0, 0, 0, 0);
-}
-
-inline CFWL_WidgetImpProperties::~CFWL_WidgetImpProperties() {}
-
-inline CFWL_WidgetImpProperties::CFWL_WidgetImpProperties(
-    const CFWL_WidgetImpProperties& other) = default;
-
-#endif  // XFA_FWL_CORE_CFWL_WIDGETIMPPROPERTIES_H_
diff --git a/xfa/fwl/core/cfwl_widgetproperties.cpp b/xfa/fwl/core/cfwl_widgetproperties.cpp
deleted file mode 100644
index fae1ff6..0000000
--- a/xfa/fwl/core/cfwl_widgetproperties.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2016 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "xfa/fwl/core/cfwl_widgetproperties.h"
-
-#include "xfa/fwl/core/cfwl_widget.h"
-
-CFWL_WidgetProperties::CFWL_WidgetProperties()
-    : m_dwStyles(FWL_WGTSTYLE_Child),
-      m_dwStyleExes(0),
-      m_dwStates(0),
-      m_pParent(nullptr),
-      m_pOwner(nullptr) {
-  m_rtWidget.Set(0, 0, 0, 0);
-}
-
-CFWL_WidgetProperties::~CFWL_WidgetProperties() {}
-
-CFWL_WidgetProperties::CFWL_WidgetProperties(
-    const CFWL_WidgetProperties& other) = default;
-
-CFWL_WidgetImpProperties CFWL_WidgetProperties::MakeWidgetImpProperties(
-    IFWL_DataProvider* pDataProvider) const {
-  CFWL_WidgetImpProperties result;
-  result.m_ctmOnParent = m_ctmOnParent;
-  result.m_rtWidget = m_rtWidget;
-  result.m_dwStyles = m_dwStyles;
-  result.m_dwStyleExes = m_dwStyleExes;
-  result.m_dwStates = m_dwStates;
-  if (m_pParent)
-    result.m_pParent = m_pParent->GetWidget();
-  if (m_pOwner)
-    result.m_pOwner = m_pOwner->GetWidget();
-  result.m_pDataProvider = pDataProvider;
-  return result;
-}
diff --git a/xfa/fwl/core/cfwl_widgetproperties.h b/xfa/fwl/core/cfwl_widgetproperties.h
index afadfc4..21040b9 100644
--- a/xfa/fwl/core/cfwl_widgetproperties.h
+++ b/xfa/fwl/core/cfwl_widgetproperties.h
@@ -8,30 +8,46 @@
 #define XFA_FWL_CORE_CFWL_WIDGETPROPERTIES_H_
 
 #include "core/fxcrt/fx_coordinates.h"
-#include "core/fxcrt/fx_string.h"
 #include "core/fxcrt/fx_system.h"
-#include "xfa/fwl/core/cfwl_widgetimpproperties.h"
+#include "xfa/fwl/core/fwl_widgetdef.h"
 
-class CFWL_Widget;
 class IFWL_DataProvider;
+class IFWL_ThemeProvider;
+class IFWL_Widget;
 
 class CFWL_WidgetProperties {
  public:
   CFWL_WidgetProperties();
+  CFWL_WidgetProperties(IFWL_DataProvider* dataProvider);
   ~CFWL_WidgetProperties();
-  CFWL_WidgetProperties(const CFWL_WidgetProperties& other);
 
-  CFWL_WidgetImpProperties MakeWidgetImpProperties(
-      IFWL_DataProvider* pDataProvider) const;
-
-  CFX_WideString m_wsWindowclass;
   CFX_Matrix m_ctmOnParent;
   CFX_RectF m_rtWidget;
   uint32_t m_dwStyles;
   uint32_t m_dwStyleExes;
   uint32_t m_dwStates;
-  CFWL_Widget* m_pParent;
-  CFWL_Widget* m_pOwner;
+  IFWL_ThemeProvider* m_pThemeProvider;
+  IFWL_DataProvider* m_pDataProvider;
+  IFWL_Widget* m_pParent;
+  IFWL_Widget* m_pOwner;
 };
 
+inline CFWL_WidgetProperties::CFWL_WidgetProperties()
+    : CFWL_WidgetProperties(nullptr) {}
+
+inline CFWL_WidgetProperties::CFWL_WidgetProperties(
+    IFWL_DataProvider* dataProvider)
+    : m_dwStyles(FWL_WGTSTYLE_Child),
+      m_dwStyleExes(0),
+      m_dwStates(0),
+      m_pThemeProvider(nullptr),
+      m_pDataProvider(dataProvider),
+      m_pParent(nullptr),
+      m_pOwner(nullptr) {
+  m_ctmOnParent.SetIdentity();
+  m_rtWidget.Set(0, 0, 0, 0);
+}
+
+inline CFWL_WidgetProperties::~CFWL_WidgetProperties() {}
+
 #endif  // XFA_FWL_CORE_CFWL_WIDGETPROPERTIES_H_
diff --git a/xfa/fwl/core/ifwl_barcode.cpp b/xfa/fwl/core/ifwl_barcode.cpp
index 9495dd9..3fb430d 100644
--- a/xfa/fwl/core/ifwl_barcode.cpp
+++ b/xfa/fwl/core/ifwl_barcode.cpp
@@ -14,9 +14,10 @@
 #include "xfa/fwl/core/ifwl_themeprovider.h"
 
 IFWL_Barcode::IFWL_Barcode(const IFWL_App* app,
-                           const CFWL_WidgetImpProperties& properties)
-    : IFWL_Edit(app, properties, nullptr), m_dwStatus(0), m_type(BC_UNKNOWN) {
-}
+                           std::unique_ptr<CFWL_WidgetProperties> properties)
+    : IFWL_Edit(app, std::move(properties), nullptr),
+      m_dwStatus(0),
+      m_type(BC_UNKNOWN) {}
 
 IFWL_Barcode::~IFWL_Barcode() {}
 
diff --git a/xfa/fwl/core/ifwl_barcode.h b/xfa/fwl/core/ifwl_barcode.h
index 36befa4..a0bdc75 100644
--- a/xfa/fwl/core/ifwl_barcode.h
+++ b/xfa/fwl/core/ifwl_barcode.h
@@ -13,7 +13,7 @@
 #include "xfa/fwl/core/ifwl_scrollbar.h"
 #include "xfa/fxbarcode/BC_Library.h"
 
-class CFWL_WidgetImpProperties;
+class CFWL_WidgetProperties;
 class CFX_Barcode;
 class IFWL_Widget;
 
@@ -58,7 +58,7 @@
 class IFWL_Barcode : public IFWL_Edit {
  public:
   explicit IFWL_Barcode(const IFWL_App* app,
-                        const CFWL_WidgetImpProperties& properties);
+                        std::unique_ptr<CFWL_WidgetProperties> properties);
   ~IFWL_Barcode() override;
 
   // IFWL_Widget
diff --git a/xfa/fwl/core/ifwl_caret.cpp b/xfa/fwl/core/ifwl_caret.cpp
index 4e9b7f6..8971c2e 100644
--- a/xfa/fwl/core/ifwl_caret.cpp
+++ b/xfa/fwl/core/ifwl_caret.cpp
@@ -8,15 +8,15 @@
 
 #include "third_party/base/ptr_util.h"
 #include "xfa/fwl/core/cfwl_themebackground.h"
-#include "xfa/fwl/core/cfwl_widgetimpproperties.h"
+#include "xfa/fwl/core/cfwl_widgetproperties.h"
 #include "xfa/fwl/core/fwl_noteimp.h"
 #include "xfa/fwl/core/ifwl_caret.h"
 #include "xfa/fwl/core/ifwl_themeprovider.h"
 
 IFWL_Caret::IFWL_Caret(const IFWL_App* app,
-                       const CFWL_WidgetImpProperties& properties,
+                       std::unique_ptr<CFWL_WidgetProperties> properties,
                        IFWL_Widget* pOuter)
-    : IFWL_Widget(app, properties, pOuter),
+    : IFWL_Widget(app, std::move(properties), pOuter),
       m_pTimer(new IFWL_Caret::Timer(this)),
       m_pTimerInfo(nullptr),
       m_dwElapse(400),
diff --git a/xfa/fwl/core/ifwl_caret.h b/xfa/fwl/core/ifwl_caret.h
index 7d91d57..5a02d42 100644
--- a/xfa/fwl/core/ifwl_caret.h
+++ b/xfa/fwl/core/ifwl_caret.h
@@ -13,7 +13,7 @@
 #include "xfa/fwl/core/ifwl_widget.h"
 #include "xfa/fxgraphics/cfx_color.h"
 
-class CFWL_WidgetImpProperties;
+class CFWL_WidgetProperties;
 class IFWL_Widget;
 
 #define FWL_STATE_CAT_HightLight 1
@@ -21,7 +21,7 @@
 class IFWL_Caret : public IFWL_Widget {
  public:
   IFWL_Caret(const IFWL_App* app,
-             const CFWL_WidgetImpProperties& properties,
+             std::unique_ptr<CFWL_WidgetProperties> properties,
              IFWL_Widget* pOuter);
   ~IFWL_Caret() override;
 
diff --git a/xfa/fwl/core/ifwl_checkbox.cpp b/xfa/fwl/core/ifwl_checkbox.cpp
index f03b864..a8f4936 100644
--- a/xfa/fwl/core/ifwl_checkbox.cpp
+++ b/xfa/fwl/core/ifwl_checkbox.cpp
@@ -26,8 +26,8 @@
 }  // namespace
 
 IFWL_CheckBox::IFWL_CheckBox(const IFWL_App* app,
-                             const CFWL_WidgetImpProperties& properties)
-    : IFWL_Widget(app, properties, nullptr),
+                             std::unique_ptr<CFWL_WidgetProperties> properties)
+    : IFWL_Widget(app, std::move(properties), nullptr),
       m_dwTTOStyles(FDE_TTOSTYLE_SingleLine),
       m_iTTOAlign(FDE_TTOALIGNMENT_Center),
       m_bBtnDown(false) {
diff --git a/xfa/fwl/core/ifwl_checkbox.h b/xfa/fwl/core/ifwl_checkbox.h
index c08d845..19ab626 100644
--- a/xfa/fwl/core/ifwl_checkbox.h
+++ b/xfa/fwl/core/ifwl_checkbox.h
@@ -8,7 +8,7 @@
 #define XFA_FWL_CORE_IFWL_CHECKBOX_H_
 
 #include "xfa/fwl/core/cfwl_event.h"
-#include "xfa/fwl/core/cfwl_widgetimpproperties.h"
+#include "xfa/fwl/core/cfwl_widgetproperties.h"
 #include "xfa/fwl/core/ifwl_dataprovider.h"
 #include "xfa/fwl/core/ifwl_widget.h"
 
@@ -44,7 +44,7 @@
 #define FWL_STATE_CKB_CheckMask (3L << (FWL_WGTSTATE_MAX + 2))
 
 class CFWL_MsgMouse;
-class CFWL_WidgetImpProperties;
+class CFWL_WidgetProperties;
 class IFWL_Widget;
 
 FWL_EVENT_DEF(CFWL_EvtCkbCheckStateChanged, CFWL_EventType::CheckStateChanged)
@@ -57,7 +57,7 @@
 class IFWL_CheckBox : public IFWL_Widget {
  public:
   explicit IFWL_CheckBox(const IFWL_App* app,
-                         const CFWL_WidgetImpProperties& properties);
+                         std::unique_ptr<CFWL_WidgetProperties> properties);
   ~IFWL_CheckBox() override;
 
   // IFWL_Widget
diff --git a/xfa/fwl/core/ifwl_combobox.cpp b/xfa/fwl/core/ifwl_combobox.cpp
index 4be684a..6d0a814 100644
--- a/xfa/fwl/core/ifwl_combobox.cpp
+++ b/xfa/fwl/core/ifwl_combobox.cpp
@@ -23,8 +23,8 @@
 #include "xfa/fwl/core/ifwl_themeprovider.h"
 
 IFWL_ComboBox::IFWL_ComboBox(const IFWL_App* app,
-                             const CFWL_WidgetImpProperties& properties)
-    : IFWL_Widget(app, properties, nullptr),
+                             std::unique_ptr<CFWL_WidgetProperties> properties)
+    : IFWL_Widget(app, std::move(properties), nullptr),
       m_pComboBoxProxy(nullptr),
       m_bLButtonDown(false),
       m_iCurSel(-1),
@@ -41,17 +41,17 @@
     return;
   }
 
-  CFWL_WidgetImpProperties prop;
-  prop.m_pThemeProvider = m_pProperties->m_pThemeProvider;
-  prop.m_dwStyles |= FWL_WGTSTYLE_Border | FWL_WGTSTYLE_VScroll;
+  auto prop =
+      pdfium::MakeUnique<CFWL_WidgetProperties>(m_pProperties->m_pDataProvider);
+  prop->m_pThemeProvider = m_pProperties->m_pThemeProvider;
+  prop->m_dwStyles |= FWL_WGTSTYLE_Border | FWL_WGTSTYLE_VScroll;
   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CMB_ListItemIconText)
-    prop.m_dwStyleExes |= FWL_STYLEEXT_LTB_Icon;
+    prop->m_dwStyleExes |= FWL_STYLEEXT_LTB_Icon;
 
-  prop.m_pDataProvider = m_pProperties->m_pDataProvider;
-  m_pListBox.reset(new IFWL_ComboList(m_pOwnerApp, prop, this));
+  m_pListBox.reset(new IFWL_ComboList(m_pOwnerApp, std::move(prop), this));
   if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CMB_DropDown) && !m_pEdit) {
-    CFWL_WidgetImpProperties prop2;
-    m_pEdit.reset(new IFWL_ComboEdit(m_pOwnerApp, prop2, this));
+    m_pEdit.reset(new IFWL_ComboEdit(
+        m_pOwnerApp, pdfium::MakeUnique<CFWL_WidgetProperties>(), this));
     m_pEdit->SetOuter(this);
   }
   if (m_pEdit)
@@ -99,8 +99,8 @@
   bool bAddDropDown = !!(dwStylesExAdded & FWL_STYLEEXT_CMB_DropDown);
   bool bRemoveDropDown = !!(dwStylesExRemoved & FWL_STYLEEXT_CMB_DropDown);
   if (bAddDropDown && !m_pEdit) {
-    CFWL_WidgetImpProperties prop;
-    m_pEdit.reset(new IFWL_ComboEdit(m_pOwnerApp, prop, nullptr));
+    m_pEdit.reset(new IFWL_ComboEdit(
+        m_pOwnerApp, pdfium::MakeUnique<CFWL_WidgetProperties>(), nullptr));
     m_pEdit->SetOuter(this);
     m_pEdit->SetParent(this);
   } else if (bRemoveDropDown && m_pEdit) {
@@ -693,13 +693,13 @@
   if (!m_pListBox)
     return;
 
-  CFWL_WidgetImpProperties propForm;
-  propForm.m_pOwner = this;
-  propForm.m_dwStyles = FWL_WGTSTYLE_Popup;
-  propForm.m_dwStates = FWL_WGTSTATE_Invisible;
+  auto prop = pdfium::MakeUnique<CFWL_WidgetProperties>();
+  prop->m_pOwner = this;
+  prop->m_dwStyles = FWL_WGTSTYLE_Popup;
+  prop->m_dwStates = FWL_WGTSTATE_Invisible;
 
-  m_pComboBoxProxy =
-      new IFWL_ComboBoxProxy(this, m_pOwnerApp, propForm, m_pListBox.get());
+  m_pComboBoxProxy = new IFWL_ComboBoxProxy(this, m_pOwnerApp, std::move(prop),
+                                            m_pListBox.get());
   m_pListBox->SetParent(m_pComboBoxProxy);
 }
 
@@ -707,23 +707,23 @@
   if (m_pListBox)
     return;
 
-  CFWL_WidgetImpProperties prop;
-  prop.m_pParent = this;
-  prop.m_dwStyles = FWL_WGTSTYLE_Border | FWL_WGTSTYLE_VScroll;
-  prop.m_dwStates = FWL_WGTSTATE_Invisible;
-  prop.m_pDataProvider = m_pProperties->m_pDataProvider;
-  prop.m_pThemeProvider = m_pProperties->m_pThemeProvider;
-  m_pListBox.reset(new IFWL_ComboList(m_pOwnerApp, prop, this));
+  auto prop =
+      pdfium::MakeUnique<CFWL_WidgetProperties>(m_pProperties->m_pDataProvider);
+  prop->m_pParent = this;
+  prop->m_dwStyles = FWL_WGTSTYLE_Border | FWL_WGTSTYLE_VScroll;
+  prop->m_dwStates = FWL_WGTSTATE_Invisible;
+  prop->m_pThemeProvider = m_pProperties->m_pThemeProvider;
+  m_pListBox.reset(new IFWL_ComboList(m_pOwnerApp, std::move(prop), this));
 }
 
 void IFWL_ComboBox::DisForm_InitComboEdit() {
   if (m_pEdit)
     return;
 
-  CFWL_WidgetImpProperties prop;
-  prop.m_pParent = this;
-  prop.m_pThemeProvider = m_pProperties->m_pThemeProvider;
-  m_pEdit.reset(new IFWL_ComboEdit(m_pOwnerApp, prop, this));
+  auto prop = pdfium::MakeUnique<CFWL_WidgetProperties>();
+  prop->m_pParent = this;
+  prop->m_pThemeProvider = m_pProperties->m_pThemeProvider;
+  m_pEdit.reset(new IFWL_ComboEdit(m_pOwnerApp, std::move(prop), this));
   m_pEdit->SetOuter(this);
 }
 
diff --git a/xfa/fwl/core/ifwl_combobox.h b/xfa/fwl/core/ifwl_combobox.h
index 7d11541..8de93a6 100644
--- a/xfa/fwl/core/ifwl_combobox.h
+++ b/xfa/fwl/core/ifwl_combobox.h
@@ -11,7 +11,7 @@
 #include "xfa/fwl/core/ifwl_listbox.h"
 #include "xfa/fxgraphics/cfx_graphics.h"
 
-class CFWL_WidgetImpProperties;
+class CFWL_WidgetProperties;
 class IFWL_ComboBox;
 class IFWL_ComboBoxProxy;
 class IFWL_ComboEdit;
@@ -80,7 +80,7 @@
 class IFWL_ComboBox : public IFWL_Widget {
  public:
   explicit IFWL_ComboBox(const IFWL_App* app,
-                         const CFWL_WidgetImpProperties& properties);
+                         std::unique_ptr<CFWL_WidgetProperties> properties);
   ~IFWL_ComboBox() override;
 
   // IFWL_Widget
diff --git a/xfa/fwl/core/ifwl_comboboxproxy.cpp b/xfa/fwl/core/ifwl_comboboxproxy.cpp
index 0675a3b..c8d1f79 100644
--- a/xfa/fwl/core/ifwl_comboboxproxy.cpp
+++ b/xfa/fwl/core/ifwl_comboboxproxy.cpp
@@ -13,9 +13,9 @@
 IFWL_ComboBoxProxy::IFWL_ComboBoxProxy(
     IFWL_ComboBox* pComboBox,
     const IFWL_App* app,
-    const CFWL_WidgetImpProperties& properties,
+    std::unique_ptr<CFWL_WidgetProperties> properties,
     IFWL_Widget* pOuter)
-    : IFWL_FormProxy(app, properties, pOuter),
+    : IFWL_FormProxy(app, std::move(properties), pOuter),
       m_bLButtonDown(false),
       m_bLButtonUpSelf(false),
       m_pComboBox(pComboBox) {}
diff --git a/xfa/fwl/core/ifwl_comboboxproxy.h b/xfa/fwl/core/ifwl_comboboxproxy.h
index 7b5c929..f6da412 100644
--- a/xfa/fwl/core/ifwl_comboboxproxy.h
+++ b/xfa/fwl/core/ifwl_comboboxproxy.h
@@ -15,7 +15,7 @@
  public:
   IFWL_ComboBoxProxy(IFWL_ComboBox* pCombobBox,
                      const IFWL_App* app,
-                     const CFWL_WidgetImpProperties& properties,
+                     std::unique_ptr<CFWL_WidgetProperties> properties,
                      IFWL_Widget* pOuter);
   ~IFWL_ComboBoxProxy() override;
 
diff --git a/xfa/fwl/core/ifwl_comboedit.cpp b/xfa/fwl/core/ifwl_comboedit.cpp
index 26106e1..a8b04fd 100644
--- a/xfa/fwl/core/ifwl_comboedit.cpp
+++ b/xfa/fwl/core/ifwl_comboedit.cpp
@@ -9,10 +9,11 @@
 #include "xfa/fde/cfde_txtedtengine.h"
 #include "xfa/fwl/core/ifwl_combobox.h"
 
-IFWL_ComboEdit::IFWL_ComboEdit(const IFWL_App* app,
-                               const CFWL_WidgetImpProperties& properties,
-                               IFWL_Widget* pOuter)
-    : IFWL_Edit(app, properties, pOuter) {
+IFWL_ComboEdit::IFWL_ComboEdit(
+    const IFWL_App* app,
+    std::unique_ptr<CFWL_WidgetProperties> properties,
+    IFWL_Widget* pOuter)
+    : IFWL_Edit(app, std::move(properties), pOuter) {
   m_pOuter = static_cast<IFWL_ComboBox*>(pOuter);
 }
 
diff --git a/xfa/fwl/core/ifwl_comboedit.h b/xfa/fwl/core/ifwl_comboedit.h
index 59aa995..f50a725 100644
--- a/xfa/fwl/core/ifwl_comboedit.h
+++ b/xfa/fwl/core/ifwl_comboedit.h
@@ -7,7 +7,7 @@
 #ifndef XFA_FWL_CORE_IFWL_COMBOEDIT_H_
 #define XFA_FWL_CORE_IFWL_COMBOEDIT_H_
 
-#include "xfa/fwl/core/cfwl_widgetimpproperties.h"
+#include "xfa/fwl/core/cfwl_widgetproperties.h"
 #include "xfa/fwl/core/ifwl_edit.h"
 #include "xfa/fwl/core/ifwl_widget.h"
 
@@ -16,7 +16,7 @@
 class IFWL_ComboEdit : public IFWL_Edit {
  public:
   IFWL_ComboEdit(const IFWL_App* app,
-                 const CFWL_WidgetImpProperties& properties,
+                 std::unique_ptr<CFWL_WidgetProperties> properties,
                  IFWL_Widget* pOuter);
 
   // IFWL_Edit.
diff --git a/xfa/fwl/core/ifwl_combolist.cpp b/xfa/fwl/core/ifwl_combolist.cpp
index 452cdff..04fefc6 100644
--- a/xfa/fwl/core/ifwl_combolist.cpp
+++ b/xfa/fwl/core/ifwl_combolist.cpp
@@ -10,10 +10,11 @@
 #include "xfa/fwl/core/ifwl_combobox.h"
 #include "xfa/fwl/core/ifwl_comboedit.h"
 
-IFWL_ComboList::IFWL_ComboList(const IFWL_App* app,
-                               const CFWL_WidgetImpProperties& properties,
-                               IFWL_Widget* pOuter)
-    : IFWL_ListBox(app, properties, pOuter), m_bNotifyOwner(true) {
+IFWL_ComboList::IFWL_ComboList(
+    const IFWL_App* app,
+    std::unique_ptr<CFWL_WidgetProperties> properties,
+    IFWL_Widget* pOuter)
+    : IFWL_ListBox(app, std::move(properties), pOuter), m_bNotifyOwner(true) {
   ASSERT(pOuter);
 }
 
diff --git a/xfa/fwl/core/ifwl_combolist.h b/xfa/fwl/core/ifwl_combolist.h
index 6da1640..6c380f4 100644
--- a/xfa/fwl/core/ifwl_combolist.h
+++ b/xfa/fwl/core/ifwl_combolist.h
@@ -7,14 +7,14 @@
 #ifndef XFA_FWL_CORE_IFWL_COMBOLIST_H_
 #define XFA_FWL_CORE_IFWL_COMBOLIST_H_
 
-#include "xfa/fwl/core/cfwl_widgetimpproperties.h"
+#include "xfa/fwl/core/cfwl_widgetproperties.h"
 #include "xfa/fwl/core/ifwl_listbox.h"
 #include "xfa/fwl/core/ifwl_widget.h"
 
 class IFWL_ComboList : public IFWL_ListBox {
  public:
   IFWL_ComboList(const IFWL_App* app,
-                 const CFWL_WidgetImpProperties& properties,
+                 std::unique_ptr<CFWL_WidgetProperties> properties,
                  IFWL_Widget* pOuter);
 
   // IFWL_ListBox.
diff --git a/xfa/fwl/core/ifwl_datetimecalendar.cpp b/xfa/fwl/core/ifwl_datetimecalendar.cpp
index 4e274fc..c9f640f 100644
--- a/xfa/fwl/core/ifwl_datetimecalendar.cpp
+++ b/xfa/fwl/core/ifwl_datetimecalendar.cpp
@@ -13,9 +13,9 @@
 
 IFWL_DateTimeCalendar::IFWL_DateTimeCalendar(
     const IFWL_App* app,
-    const CFWL_WidgetImpProperties& properties,
+    std::unique_ptr<CFWL_WidgetProperties> properties,
     IFWL_Widget* pOuter)
-    : IFWL_MonthCalendar(app, properties, pOuter), m_bFlag(false) {}
+    : IFWL_MonthCalendar(app, std::move(properties), pOuter), m_bFlag(false) {}
 
 void IFWL_DateTimeCalendar::OnProcessMessage(CFWL_Message* pMessage) {
   CFWL_MessageType dwCode = pMessage->GetClassID();
diff --git a/xfa/fwl/core/ifwl_datetimecalendar.h b/xfa/fwl/core/ifwl_datetimecalendar.h
index 07f0373..d47e32e 100644
--- a/xfa/fwl/core/ifwl_datetimecalendar.h
+++ b/xfa/fwl/core/ifwl_datetimecalendar.h
@@ -12,7 +12,7 @@
 class IFWL_DateTimeCalendar : public IFWL_MonthCalendar {
  public:
   IFWL_DateTimeCalendar(const IFWL_App* app,
-                        const CFWL_WidgetImpProperties& properties,
+                        std::unique_ptr<CFWL_WidgetProperties> properties,
                         IFWL_Widget* pOuter);
 
   // IFWL_MonthCalendar
diff --git a/xfa/fwl/core/ifwl_datetimeedit.cpp b/xfa/fwl/core/ifwl_datetimeedit.cpp
index 62675a3..492f8f3 100644
--- a/xfa/fwl/core/ifwl_datetimeedit.cpp
+++ b/xfa/fwl/core/ifwl_datetimeedit.cpp
@@ -10,10 +10,11 @@
 #include "xfa/fwl/core/cfwl_widgetmgr.h"
 #include "xfa/fwl/core/ifwl_datetimepicker.h"
 
-IFWL_DateTimeEdit::IFWL_DateTimeEdit(const IFWL_App* app,
-                                     const CFWL_WidgetImpProperties& properties,
-                                     IFWL_Widget* pOuter)
-    : IFWL_Edit(app, properties, pOuter) {}
+IFWL_DateTimeEdit::IFWL_DateTimeEdit(
+    const IFWL_App* app,
+    std::unique_ptr<CFWL_WidgetProperties> properties,
+    IFWL_Widget* pOuter)
+    : IFWL_Edit(app, std::move(properties), pOuter) {}
 
 void IFWL_DateTimeEdit::OnProcessMessage(CFWL_Message* pMessage) {
   if (m_pWidgetMgr->IsFormDisabled()) {
diff --git a/xfa/fwl/core/ifwl_datetimeedit.h b/xfa/fwl/core/ifwl_datetimeedit.h
index 84ff7e7..1649d39 100644
--- a/xfa/fwl/core/ifwl_datetimeedit.h
+++ b/xfa/fwl/core/ifwl_datetimeedit.h
@@ -8,7 +8,7 @@
 #define XFA_FWL_CORE_IFWL_DATETIMEEDIT_H_
 
 #include "xfa/fwl/core/cfwl_message.h"
-#include "xfa/fwl/core/cfwl_widgetimpproperties.h"
+#include "xfa/fwl/core/cfwl_widgetproperties.h"
 #include "xfa/fwl/core/fwl_error.h"
 #include "xfa/fwl/core/ifwl_edit.h"
 #include "xfa/fwl/core/ifwl_widget.h"
@@ -16,7 +16,7 @@
 class IFWL_DateTimeEdit : public IFWL_Edit {
  public:
   IFWL_DateTimeEdit(const IFWL_App* app,
-                    const CFWL_WidgetImpProperties& properties,
+                    std::unique_ptr<CFWL_WidgetProperties> properties,
                     IFWL_Widget* pOuter);
 
   // IFWL_Edit.
diff --git a/xfa/fwl/core/ifwl_datetimepicker.cpp b/xfa/fwl/core/ifwl_datetimepicker.cpp
index 5237326..8a59b00 100644
--- a/xfa/fwl/core/ifwl_datetimepicker.cpp
+++ b/xfa/fwl/core/ifwl_datetimepicker.cpp
@@ -26,8 +26,8 @@
 
 IFWL_DateTimePicker::IFWL_DateTimePicker(
     const IFWL_App* app,
-    const CFWL_WidgetImpProperties& properties)
-    : IFWL_Widget(app, properties, nullptr),
+    std::unique_ptr<CFWL_WidgetProperties> properties)
+    : IFWL_Widget(app, std::move(properties), nullptr),
       m_iBtnState(1),
       m_iYear(-1),
       m_iMonth(-1),
@@ -36,23 +36,26 @@
   m_rtBtn.Set(0, 0, 0, 0);
 
   m_pProperties->m_dwStyleExes = FWL_STYLEEXT_DTP_ShortDateFormat;
-  CFWL_WidgetImpProperties propMonth;
-  propMonth.m_dwStyles = FWL_WGTSTYLE_Popup | FWL_WGTSTYLE_Border;
-  propMonth.m_dwStates = FWL_WGTSTATE_Invisible;
-  propMonth.m_pDataProvider = &m_MonthCalendarDP;
-  propMonth.m_pParent = this;
-  propMonth.m_pThemeProvider = m_pProperties->m_pThemeProvider;
 
-  m_pMonthCal.reset(new IFWL_DateTimeCalendar(m_pOwnerApp, propMonth, this));
+  auto monthProp =
+      pdfium::MakeUnique<CFWL_WidgetProperties>(&m_MonthCalendarDP);
+  monthProp->m_dwStyles = FWL_WGTSTYLE_Popup | FWL_WGTSTYLE_Border;
+  monthProp->m_dwStates = FWL_WGTSTATE_Invisible;
+  monthProp->m_pParent = this;
+  monthProp->m_pThemeProvider = m_pProperties->m_pThemeProvider;
+  m_pMonthCal.reset(
+      new IFWL_DateTimeCalendar(m_pOwnerApp, std::move(monthProp), this));
+
   CFX_RectF rtMonthCal;
   m_pMonthCal->GetWidgetRect(rtMonthCal, true);
   rtMonthCal.Set(0, 0, rtMonthCal.width, rtMonthCal.height);
   m_pMonthCal->SetWidgetRect(rtMonthCal);
-  CFWL_WidgetImpProperties propEdit;
-  propEdit.m_pParent = this;
-  propEdit.m_pThemeProvider = m_pProperties->m_pThemeProvider;
 
-  m_pEdit.reset(new IFWL_DateTimeEdit(m_pOwnerApp, propEdit, this));
+  auto editProp = pdfium::MakeUnique<CFWL_WidgetProperties>();
+  editProp->m_pParent = this;
+  editProp->m_pThemeProvider = m_pProperties->m_pThemeProvider;
+
+  m_pEdit.reset(new IFWL_DateTimeEdit(m_pOwnerApp, std::move(editProp), this));
   RegisterEventTarget(m_pMonthCal.get());
   RegisterEventTarget(m_pEdit.get());
 }
@@ -433,12 +436,14 @@
     return;
   if (!m_pMonthCal)
     return;
-  CFWL_WidgetImpProperties propForm;
-  propForm.m_dwStyles = FWL_WGTSTYLE_Popup;
-  propForm.m_dwStates = FWL_WGTSTATE_Invisible;
-  propForm.m_pOwner = this;
 
-  m_pForm.reset(new IFWL_FormProxy(m_pOwnerApp, propForm, m_pMonthCal.get()));
+  auto prop = pdfium::MakeUnique<CFWL_WidgetProperties>();
+  prop->m_dwStyles = FWL_WGTSTYLE_Popup;
+  prop->m_dwStates = FWL_WGTSTATE_Invisible;
+  prop->m_pOwner = this;
+
+  m_pForm.reset(
+      new IFWL_FormProxy(m_pOwnerApp, std::move(prop), m_pMonthCal.get()));
   m_pMonthCal->SetParent(m_pForm.get());
 }
 
@@ -456,18 +461,18 @@
 }
 
 void IFWL_DateTimePicker::DisForm_InitDateTimeCalendar() {
-  if (m_pMonthCal) {
+  if (m_pMonthCal)
     return;
-  }
-  CFWL_WidgetImpProperties propMonth;
-  propMonth.m_dwStyles =
-      FWL_WGTSTYLE_Popup | FWL_WGTSTYLE_Border | FWL_WGTSTYLE_EdgeSunken;
-  propMonth.m_dwStates = FWL_WGTSTATE_Invisible;
-  propMonth.m_pParent = this;
-  propMonth.m_pDataProvider = &m_MonthCalendarDP;
-  propMonth.m_pThemeProvider = m_pProperties->m_pThemeProvider;
 
-  m_pMonthCal.reset(new IFWL_DateTimeCalendar(m_pOwnerApp, propMonth, this));
+  auto prop = pdfium::MakeUnique<CFWL_WidgetProperties>(&m_MonthCalendarDP);
+  prop->m_dwStyles =
+      FWL_WGTSTYLE_Popup | FWL_WGTSTYLE_Border | FWL_WGTSTYLE_EdgeSunken;
+  prop->m_dwStates = FWL_WGTSTATE_Invisible;
+  prop->m_pParent = this;
+  prop->m_pThemeProvider = m_pProperties->m_pThemeProvider;
+
+  m_pMonthCal.reset(
+      new IFWL_DateTimeCalendar(m_pOwnerApp, std::move(prop), this));
   CFX_RectF rtMonthCal;
   m_pMonthCal->GetWidgetRect(rtMonthCal, true);
   rtMonthCal.Set(0, 0, rtMonthCal.width, rtMonthCal.height);
@@ -475,14 +480,14 @@
 }
 
 void IFWL_DateTimePicker::DisForm_InitDateTimeEdit() {
-  if (m_pEdit) {
+  if (m_pEdit)
     return;
-  }
-  CFWL_WidgetImpProperties propEdit;
-  propEdit.m_pParent = this;
-  propEdit.m_pThemeProvider = m_pProperties->m_pThemeProvider;
 
-  m_pEdit.reset(new IFWL_DateTimeEdit(m_pOwnerApp, propEdit, this));
+  auto prop = pdfium::MakeUnique<CFWL_WidgetProperties>();
+  prop->m_pParent = this;
+  prop->m_pThemeProvider = m_pProperties->m_pThemeProvider;
+
+  m_pEdit.reset(new IFWL_DateTimeEdit(m_pOwnerApp, std::move(prop), this));
 }
 
 bool IFWL_DateTimePicker::DisForm_IsMonthCalendarShowed() {
diff --git a/xfa/fwl/core/ifwl_datetimepicker.h b/xfa/fwl/core/ifwl_datetimepicker.h
index 17eb7b8..8ebe54a 100644
--- a/xfa/fwl/core/ifwl_datetimepicker.h
+++ b/xfa/fwl/core/ifwl_datetimepicker.h
@@ -8,7 +8,7 @@
 #define XFA_FWL_CORE_IFWL_DATETIMEPICKER_H_
 
 #include "xfa/fwl/core/cfwl_event.h"
-#include "xfa/fwl/core/cfwl_widgetimpproperties.h"
+#include "xfa/fwl/core/cfwl_widgetproperties.h"
 #include "xfa/fwl/core/ifwl_dataprovider.h"
 #include "xfa/fwl/core/ifwl_monthcalendar.h"
 #include "xfa/fwl/core/ifwl_widget.h"
@@ -62,8 +62,9 @@
 
 class IFWL_DateTimePicker : public IFWL_Widget {
  public:
-  explicit IFWL_DateTimePicker(const IFWL_App* app,
-                               const CFWL_WidgetImpProperties& properties);
+  explicit IFWL_DateTimePicker(
+      const IFWL_App* app,
+      std::unique_ptr<CFWL_WidgetProperties> properties);
   ~IFWL_DateTimePicker() override;
 
   // IFWL_Widget
diff --git a/xfa/fwl/core/ifwl_edit.cpp b/xfa/fwl/core/ifwl_edit.cpp
index 111df72..7b3d083 100644
--- a/xfa/fwl/core/ifwl_edit.cpp
+++ b/xfa/fwl/core/ifwl_edit.cpp
@@ -53,9 +53,9 @@
 }  // namespace
 
 IFWL_Edit::IFWL_Edit(const IFWL_App* app,
-                     const CFWL_WidgetImpProperties& properties,
+                     std::unique_ptr<CFWL_WidgetProperties> properties,
                      IFWL_Widget* pOuter)
-    : IFWL_Widget(app, properties, pOuter),
+    : IFWL_Widget(app, std::move(properties), pOuter),
       m_fVAlignOffset(0.0f),
       m_fScrollOffsetX(0.0f),
       m_fScrollOffsetY(0.0f),
@@ -1449,13 +1449,14 @@
   if ((bVert && m_pVertScrollBar) || (!bVert && m_pHorzScrollBar)) {
     return;
   }
-  CFWL_WidgetImpProperties prop;
-  prop.m_dwStyleExes = bVert ? FWL_STYLEEXT_SCB_Vert : FWL_STYLEEXT_SCB_Horz;
-  prop.m_dwStates = FWL_WGTSTATE_Disabled | FWL_WGTSTATE_Invisible;
-  prop.m_pParent = this;
-  prop.m_pThemeProvider = m_pProperties->m_pThemeProvider;
 
-  IFWL_ScrollBar* sb = new IFWL_ScrollBar(m_pOwnerApp, prop, this);
+  auto prop = pdfium::MakeUnique<CFWL_WidgetProperties>();
+  prop->m_dwStyleExes = bVert ? FWL_STYLEEXT_SCB_Vert : FWL_STYLEEXT_SCB_Horz;
+  prop->m_dwStates = FWL_WGTSTATE_Disabled | FWL_WGTSTATE_Invisible;
+  prop->m_pParent = this;
+  prop->m_pThemeProvider = m_pProperties->m_pThemeProvider;
+
+  IFWL_ScrollBar* sb = new IFWL_ScrollBar(m_pOwnerApp, std::move(prop), this);
   if (bVert)
     m_pVertScrollBar.reset(sb);
   else
@@ -1554,8 +1555,8 @@
 void IFWL_Edit::InitCaret() {
   if (!m_pCaret) {
     if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_InnerCaret)) {
-      CFWL_WidgetImpProperties prop;
-      m_pCaret.reset(new IFWL_Caret(m_pOwnerApp, prop, this));
+      m_pCaret.reset(new IFWL_Caret(
+          m_pOwnerApp, pdfium::MakeUnique<CFWL_WidgetProperties>(), this));
       m_pCaret->SetParent(this);
       m_pCaret->SetStates(m_pProperties->m_dwStates);
     }
diff --git a/xfa/fwl/core/ifwl_edit.h b/xfa/fwl/core/ifwl_edit.h
index c210ac2..8ff69d0 100644
--- a/xfa/fwl/core/ifwl_edit.h
+++ b/xfa/fwl/core/ifwl_edit.h
@@ -91,13 +91,12 @@
               CFX_ByteString bsWord;
               std::vector<CFX_ByteString> bsArraySuggestWords;)
 
-class CFWL_WidgetImpProperties;
 class IFDE_TxtEdtDoRecord;
 class IFWL_Edit;
 class CFWL_MsgActivate;
 class CFWL_MsgDeactivate;
 class CFWL_MsgMouse;
-class CFWL_WidgetImpProperties;
+class CFWL_WidgetProperties;
 class IFWL_Caret;
 
 class IFWL_EditDP : public IFWL_DataProvider {};
@@ -105,7 +104,7 @@
 class IFWL_Edit : public IFWL_Widget {
  public:
   IFWL_Edit(const IFWL_App* app,
-            const CFWL_WidgetImpProperties& properties,
+            std::unique_ptr<CFWL_WidgetProperties> properties,
             IFWL_Widget* pOuter);
   ~IFWL_Edit() override;
 
diff --git a/xfa/fwl/core/ifwl_form.cpp b/xfa/fwl/core/ifwl_form.cpp
index ab6887f..82148a0 100644
--- a/xfa/fwl/core/ifwl_form.cpp
+++ b/xfa/fwl/core/ifwl_form.cpp
@@ -38,9 +38,9 @@
 RestoreInfo::~RestoreInfo() {}
 
 IFWL_Form::IFWL_Form(const IFWL_App* app,
-                     const CFWL_WidgetImpProperties& properties,
+                     std::unique_ptr<CFWL_WidgetProperties> properties,
                      IFWL_Widget* pOuter)
-    : IFWL_Widget(app, properties, pOuter),
+    : IFWL_Widget(app, std::move(properties), pOuter),
       m_pCloseBox(nullptr),
       m_pMinBox(nullptr),
       m_pMaxBox(nullptr),
diff --git a/xfa/fwl/core/ifwl_form.h b/xfa/fwl/core/ifwl_form.h
index 4936af6..8042bb5 100644
--- a/xfa/fwl/core/ifwl_form.h
+++ b/xfa/fwl/core/ifwl_form.h
@@ -10,7 +10,7 @@
 #include <memory>
 
 #include "core/fxcrt/fx_system.h"
-#include "xfa/fwl/core/cfwl_widgetimpproperties.h"
+#include "xfa/fwl/core/cfwl_widgetproperties.h"
 #include "xfa/fwl/core/ifwl_dataprovider.h"
 #include "xfa/fwl/core/ifwl_widget.h"
 
@@ -72,7 +72,6 @@
 class CFWL_MsgClose;
 class CFWL_MsgWindowMove;
 class CFWL_NoteLoop;
-class CFWL_WidgetImpProperties;
 class IFWL_Widget;
 class IFWL_ThemeProvider;
 class CFWL_SysBtn;
@@ -85,7 +84,7 @@
 class IFWL_Form : public IFWL_Widget {
  public:
   IFWL_Form(const IFWL_App* app,
-            const CFWL_WidgetImpProperties& properties,
+            std::unique_ptr<CFWL_WidgetProperties> properties,
             IFWL_Widget* pOuter);
   ~IFWL_Form() override;
 
diff --git a/xfa/fwl/core/ifwl_formproxy.cpp b/xfa/fwl/core/ifwl_formproxy.cpp
index d06cf0b..8bb1091 100644
--- a/xfa/fwl/core/ifwl_formproxy.cpp
+++ b/xfa/fwl/core/ifwl_formproxy.cpp
@@ -9,11 +9,11 @@
 #include "third_party/base/ptr_util.h"
 #include "xfa/fwl/core/fwl_noteimp.h"
 
-IFWL_FormProxy::IFWL_FormProxy(const IFWL_App* app,
-                               const CFWL_WidgetImpProperties& properties,
-                               IFWL_Widget* pOuter)
-    : IFWL_Form(app, properties, pOuter) {
-}
+IFWL_FormProxy::IFWL_FormProxy(
+    const IFWL_App* app,
+    std::unique_ptr<CFWL_WidgetProperties> properties,
+    IFWL_Widget* pOuter)
+    : IFWL_Form(app, std::move(properties), pOuter) {}
 
 IFWL_FormProxy::~IFWL_FormProxy() {}
 
diff --git a/xfa/fwl/core/ifwl_formproxy.h b/xfa/fwl/core/ifwl_formproxy.h
index 7bab976..4eaeb5a 100644
--- a/xfa/fwl/core/ifwl_formproxy.h
+++ b/xfa/fwl/core/ifwl_formproxy.h
@@ -9,12 +9,12 @@
 
 #include "xfa/fwl/core/ifwl_form.h"
 
-class CFWL_WidgetImpProperties;
+class CFWL_WidgetProperties;
 
 class IFWL_FormProxy : public IFWL_Form {
  public:
   IFWL_FormProxy(const IFWL_App* app,
-                 const CFWL_WidgetImpProperties& properties,
+                 std::unique_ptr<CFWL_WidgetProperties> properties,
                  IFWL_Widget* pOuter);
   ~IFWL_FormProxy() override;
 
diff --git a/xfa/fwl/core/ifwl_listbox.cpp b/xfa/fwl/core/ifwl_listbox.cpp
index b462c8e..f0d2f01 100644
--- a/xfa/fwl/core/ifwl_listbox.cpp
+++ b/xfa/fwl/core/ifwl_listbox.cpp
@@ -22,9 +22,9 @@
 }  // namespace
 
 IFWL_ListBox::IFWL_ListBox(const IFWL_App* app,
-                           const CFWL_WidgetImpProperties& properties,
+                           std::unique_ptr<CFWL_WidgetProperties> properties,
                            IFWL_Widget* pOuter)
-    : IFWL_Widget(app, properties, pOuter),
+    : IFWL_Widget(app, std::move(properties), pOuter),
       m_dwTTOStyles(0),
       m_iTTOAligns(0),
       m_hAnchor(nullptr),
@@ -873,13 +873,13 @@
   if ((bVert && m_pVertScrollBar) || (!bVert && m_pHorzScrollBar)) {
     return;
   }
-  CFWL_WidgetImpProperties prop;
-  prop.m_dwStyleExes = bVert ? FWL_STYLEEXT_SCB_Vert : FWL_STYLEEXT_SCB_Horz;
-  prop.m_dwStates = FWL_WGTSTATE_Invisible;
-  prop.m_pParent = this;
-  prop.m_pThemeProvider = m_pScrollBarTP;
+  auto prop = pdfium::MakeUnique<CFWL_WidgetProperties>();
+  prop->m_dwStyleExes = bVert ? FWL_STYLEEXT_SCB_Vert : FWL_STYLEEXT_SCB_Horz;
+  prop->m_dwStates = FWL_WGTSTATE_Invisible;
+  prop->m_pParent = this;
+  prop->m_pThemeProvider = m_pScrollBarTP;
   (bVert ? &m_pVertScrollBar : &m_pHorzScrollBar)
-      ->reset(new IFWL_ScrollBar(m_pOwnerApp, prop, this));
+      ->reset(new IFWL_ScrollBar(m_pOwnerApp, std::move(prop), this));
 }
 
 bool IFWL_ListBox::IsShowScrollBar(bool bVert) {
diff --git a/xfa/fwl/core/ifwl_listbox.h b/xfa/fwl/core/ifwl_listbox.h
index e16778f..99006ca 100644
--- a/xfa/fwl/core/ifwl_listbox.h
+++ b/xfa/fwl/core/ifwl_listbox.h
@@ -10,7 +10,7 @@
 #include <memory>
 
 #include "xfa/fwl/core/cfwl_event.h"
-#include "xfa/fwl/core/cfwl_widgetimpproperties.h"
+#include "xfa/fwl/core/cfwl_widgetproperties.h"
 #include "xfa/fwl/core/ifwl_dataprovider.h"
 #include "xfa/fwl/core/ifwl_edit.h"
 #include "xfa/fwl/core/ifwl_listbox.h"
@@ -102,7 +102,7 @@
 class IFWL_ListBox : public IFWL_Widget {
  public:
   IFWL_ListBox(const IFWL_App* app,
-               const CFWL_WidgetImpProperties& properties,
+               std::unique_ptr<CFWL_WidgetProperties> properties,
                IFWL_Widget* pOuter);
   ~IFWL_ListBox() override;
 
diff --git a/xfa/fwl/core/ifwl_monthcalendar.cpp b/xfa/fwl/core/ifwl_monthcalendar.cpp
index 4190dbd..28d5297 100644
--- a/xfa/fwl/core/ifwl_monthcalendar.cpp
+++ b/xfa/fwl/core/ifwl_monthcalendar.cpp
@@ -120,9 +120,9 @@
 
 IFWL_MonthCalendar::IFWL_MonthCalendar(
     const IFWL_App* app,
-    const CFWL_WidgetImpProperties& properties,
+    std::unique_ptr<CFWL_WidgetProperties> properties,
     IFWL_Widget* pOuter)
-    : IFWL_Widget(app, properties, pOuter),
+    : IFWL_Widget(app, std::move(properties), pOuter),
       m_bInit(false),
       m_pDateTime(new CFX_DateTime),
       m_iCurYear(2011),
diff --git a/xfa/fwl/core/ifwl_monthcalendar.h b/xfa/fwl/core/ifwl_monthcalendar.h
index 1017c86..ec8cdcd 100644
--- a/xfa/fwl/core/ifwl_monthcalendar.h
+++ b/xfa/fwl/core/ifwl_monthcalendar.h
@@ -9,7 +9,7 @@
 
 #include "xfa/fgas/localization/fgas_datetime.h"
 #include "xfa/fwl/core/cfwl_event.h"
-#include "xfa/fwl/core/cfwl_widgetimpproperties.h"
+#include "xfa/fwl/core/cfwl_widgetproperties.h"
 #include "xfa/fwl/core/ifwl_dataprovider.h"
 #include "xfa/fwl/core/ifwl_widget.h"
 
@@ -35,7 +35,6 @@
               int32_t m_iEndDay;)
 
 class CFWL_MsgMouse;
-class CFWL_WidgetImpProperties;
 class IFWL_Widget;
 
 struct FWL_DATEINFO;
@@ -52,7 +51,7 @@
 class IFWL_MonthCalendar : public IFWL_Widget {
  public:
   IFWL_MonthCalendar(const IFWL_App* app,
-                     const CFWL_WidgetImpProperties& properties,
+                     std::unique_ptr<CFWL_WidgetProperties> properties,
                      IFWL_Widget* pOuter);
   ~IFWL_MonthCalendar() override;
 
diff --git a/xfa/fwl/core/ifwl_picturebox.cpp b/xfa/fwl/core/ifwl_picturebox.cpp
index d820573..f97ee70 100644
--- a/xfa/fwl/core/ifwl_picturebox.cpp
+++ b/xfa/fwl/core/ifwl_picturebox.cpp
@@ -10,9 +10,10 @@
 #include "xfa/fwl/core/cfwl_picturebox.h"
 #include "xfa/fwl/core/fwl_noteimp.h"
 
-IFWL_PictureBox::IFWL_PictureBox(const IFWL_App* app,
-                                 const CFWL_WidgetImpProperties& properties)
-    : IFWL_Widget(app, properties, nullptr),
+IFWL_PictureBox::IFWL_PictureBox(
+    const IFWL_App* app,
+    std::unique_ptr<CFWL_WidgetProperties> properties)
+    : IFWL_Widget(app, std::move(properties), nullptr),
       m_bTop(false),
       m_bVCenter(false),
       m_bButton(false) {
diff --git a/xfa/fwl/core/ifwl_picturebox.h b/xfa/fwl/core/ifwl_picturebox.h
index edd8e7e..2eeacae 100644
--- a/xfa/fwl/core/ifwl_picturebox.h
+++ b/xfa/fwl/core/ifwl_picturebox.h
@@ -7,7 +7,7 @@
 #ifndef XFA_FWL_CORE_IFWL_PICTUREBOX_H_
 #define XFA_FWL_CORE_IFWL_PICTUREBOX_H_
 
-#include "xfa/fwl/core/cfwl_widgetimpproperties.h"
+#include "xfa/fwl/core/cfwl_widgetproperties.h"
 #include "xfa/fwl/core/fwl_error.h"
 #include "xfa/fwl/core/ifwl_dataprovider.h"
 #include "xfa/fwl/core/ifwl_widget.h"
@@ -27,7 +27,6 @@
 #define FWL_STYLEEXT_PTB_VAlignMask 3L << 2
 #define FWL_STYLEEXT_PTB_StretchAlignMask 7L << 4
 
-class CFWL_WidgetImpProperties;
 class CFX_DIBitmap;
 class IFWL_Widget;
 
@@ -44,7 +43,7 @@
 class IFWL_PictureBox : public IFWL_Widget {
  public:
   explicit IFWL_PictureBox(const IFWL_App* app,
-                           const CFWL_WidgetImpProperties& properties);
+                           std::unique_ptr<CFWL_WidgetProperties> properties);
   ~IFWL_PictureBox() override;
 
   // IFWL_Widget
diff --git a/xfa/fwl/core/ifwl_pushbutton.cpp b/xfa/fwl/core/ifwl_pushbutton.cpp
index f9f996a..c03b26a 100644
--- a/xfa/fwl/core/ifwl_pushbutton.cpp
+++ b/xfa/fwl/core/ifwl_pushbutton.cpp
@@ -15,9 +15,10 @@
 #include "xfa/fwl/core/ifwl_pushbutton.h"
 #include "xfa/fwl/core/ifwl_themeprovider.h"
 
-IFWL_PushButton::IFWL_PushButton(const IFWL_App* app,
-                                 const CFWL_WidgetImpProperties& properties)
-    : IFWL_Widget(app, properties, nullptr),
+IFWL_PushButton::IFWL_PushButton(
+    const IFWL_App* app,
+    std::unique_ptr<CFWL_WidgetProperties> properties)
+    : IFWL_Widget(app, std::move(properties), nullptr),
       m_bBtnDown(false),
       m_dwTTOStyles(FDE_TTOSTYLE_SingleLine),
       m_iTTOAlign(FDE_TTOALIGNMENT_Center) {
diff --git a/xfa/fwl/core/ifwl_pushbutton.h b/xfa/fwl/core/ifwl_pushbutton.h
index 422e597..94078bb 100644
--- a/xfa/fwl/core/ifwl_pushbutton.h
+++ b/xfa/fwl/core/ifwl_pushbutton.h
@@ -7,7 +7,7 @@
 #ifndef XFA_FWL_CORE_IFWL_PUSHBUTTON_H_
 #define XFA_FWL_CORE_IFWL_PUSHBUTTON_H_
 
-#include "xfa/fwl/core/cfwl_widgetimpproperties.h"
+#include "xfa/fwl/core/cfwl_widgetproperties.h"
 #include "xfa/fwl/core/ifwl_dataprovider.h"
 #include "xfa/fwl/core/ifwl_widget.h"
 
@@ -28,7 +28,6 @@
 #define FWL_STATE_PSB_Default (1 << (FWL_WGTSTATE_MAX + 2))
 
 class CFWL_MsgMouse;
-class CFWL_WidgetImpProperties;
 class CFX_DIBitmap;
 class IFWL_Widget;
 
@@ -40,7 +39,7 @@
 class IFWL_PushButton : public IFWL_Widget {
  public:
   IFWL_PushButton(const IFWL_App* app,
-                  const CFWL_WidgetImpProperties& properties);
+                  std::unique_ptr<CFWL_WidgetProperties> properties);
   ~IFWL_PushButton() override;
 
   // IFWL_Widget
diff --git a/xfa/fwl/core/ifwl_scrollbar.cpp b/xfa/fwl/core/ifwl_scrollbar.cpp
index 9369bd8..777ca59 100644
--- a/xfa/fwl/core/ifwl_scrollbar.cpp
+++ b/xfa/fwl/core/ifwl_scrollbar.cpp
@@ -17,10 +17,11 @@
 #define FWL_SCROLLBAR_Elapse 500
 #define FWL_SCROLLBAR_MinThumb 5
 
-IFWL_ScrollBar::IFWL_ScrollBar(const IFWL_App* app,
-                               const CFWL_WidgetImpProperties& properties,
-                               IFWL_Widget* pOuter)
-    : IFWL_Widget(app, properties, pOuter),
+IFWL_ScrollBar::IFWL_ScrollBar(
+    const IFWL_App* app,
+    std::unique_ptr<CFWL_WidgetProperties> properties,
+    IFWL_Widget* pOuter)
+    : IFWL_Widget(app, std::move(properties), pOuter),
       m_pTimerInfo(nullptr),
       m_fRangeMin(0),
       m_fRangeMax(-1),
diff --git a/xfa/fwl/core/ifwl_scrollbar.h b/xfa/fwl/core/ifwl_scrollbar.h
index 5c41fdd..15b1b95 100644
--- a/xfa/fwl/core/ifwl_scrollbar.h
+++ b/xfa/fwl/core/ifwl_scrollbar.h
@@ -8,13 +8,12 @@
 #define XFA_FWL_CORE_IFWL_SCROLLBAR_H_
 
 #include "core/fxcrt/fx_system.h"
-#include "xfa/fwl/core/cfwl_widgetimpproperties.h"
+#include "xfa/fwl/core/cfwl_widgetproperties.h"
 #include "xfa/fwl/core/fwl_error.h"
 #include "xfa/fwl/core/ifwl_dataprovider.h"
 #include "xfa/fwl/core/ifwl_timer.h"
 #include "xfa/fwl/core/ifwl_widget.h"
 
-class CFWL_WidgetImpProperties;
 class IFWL_Widget;
 
 #define FWL_STYLEEXT_SCB_Horz (0L << 0)
@@ -38,7 +37,7 @@
 class IFWL_ScrollBar : public IFWL_Widget {
  public:
   IFWL_ScrollBar(const IFWL_App* app,
-                 const CFWL_WidgetImpProperties& properties,
+                 std::unique_ptr<CFWL_WidgetProperties> properties,
                  IFWL_Widget* pOuter);
   ~IFWL_ScrollBar() override;
 
diff --git a/xfa/fwl/core/ifwl_spinbutton.cpp b/xfa/fwl/core/ifwl_spinbutton.cpp
index 1603234..a669493 100644
--- a/xfa/fwl/core/ifwl_spinbutton.cpp
+++ b/xfa/fwl/core/ifwl_spinbutton.cpp
@@ -9,7 +9,7 @@
 #include "third_party/base/ptr_util.h"
 #include "xfa/fwl/core/cfwl_message.h"
 #include "xfa/fwl/core/cfwl_themebackground.h"
-#include "xfa/fwl/core/cfwl_widgetimpproperties.h"
+#include "xfa/fwl/core/cfwl_widgetproperties.h"
 #include "xfa/fwl/core/fwl_noteimp.h"
 #include "xfa/fwl/core/ifwl_spinbutton.h"
 #include "xfa/fwl/core/ifwl_themeprovider.h"
@@ -24,9 +24,10 @@
 
 }  // namespace
 
-IFWL_SpinButton::IFWL_SpinButton(const IFWL_App* app,
-                                 const CFWL_WidgetImpProperties& properties)
-    : IFWL_Widget(app, properties, nullptr),
+IFWL_SpinButton::IFWL_SpinButton(
+    const IFWL_App* app,
+    std::unique_ptr<CFWL_WidgetProperties> properties)
+    : IFWL_Widget(app, std::move(properties), nullptr),
       m_dwUpState(CFWL_PartState_Normal),
       m_dwDnState(CFWL_PartState_Normal),
       m_iButtonIndex(0),
diff --git a/xfa/fwl/core/ifwl_spinbutton.h b/xfa/fwl/core/ifwl_spinbutton.h
index a388489..73c2fc0 100644
--- a/xfa/fwl/core/ifwl_spinbutton.h
+++ b/xfa/fwl/core/ifwl_spinbutton.h
@@ -15,14 +15,14 @@
 #define FWL_STYLEEXE_SPB_Vert (1L << 0)
 
 class CFWL_MsgMouse;
-class CFWL_WidgetImpProperties;
+class CFWL_WidgetProperties;
 
 FWL_EVENT_DEF(CFWL_EvtSpbClick, CFWL_EventType::Click, bool m_bUp;)
 
 class IFWL_SpinButton : public IFWL_Widget {
  public:
   explicit IFWL_SpinButton(const IFWL_App* app,
-                           const CFWL_WidgetImpProperties& properties);
+                           std::unique_ptr<CFWL_WidgetProperties> properties);
   ~IFWL_SpinButton() override;
 
   // IFWL_Widget
diff --git a/xfa/fwl/core/ifwl_tooltip.cpp b/xfa/fwl/core/ifwl_tooltip.cpp
index 2d518c5..99d3b98 100644
--- a/xfa/fwl/core/ifwl_tooltip.cpp
+++ b/xfa/fwl/core/ifwl_tooltip.cpp
@@ -17,9 +17,9 @@
 #include "xfa/fwl/theme/cfwl_widgettp.h"
 
 IFWL_ToolTip::IFWL_ToolTip(const IFWL_App* app,
-                           const CFWL_WidgetImpProperties& properties,
+                           std::unique_ptr<CFWL_WidgetProperties> properties,
                            IFWL_Widget* pOuter)
-    : IFWL_Form(app, properties, pOuter),
+    : IFWL_Form(app, std::move(properties), pOuter),
       m_bBtnDown(false),
       m_dwTTOStyles(FDE_TTOSTYLE_SingleLine),
       m_iTTOAlign(FDE_TTOALIGNMENT_Center),
diff --git a/xfa/fwl/core/ifwl_tooltip.h b/xfa/fwl/core/ifwl_tooltip.h
index c2ad663..78b7535 100644
--- a/xfa/fwl/core/ifwl_tooltip.h
+++ b/xfa/fwl/core/ifwl_tooltip.h
@@ -10,7 +10,7 @@
 #include "xfa/fwl/core/ifwl_form.h"
 #include "xfa/fwl/core/ifwl_timer.h"
 
-class CFWL_WidgetImpProperties;
+class CFWL_WidgetProperties;
 class IFWL_Widget;
 class CFWL_ToolTipImpDelegate;
 
@@ -35,7 +35,7 @@
 class IFWL_ToolTip : public IFWL_Form {
  public:
   IFWL_ToolTip(const IFWL_App* app,
-               const CFWL_WidgetImpProperties& properties,
+               std::unique_ptr<CFWL_WidgetProperties> properties,
                IFWL_Widget* pOuter);
   ~IFWL_ToolTip() override;
 
diff --git a/xfa/fwl/core/ifwl_widget.cpp b/xfa/fwl/core/ifwl_widget.cpp
index 7bcdf18..a041f4e 100644
--- a/xfa/fwl/core/ifwl_widget.cpp
+++ b/xfa/fwl/core/ifwl_widget.cpp
@@ -25,11 +25,11 @@
 #define FWL_STYLEEXT_MNU_Vert (1L << 0)
 
 IFWL_Widget::IFWL_Widget(const IFWL_App* app,
-                         const CFWL_WidgetImpProperties& properties,
+                         std::unique_ptr<CFWL_WidgetProperties> properties,
                          IFWL_Widget* pOuter)
     : m_pOwnerApp(app),
       m_pWidgetMgr(app->GetWidgetMgr()),
-      m_pProperties(new CFWL_WidgetImpProperties(properties)),
+      m_pProperties(std::move(properties)),
       m_pOuter(pOuter),
       m_pLayoutItem(nullptr),
       m_pAssociate(nullptr),
diff --git a/xfa/fwl/core/ifwl_widget.h b/xfa/fwl/core/ifwl_widget.h
index b5dc1f9..862f357 100644
--- a/xfa/fwl/core/ifwl_widget.h
+++ b/xfa/fwl/core/ifwl_widget.h
@@ -54,7 +54,7 @@
 class CFWL_AppImp;
 class CFWL_MsgKey;
 class CFWL_Widget;
-class CFWL_WidgetImpProperties;
+class CFWL_WidgetProperties;
 class CFWL_WidgetMgr;
 class IFWL_App;
 class IFWL_DataProvider;
@@ -145,7 +145,7 @@
   friend class CFWL_WidgetImpDelegate;
 
   IFWL_Widget(const IFWL_App* app,
-              const CFWL_WidgetImpProperties& properties,
+              std::unique_ptr<CFWL_WidgetProperties> properties,
               IFWL_Widget* pOuter);
 
   bool IsEnabled() const;
@@ -215,7 +215,7 @@
 
   const IFWL_App* const m_pOwnerApp;
   CFWL_WidgetMgr* const m_pWidgetMgr;
-  std::unique_ptr<CFWL_WidgetImpProperties> m_pProperties;
+  std::unique_ptr<CFWL_WidgetProperties> m_pProperties;
   IFWL_Widget* m_pOuter;
   void* m_pLayoutItem;
   CFWL_Widget* m_pAssociate;
