diff --git a/fpdfsdk/BUILD.gn b/fpdfsdk/BUILD.gn
index a8c7ec4..62df18b 100644
--- a/fpdfsdk/BUILD.gn
+++ b/fpdfsdk/BUILD.gn
@@ -22,6 +22,8 @@
     "cpdfsdk_annotiteration.h",
     "cpdfsdk_annotiterator.cpp",
     "cpdfsdk_annotiterator.h",
+    "cpdfsdk_appstream.cpp",
+    "cpdfsdk_appstream.h",
     "cpdfsdk_baannot.cpp",
     "cpdfsdk_baannot.h",
     "cpdfsdk_baannothandler.cpp",
diff --git a/fpdfsdk/pwl/cpwl_appstream.cpp b/fpdfsdk/cpdfsdk_appstream.cpp
similarity index 98%
rename from fpdfsdk/pwl/cpwl_appstream.cpp
rename to fpdfsdk/cpdfsdk_appstream.cpp
index eeac642..2a12c11 100644
--- a/fpdfsdk/pwl/cpwl_appstream.cpp
+++ b/fpdfsdk/cpdfsdk_appstream.cpp
@@ -4,7 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "fpdfsdk/pwl/cpwl_appstream.h"
+#include "fpdfsdk/cpdfsdk_appstream.h"
 
 #include <utility>
 
@@ -1117,12 +1117,13 @@
 
 }  // namespace
 
-CPWL_AppStream::CPWL_AppStream(CPDFSDK_Widget* widget, CPDF_Dictionary* dict)
+CPDFSDK_AppStream::CPDFSDK_AppStream(CPDFSDK_Widget* widget,
+                                     CPDF_Dictionary* dict)
     : widget_(widget), dict_(dict) {}
 
-CPWL_AppStream::~CPWL_AppStream() {}
+CPDFSDK_AppStream::~CPDFSDK_AppStream() {}
 
-void CPWL_AppStream::SetAsPushButton() {
+void CPDFSDK_AppStream::SetAsPushButton() {
   CPDF_FormControl* pControl = widget_->GetFormControl();
   CFX_FloatRect rcWindow = widget_->GetRotatedRect();
   ButtonStyle nLayout = ButtonStyle::kLabel;
@@ -1310,7 +1311,7 @@
   }
 }
 
