diff --git a/fxjs/BUILD.gn b/fxjs/BUILD.gn
index af81d21..cb0dd1b 100644
--- a/fxjs/BUILD.gn
+++ b/fxjs/BUILD.gn
@@ -179,8 +179,6 @@
         "xfa/cjx_handler.h",
         "xfa/cjx_hostpseudomodel.cpp",
         "xfa/cjx_hostpseudomodel.h",
-        "xfa/cjx_image.cpp",
-        "xfa/cjx_image.h",
         "xfa/cjx_instancemanager.cpp",
         "xfa/cjx_instancemanager.h",
         "xfa/cjx_integer.cpp",
diff --git a/fxjs/xfa/cjx_exclgroup.cpp b/fxjs/xfa/cjx_exclgroup.cpp
index d2ed193..cb68916 100644
--- a/fxjs/xfa/cjx_exclgroup.cpp
+++ b/fxjs/xfa/cjx_exclgroup.cpp
@@ -159,6 +159,13 @@
   ScriptSomBorderWidth(pValue, bSetting, eAttribute);
 }
 
+void CJX_ExclGroup::errorText(CFXJSE_Value* pValue,
+                              bool bSetting,
+                              XFA_Attribute eAttribute) {
+  if (bSetting)
+    ThrowInvalidPropertyException();
+}
+
 void CJX_ExclGroup::fillColor(CFXJSE_Value* pValue,
                               bool bSetting,
                               XFA_Attribute eAttribute) {
diff --git a/fxjs/xfa/cjx_exclgroup.h b/fxjs/xfa/cjx_exclgroup.h
index 0fa3fc6..f71bb5f 100644
--- a/fxjs/xfa/cjx_exclgroup.h
+++ b/fxjs/xfa/cjx_exclgroup.h
@@ -29,6 +29,7 @@
   JSE_PROP(defaultValue); /* {default} */
   JSE_PROP(borderColor);
   JSE_PROP(borderWidth);
+  JSE_PROP(errorText);
   JSE_PROP(fillColor);
   JSE_PROP(mandatory);
   JSE_PROP(mandatoryMessage);
diff --git a/fxjs/xfa/cjx_field.cpp b/fxjs/xfa/cjx_field.cpp
index 7f0d05f..53cf91b 100644
--- a/fxjs/xfa/cjx_field.cpp
+++ b/fxjs/xfa/cjx_field.cpp
@@ -333,6 +333,22 @@
       node->GetValue(XFA_VALUEPICTURE_Display).ToUTF8().AsStringView());
 }
 
+void CJX_Field::length(CFXJSE_Value* pValue,
+                       bool bSetting,
+                       XFA_Attribute eAttribute) {
+  if (bSetting) {
+    ThrowInvalidPropertyException();
+    return;
+  }
+
+  CXFA_Node* node = GetXFANode();
+  if (!node->IsWidgetReady()) {
+    pValue->SetInteger(0);
+    return;
+  }
+  pValue->SetInteger(node->CountChoiceListItems(true));
+}
+
 void CJX_Field::parentSubform(CFXJSE_Value* pValue,
                               bool bSetting,
                               XFA_Attribute eAttribute) {
diff --git a/fxjs/xfa/cjx_field.h b/fxjs/xfa/cjx_field.h
index 182c592..cceaea3 100644
--- a/fxjs/xfa/cjx_field.h
+++ b/fxjs/xfa/cjx_field.h
@@ -41,6 +41,7 @@
   JSE_PROP(fontColor);
   JSE_PROP(formatMessage);
   JSE_PROP(formattedValue);
+  JSE_PROP(length);
   JSE_PROP(mandatory);
   JSE_PROP(mandatoryMessage);
   JSE_PROP(parentSubform);
diff --git a/fxjs/xfa/cjx_form.cpp b/fxjs/xfa/cjx_form.cpp
index c67688b..0a65286 100644
--- a/fxjs/xfa/cjx_form.cpp
+++ b/fxjs/xfa/cjx_form.cpp
@@ -126,3 +126,16 @@
                                                false, true);
   return CJS_Result::Success(runtime->NewBoolean(iRet != XFA_EVENTERROR_Error));
 }