-void CPWL_AppStream::SetAsCheckBox() {
+void CPDFSDK_AppStream::SetAsCheckBox() {
   CPDF_FormControl* pControl = widget_->GetFormControl();
   CFX_Color crBackground, crBorder, crText;
   int iColorType;
@@ -1425,7 +1426,7 @@
     widget_->SetAppState("Off");
 }
 
-void CPWL_AppStream::SetAsRadioButton() {
+void CPDFSDK_AppStream::SetAsRadioButton() {
   CPDF_FormControl* pControl = widget_->GetFormControl();
   CFX_Color crBackground;
   CFX_Color crBorder;
@@ -1578,7 +1579,7 @@
     widget_->SetAppState("Off");
 }
 
-void CPWL_AppStream::SetAsComboBox(Optional<WideString> sValue) {
+void CPDFSDK_AppStream::SetAsComboBox(Optional<WideString> sValue) {
   CPDF_FormControl* pControl = widget_->GetFormControl();
   CPDF_FormField* pField = pControl->GetField();
   std::ostringstream sBody;
@@ -1648,7 +1649,7 @@
         ByteString());
 }
 
-void CPWL_AppStream::SetAsListBox() {
+void CPDFSDK_AppStream::SetAsListBox() {
   CPDF_FormControl* pControl = widget_->GetFormControl();
   CPDF_FormField* pField = pControl->GetField();
   CFX_FloatRect rcClient = widget_->GetClientRect();
@@ -1732,7 +1733,7 @@
         ByteString());
 }
 
-void CPWL_AppStream::SetAsTextField(Optional<WideString> sValue) {
+void CPDFSDK_AppStream::SetAsTextField(Optional<WideString> sValue) {
   CPDF_FormControl* pControl = widget_->GetFormControl();
   CPDF_FormField* pField = pControl->GetField();
   std::ostringstream sBody;
@@ -1880,7 +1881,8 @@
         ByteString());
 }
 
-void CPWL_AppStream::AddImage(const ByteString& sAPType, CPDF_Stream* pImage) {
+void CPDFSDK_AppStream::AddImage(const ByteString& sAPType,
+                                 CPDF_Stream* pImage) {
   CPDF_Stream* pStream = dict_->GetStreamFor(sAPType);
   CPDF_Dictionary* pStreamDict = pStream->GetDict();
   ByteString sImageAlias = "IMG";
@@ -1902,9 +1904,9 @@
                                       pImage->GetObjNum());
 }
 
-void CPWL_AppStream::Write(const ByteString& sAPType,
-                           const ByteString& sContents,
-                           const ByteString& sAPState) {
+void CPDFSDK_AppStream::Write(const ByteString& sAPType,
+                              const ByteString& sContents,
+                              const ByteString& sAPState) {
   CPDF_Stream* pStream = nullptr;
   CPDF_Dictionary* pParentDict = nullptr;
   if (sAPState.IsEmpty()) {
@@ -1940,11 +1942,11 @@
   pStream->SetDataAndRemoveFilter(sContents.raw_span());
 }
 
-void CPWL_AppStream::Remove(const ByteString& sAPType) {
+void CPDFSDK_AppStream::Remove(const ByteString& sAPType) {
   dict_->RemoveFor(sAPType);
 }
 
-ByteString CPWL_AppStream::GetBackgroundAppStream() const {
+ByteString CPDFSDK_AppStream::GetBackgroundAppStream() const {
   CFX_Color crBackground = widget_->GetFillPWLColor();
   if (crBackground.nColorType != CFX_Color::kTransparent)
     return GetRectFillAppStream(widget_->GetRotatedRect(), crBackground);
@@ -1952,7 +1954,7 @@
   return ByteString();
 }
 
-ByteString CPWL_AppStream::GetBorderAppStream() const {
+ByteString CPDFSDK_AppStream::GetBorderAppStream() const {
   CFX_FloatRect rcWindow = widget_->GetRotatedRect();
   CFX_Color crBorder = widget_->GetBorderPWLColor();
   CFX_Color crBackground = widget_->GetFillPWLColor();
diff --git a/fpdfsdk/pwl/cpwl_appstream.h b/fpdfsdk/cpdfsdk_appstream.h
similarity index 81%
rename from fpdfsdk/pwl/cpwl_appstream.h
rename to fpdfsdk/cpdfsdk_appstream.h
index bf839cf..8a38a86 100644
--- a/fpdfsdk/pwl/cpwl_appstream.h
+++ b/fpdfsdk/cpdfsdk_appstream.h
@@ -4,8 +4,8 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef FPDFSDK_PWL_CPWL_APPSTREAM_H_
-#define FPDFSDK_PWL_CPWL_APPSTREAM_H_
+#ifndef FPDFSDK_CPDFSDK_APPSTREAM_H_
+#define FPDFSDK_CPDFSDK_APPSTREAM_H_
 
 #include "core/fxcrt/fx_string.h"
 #include "core/fxcrt/unowned_ptr.h"
@@ -15,10 +15,10 @@
 class CPDF_Dictionary;
 class CPDF_Stream;
 
-class CPWL_AppStream {
+class CPDFSDK_AppStream {
  public:
-  CPWL_AppStream(CPDFSDK_Widget* widget, CPDF_Dictionary* dict);
-  ~CPWL_AppStream();
+  CPDFSDK_AppStream(CPDFSDK_Widget* widget, CPDF_Dictionary* dict);
+  ~CPDFSDK_AppStream();
 
   void SetAsPushButton();
   void SetAsCheckBox();
@@ -41,4 +41,4 @@
   RetainPtr<CPDF_Dictionary> const dict_;
 };
 
-#endif  // FPDFSDK_PWL_CPWL_APPSTREAM_H_
+#endif  // FPDFSDK_CPDFSDK_APPSTREAM_H_
diff --git a/fpdfsdk/cpdfsdk_widget.cpp b/fpdfsdk/cpdfsdk_widget.cpp
index 2eae13f..5ea5f03 100644
--- a/fpdfsdk/cpdfsdk_widget.cpp
+++ b/fpdfsdk/cpdfsdk_widget.cpp
@@ -26,10 +26,10 @@
 #include "core/fxge/cfx_pathdata.h"
 #include "core/fxge/cfx_renderdevice.h"
 #include "fpdfsdk/cpdfsdk_actionhandler.h"
+#include "fpdfsdk/cpdfsdk_appstream.h"
 #include "fpdfsdk/cpdfsdk_formfillenvironment.h"
 #include "fpdfsdk/cpdfsdk_interactiveform.h"
 #include "fpdfsdk/cpdfsdk_pageview.h"
-#include "fpdfsdk/pwl/cpwl_appstream.h"
 #include "fpdfsdk/pwl/cpwl_edit.h"
 
 #ifdef PDF_ENABLE_XFA
@@ -605,7 +605,7 @@
   if (bValueChanged)
     m_nValueAge++;
 
-  CPWL_AppStream appStream(this, GetAPDict());
+  CPDFSDK_AppStream appStream(this, GetAPDict());
   switch (GetFieldType()) {
     case FormFieldType::kPushButton:
       appStream.SetAsPushButton();
diff --git a/fpdfsdk/pwl/BUILD.gn b/fpdfsdk/pwl/BUILD.gn
index 60dc957..a771aa5 100644
--- a/fpdfsdk/pwl/BUILD.gn
+++ b/fpdfsdk/pwl/BUILD.gn
@@ -8,8 +8,6 @@
 
 jumbo_source_set("pwl") {
   sources = [
-    "cpwl_appstream.cpp",
-    "cpwl_appstream.h",
     "cpwl_button.cpp",
     "cpwl_button.h",
     "cpwl_caret.cpp",
diff --git a/fpdfsdk/pwl/README.md b/fpdfsdk/pwl/README.md
index 1a73250..d9be3b1 100644
--- a/fpdfsdk/pwl/README.md
+++ b/fpdfsdk/pwl/README.md
@@ -17,5 +17,5 @@
     * CPWL_ScrollBar
 
 Widgets are rendered to Appearance Streams, with the case all centralized in
-CPWL_AppStream.
+CPDFSDK_AppStream.
 