+
+void CJX_Form::checksumS(CFXJSE_Value* pValue,
+                         bool bSetting,
+                         XFA_Attribute eAttribute) {
+  if (bSetting) {
+    SetAttribute(XFA_Attribute::Checksum, pValue->ToWideString().AsStringView(),
+                 false);
+    return;
+  }
+
+  Optional<WideString> checksum = TryAttribute(XFA_Attribute::Checksum, false);
+  pValue->SetString(checksum ? checksum->ToUTF8().AsStringView() : "");
+}
diff --git a/fxjs/xfa/cjx_form.h b/fxjs/xfa/cjx_form.h
index 0968c55..c7b1ce3 100644
--- a/fxjs/xfa/cjx_form.h
+++ b/fxjs/xfa/cjx_form.h
@@ -27,6 +27,8 @@
   JSE_METHOD(recalculate);
   JSE_METHOD(remerge);
 
+  JSE_PROP(checksumS);
+
  private:
   using Type__ = CJX_Form;
   using ParentType__ = CJX_Model;
diff --git a/fxjs/xfa/cjx_image.cpp b/fxjs/xfa/cjx_image.cpp
deleted file mode 100644
index 794f353..0000000
--- a/fxjs/xfa/cjx_image.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2017 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 "fxjs/xfa/cjx_image.h"
-
-#include "xfa/fxfa/parser/cxfa_image.h"
-
-CJX_Image::CJX_Image(CXFA_Image* node) : CJX_Node(node) {}
-
-CJX_Image::~CJX_Image() = default;
-
-bool CJX_Image::DynamicTypeIs(TypeTag eType) const {
-  return eType == static_type__ || ParentType__::DynamicTypeIs(eType);
-}
-
-void CJX_Image::defaultValue(CFXJSE_Value* pValue,
-                             bool bSetting,
-                             XFA_Attribute eAttribute) {
-  ScriptSomDefaultValue_Read(pValue, bSetting, eAttribute);
-}
-
-void CJX_Image::value(CFXJSE_Value* pValue,
-                      bool bSetting,
-                      XFA_Attribute eAttribute) {
-  ScriptSomDefaultValue_Read(pValue, bSetting, eAttribute);
-}
diff --git a/fxjs/xfa/cjx_image.h b/fxjs/xfa/cjx_image.h
deleted file mode 100644
index ad9a113..0000000
--- a/fxjs/xfa/cjx_image.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2017 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 FXJS_XFA_CJX_IMAGE_H_
-#define FXJS_XFA_CJX_IMAGE_H_
-
-#include "fxjs/xfa/cjx_node.h"
-#include "fxjs/xfa/jse_define.h"
-
-class CXFA_Image;
-
-class CJX_Image final : public CJX_Node {
- public:
-  explicit CJX_Image(CXFA_Image* node);
-  ~CJX_Image() override;
-
-  // CJX_Object:
-  bool DynamicTypeIs(TypeTag eType) const override;
-
-  JSE_PROP(defaultValue); /* {default} */
-  JSE_PROP(value);
-
- private:
-  using Type__ = CJX_Image;
-  using ParentType__ = CJX_Node;
-
-  static const TypeTag static_type__ = TypeTag::Image;
-};
-
-#endif  // FXJS_XFA_CJX_IMAGE_H_
diff --git a/fxjs/xfa/cjx_object.cpp b/fxjs/xfa/cjx_object.cpp
index 5cec0c7..860a612 100644
--- a/fxjs/xfa/cjx_object.cpp
+++ b/fxjs/xfa/cjx_object.cpp
@@ -1393,22 +1393,6 @@
   ScriptSomMessage(pValue, bSetting, XFA_SOM_MandatoryMessage);
 }
 
-void CJX_Object::ScriptFieldLength(CFXJSE_Value* pValue,
-                                   bool bSetting,
-                                   XFA_Attribute eAttribute) {
-  if (bSetting) {
-    ThrowInvalidPropertyException();
-    return;
-  }
-
-  CXFA_Node* node = ToNode(object_.Get());
-  if (!node->IsWidgetReady()) {
-    pValue->SetInteger(0);
-    return;
-  }
-  pValue->SetInteger(node->CountChoiceListItems(true));
-}
-
 void CJX_Object::ScriptSomDefaultValue(CFXJSE_Value* pValue,
                                        bool bSetting,
                                        XFA_Attribute /* unused */) {
@@ -1571,57 +1555,7 @@
   }
 }
 
-void CJX_Object::ScriptSubformInstanceManager(CFXJSE_Value* pValue,
-                                              bool bSetting,
-                                              XFA_Attribute eAttribute) {
-  if (bSetting) {
-    ThrowInvalidPropertyException();
-    return;
-  }
-
-  WideString wsName = GetCData(XFA_Attribute::Name);
-  CXFA_Node* pInstanceMgr = nullptr;
-  for (CXFA_Node* pNode = ToNode(GetXFAObject())->GetPrevSibling(); pNode;
-       pNode = pNode->GetPrevSibling()) {
-    if (pNode->GetElementType() == XFA_Element::InstanceManager) {
-      WideString wsInstMgrName =
-          pNode->JSObject()->GetCData(XFA_Attribute::Name);
-      if (wsInstMgrName.GetLength() >= 1 && wsInstMgrName[0] == '_' &&
-          wsInstMgrName.Right(wsInstMgrName.GetLength() - 1) == wsName) {
-        pInstanceMgr = pNode;
-      }
-      break;
-    }
-  }
-  if (!pInstanceMgr) {
-    pValue->SetNull();
-    return;
-  }
-
-  pValue->Assign(
-      GetDocument()->GetScriptContext()->GetJSValueFromMap(pInstanceMgr));
-}
-
 void CJX_Object::ScriptSubmitFormatMode(CFXJSE_Value* pValue,
                                         bool bSetting,
                                         XFA_Attribute eAttribute) {}
 
-void CJX_Object::ScriptFormChecksumS(CFXJSE_Value* pValue,
-                                     bool bSetting,
-                                     XFA_Attribute eAttribute) {
-  if (bSetting) {
-    SetAttribute(XFA_Attribute::Checksum, pValue->ToWideString().AsStringView(),
-                 false);
-    return;
-  }
-
-  Optional<WideString> checksum = TryAttribute(XFA_Attribute::Checksum, false);
-  pValue->SetString(checksum ? checksum->ToUTF8().AsStringView() : "");
-}
-
-void CJX_Object::ScriptExclGroupErrorText(CFXJSE_Value* pValue,
-                                          bool bSetting,
-                                          XFA_Attribute eAttribute) {
-  if (bSetting)
-    ThrowInvalidPropertyException();
-}
diff --git a/fxjs/xfa/cjx_object.h b/fxjs/xfa/cjx_object.h
index 48a1361..557e6a3 100644
--- a/fxjs/xfa/cjx_object.h
+++ b/fxjs/xfa/cjx_object.h
@@ -175,16 +175,12 @@
   JSE_PROP(ScriptSomBorderWidth);
   JSE_PROP(ScriptSomValidationMessage);
   JSE_PROP(ScriptSomMandatoryMessage);
-  JSE_PROP(ScriptFieldLength);
   JSE_PROP(ScriptSomDefaultValue);
   JSE_PROP(ScriptSomDefaultValue_Read);
   JSE_PROP(ScriptSomDataNode);
   JSE_PROP(ScriptSomMandatory);
   JSE_PROP(ScriptSomInstanceIndex);
-  JSE_PROP(ScriptSubformInstanceManager);
   JSE_PROP(ScriptSubmitFormatMode);
-  JSE_PROP(ScriptFormChecksumS);
-  JSE_PROP(ScriptExclGroupErrorText);
 
   void ScriptSomMessage(CFXJSE_Value* pValue,
                         bool bSetting,
diff --git a/fxjs/xfa/cjx_subform.cpp b/fxjs/xfa/cjx_subform.cpp
index ffe078f..4a5d00d 100644
--- a/fxjs/xfa/cjx_subform.cpp
+++ b/fxjs/xfa/cjx_subform.cpp
@@ -10,6 +10,7 @@
 
 #include "fxjs/cfx_v8.h"
 #include "fxjs/js_resources.h"
+#include "fxjs/xfa/cfxjse_engine.h"
 #include "fxjs/xfa/cfxjse_value.h"
 #include "xfa/fxfa/cxfa_eventparam.h"
 #include "xfa/fxfa/cxfa_ffnotify.h"
@@ -103,6 +104,37 @@
   ScriptSomInstanceIndex(pValue, bSetting, eAttribute);
 }
 
+void CJX_Subform::instanceManager(CFXJSE_Value* pValue,
+                                  bool bSetting,
+                                  XFA_Attribute eAttribute) {
+  if (bSetting) {
+    ThrowInvalidPropertyException();
+    return;
+  }
+
+  WideString wsName = GetCData(XFA_Attribute::Name);
+  CXFA_Node* pInstanceMgr = nullptr;
+  for (CXFA_Node* pNode = ToNode(GetXFAObject())->GetPrevSibling(); pNode;
+       pNode = pNode->GetPrevSibling()) {
+    if (pNode->GetElementType() == XFA_Element::InstanceManager) {
+      WideString wsInstMgrName =
+          pNode->JSObject()->GetCData(XFA_Attribute::Name);
+      if (wsInstMgrName.GetLength() >= 1 && wsInstMgrName[0] == '_' &&
+          wsInstMgrName.Right(wsInstMgrName.GetLength() - 1) == wsName) {
+        pInstanceMgr = pNode;
+      }
+      break;
+    }
+  }
+  if (!pInstanceMgr) {
+    pValue->SetNull();
+    return;
+  }
+
+  pValue->Assign(
+      GetDocument()->GetScriptContext()->GetJSValueFromMap(pInstanceMgr));
+}
+
 void CJX_Subform::layout(CFXJSE_Value* pValue,
                          bool bSetting,
                          XFA_Attribute eAttribute) {
diff --git a/fxjs/xfa/cjx_subform.h b/fxjs/xfa/cjx_subform.h
index 9422e82..c921aa8 100644
--- a/fxjs/xfa/cjx_subform.h
+++ b/fxjs/xfa/cjx_subform.h
@@ -26,6 +26,7 @@
   JSE_METHOD(execValidate);
 
   JSE_PROP(instanceIndex);
+  JSE_PROP(instanceManager);
   JSE_PROP(layout);
   JSE_PROP(locale);
   JSE_PROP(validationMessage);
diff --git a/xfa/fxfa/parser/element_attributes.inc b/xfa/fxfa/parser/element_attributes.inc
index 2cce37b..4ae7468 100644
--- a/xfa/fxfa/parser/element_attributes.inc
+++ b/xfa/fxfa/parser/element_attributes.inc
@@ -179,7 +179,7 @@
 ELEM_ATTR____(Field, FormatMessage, CJX_Field::formatMessage)
 ELEM_ATTR____(Field, RawValue, CJX_Field::rawValue)
 ELEM_ATTR____(Field, DefaultValue, CJX_Field::defaultValue)
-ELEM_ATTR____(Field, Length, CJX_Object::ScriptFieldLength)
+ELEM_ATTR____(Field, Length, CJX_Field::length)
 ELEM_ATTR____(Field, ColSpan, CJX_Object::ScriptAttributeString)
 ELEM_ATTR____(Field, Locale, CJX_Object::ScriptAttributeString)
 ELEM_ATTR____(Field, AnchorType, CJX_Object::ScriptAttributeString)
@@ -208,7 +208,7 @@
 ELEM_ATTR____(ExclGroup, X, CJX_Object::ScriptAttributeString)
 ELEM_ATTR____(ExclGroup, Y, CJX_Object::ScriptAttributeString)
 ELEM_ATTR____(ExclGroup, HAlign, CJX_Object::ScriptAttributeString)
-ELEM_ATTR____(ExclGroup, ErrorText, CJX_Object::ScriptExclGroupErrorText)
+ELEM_ATTR____(ExclGroup, ErrorText, CJX_ExclGroup::errorText)
 ELEM_ATTR____(ExclGroup, DataNode, CJX_Object::ScriptSomDataNode)
 ELEM_ATTR____(ExclGroup, Access, CJX_Object::ScriptAttributeString)
 ELEM_ATTR____(ExclGroup, FillColor, CJX_ExclGroup::fillColor)
@@ -238,9 +238,9 @@
 ELEM_ATTR____(DateTimeEdit, HScrollPolicy, CJX_Object::ScriptAttributeString)
 ELEM_ATTR____(Image, ContentType, CJX_Object::ScriptAttributeString)
 ELEM_ATTR____(Image, TransferEncoding, CJX_Object::ScriptAttributeString)
-ELEM_ATTR____(Image, DefaultValue, CJX_Image::defaultValue)
+ELEM_ATTR____(Image, DefaultValue, CJX_Object::ScriptSomDefaultValue_Read)
 ELEM_ATTR____(Image, Aspect, CJX_Object::ScriptAttributeString)
-ELEM_ATTR____(Image, Value, CJX_Image::value)
+ELEM_ATTR____(Image, Value, CJX_Object::ScriptSomDefaultValue_Read)
 ELEM_ATTR____(Image, Href, CJX_Object::ScriptAttributeString)
 ELEM_ATTR____(SharpxHTML, Value, CJX_Object::ScriptAttributeString)
 ELEM_ATTR____(TimeStamp, Type, CJX_Object::ScriptAttributeString)
@@ -270,7 +270,7 @@
 ELEM_ATTR____(Subform, Layout, CJX_Subform::layout)
 ELEM_ATTR____(Subform, Relevant, CJX_Object::ScriptAttributeString)
 ELEM_ATTR____(Subform, MergeMode, CJX_Object::ScriptAttributeString)
-ELEM_ATTR____(Subform, InstanceManager, CJX_Object::ScriptSubformInstanceManager)
+ELEM_ATTR____(Subform, InstanceManager, CJX_Subform::instanceManager)
 ELEM_ATTR____(Subform, ColSpan, CJX_Object::ScriptAttributeString)
 ELEM_ATTR____(Subform, Locale, CJX_Subform::locale)
 ELEM_ATTR____(Subform, AnchorType, CJX_Object::ScriptAttributeString)
@@ -442,7 +442,7 @@
 ELEM_ATTR____(Font, Weight, CJX_Object::ScriptAttributeString)
 ELEM_ATTR____(Font, UnderlinePeriod, CJX_Object::ScriptAttributeString)
 ELEM_ATTR____(Font, Overline, CJX_Object::ScriptAttributeString)
-ELEM_ATTR____(Form, Checksum, CJX_Object::ScriptFormChecksumS)
+ELEM_ATTR____(Form, Checksum, CJX_Form::checksumS)
 ELEM_ATTR____(Float, DefaultValue, CJX_Float::defaultValue)
 ELEM_ATTR____(Float, Value, CJX_Float::value)
 ELEM_ATTR____(Value, Relevant, CJX_Object::ScriptAttributeString)
diff --git a/xfa/fxfa/parser/xfa_basic_data.cpp b/xfa/fxfa/parser/xfa_basic_data.cpp
index 5976d73..ed8bd71 100644
--- a/xfa/fxfa/parser/xfa_basic_data.cpp
+++ b/xfa/fxfa/parser/xfa_basic_data.cpp
@@ -26,9 +26,9 @@
 #include "fxjs/xfa/cjx_extras.h"
 #include "fxjs/xfa/cjx_field.h"
 #include "fxjs/xfa/cjx_float.h"
+#include "fxjs/xfa/cjx_form.h"
 #include "fxjs/xfa/cjx_handler.h"
 #include "fxjs/xfa/cjx_hostpseudomodel.h"
-#include "fxjs/xfa/cjx_image.h"
 #include "fxjs/xfa/cjx_instancemanager.h"
 #include "fxjs/xfa/cjx_integer.h"
 #include "fxjs/xfa/cjx_layoutpseudomodel.h"
