sw/inc/IDocumentMarkAccess.hxx                          |   22 +++---
 sw/inc/IMark.hxx                                        |   58 ++++------------
 sw/inc/crsrsh.hxx                                       |   10 +-
 sw/inc/swabstdlg.hxx                                    |    4 -
 sw/inc/view.hxx                                         |    2 
 sw/qa/core/uwriter.cxx                                  |    2 
 sw/qa/extras/globalfilter/globalfilter.cxx              |   14 +--
 sw/qa/extras/ooxmlexport/ooxmlexport8.cxx               |    4 -
 sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx           |    6 -
 sw/qa/extras/rtfexport/rtfexport4.cxx                   |    2 
 sw/qa/extras/uiwriter/uiwriter4.cxx                     |    2 
 sw/qa/extras/uiwriter/uiwriter5.cxx                     |   20 ++---
 sw/qa/uibase/shells/shells.cxx                          |    2 
 sw/source/core/crsr/DropDownFormFieldButton.cxx         |    6 -
 sw/source/core/crsr/bookmark.cxx                        |   18 ++--
 sw/source/core/crsr/crbm.cxx                            |    8 +-
 sw/source/core/crsr/crstrvl.cxx                         |   12 +--
 sw/source/core/crsr/pam.cxx                             |    4 -
 sw/source/core/crsr/swcrsr.cxx                          |    6 -
 sw/source/core/doc/DocumentContentOperationsManager.cxx |   18 ++--
 sw/source/core/doc/docbm.cxx                            |   44 ++++++------
 sw/source/core/inc/MarkManager.hxx                      |   18 ++--
 sw/source/core/inc/UndoBookmark.hxx                     |   10 +-
 sw/source/core/inc/bookmark.hxx                         |    2 
 sw/source/core/inc/rolbck.hxx                           |    4 -
 sw/source/core/inc/unobookmark.hxx                      |   12 +--
 sw/source/core/text/itrform2.cxx                        |   10 +-
 sw/source/core/text/porfld.hxx                          |   10 +-
 sw/source/core/text/portxt.cxx                          |    4 -
 sw/source/core/text/redlnitr.cxx                        |    4 -
 sw/source/core/txtnode/modeltoviewhelper.cxx            |    8 +-
 sw/source/core/undo/rolbck.cxx                          |    8 +-
 sw/source/core/undo/unbkmk.cxx                          |    8 +-
 sw/source/core/unocore/unobkm.cxx                       |   32 ++++----
 sw/source/core/unocore/unoportenum.cxx                  |    6 -
 sw/source/core/unocore/unotext.cxx                      |    4 -
 sw/source/core/view/viewsh.cxx                          |    2 
 sw/source/filter/html/wrthtml.cxx                       |    2 
 sw/source/filter/ww8/docxattributeoutput.cxx            |   10 +-
 sw/source/filter/ww8/docxattributeoutput.hxx            |    4 -
 sw/source/filter/ww8/docxexport.cxx                     |    4 -
 sw/source/filter/ww8/docxexport.hxx                     |    4 -
 sw/source/filter/ww8/rtfexport.cxx                      |    4 -
 sw/source/filter/ww8/rtfexport.hxx                      |    4 -
 sw/source/filter/ww8/writerhelper.cxx                   |    2 
 sw/source/filter/ww8/wrtw8nds.cxx                       |   18 ++--
 sw/source/filter/ww8/wrtww8.cxx                         |   16 ++--
 sw/source/filter/ww8/wrtww8.hxx                         |   10 +-
 sw/source/filter/ww8/ww8par.hxx                         |    4 -
 sw/source/filter/ww8/ww8par3.cxx                        |    6 -
 sw/source/filter/ww8/ww8par5.cxx                        |    8 +-
 sw/source/ui/dialog/swdlgfact.cxx                       |    2 
 sw/source/ui/dialog/swdlgfact.hxx                       |    2 
 sw/source/ui/fldui/DateFormFieldDialog.cxx              |    4 -
 sw/source/ui/fldui/DropDownFormFieldDialog.cxx          |    6 -
 sw/source/ui/vba/vbacontentcontrols.cxx                 |    2 
 sw/source/ui/vba/vbaformfield.cxx                       |   10 +-
 sw/source/ui/vba/vbaformfield.hxx                       |    4 -
 sw/source/ui/vba/vbaformfieldcheckbox.cxx               |    2 
 sw/source/ui/vba/vbaformfieldcheckbox.hxx               |    2 
 sw/source/ui/vba/vbaformfielddropdown.cxx               |    2 
 sw/source/ui/vba/vbaformfielddropdown.hxx               |    2 
 sw/source/ui/vba/vbaformfields.cxx                      |   14 +--
 sw/source/ui/vba/vbaformfieldtextinput.cxx              |    2 
 sw/source/ui/vba/vbaformfieldtextinput.hxx              |    4 -
 sw/source/uibase/docvw/edtwin.cxx                       |    6 -
 sw/source/uibase/inc/DropDownFormFieldDialog.hxx        |    6 -
 sw/source/uibase/inc/wrtsh.hxx                          |    2 
 sw/source/uibase/shells/basesh.cxx                      |    2 
 sw/source/uibase/shells/textfld.cxx                     |   14 +--
 sw/source/uibase/shells/textsh1.cxx                     |    4 -
 sw/source/uibase/uno/loktxdoc.cxx                       |    4 -
 sw/source/uibase/uno/unotxdoc.cxx                       |    2 
 sw/source/uibase/wrtsh/delete.cxx                       |    4 -
 sw/source/uibase/wrtsh/wrtsh1.cxx                       |    4 -
 sw/source/uibase/wrtsh/wrtsh3.cxx                       |    2 
 76 files changed, 292 insertions(+), 318 deletions(-)

New commits:
commit f9c4fd0b981d7a0ebf76d3110955e16809dd6068
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Sun Aug 4 16:28:17 2024 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Sun Aug 4 21:07:26 2024 +0200

    simplify IMark hierarchy (5)
    
    merge into IFieldmark into Fieldmark
    
    Change-Id: Ide5c01fe49bae0be45746f6b581d72342da9c3a0
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/171463
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/sw/inc/IDocumentMarkAccess.hxx b/sw/inc/IDocumentMarkAccess.hxx
index 377013b94c89..438c94a6b704 100644
--- a/sw/inc/IDocumentMarkAccess.hxx
+++ b/sw/inc/IDocumentMarkAccess.hxx
@@ -134,11 +134,11 @@ class IDocumentMarkAccess
             MarkType eMark, ::sw::mark::InsertMode eMode,
             SwPosition const* pSepPos = nullptr) = 0;
 
-        virtual sw::mark::IFieldmark* makeFieldBookmark( const SwPaM& rPaM,
+        virtual sw::mark::Fieldmark* makeFieldBookmark( const SwPaM& rPaM,
             const OUString& rName,
             const OUString& rType,
             SwPosition const* pSepPos = nullptr) = 0;
-        virtual sw::mark::IFieldmark* makeNoTextFieldBookmark( const SwPaM& 
rPaM,
+        virtual sw::mark::Fieldmark* makeNoTextFieldBookmark( const SwPaM& 
rPaM,
             const OUString& rName,
             const OUString& rType) = 0;
 
@@ -332,20 +332,20 @@ class IDocumentMarkAccess
         */
         virtual const_iterator_t getFieldmarksEnd() const =0;
 
-        /// returns the number of IFieldmarks.
+        /// returns the number of Fieldmarks.
         virtual sal_Int32 getFieldmarksCount() const = 0;
 
         /// get Fieldmark for CH_TXT_ATR_FIELDSTART/CH_TXT_ATR_FIELDEND at rPos
-        virtual ::sw::mark::IFieldmark* getFieldmarkAt(const SwPosition& rPos) 
const =0;
-        virtual sw::mark::IFieldmark* getInnerFieldmarkFor(const SwPosition& 
pos) const = 0;
-        virtual sw::mark::IFieldmark* getFieldmarkBefore(const SwPosition& 
pos, bool bLoop) const =0;
-        virtual sw::mark::IFieldmark* getFieldmarkAfter(const SwPosition& pos, 
bool bLoop) const =0;
+        virtual ::sw::mark::Fieldmark* getFieldmarkAt(const SwPosition& rPos) 
const =0;
+        virtual sw::mark::Fieldmark* getInnerFieldmarkFor(const SwPosition& 
pos) const = 0;
+        virtual sw::mark::Fieldmark* getFieldmarkBefore(const SwPosition& pos, 
bool bLoop) const =0;
+        virtual sw::mark::Fieldmark* getFieldmarkAfter(const SwPosition& pos, 
bool bLoop) const =0;
 
-        virtual ::sw::mark::IFieldmark* getDropDownFor(const SwPosition& pos) 
const=0;
-        virtual std::vector<::sw::mark::IFieldmark*> 
getNoTextFieldmarksIn(const SwPaM &rPaM) const=0;
+        virtual ::sw::mark::Fieldmark* getDropDownFor(const SwPosition& pos) 
const=0;
+        virtual std::vector<::sw::mark::Fieldmark*> 
getNoTextFieldmarksIn(const SwPaM &rPaM) const=0;
 
         virtual void deleteFieldmarkAt(const SwPosition& rPos) = 0;
-        virtual ::sw::mark::IFieldmark* 
changeFormFieldmarkType(::sw::mark::IFieldmark* pFieldmark, const OUString& 
rNewType) = 0;
+        virtual ::sw::mark::Fieldmark* 
changeFormFieldmarkType(::sw::mark::Fieldmark* pFieldmark, const OUString& 
rNewType) = 0;
 
         virtual void NotifyCursorUpdate(const SwCursorShell& rCursorShell) = 0;
         virtual void ClearFieldActivation() = 0;
@@ -377,7 +377,7 @@ class IDocumentMarkAccess
 
         static SW_DLLPUBLIC OUString GetCrossRefHeadingBookmarkNamePrefix();
         static SW_DLLPUBLIC bool IsLegalPaMForCrossRefHeadingBookmark( const 
SwPaM& rPaM );
-        static void DeleteFieldmarkCommand(::sw::mark::IFieldmark const& 
rMark);
+        static void DeleteFieldmarkCommand(::sw::mark::Fieldmark const& rMark);
 
     protected:
         virtual ~IDocumentMarkAccess() {};
diff --git a/sw/inc/IMark.hxx b/sw/inc/IMark.hxx
index 1e8eccaa9a76..2fba11ead502 100644
--- a/sw/inc/IMark.hxx
+++ b/sw/inc/IMark.hxx
@@ -81,35 +81,6 @@ namespace sw::mark
             IMark &operator =(IMark const&) = delete;
     };
 
-    class SW_DLLPUBLIC SAL_LOPLUGIN_ANNOTATE("crosscast") IFieldmark
-        : virtual public IMark
-    {
-        protected:
-            IFieldmark() = default;
-
-        public:
-            typedef std::map< OUString, css::uno::Any> parameter_map_t;
-            //getters
-            virtual OUString GetFieldname() const =0;
-            virtual OUString GetFieldHelptext() const =0;
-            virtual parameter_map_t* GetParameters() =0;
-            virtual const parameter_map_t* GetParameters() const =0;
-
-            //setters
-            virtual void SetFieldname(const OUString& rFieldname) =0;
-            virtual void SetFieldHelptext(const OUString& rFieldHelptext) =0;
-            virtual void Invalidate() = 0;
-
-            virtual OUString GetContent() const { return OUString(); }
-            virtual void ReplaceContent(const OUString& /*sNewContent*/) {}
-
-        private:
-            IFieldmark(IFieldmark const &) = delete;
-            IFieldmark &operator =(IFieldmark const&) = delete;
-    };
-
-    OUString ExpandFieldmark(IFieldmark* pBM);
-
     class SW_DLLPUBLIC MarkBase
         : virtual public IMark
     {
@@ -265,42 +236,45 @@ namespace sw::mark
     };
 
     class SW_DLLPUBLIC Fieldmark
-        : virtual public IFieldmark
-        , public MarkBase
+        : public MarkBase
     {
     public:
+        typedef std::map< OUString, css::uno::Any> parameter_map_t;
+
         Fieldmark(const SwPaM& rPaM);
 
-        OUString GetFieldname() const override
-            { return m_aFieldname; }
-        OUString GetFieldHelptext() const override
-            { return m_aFieldHelptext; }
+        virtual OUString GetContent() const { return OUString(); }
+        virtual void ReplaceContent(const OUString& /*sNewContent*/) {}
 
-        IFieldmark::parameter_map_t* GetParameters() override
-            { return &m_vParams; }
+        OUString GetFieldname() const { return m_aFieldname; }
+        OUString GetFieldHelptext() const { return m_aFieldHelptext; }
 
-        const IFieldmark::parameter_map_t* GetParameters() const override
+        parameter_map_t* GetParameters() { return &m_vParams; }
+
+        const parameter_map_t* GetParameters() const
             { return &m_vParams; }
 
-        void SetFieldname(const OUString& aFieldname) override
+        void SetFieldname(const OUString& aFieldname)
             { m_aFieldname = aFieldname; }
-        void SetFieldHelptext(const OUString& aFieldHelptext) override
+        void SetFieldHelptext(const OUString& aFieldHelptext)
             { m_aFieldHelptext = aFieldHelptext; }
 
         virtual void ReleaseDoc(SwDoc&) = 0;
 
         void SetMarkStartPos( const SwPosition& rNewStartPos );
 
-        void Invalidate() override;
+        void Invalidate();
         OUString ToString() const override;
         void dumpAsXml(xmlTextWriterPtr pWriter) const override;
 
     private:
         OUString m_aFieldname;
         OUString m_aFieldHelptext;
-        IFieldmark::parameter_map_t m_vParams;
+        parameter_map_t m_vParams;
     };
 
+    OUString ExpandFieldmark(Fieldmark* pBM);
+
     class TextFieldmark final
         : public Fieldmark
     {
diff --git a/sw/inc/crsrsh.hxx b/sw/inc/crsrsh.hxx
index 4727f92f79a1..25f8b549a18d 100644
--- a/sw/inc/crsrsh.hxx
+++ b/sw/inc/crsrsh.hxx
@@ -108,7 +108,7 @@ struct SwContentAtPos
         const SfxPoolItem* pAttr;
         const SwRangeRedline* pRedl;
         SwContentNode * pNode;
-        const sw::mark::IFieldmark* pFieldmark;
+        const sw::mark::Fieldmark* pFieldmark;
     } aFnd;
     IsAttrAtPos eContentAtPos;
     int nDist;
@@ -603,10 +603,10 @@ public:
     bool GoPrevBookmark();
 
     bool IsFormProtected();
-    ::sw::mark::IFieldmark* GetCurrentFieldmark();
-    sw::mark::IFieldmark* GetFieldmarkAfter();
-    sw::mark::IFieldmark* GetFieldmarkBefore();
-    bool GotoFieldmark(const ::sw::mark::IFieldmark* const pMark);
+    ::sw::mark::Fieldmark* GetCurrentFieldmark();
+    sw::mark::Fieldmark* GetFieldmarkAfter();
+    sw::mark::Fieldmark* GetFieldmarkBefore();
+    bool GotoFieldmark(const ::sw::mark::Fieldmark* const pMark);
 
     // update Cursr, i.e. reset it into content should only be called when the
     // cursor was set to a random position e.g. when deleting frames
diff --git a/sw/inc/swabstdlg.hxx b/sw/inc/swabstdlg.hxx
index d184fbb4291b..6a17984c6fc8 100644
--- a/sw/inc/swabstdlg.hxx
+++ b/sw/inc/swabstdlg.hxx
@@ -80,7 +80,7 @@ namespace com::sun::star{
 }
 
 
-namespace sw::mark { class IFieldmark; class DateFieldmark; }
+namespace sw::mark { class Fieldmark; class DateFieldmark; }
 
 typedef   void (*SwLabDlgMethod) (css::uno::Reference< css::frame::XModel> 
const & xModel, const SwLabItem& rItem);
 
@@ -507,7 +507,7 @@ public:
 
     virtual VclPtr<AbstractDropDownFieldDialog> 
CreateDropDownFieldDialog(weld::Widget* pParent, SwWrtShell &rSh,
         SwField* pField, bool bPrevButton, bool bNextButton) = 0;
-    virtual VclPtr<AbstractDropDownFormFieldDialog> 
CreateDropDownFormFieldDialog(weld::Widget* pParent, sw::mark::IFieldmark* 
pDropDownField) = 0;
+    virtual VclPtr<AbstractDropDownFormFieldDialog> 
CreateDropDownFormFieldDialog(weld::Widget* pParent, sw::mark::Fieldmark* 
pDropDownField) = 0;
 
     virtual VclPtr<AbstractDateFormFieldDialog> 
CreateDateFormFieldDialog(weld::Widget* pParent, sw::mark::DateFieldmark* 
pDateField, SwDoc& rDoc) = 0;
 
diff --git a/sw/inc/view.hxx b/sw/inc/view.hxx
index c496f2ac7891..64ad634276a4 100644
--- a/sw/inc/view.hxx
+++ b/sw/inc/view.hxx
@@ -73,7 +73,7 @@ class SwNode;
 
 namespace com::sun::star::view { class XSelectionSupplier; }
 namespace sfx2 { class FileDialogHelper; }
-namespace sw::mark { class IFieldmark; }
+namespace sw::mark { class Fieldmark; }
 namespace weld { class Scrollbar; }
 
 const tools::Long nLeftOfst = -370;
diff --git a/sw/qa/core/uwriter.cxx b/sw/qa/core/uwriter.cxx
index d1549a8ae966..8206934d9011 100644
--- a/sw/qa/core/uwriter.cxx
+++ b/sw/qa/core/uwriter.cxx
@@ -347,7 +347,7 @@ static SwTextNode* getModelToViewTestDocument2(SwDoc *pDoc)
     pDoc->getIDocumentContentOperations().AppendTextNode(*aPaM.GetPoint());
     pDoc->getIDocumentContentOperations().InsertString(aPaM, u"AAAAA"_ustr);
     IDocumentMarkAccess* pMarksAccess = pDoc->getIDocumentMarkAccess();
-    sw::mark::IFieldmark *pFieldmark =
+    sw::mark::Fieldmark *pFieldmark =
             pMarksAccess->makeNoTextFieldBookmark(aPaM, u"test"_ustr, 
ODF_FORMDROPDOWN);
     CPPUNIT_ASSERT(pFieldmark);
     uno::Sequence< OUString > vListEntries { u"BBBBB"_ustr };
diff --git a/sw/qa/extras/globalfilter/globalfilter.cxx 
b/sw/qa/extras/globalfilter/globalfilter.cxx
index b9a357a82f76..5538f6ee856a 100644
--- a/sw/qa/extras/globalfilter/globalfilter.cxx
+++ b/sw/qa/extras/globalfilter/globalfilter.cxx
@@ -858,7 +858,7 @@ auto verifyNestedFieldmark(OUString const& rTestName,
         
node1.GetNode().GetTextNode()->GetText().indexOf(CH_TXT_ATR_FIELDSTART));
     CPPUNIT_ASSERT_EQUAL_MESSAGE(rTestName.toUtf8().getStr(),
             sal_Int32(1), innerPos.GetContentIndex());
-    ::sw::mark::IFieldmark *const pInner(rIDMA.getFieldmarkAt(innerPos));
+    ::sw::mark::Fieldmark *const pInner(rIDMA.getFieldmarkAt(innerPos));
     CPPUNIT_ASSERT_MESSAGE(rTestName.toUtf8().getStr(), pInner);
     OUString const innerString(SwPaM(pInner->GetMarkPos(), 
pInner->GetOtherMarkPos()).GetText());
     CPPUNIT_ASSERT_EQUAL_MESSAGE(rTestName.toUtf8().getStr(), OUString(
@@ -874,7 +874,7 @@ auto verifyNestedFieldmark(OUString const& rTestName,
         
node2.GetNode().GetTextNode()->GetText().indexOf(CH_TXT_ATR_FIELDSTART));
     CPPUNIT_ASSERT_EQUAL_MESSAGE(rTestName.toUtf8().getStr(),
             sal_Int32(0), outerPos.GetContentIndex());
-    ::sw::mark::IFieldmark const*const pOuter(rIDMA.getFieldmarkAt(outerPos));
+    ::sw::mark::Fieldmark const*const pOuter(rIDMA.getFieldmarkAt(outerPos));
     CPPUNIT_ASSERT_MESSAGE(rTestName.toUtf8().getStr(), pOuter);
     OUString const outerString(SwPaM(pOuter->GetMarkPos(), 
pOuter->GetOtherMarkPos()).GetText());
     CPPUNIT_ASSERT_EQUAL_MESSAGE(rTestName.toUtf8().getStr(), OUString(
@@ -1814,7 +1814,7 @@ void Test::testTextFormField()
         // Check whether all fieldmarks are text form fields
         for(auto aIter = pMarkAccess->getAllMarksBegin(); aIter != 
pMarkAccess->getAllMarksEnd(); ++aIter)
         {
-            ::sw::mark::IFieldmark* pFieldmark = 
dynamic_cast<::sw::mark::IFieldmark*>(*aIter);
+            ::sw::mark::Fieldmark* pFieldmark = 
dynamic_cast<::sw::mark::Fieldmark*>(*aIter);
             CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), pFieldmark);
             CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), 
ODF_FORMTEXT, pFieldmark->GetFieldname());
         }
@@ -1866,7 +1866,7 @@ void Test::testCheckBoxFormField()
         int nIndex = 0;
         for(auto aIter = pMarkAccess->getAllMarksBegin(); aIter != 
pMarkAccess->getAllMarksEnd(); ++aIter)
         {
-            ::sw::mark::IFieldmark* pFieldmark = 
dynamic_cast<::sw::mark::IFieldmark*>(*aIter);
+            ::sw::mark::Fieldmark* pFieldmark = 
dynamic_cast<::sw::mark::Fieldmark*>(*aIter);
 
             if(rFilterName == "Office Open XML Text") // OOXML import also 
generates bookmarks
             {
@@ -1918,7 +1918,7 @@ void Test::testDropDownFormField()
         int nIndex = 0;
         for(auto aIter = pMarkAccess->getAllMarksBegin(); aIter != 
pMarkAccess->getAllMarksEnd(); ++aIter)
         {
-            ::sw::mark::IFieldmark* pFieldmark = 
dynamic_cast<::sw::mark::IFieldmark*>(*aIter);
+            ::sw::mark::Fieldmark* pFieldmark = 
dynamic_cast<::sw::mark::Fieldmark*>(*aIter);
 
             if(!pFieldmark)
                 continue;
@@ -1927,7 +1927,7 @@ void Test::testDropDownFormField()
             CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), 
ODF_FORMDROPDOWN, pFieldmark->GetFieldname());
 
             // Check drop down field's parameters.
-            const sw::mark::IFieldmark::parameter_map_t* const pParameters = 
pFieldmark->GetParameters();
+            const sw::mark::Fieldmark::parameter_map_t* const pParameters = 
pFieldmark->GetParameters();
             css::uno::Sequence<OUString> vListEntries;
             sal_Int32 nSelection = -1;
             auto pListEntries = pParameters->find(ODF_FORMDROPDOWN_LISTENTRY);
@@ -2000,7 +2000,7 @@ void Test::testDateFormField()
                 CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), 
ODF_FORMDATE, pFieldmark->GetFieldname());
 
                 // Check date form field's parameters.
-                const sw::mark::IFieldmark::parameter_map_t* const pParameters 
= pFieldmark->GetParameters();
+                const sw::mark::Fieldmark::parameter_map_t* const pParameters 
= pFieldmark->GetParameters();
                 OUString sDateFormat;
                 auto pResult = pParameters->find(ODF_FORMDATE_DATEFORMAT);
                 if (pResult != pParameters->end())
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx 
b/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx
index 1616352d19cf..c1a297a8ddc5 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport8.cxx
@@ -1006,12 +1006,12 @@ DECLARE_OOXMLEXPORT_TEST(testN820509, "n820509.docx")
         IDocumentMarkAccess* pMarkAccess = pDoc->getIDocumentMarkAccess();
         CPPUNIT_ASSERT_EQUAL(sal_Int32(2), pMarkAccess->getAllMarksCount());
 
-        ::sw::mark::IFieldmark* pFieldmark = 
dynamic_cast<::sw::mark::IFieldmark*>(*pMarkAccess->getAllMarksBegin());
+        ::sw::mark::Fieldmark* pFieldmark = 
dynamic_cast<::sw::mark::Fieldmark*>(*pMarkAccess->getAllMarksBegin());
 
         CPPUNIT_ASSERT(pFieldmark);
         CPPUNIT_ASSERT_EQUAL(ODF_FORMDATE, pFieldmark->GetFieldname());
 
-        const sw::mark::IFieldmark::parameter_map_t* const pParameters = 
pFieldmark->GetParameters();
+        const sw::mark::Fieldmark::parameter_map_t* const pParameters = 
pFieldmark->GetParameters();
         OUString sDateFormat;
         auto pResult = pParameters->find(ODF_FORMDATE_DATEFORMAT);
         if (pResult != pParameters->end())
diff --git a/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx 
b/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx
index ceb1e8afc7d4..29ffa26fbeb1 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx
@@ -852,12 +852,12 @@ CPPUNIT_TEST_FIXTURE(Test, testDropDownFieldEntryLimit)
     IDocumentMarkAccess* pMarkAccess = pDoc->getIDocumentMarkAccess();
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount());
 
-    ::sw::mark::IFieldmark* pFieldmark
-          = 
dynamic_cast<::sw::mark::IFieldmark*>(*pMarkAccess->getAllMarksBegin());
+    ::sw::mark::Fieldmark* pFieldmark
+          = 
dynamic_cast<::sw::mark::Fieldmark*>(*pMarkAccess->getAllMarksBegin());
     CPPUNIT_ASSERT(pFieldmark);
     CPPUNIT_ASSERT_EQUAL(ODF_FORMDROPDOWN, pFieldmark->GetFieldname());
 
-    const sw::mark::IFieldmark::parameter_map_t* const pParameters = 
pFieldmark->GetParameters();
+    const sw::mark::Fieldmark::parameter_map_t* const pParameters = 
pFieldmark->GetParameters();
     auto pListEntries = pParameters->find(ODF_FORMDROPDOWN_LISTENTRY);
     CPPUNIT_ASSERT(bool(pListEntries != pParameters->end()));
     css::uno::Sequence<OUString> vListEntries;
diff --git a/sw/qa/extras/rtfexport/rtfexport4.cxx 
b/sw/qa/extras/rtfexport/rtfexport4.cxx
index eb32ddee6bb7..a5d0586dc3e1 100644
--- a/sw/qa/extras/rtfexport/rtfexport4.cxx
+++ b/sw/qa/extras/rtfexport/rtfexport4.cxx
@@ -163,7 +163,7 @@ CPPUNIT_TEST_FIXTURE(Test, test148518)
 
         CPPUNIT_ASSERT(pDoc->getIDocumentMarkAccess()->getFieldmarksBegin()
                        != pDoc->getIDocumentMarkAccess()->getFieldmarksEnd());
-        ::sw::mark::IFieldmark* pFieldmark = 
dynamic_cast<::sw::mark::IFieldmark*>(
+        ::sw::mark::Fieldmark* pFieldmark = 
dynamic_cast<::sw::mark::Fieldmark*>(
             *pDoc->getIDocumentMarkAccess()->getFieldmarksBegin());
         uno::Sequence<OUString> entries;
         (*pFieldmark->GetParameters())[ODF_FORMDROPDOWN_LISTENTRY] >>= entries;
diff --git a/sw/qa/extras/uiwriter/uiwriter4.cxx 
b/sw/qa/extras/uiwriter/uiwriter4.cxx
index 334f7389965a..408bbea89384 100644
--- a/sw/qa/extras/uiwriter/uiwriter4.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter4.cxx
@@ -1480,7 +1480,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest4, testTdf95699)
     pWrtShell->Copy(aClipboard);
     pMarkAccess = aClipboard.getIDocumentMarkAccess();
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount());
-    ::sw::mark::IFieldmark* pFieldMark
+    ::sw::mark::Fieldmark* pFieldMark
         = 
pMarkAccess->getFieldmarkAfter(SwPosition(aClipboard.GetNodes().GetEndOfExtras()),
 false);
     CPPUNIT_ASSERT_EQUAL(u"vnd.oasis.opendocument.field.FORMCHECKBOX"_ustr,
                          pFieldMark->GetFieldname());
diff --git a/sw/qa/extras/uiwriter/uiwriter5.cxx 
b/sw/qa/extras/uiwriter/uiwriter5.cxx
index 87394213dba9..45629761d907 100644
--- a/sw/qa/extras/uiwriter/uiwriter5.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter5.cxx
@@ -761,7 +761,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest5, 
testTextFormFieldInsertion)
     // Check whether the fieldmark is created
     auto aIter = pMarkAccess->getAllMarksBegin();
     CPPUNIT_ASSERT(aIter != pMarkAccess->getAllMarksEnd());
-    ::sw::mark::IFieldmark* pFieldmark = 
dynamic_cast<::sw::mark::IFieldmark*>(*aIter);
+    ::sw::mark::Fieldmark* pFieldmark = 
dynamic_cast<::sw::mark::Fieldmark*>(*aIter);
     CPPUNIT_ASSERT(pFieldmark);
     CPPUNIT_ASSERT_EQUAL(ODF_FORMTEXT, pFieldmark->GetFieldname());
 
@@ -799,7 +799,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest5, 
testCheckboxFormFieldInsertion)
     // Check whether the fieldmark is created
     auto aIter = pMarkAccess->getAllMarksBegin();
     CPPUNIT_ASSERT(aIter != pMarkAccess->getAllMarksEnd());
-    ::sw::mark::IFieldmark* pFieldmark = 
dynamic_cast<::sw::mark::IFieldmark*>(*aIter);
+    ::sw::mark::Fieldmark* pFieldmark = 
dynamic_cast<::sw::mark::Fieldmark*>(*aIter);
     CPPUNIT_ASSERT(pFieldmark);
     CPPUNIT_ASSERT_EQUAL(ODF_FORMCHECKBOX, pFieldmark->GetFieldname());
     // The checkbox is not checked by default
@@ -817,7 +817,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest5, 
testCheckboxFormFieldInsertion)
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount());
     aIter = pMarkAccess->getAllMarksBegin();
     CPPUNIT_ASSERT(aIter != pMarkAccess->getAllMarksEnd());
-    pFieldmark = dynamic_cast<::sw::mark::IFieldmark*>(*aIter);
+    pFieldmark = dynamic_cast<::sw::mark::Fieldmark*>(*aIter);
     CPPUNIT_ASSERT(pFieldmark);
     CPPUNIT_ASSERT_EQUAL(ODF_FORMCHECKBOX, pFieldmark->GetFieldname());
 
@@ -848,11 +848,11 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest5, 
testDropDownFormFieldInsertion)
     // Check whether the fieldmark is created
     auto aIter = pMarkAccess->getAllMarksBegin();
     CPPUNIT_ASSERT(aIter != pMarkAccess->getAllMarksEnd());
-    ::sw::mark::IFieldmark* pFieldmark = 
dynamic_cast<::sw::mark::IFieldmark*>(*aIter);
+    ::sw::mark::Fieldmark* pFieldmark = 
dynamic_cast<::sw::mark::Fieldmark*>(*aIter);
     CPPUNIT_ASSERT(pFieldmark);
     CPPUNIT_ASSERT_EQUAL(ODF_FORMDROPDOWN, pFieldmark->GetFieldname());
     // Check drop down field's parameters. By default these params are not set
-    const sw::mark::IFieldmark::parameter_map_t* const pParameters = 
pFieldmark->GetParameters();
+    const sw::mark::Fieldmark::parameter_map_t* const pParameters = 
pFieldmark->GetParameters();
     auto pListEntries = pParameters->find(ODF_FORMDROPDOWN_LISTENTRY);
     CPPUNIT_ASSERT(bool(pListEntries == pParameters->end()));
     auto pResult = pParameters->find(ODF_FORMDROPDOWN_RESULT);
@@ -867,7 +867,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest5, 
testDropDownFormFieldInsertion)
     CPPUNIT_ASSERT_EQUAL(sal_Int32(1), pMarkAccess->getAllMarksCount());
     aIter = pMarkAccess->getAllMarksBegin();
     CPPUNIT_ASSERT(aIter != pMarkAccess->getAllMarksEnd());
-    pFieldmark = dynamic_cast<::sw::mark::IFieldmark*>(*aIter);
+    pFieldmark = dynamic_cast<::sw::mark::Fieldmark*>(*aIter);
     CPPUNIT_ASSERT(pFieldmark);
     CPPUNIT_ASSERT_EQUAL(ODF_FORMDROPDOWN, pFieldmark->GetFieldname());
 }
@@ -1515,7 +1515,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest5, 
testDateFormFieldInsertion)
     // Check whether the fieldmark is created
     auto aIter = pMarkAccess->getAllMarksBegin();
     CPPUNIT_ASSERT(aIter != pMarkAccess->getAllMarksEnd());
-    ::sw::mark::IFieldmark* pFieldmark = 
dynamic_cast<::sw::mark::IFieldmark*>(*aIter);
+    ::sw::mark::Fieldmark* pFieldmark = 
dynamic_cast<::sw::mark::Fieldmark*>(*aIter);
     CPPUNIT_ASSERT(pFieldmark);
     CPPUNIT_ASSERT_EQUAL(ODF_FORMDATE, pFieldmark->GetFieldname());
 
@@ -1531,7 +1531,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest5, 
testDateFormFieldInsertion)
     dispatchCommand(mxComponent, u".uno:Redo"_ustr, {});
     aIter = pMarkAccess->getAllMarksBegin();
     CPPUNIT_ASSERT(aIter != pMarkAccess->getAllMarksEnd());
-    pFieldmark = dynamic_cast<::sw::mark::IFieldmark*>(*aIter);
+    pFieldmark = dynamic_cast<::sw::mark::Fieldmark*>(*aIter);
     CPPUNIT_ASSERT(pFieldmark);
     CPPUNIT_ASSERT_EQUAL(ODF_FORMDATE, pFieldmark->GetFieldname());
 }
@@ -1602,7 +1602,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest5, 
testDateFormFieldCurrentDateHandling)
 
     // Check valid date
     // Set date format first
-    sw::mark::IFieldmark::parameter_map_t* pParameters = 
pFieldmark->GetParameters();
+    sw::mark::Fieldmark::parameter_map_t* pParameters = 
pFieldmark->GetParameters();
     (*pParameters)[ODF_FORMDATE_DATEFORMAT] <<= u"YYYY/MM/DD"_ustr;
     (*pParameters)[ODF_FORMDATE_DATEFORMAT_LANGUAGE] <<= u"en-US"_ustr;
 
@@ -1644,7 +1644,7 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest5, 
testDateFormFieldCurrentDateInvalidation)
     CPPUNIT_ASSERT_EQUAL(ODF_FORMDATE, pFieldmark->GetFieldname());
 
     // Set a date first
-    sw::mark::IFieldmark::parameter_map_t* pParameters = 
pFieldmark->GetParameters();
+    sw::mark::Fieldmark::parameter_map_t* pParameters = 
pFieldmark->GetParameters();
     pFieldmark->SetCurrentDate(48000.0);
     std::pair<bool, double> aResult = pFieldmark->GetCurrentDate();
     CPPUNIT_ASSERT(aResult.first);
diff --git a/sw/qa/uibase/shells/shells.cxx b/sw/qa/uibase/shells/shells.cxx
index 90c30f88038c..97341709e458 100644
--- a/sw/qa/uibase/shells/shells.cxx
+++ b/sw/qa/uibase/shells/shells.cxx
@@ -345,7 +345,7 @@ CPPUNIT_TEST_FIXTURE(SwUibaseShellsTest, 
testInsertTextFormField)
     SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
     SwCursor* pCursor = pWrtShell->GetCursor();
     pCursor->SttEndDoc(/*bSttDoc=*/true);
-    sw::mark::IFieldmark* pFieldmark
+    sw::mark::Fieldmark* pFieldmark
         = pDoc->getIDocumentMarkAccess()->getFieldmarkAt(*pCursor->GetPoint());
     CPPUNIT_ASSERT(pFieldmark);
     // Without the accompanying fix in place, this test would have failed with:
diff --git a/sw/source/core/crsr/DropDownFormFieldButton.cxx 
b/sw/source/core/crsr/DropDownFormFieldButton.cxx
index 0e547d27c7de..c7d66b7c369b 100644
--- a/sw/source/core/crsr/DropDownFormFieldButton.cxx
+++ b/sw/source/core/crsr/DropDownFormFieldButton.cxx
@@ -25,9 +25,9 @@
 
 void DropDownFormFieldButton::InitDropdown()
 {
-    const sw::mark::IFieldmark::parameter_map_t* const pParameters = 
m_rFieldmark.GetParameters();
+    const sw::mark::Fieldmark::parameter_map_t* const pParameters = 
m_rFieldmark.GetParameters();
 
-    sw::mark::IFieldmark::parameter_map_t::const_iterator pListEntries
+    sw::mark::Fieldmark::parameter_map_t::const_iterator pListEntries
         = pParameters->find(ODF_FORMDROPDOWN_LISTENTRY);
     css::uno::Sequence<OUString> vListEntries;
     if (pListEntries != pParameters->end())
@@ -43,7 +43,7 @@ void DropDownFormFieldButton::InitDropdown()
     }
 
     // Select the current one
-    sw::mark::IFieldmark::parameter_map_t::const_iterator pResult
+    sw::mark::Fieldmark::parameter_map_t::const_iterator pResult
         = pParameters->find(ODF_FORMDROPDOWN_RESULT);
     if (pResult != pParameters->end())
     {
diff --git a/sw/source/core/crsr/bookmark.cxx b/sw/source/core/crsr/bookmark.cxx
index 60aee0b19197..4e91f9ef987b 100644
--- a/sw/source/core/crsr/bookmark.cxx
+++ b/sw/source/core/crsr/bookmark.cxx
@@ -57,7 +57,7 @@ using namespace ::com::sun::star::uno;
 namespace sw::mark
 {
 
-    SwPosition FindFieldSep(IFieldmark const& rMark)
+    SwPosition FindFieldSep(Fieldmark const& rMark)
     {
         SwPosition const& rStartPos(rMark.GetMarkStart());
         SwPosition const& rEndPos(rMark.GetMarkEnd());
@@ -840,7 +840,7 @@ namespace sw::mark
     void DropDownFieldmark::AddContent(const OUString& rText, sal_Int32* 
pIndex)
     {
         uno::Sequence<OUString> aSeq;
-        sw::mark::IFieldmark::parameter_map_t* pParameters = GetParameters();
+        sw::mark::Fieldmark::parameter_map_t* pParameters = GetParameters();
         (*pParameters)[ODF_FORMDROPDOWN_LISTENTRY] >>= aSeq;
 
         // no duplicates: if it already exists, modify the given index to 
point to it
@@ -896,7 +896,7 @@ namespace sw::mark
             return;
 
         uno::Sequence<OUString> aSeq;
-        sw::mark::IFieldmark::parameter_map_t* pParameters = GetParameters();
+        sw::mark::Fieldmark::parameter_map_t* pParameters = GetParameters();
         (*pParameters)[ODF_FORMDROPDOWN_LISTENTRY] >>= aSeq;
         const sal_Int32 nLen = aSeq.getLength();
 
@@ -942,7 +942,7 @@ namespace sw::mark
      */
     void DropDownFieldmark::DelContent(sal_Int32 nDelIndex)
     {
-        sw::mark::IFieldmark::parameter_map_t* pParameters = GetParameters();
+        sw::mark::Fieldmark::parameter_map_t* pParameters = GetParameters();
         uno::Sequence<OUString> aSeq;
         if (nDelIndex < 0)
         {
@@ -1161,7 +1161,7 @@ namespace sw::mark
         if(aResult.first)
             return aResult;
 
-        const sw::mark::IFieldmark::parameter_map_t* pParameters = 
GetParameters();
+        const sw::mark::Fieldmark::parameter_map_t* pParameters = 
GetParameters();
         bool bFoundValidDate = false;
         double dCurrentDate = 0;
         OUString sDateFormat;
@@ -1206,7 +1206,7 @@ namespace sw::mark
         ReplaceContent(GetDateInCurrentDateFormat(fDate));
 
         // Also save the current date in a standard format
-        sw::mark::IFieldmark::parameter_map_t* pParameters = GetParameters();
+        sw::mark::Fieldmark::parameter_map_t* pParameters = GetParameters();
         (*pParameters)[ODF_FORMDATE_CURRENTDATE] <<= 
GetDateInStandardDateFormat(fDate);
     }
 
@@ -1239,7 +1239,7 @@ namespace sw::mark
         bool bFoundValidDate = false;
         double dCurrentDate = 0;
 
-        const sw::mark::IFieldmark::parameter_map_t* pParameters = 
GetParameters();
+        const sw::mark::Fieldmark::parameter_map_t* pParameters = 
GetParameters();
         auto pResult = pParameters->find(ODF_FORMDATE_CURRENTDATE);
         OUString sCurrentDate;
         if (pResult != pParameters->end())
@@ -1274,7 +1274,7 @@ namespace sw::mark
     {
         // Get current date format and language
         OUString sDateFormat;
-        const sw::mark::IFieldmark::parameter_map_t* pParameters = 
GetParameters();
+        const sw::mark::Fieldmark::parameter_map_t* pParameters = 
GetParameters();
         auto pResult = pParameters->find(ODF_FORMDATE_DATEFORMAT);
         if (pResult != pParameters->end())
         {
@@ -1320,7 +1320,7 @@ namespace sw::mark
         // Current date became invalid
         if(GetDateInCurrentDateFormat(aResult.second) != GetContent())
         {
-            sw::mark::IFieldmark::parameter_map_t* pParameters = 
GetParameters();
+            sw::mark::Fieldmark::parameter_map_t* pParameters = 
GetParameters();
             (*pParameters)[ODF_FORMDATE_CURRENTDATE] <<= OUString();
         }
     }
diff --git a/sw/source/core/crsr/crbm.cxx b/sw/source/core/crsr/crbm.cxx
index c60306a7e626..551f390fc89b 100644
--- a/sw/source/core/crsr/crbm.cxx
+++ b/sw/source/core/crsr/crbm.cxx
@@ -283,26 +283,26 @@ bool SwCursorShell::IsFormProtected()
     return getIDocumentSettingAccess().get(DocumentSettingId::PROTECT_FORM);
 }
 
-::sw::mark::IFieldmark* SwCursorShell::GetCurrentFieldmark()
+::sw::mark::Fieldmark* SwCursorShell::GetCurrentFieldmark()
 {
     // TODO: Refactor
     SwPosition pos(*GetCursor()->Start());
     return getIDocumentMarkAccess()->getInnerFieldmarkFor(pos);
 }
 
-sw::mark::IFieldmark* SwCursorShell::GetFieldmarkAfter()
+sw::mark::Fieldmark* SwCursorShell::GetFieldmarkAfter()
 {
     SwPosition pos(*GetCursor()->GetPoint());
     return getIDocumentMarkAccess()->getFieldmarkAfter(pos, /*bLoop*/true);
 }
 
-sw::mark::IFieldmark* SwCursorShell::GetFieldmarkBefore()
+sw::mark::Fieldmark* SwCursorShell::GetFieldmarkBefore()
 {
     SwPosition pos(*GetCursor()->GetPoint());
     return getIDocumentMarkAccess()->getFieldmarkBefore(pos, /*bLoop*/true);
 }
 
-bool SwCursorShell::GotoFieldmark(::sw::mark::IFieldmark const * const pMark)
+bool SwCursorShell::GotoFieldmark(::sw::mark::Fieldmark const * const pMark)
 {
     if(pMark==nullptr) return false;
 
diff --git a/sw/source/core/crsr/crstrvl.cxx b/sw/source/core/crsr/crstrvl.cxx
index effc825987c7..c39c778a0006 100644
--- a/sw/source/core/crsr/crstrvl.cxx
+++ b/sw/source/core/crsr/crstrvl.cxx
@@ -906,7 +906,7 @@ void SwCursorShell::GotoFormControl(bool bNext)
         }
     };
     std::map<std::pair<SwPosition, sal_uInt32>,
-             std::pair<SwTextContentControl*, sw::mark::IFieldmark*>, 
FormControlSort>  aFormMap;
+             std::pair<SwTextContentControl*, sw::mark::Fieldmark*>, 
FormControlSort>  aFormMap;
 
     // add all of the eligible modern Content Controls into a sorted map
     SwContentControlManager& rManager = GetDoc()->GetContentControlManager();
@@ -927,7 +927,7 @@ void SwCursorShell::GotoFormControl(bool bNext)
         // use SAL_MAX_UINT32 as zero's tabIndex so that automatic sorting is 
correct.
         sal_uInt32 nTabIndex = pCC && pCC->GetTabIndex() ? pCC->GetTabIndex() 
: SAL_MAX_UINT32;
 
-        const std::pair<SwTextContentControl*, sw::mark::IFieldmark*> 
pFormControl(pTCC, nullptr);
+        const std::pair<SwTextContentControl*, sw::mark::Fieldmark*> 
pFormControl(pTCC, nullptr);
         aFormMap[std::make_pair(nPos, nTabIndex)] = pFormControl;
     }
 
@@ -942,11 +942,11 @@ void SwCursorShell::GotoFormControl(bool bNext)
     IDocumentMarkAccess* pMarkAccess = GetDoc()->getIDocumentMarkAccess();
     for (auto it = pMarkAccess->getFieldmarksBegin(); it != 
pMarkAccess->getFieldmarksEnd(); ++it)
     {
-        auto pFieldMark = dynamic_cast<sw::mark::IFieldmark*>(*it);
+        auto pFieldMark = dynamic_cast<sw::mark::Fieldmark*>(*it);
         assert(pFieldMark);
         // legacy form fields do not have (functional) tabIndexes - use lowest 
priority for them
         aFormMap[std::make_pair((*it)->GetMarkStart(), SAL_MAX_UINT32)] =
-            std::pair<SwTextContentControl*, sw::mark::IFieldmark*>(nullptr, 
pFieldMark);
+            std::pair<SwTextContentControl*, sw::mark::Fieldmark*>(nullptr, 
pFieldMark);
     }
 
     if (aFormMap.begin() == aFormMap.end())
@@ -955,7 +955,7 @@ void SwCursorShell::GotoFormControl(bool bNext)
     // Identify the current location in the document, and the current tab 
index priority
 
     // A content control could contain a Fieldmark, so check for legacy 
fieldmarks first
-    sw::mark::IFieldmark* pFieldMark = GetCurrentFieldmark();
+    sw::mark::Fieldmark* pFieldMark = GetCurrentFieldmark();
     SwTextContentControl* pTCC = !pFieldMark ? CursorInsideContentControl() : 
nullptr;
 
     auto pCC = pTCC ? pTCC->GetContentControl().GetContentControl() : nullptr;
@@ -1646,7 +1646,7 @@ bool SwCursorShell::GetContentAtPos( const Point& rPt,
             if( !bRet && IsAttrAtPos::FormControl & 
rContentAtPos.eContentAtPos )
             {
                 IDocumentMarkAccess* pMarksAccess = 
GetDoc()->getIDocumentMarkAccess( );
-                sw::mark::IFieldmark* pFieldBookmark = 
pMarksAccess->getInnerFieldmarkFor(aPos);
+                sw::mark::Fieldmark* pFieldBookmark = 
pMarksAccess->getInnerFieldmarkFor(aPos);
                 if (bCursorFoundExact && pFieldBookmark)
                 {
                     rContentAtPos.eContentAtPos = IsAttrAtPos::FormControl;
diff --git a/sw/source/core/crsr/pam.cxx b/sw/source/core/crsr/pam.cxx
index fcc8682f22dd..bccb0d510e98 100644
--- a/sw/source/core/crsr/pam.cxx
+++ b/sw/source/core/crsr/pam.cxx
@@ -869,8 +869,8 @@ bool SwPaM::HasReadonlySel(bool bFormView, bool const 
isReplace) const
     const SwDoc& rDoc = GetDoc();
     // Legacy text/combo/checkbox: never return read-only when inside these 
form fields.
     const IDocumentMarkAccess* pMarksAccess = rDoc.getIDocumentMarkAccess();
-    sw::mark::IFieldmark* pA = GetPoint() ? 
pMarksAccess->getInnerFieldmarkFor(*GetPoint()) : nullptr;
-    sw::mark::IFieldmark* pB = GetMark()  ? 
pMarksAccess->getInnerFieldmarkFor(*GetMark()) : pA;
+    sw::mark::Fieldmark* pA = GetPoint() ? 
pMarksAccess->getInnerFieldmarkFor(*GetPoint()) : nullptr;
+    sw::mark::Fieldmark* pB = GetMark()  ? 
pMarksAccess->getInnerFieldmarkFor(*GetMark()) : pA;
     // prevent the user from accidentally deleting the field itself when 
modifying the text.
     const bool bAtStartA = (pA != nullptr) && (pA->GetMarkStart() == 
*GetPoint());
     const bool bAtStartB = (pB != nullptr) && (pB->GetMarkStart() == 
*GetMark());
diff --git a/sw/source/core/crsr/swcrsr.cxx b/sw/source/core/crsr/swcrsr.cxx
index 2405aaf63eff..b86d2e70d319 100644
--- a/sw/source/core/crsr/swcrsr.cxx
+++ b/sw/source/core/crsr/swcrsr.cxx
@@ -1434,7 +1434,7 @@ bool SwCursor::SelectWordWT( SwViewShell const * 
pViewShell, sal_Int16 nWordType
     {
         // Should we select the whole fieldmark?
         const IDocumentMarkAccess* pMarksAccess = 
GetDoc().getIDocumentMarkAccess( );
-        sw::mark::IFieldmark const*const 
pMark(pMarksAccess->getInnerFieldmarkFor(*GetPoint()));
+        sw::mark::Fieldmark const*const 
pMark(pMarksAccess->getInnerFieldmarkFor(*GetPoint()));
         if (pMark && (IDocumentMarkAccess::GetType(*pMark) == 
IDocumentMarkAccess::MarkType::TEXT_FIELDMARK
                       || IDocumentMarkAccess::GetType(*pMark) == 
IDocumentMarkAccess::MarkType::DATE_FIELDMARK))
         {
@@ -1782,7 +1782,7 @@ bool SwCursor::LeftRight( bool bLeft, sal_uInt16 nCnt, 
SwCursorSkipMode nMode,
                 && pNode->GetText()[GetPoint()->GetContentIndex()] == 
CH_TXT_ATR_FIELDSTART)
             {
                 IDocumentMarkAccess const& 
rIDMA(*GetDoc().getIDocumentMarkAccess());
-                sw::mark::IFieldmark const*const 
pMark(rIDMA.getFieldmarkAt(*GetPoint()));
+                sw::mark::Fieldmark const*const 
pMark(rIDMA.getFieldmarkAt(*GetPoint()));
                 assert(pMark);
                 *GetPoint() = sw::mark::FindFieldSep(*pMark);
             }
@@ -1840,7 +1840,7 @@ bool SwCursor::LeftRight( bool bLeft, sal_uInt16 nCnt, 
SwCursorSkipMode nMode,
                 && pNode->GetText()[GetPoint()->GetContentIndex()] == 
CH_TXT_ATR_FIELDEND)
             {
                 IDocumentMarkAccess const& 
rIDMA(*GetDoc().getIDocumentMarkAccess());
-                sw::mark::IFieldmark const*const 
pMark(rIDMA.getFieldmarkAt(*GetPoint()));
+                sw::mark::Fieldmark const*const 
pMark(rIDMA.getFieldmarkAt(*GetPoint()));
                 assert(pMark);
                 *GetPoint() = sw::mark::FindFieldSep(*pMark);
             }
diff --git a/sw/source/core/doc/DocumentContentOperationsManager.cxx 
b/sw/source/core/doc/DocumentContentOperationsManager.cxx
index 02af74aea64d..f8389404627d 100644
--- a/sw/source/core/doc/DocumentContentOperationsManager.cxx
+++ b/sw/source/core/doc/DocumentContentOperationsManager.cxx
@@ -335,16 +335,16 @@ namespace sw
                 pNewBookmark->Hide(pOldBookmark->IsHidden());
                 
pNewBookmark->SetHideCondition(pOldBookmark->GetHideCondition());
             }
-            ::sw::mark::IFieldmark* const pNewFieldmark =
-                dynamic_cast< ::sw::mark::IFieldmark* const >(pNewMark);
-            const ::sw::mark::IFieldmark* const pOldFieldmark =
-                dynamic_cast< const ::sw::mark::IFieldmark* >(pMark);
+            ::sw::mark::Fieldmark* const pNewFieldmark =
+                dynamic_cast< ::sw::mark::Fieldmark* const >(pNewMark);
+            const ::sw::mark::Fieldmark* const pOldFieldmark =
+                dynamic_cast< const ::sw::mark::Fieldmark* >(pMark);
             if (pNewFieldmark && pOldFieldmark)
             {
                 pNewFieldmark->SetFieldname(pOldFieldmark->GetFieldname());
                 
pNewFieldmark->SetFieldHelptext(pOldFieldmark->GetFieldHelptext());
-                ::sw::mark::IFieldmark::parameter_map_t* pNewParams = 
pNewFieldmark->GetParameters();
-                const ::sw::mark::IFieldmark::parameter_map_t* pOldParams = 
pOldFieldmark->GetParameters();
+                ::sw::mark::Fieldmark::parameter_map_t* pNewParams = 
pNewFieldmark->GetParameters();
+                const ::sw::mark::Fieldmark::parameter_map_t* pOldParams = 
pOldFieldmark->GetParameters();
                 for (const auto& rEntry : *pOldParams )
                 {
                     pNewParams->insert( rEntry );
@@ -546,7 +546,7 @@ namespace sw
         SwNodes const& rNodes(rPam.GetPoint()->GetNodes());
         IDocumentMarkAccess const& 
rIDMA(*rPam.GetDoc().getIDocumentMarkAccess());
 
-        std::stack<std::tuple<sw::mark::IFieldmark const*, bool, SwNodeOffset, 
sal_Int32>> startedFields;
+        std::stack<std::tuple<sw::mark::Fieldmark const*, bool, SwNodeOffset, 
sal_Int32>> startedFields;
 
         for (SwNodeOffset n = nStartNode; n <= nEndNode; ++n)
         {
@@ -644,7 +644,7 @@ namespace sw
         }
         while (!startedFields.empty())
         {
-            if (const sw::mark::IFieldmark* pMark = 
std::get<0>(startedFields.top()))
+            if (const sw::mark::Fieldmark* pMark = 
std::get<0>(startedFields.top()))
             {
                 SwPosition const& rStart(pMark->GetMarkStart());
                 std::pair<SwNodeOffset, sal_Int32> const pos(
@@ -2289,7 +2289,7 @@ bool DocumentContentOperationsManager::DelFullPara( 
SwPaM& rPam )
         // (note: deleteMarks() doesn't help here, in case of partially
         // selected fieldmarks; let's delete these as re-inserting their chars
         // elsewhere looks difficult)
-        ::std::set<::sw::mark::IFieldmark*> fieldmarks;
+        ::std::set<::sw::mark::Fieldmark*> fieldmarks;
         for (SwNodeIndex i = aRg.aStart; i <= aRg.aEnd; ++i)
         {
             if (SwTextNode *const pTextNode = i.GetNode().GetTextNode())
diff --git a/sw/source/core/doc/docbm.cxx b/sw/source/core/doc/docbm.cxx
index dab51bb1d39a..3cdd43d24aa8 100644
--- a/sw/source/core/doc/docbm.cxx
+++ b/sw/source/core/doc/docbm.cxx
@@ -554,7 +554,7 @@ bool 
IDocumentMarkAccess::IsLegalPaMForCrossRefHeadingBookmark( const SwPaM& rPa
                rPaM.End()->GetContentIndex() == 
rPaM.End()->GetNode().GetTextNode()->Len() ) );
 }
 
-void IDocumentMarkAccess::DeleteFieldmarkCommand(::sw::mark::IFieldmark const& 
rMark)
+void IDocumentMarkAccess::DeleteFieldmarkCommand(::sw::mark::Fieldmark const& 
rMark)
 {
     if (GetType(rMark) != MarkType::TEXT_FIELDMARK)
     {
@@ -744,7 +744,7 @@ namespace sw::mark
         return pMark.release();
     }
 
-    ::sw::mark::IFieldmark* MarkManager::makeFieldBookmark(
+    ::sw::mark::Fieldmark* MarkManager::makeFieldBookmark(
         const SwPaM& rPaM,
         const OUString& rName,
         const OUString& rType,
@@ -770,7 +770,7 @@ namespace sw::mark
                              sw::mark::InsertMode::New,
                              pSepPos);
         }
-        sw::mark::IFieldmark* pFieldMark = 
dynamic_cast<sw::mark::IFieldmark*>( pMark );
+        sw::mark::Fieldmark* pFieldMark = dynamic_cast<sw::mark::Fieldmark*>( 
pMark );
         if (pFieldMark)
             pFieldMark->SetFieldname( rType );
 
@@ -784,7 +784,7 @@ namespace sw::mark
         return pFieldMark;
     }
 
-    ::sw::mark::IFieldmark* MarkManager::makeNoTextFieldBookmark(
+    ::sw::mark::Fieldmark* MarkManager::makeNoTextFieldBookmark(
         const SwPaM& rPaM,
         const OUString& rName,
         const OUString& rType)
@@ -816,7 +816,7 @@ namespace sw::mark
                     sw::mark::InsertMode::New);
         }
 
-        sw::mark::IFieldmark* pFieldMark = 
dynamic_cast<sw::mark::IFieldmark*>( pMark );
+        sw::mark::Fieldmark* pFieldMark = dynamic_cast<sw::mark::Fieldmark*>( 
pMark );
         if (pFieldMark)
             pFieldMark->SetFieldname( rType );
 
@@ -1464,7 +1464,7 @@ namespace sw::mark
             CompareIMarkStartsAfter());
     }
 
-    IFieldmark* MarkManager::getFieldmarkAt(const SwPosition& rPos) const
+    Fieldmark* MarkManager::getFieldmarkAt(const SwPosition& rPos) const
     {
         auto const pFieldmark = find_if(
             m_vFieldmarks.begin(),
@@ -1477,10 +1477,10 @@ namespace sw::mark
                 } );
         return (pFieldmark == m_vFieldmarks.end())
             ? nullptr
-            : dynamic_cast<IFieldmark*>(*pFieldmark);
+            : dynamic_cast<Fieldmark*>(*pFieldmark);
     }
 
-    IFieldmark* MarkManager::getInnerFieldmarkFor(const SwPosition& rPos) const
+    Fieldmark* MarkManager::getInnerFieldmarkFor(const SwPosition& rPos) const
     {
         // find the first mark starting on or before the position in reverse 
order
         // (as we are reverse searching, this is the one closest to the 
position)
@@ -1519,7 +1519,7 @@ namespace sw::mark
                 aMarkEnd = aCurrentMarkEnd;
             }
         }
-        return dynamic_cast<IFieldmark*>(pMark);
+        return dynamic_cast<Fieldmark*>(pMark);
     }
 
     IMark* MarkManager::getOneInnermostBookmarkFor(const SwPosition& rPos) 
const
@@ -1551,13 +1551,13 @@ namespace sw::mark
 
     void MarkManager::deleteFieldmarkAt(const SwPosition& rPos)
     {
-        auto const pFieldmark = dynamic_cast<Fieldmark*>(getFieldmarkAt(rPos));
+        Fieldmark* const pFieldmark = getFieldmarkAt(rPos);
         assert(pFieldmark); // currently all callers require it to be there
 
         deleteMark(lcl_FindMark(m_vAllMarks, pFieldmark), false);
     }
 
-    ::sw::mark::IFieldmark* 
MarkManager::changeFormFieldmarkType(::sw::mark::IFieldmark* pFieldmark, const 
OUString& rNewType)
+    ::sw::mark::Fieldmark* 
MarkManager::changeFormFieldmarkType(::sw::mark::Fieldmark* pFieldmark, const 
OUString& rNewType)
     {
         bool bActualChange = false;
         if(rNewType == ODF_FORMDROPDOWN)
@@ -1617,7 +1617,7 @@ namespace sw::mark
 
         SwEditWin& rEditWin = pSwView->GetEditWin();
         SwPosition aPos(*rCursorShell.GetCursor()->GetPoint());
-        IFieldmark* pFieldBM = getInnerFieldmarkFor(aPos);
+        Fieldmark* pFieldBM = getInnerFieldmarkFor(aPos);
         FieldmarkWithDropDownButton* pNewActiveFieldmark = nullptr;
         if ((!pFieldBM || (pFieldBM->GetFieldname() != ODF_FORMDROPDOWN && 
pFieldBM->GetFieldname() != ODF_FORMDATE))
             && aPos.GetContentIndex() > 0 )
@@ -1679,7 +1679,7 @@ namespace sw::mark
             bool bDropDownFieldExist = false;
             for (auto aIter = m_vFieldmarks.begin(); aIter != 
m_vFieldmarks.end(); ++aIter)
             {
-                IFieldmark *pMark = dynamic_cast<IFieldmark*>(*aIter);
+                Fieldmark *pMark = dynamic_cast<Fieldmark*>(*aIter);
                 if (pMark && pMark->GetFieldname() == ODF_FORMDROPDOWN)
                 {
                     bDropDownFieldExist = true;
@@ -1692,17 +1692,17 @@ namespace sw::mark
         }
     }
 
-    IFieldmark* MarkManager::getDropDownFor(const SwPosition& rPos) const
+    Fieldmark* MarkManager::getDropDownFor(const SwPosition& rPos) const
     {
-        IFieldmark *pMark = getFieldmarkAt(rPos);
+        Fieldmark *pMark = getFieldmarkAt(rPos);
         if (!pMark || pMark->GetFieldname() != ODF_FORMDROPDOWN)
             return nullptr;
         return pMark;
     }
 
-    std::vector<IFieldmark*> MarkManager::getNoTextFieldmarksIn(const SwPaM 
&rPaM) const
+    std::vector<Fieldmark*> MarkManager::getNoTextFieldmarksIn(const SwPaM 
&rPaM) const
     {
-        std::vector<IFieldmark*> aRet;
+        std::vector<Fieldmark*> aRet;
 
         for (auto aI = m_vFieldmarks.begin(),
             aEnd = m_vFieldmarks.end(); aI != aEnd; ++aI)
@@ -1712,7 +1712,7 @@ namespace sw::mark
             if (!rPaM.ContainsPosition(rStart))
                 continue;
 
-            IFieldmark *pMark = dynamic_cast<IFieldmark*>(pI);
+            Fieldmark *pMark = dynamic_cast<Fieldmark*>(pI);
             if (!pMark || (pMark->GetFieldname() != ODF_FORMDROPDOWN
                             && pMark->GetFieldname() != ODF_FORMCHECKBOX))
             {
@@ -1725,11 +1725,11 @@ namespace sw::mark
         return aRet;
     }
 
-    IFieldmark* MarkManager::getFieldmarkAfter(const SwPosition& rPos, bool 
bLoop) const
-        { return dynamic_cast<IFieldmark*>(lcl_getMarkAfter(m_vFieldmarks, 
rPos, bLoop)); }
+    Fieldmark* MarkManager::getFieldmarkAfter(const SwPosition& rPos, bool 
bLoop) const
+        { return dynamic_cast<Fieldmark*>(lcl_getMarkAfter(m_vFieldmarks, 
rPos, bLoop)); }
 
-    IFieldmark* MarkManager::getFieldmarkBefore(const SwPosition& rPos, bool 
bLoop) const
-        { return dynamic_cast<IFieldmark*>(lcl_getMarkBefore(m_vFieldmarks, 
rPos, bLoop)); }
+    Fieldmark* MarkManager::getFieldmarkBefore(const SwPosition& rPos, bool 
bLoop) const
+        { return dynamic_cast<Fieldmark*>(lcl_getMarkBefore(m_vFieldmarks, 
rPos, bLoop)); }
 
     IDocumentMarkAccess::const_iterator_t 
MarkManager::getAnnotationMarksBegin() const
     {
diff --git a/sw/source/core/inc/MarkManager.hxx 
b/sw/source/core/inc/MarkManager.hxx
index dd7eb9f6f18b..048f7735f65d 100644
--- a/sw/source/core/inc/MarkManager.hxx
+++ b/sw/source/core/inc/MarkManager.hxx
@@ -44,11 +44,11 @@ namespace sw::mark {
                 sw::mark::InsertMode eMode,
                 SwPosition const* pSepPos = nullptr) override;
 
-            virtual sw::mark::IFieldmark* makeFieldBookmark( const SwPaM& rPaM,
+            virtual sw::mark::Fieldmark* makeFieldBookmark( const SwPaM& rPaM,
                 const OUString& rName,
                 const OUString& rType,
                 SwPosition const* pSepPos = nullptr) override;
-            virtual sw::mark::IFieldmark* makeNoTextFieldBookmark( const 
SwPaM& rPaM,
+            virtual sw::mark::Fieldmark* makeNoTextFieldBookmark( const SwPaM& 
rPaM,
                 const OUString& rName,
                 const OUString& rType) override;
 
@@ -96,16 +96,16 @@ namespace sw::mark {
             virtual const_iterator_t getFieldmarksBegin() const override;
             virtual const_iterator_t getFieldmarksEnd() const override;
             virtual sal_Int32 getFieldmarksCount() const override;
-            virtual ::sw::mark::IFieldmark* getFieldmarkAt(const SwPosition& 
rPos) const override;
-            virtual sw::mark::IFieldmark* getInnerFieldmarkFor(const 
SwPosition& rPos) const override;
-            virtual sw::mark::IFieldmark* getFieldmarkBefore(const SwPosition& 
rPos, bool bLoop) const override;
-            virtual sw::mark::IFieldmark* getFieldmarkAfter(const SwPosition& 
rPos, bool bLoop) const override;
+            virtual ::sw::mark::Fieldmark* getFieldmarkAt(const SwPosition& 
rPos) const override;
+            virtual sw::mark::Fieldmark* getInnerFieldmarkFor(const 
SwPosition& rPos) const override;
+            virtual sw::mark::Fieldmark* getFieldmarkBefore(const SwPosition& 
rPos, bool bLoop) const override;
+            virtual sw::mark::Fieldmark* getFieldmarkAfter(const SwPosition& 
rPos, bool bLoop) const override;
 
-            virtual ::sw::mark::IFieldmark* getDropDownFor(const SwPosition 
&rPos) const override;
-            virtual std::vector<::sw::mark::IFieldmark*> 
getNoTextFieldmarksIn(const SwPaM &rPaM) const override;
+            virtual ::sw::mark::Fieldmark* getDropDownFor(const SwPosition 
&rPos) const override;
+            virtual std::vector<::sw::mark::Fieldmark*> 
getNoTextFieldmarksIn(const SwPaM &rPaM) const override;
 
             virtual void deleteFieldmarkAt(const SwPosition& rPos) override;
-            virtual ::sw::mark::IFieldmark* 
changeFormFieldmarkType(::sw::mark::IFieldmark* pFieldmark, const OUString& 
rNewType) override;
+            virtual ::sw::mark::Fieldmark* 
changeFormFieldmarkType(::sw::mark::Fieldmark* pFieldmark, const OUString& 
rNewType) override;
 
             virtual void NotifyCursorUpdate(const SwCursorShell& rCursorShell) 
override;
             virtual void ClearFieldActivation() override;
diff --git a/sw/source/core/inc/UndoBookmark.hxx 
b/sw/source/core/inc/UndoBookmark.hxx
index 368a99757167..3c014bb315b8 100644
--- a/sw/source/core/inc/UndoBookmark.hxx
+++ b/sw/source/core/inc/UndoBookmark.hxx
@@ -31,7 +31,7 @@ class SwHistoryTextFieldmark;
 namespace sw::mark
 {
 class IMark;
-class IFieldmark;
+class Fieldmark;
 }
 
 class SwDoc;
@@ -105,7 +105,7 @@ private:
     const std::unique_ptr<SwHistoryNoTextFieldmark> m_pHistoryNoTextFieldmark;
 
 public:
-    SwUndoInsNoTextFieldmark(const ::sw::mark::IFieldmark& rFieldmark);
+    SwUndoInsNoTextFieldmark(const ::sw::mark::Fieldmark& rFieldmark);
 
     virtual void UndoImpl(::sw::UndoRedoContext&) override;
     virtual void RedoImpl(::sw::UndoRedoContext&) override;
@@ -118,7 +118,7 @@ private:
     const std::unique_ptr<SwHistoryNoTextFieldmark> m_pHistoryNoTextFieldmark;
 
 public:
-    SwUndoDelNoTextFieldmark(const ::sw::mark::IFieldmark& rFieldmark);
+    SwUndoDelNoTextFieldmark(const ::sw::mark::Fieldmark& rFieldmark);
     ~SwUndoDelNoTextFieldmark();
 
     virtual void UndoImpl(::sw::UndoRedoContext&) override;
@@ -132,7 +132,7 @@ private:
     const std::unique_ptr<SwHistoryTextFieldmark> m_pHistoryTextFieldmark;
 
 public:
-    SwUndoInsTextFieldmark(const ::sw::mark::IFieldmark& rFieldmark);
+    SwUndoInsTextFieldmark(const ::sw::mark::Fieldmark& rFieldmark);
 
     virtual void UndoImpl(::sw::UndoRedoContext&) override;
     virtual void RedoImpl(::sw::UndoRedoContext&) override;
@@ -145,7 +145,7 @@ private:
     const std::unique_ptr<SwHistoryTextFieldmark> m_pHistoryTextFieldmark;
 
 public:
-    SwUndoDelTextFieldmark(const ::sw::mark::IFieldmark& rFieldmark);
+    SwUndoDelTextFieldmark(const ::sw::mark::Fieldmark& rFieldmark);
     ~SwUndoDelTextFieldmark();
 
     virtual void UndoImpl(::sw::UndoRedoContext&) override;
diff --git a/sw/source/core/inc/bookmark.hxx b/sw/source/core/inc/bookmark.hxx
index d30945e53061..414166dfbe16 100644
--- a/sw/source/core/inc/bookmark.hxx
+++ b/sw/source/core/inc/bookmark.hxx
@@ -28,7 +28,7 @@
 namespace sw::mark {
 
         /// return position of the CH_TXT_ATR_FIELDSEP for rMark
-        SwPosition FindFieldSep(IFieldmark const& rMark);
+        SwPosition FindFieldSep(Fieldmark const& rMark);
 
         /// check if rPaM is valid range of new fieldmark
         bool IsFieldmarkOverlap(SwPaM const& rPaM);
diff --git a/sw/source/core/inc/rolbck.hxx b/sw/source/core/inc/rolbck.hxx
index 9d74a6a9e61d..eb6ccf4fb9bf 100644
--- a/sw/source/core/inc/rolbck.hxx
+++ b/sw/source/core/inc/rolbck.hxx
@@ -275,7 +275,7 @@ class SwHistoryBookmark final : public SwHistoryHint
 class SwHistoryNoTextFieldmark final : public SwHistoryHint
 {
     public:
-        SwHistoryNoTextFieldmark(const ::sw::mark::IFieldmark& rFieldMark);
+        SwHistoryNoTextFieldmark(const ::sw::mark::Fieldmark& rFieldMark);
         virtual void SetInDoc(SwDoc* pDoc, bool) override;
         void ResetInDoc(SwDoc& rDoc);
 
@@ -290,7 +290,7 @@ class SwHistoryNoTextFieldmark final : public SwHistoryHint
 class SwHistoryTextFieldmark final : public SwHistoryHint
 {
     public:
-        SwHistoryTextFieldmark(const ::sw::mark::IFieldmark& rFieldMark);
+        SwHistoryTextFieldmark(const ::sw::mark::Fieldmark& rFieldMark);
         virtual void SetInDoc(SwDoc* pDoc, bool) override;
         void ResetInDoc(SwDoc& rDoc);
 
diff --git a/sw/source/core/inc/unobookmark.hxx 
b/sw/source/core/inc/unobookmark.hxx
index eeccb19d9216..11710fdd6d0b 100644
--- a/sw/source/core/inc/unobookmark.hxx
+++ b/sw/source/core/inc/unobookmark.hxx
@@ -147,11 +147,11 @@ class SwXFieldmarkParameters final
     , public SvtListener
 {
     private:
-        ::sw::mark::IFieldmark* m_pFieldmark;
+        ::sw::mark::Fieldmark* m_pFieldmark;
         /// @throws css::uno::RuntimeException
-        ::sw::mark::IFieldmark::parameter_map_t* getCoreParameters();
+        ::sw::mark::Fieldmark::parameter_map_t* getCoreParameters();
     public:
-        SwXFieldmarkParameters(::sw::mark::IFieldmark* const pFieldmark)
+        SwXFieldmarkParameters(::sw::mark::Fieldmark* const pFieldmark)
             : m_pFieldmark(pFieldmark)
         {
             StartListening(pFieldmark->GetNotifier());
@@ -178,7 +178,7 @@ typedef cppu::ImplInheritanceHelper< SwXBookmark,
         css::text::XTextField
     > SwXFieldmark_Base;
 
-/// UNO wrapper around an sw::mark::IFieldmark.
+/// UNO wrapper around an sw::mark::Fieldmark.
 class SwXFieldmark final
     : public SwXFieldmark_Base
 {
@@ -187,9 +187,9 @@ class SwXFieldmark final
     bool m_isFieldmarkSeparatorAtStart = false;
 
     rtl::Reference<SwXTextRange>
-        GetCommand(::sw::mark::IFieldmark const& rMark);
+        GetCommand(::sw::mark::Fieldmark const& rMark);
     rtl::Reference<SwXTextRange>
-        GetResult(::sw::mark::IFieldmark const& rMark);
+        GetResult(::sw::mark::Fieldmark const& rMark);
 
     SwXFieldmark(bool isReplacementObject, SwDoc* pDoc);
 
diff --git a/sw/source/core/text/itrform2.cxx b/sw/source/core/text/itrform2.cxx
index 913228480483..32cb08474db2 100644
--- a/sw/source/core/text/itrform2.cxx
+++ b/sw/source/core/text/itrform2.cxx
@@ -1180,7 +1180,7 @@ void SwContentControlPortion::Paint(const 
SwTextPaintInfo& rInf) const
 }
 
 namespace sw::mark {
-    OUString ExpandFieldmark(IFieldmark* pBM)
+    OUString ExpandFieldmark(Fieldmark* pBM)
     {
         if (pBM->GetFieldname() == ODF_FORMCHECKBOX)
         {
@@ -1192,13 +1192,13 @@ namespace sw::mark {
                     : u"\u2610"_ustr;
         }
         assert(pBM->GetFieldname() == ODF_FORMDROPDOWN);
-        const IFieldmark::parameter_map_t* const pParameters = 
pBM->GetParameters();
+        const Fieldmark::parameter_map_t* const pParameters = 
pBM->GetParameters();
         sal_Int32 nCurrentIdx = 0;
-        const IFieldmark::parameter_map_t::const_iterator pResult = 
pParameters->find(ODF_FORMDROPDOWN_RESULT);
+        const Fieldmark::parameter_map_t::const_iterator pResult = 
pParameters->find(ODF_FORMDROPDOWN_RESULT);
         if(pResult != pParameters->end())
             pResult->second >>= nCurrentIdx;
 
-        const IFieldmark::parameter_map_t::const_iterator pListEntries = 
pParameters->find(ODF_FORMDROPDOWN_LISTENTRY);
+        const Fieldmark::parameter_map_t::const_iterator pListEntries = 
pParameters->find(ODF_FORMDROPDOWN_LISTENTRY);
         if (pListEntries != pParameters->end())
         {
             uno::Sequence< OUString > vListEntries;
@@ -1318,7 +1318,7 @@ SwTextPortion *SwTextFormatter::WhichTextPor( 
SwTextFormatInfo &rInf ) const
             auto const ch(rInf.GetChar(rInf.GetIdx()));
             SwTextFrame const*const pFrame(rInf.GetTextFrame());
             SwPosition aPosition(pFrame->MapViewToModelPos(rInf.GetIdx()));
-            sw::mark::IFieldmark *pBM = 
pFrame->GetDoc().getIDocumentMarkAccess()->getInnerFieldmarkFor(aPosition);
+            sw::mark::Fieldmark *pBM = 
pFrame->GetDoc().getIDocumentMarkAccess()->getInnerFieldmarkFor(aPosition);
             if(pBM != nullptr && pBM->GetFieldname( ) == ODF_FORMDATE)
             {
                 if (ch == CH_TXT_ATR_FIELDSTART)
diff --git a/sw/source/core/text/porfld.hxx b/sw/source/core/text/porfld.hxx
index 019b0f20c49a..02bd073eccf8 100644
--- a/sw/source/core/text/porfld.hxx
+++ b/sw/source/core/text/porfld.hxx
@@ -222,12 +222,12 @@ public:
     virtual SwTwips GetViewWidth(const SwTextSizeInfo& rInf) const override;
 };
 
-namespace sw::mark { class IFieldmark; }
+namespace sw::mark { class Fieldmark; }
 
 class SwFieldFormDropDownPortion : public SwFieldPortion
 {
 public:
-    explicit SwFieldFormDropDownPortion(sw::mark::IFieldmark *pFieldMark, 
const OUString &rExpand)
+    explicit SwFieldFormDropDownPortion(sw::mark::Fieldmark *pFieldMark, const 
OUString &rExpand)
         : SwFieldPortion(rExpand)
         , m_pFieldMark(pFieldMark)
     {
@@ -238,13 +238,13 @@ public:
     virtual void Paint( const SwTextPaintInfo &rInf ) const override;
 
 private:
-    sw::mark::IFieldmark* m_pFieldMark;
+    sw::mark::Fieldmark* m_pFieldMark;
 };
 
 class SwFieldFormDatePortion : public SwFieldPortion
 {
 public:
-    explicit SwFieldFormDatePortion(sw::mark::IFieldmark *pFieldMark, bool 
bStart)
+    explicit SwFieldFormDatePortion(sw::mark::Fieldmark *pFieldMark, bool 
bStart)
         : SwFieldPortion(u""_ustr)
         , m_pFieldMark(pFieldMark)
         , m_bStart(bStart)
@@ -256,7 +256,7 @@ public:
     virtual void Paint( const SwTextPaintInfo &rInf ) const override;
 
 private:
-    sw::mark::IFieldmark* m_pFieldMark;
+    sw::mark::Fieldmark* m_pFieldMark;
     bool m_bStart;
 };
 
diff --git a/sw/source/core/text/portxt.cxx b/sw/source/core/text/portxt.cxx
index a9c738534e1e..0cc54de42606 100644
--- a/sw/source/core/text/portxt.cxx
+++ b/sw/source/core/text/portxt.cxx
@@ -906,7 +906,7 @@ void SwFieldFormCheckboxPortion::Paint( const 
SwTextPaintInfo& rInf ) const
 {
     SwPosition const 
aPosition(rInf.GetTextFrame()->MapViewToModelPos(rInf.GetIdx()));
 
-    IFieldmark const*const pBM = 
rInf.GetTextFrame()->GetDoc().getIDocumentMarkAccess()->getFieldmarkAt(aPosition);
+    Fieldmark const*const pBM = 
rInf.GetTextFrame()->GetDoc().getIDocumentMarkAccess()->getFieldmarkAt(aPosition);
 
     OSL_ENSURE(pBM && pBM->GetFieldname( ) == ODF_FORMCHECKBOX,
         "Where is my form field bookmark???");
@@ -922,7 +922,7 @@ void SwFieldFormCheckboxPortion::Paint( const 
SwTextPaintInfo& rInf ) const
 bool SwFieldFormCheckboxPortion::Format( SwTextFormatInfo & rInf )
 {
     SwPosition const 
aPosition(rInf.GetTextFrame()->MapViewToModelPos(rInf.GetIdx()));
-    IFieldmark const*const pBM = 
rInf.GetTextFrame()->GetDoc().getIDocumentMarkAccess()->getFieldmarkAt(aPosition);
+    Fieldmark const*const pBM = 
rInf.GetTextFrame()->GetDoc().getIDocumentMarkAccess()->getFieldmarkAt(aPosition);
     OSL_ENSURE(pBM && pBM->GetFieldname( ) == ODF_FORMCHECKBOX, "Where is my 
form field bookmark???");
     if (pBM && pBM->GetFieldname( ) == ODF_FORMCHECKBOX)
     {
diff --git a/sw/source/core/text/redlnitr.cxx b/sw/source/core/text/redlnitr.cxx
index afa87aba0963..3483b2bb8d09 100644
--- a/sw/source/core/text/redlnitr.cxx
+++ b/sw/source/core/text/redlnitr.cxx
@@ -70,7 +70,7 @@ private:
     /// next redline
     SwRedlineTable::size_type m_RedlineIndex;
     /// next fieldmark
-    std::pair<sw::mark::IFieldmark const*, std::optional<SwPosition>> 
m_Fieldmark;
+    std::pair<sw::mark::Fieldmark const*, std::optional<SwPosition>> 
m_Fieldmark;
     std::optional<SwPosition> m_oNextFieldmarkHide;
     /// previous paragraph break - because m_pStartPos/EndPos are non-owning
     std::optional<std::pair<SwPosition, SwPosition>> m_oParagraphBreak;
@@ -150,7 +150,7 @@ public:
             if (nPos != -1)
             {
                 m_oNextFieldmarkHide.emplace(*pTextNode, nPos);
-                sw::mark::IFieldmark const*const pFieldmark(
+                sw::mark::Fieldmark const*const pFieldmark(
                         m_eFieldmarkMode == sw::FieldmarkMode::ShowResult
                             ? m_rIDMA.getFieldmarkAt(*m_oNextFieldmarkHide)
                             : 
m_rIDMA.getInnerFieldmarkFor(*m_oNextFieldmarkHide));
diff --git a/sw/source/core/txtnode/modeltoviewhelper.cxx 
b/sw/source/core/txtnode/modeltoviewhelper.cxx
index 69c676bcad29..b40899d8ea9d 100644
--- a/sw/source/core/txtnode/modeltoviewhelper.cxx
+++ b/sw/source/core/txtnode/modeltoviewhelper.cxx
@@ -110,11 +110,11 @@ ModelToViewHelper::ModelToViewHelper(const SwTextNode 
&rNode,
     {
         // hide fieldmark commands
         IDocumentMarkAccess const& 
rIDMA(*rNode.GetDoc().getIDocumentMarkAccess());
-        ::std::deque<::std::pair<sw::mark::IFieldmark const*, bool>> 
startedFields;
+        ::std::deque<::std::pair<sw::mark::Fieldmark const*, bool>> 
startedFields;
         SwPaM cursor(rNode, 0);
         while (true)
         {
-            sw::mark::IFieldmark const* pFieldMark(nullptr);
+            sw::mark::Fieldmark const* pFieldMark(nullptr);
             while (true) // loop to skip NonTextFieldmarks, those are handled 
later
             {
                 pFieldMark = rIDMA.getInnerFieldmarkFor(*cursor.GetPoint());
@@ -319,10 +319,10 @@ ModelToViewHelper::ModelToViewHelper(const SwTextNode 
&rNode,
             //now get the dropdown formfields, get their position in the node 
and what the text they expand
             //to is
             SwPaM aPaM(rNode, 0, rNode, rNode.Len());
-            std::vector<sw::mark::IFieldmark*> aNoTextFieldmarks =
+            std::vector<sw::mark::Fieldmark*> aNoTextFieldmarks =
                 
rNode.GetDoc().getIDocumentMarkAccess()->getNoTextFieldmarksIn(aPaM);
 
-            for (sw::mark::IFieldmark *const pMark : aNoTextFieldmarks)
+            for (sw::mark::Fieldmark *const pMark : aNoTextFieldmarks)
             {
                 const sal_Int32 nDummyCharPos = 
pMark->GetMarkStart().GetContentIndex();
                 if (aHiddenMulti.IsSelected(nDummyCharPos))
diff --git a/sw/source/core/undo/rolbck.cxx b/sw/source/core/undo/rolbck.cxx
index 5937f52505b0..1def481cd552 100644
--- a/sw/source/core/undo/rolbck.cxx
+++ b/sw/source/core/undo/rolbck.cxx
@@ -702,7 +702,7 @@ bool SwHistoryBookmark::IsEqualBookmark(const 
::sw::mark::IMark& rBkmk)
         && m_aName == rBkmk.GetName();
 }
 
-SwHistoryNoTextFieldmark::SwHistoryNoTextFieldmark(const 
::sw::mark::IFieldmark& rFieldMark)
+SwHistoryNoTextFieldmark::SwHistoryNoTextFieldmark(const 
::sw::mark::Fieldmark& rFieldMark)
     : SwHistoryHint(HSTRY_NOTEXTFIELDMARK)
     , m_sType(rFieldMark.GetFieldname())
     , m_nNode(rFieldMark.GetMarkStart().GetNodeIndex())
@@ -746,7 +746,7 @@ void SwHistoryNoTextFieldmark::ResetInDoc(SwDoc& rDoc)
     }
 }
 
-SwHistoryTextFieldmark::SwHistoryTextFieldmark(const ::sw::mark::IFieldmark& 
rFieldMark)
+SwHistoryTextFieldmark::SwHistoryTextFieldmark(const ::sw::mark::Fieldmark& 
rFieldMark)
     : SwHistoryHint(HSTRY_TEXTFIELDMARK)
     , m_sName(rFieldMark.GetName())
     , m_sType(rFieldMark.GetFieldname())
@@ -1134,12 +1134,12 @@ void SwHistory::AddIMark(const ::sw::mark::IMark& rBkmk,
         case IDocumentMarkAccess::MarkType::TEXT_FIELDMARK:
         case IDocumentMarkAccess::MarkType::DATE_FIELDMARK:
             assert(bSavePos && bSaveOtherPos); // must be deleted completely!
-            pHt.reset(new 
SwHistoryTextFieldmark(dynamic_cast<sw::mark::IFieldmark const&>(rBkmk)));
+            pHt.reset(new 
SwHistoryTextFieldmark(dynamic_cast<sw::mark::Fieldmark const&>(rBkmk)));
             break;
         case IDocumentMarkAccess::MarkType::CHECKBOX_FIELDMARK:
         case IDocumentMarkAccess::MarkType::DROPDOWN_FIELDMARK:
             assert(bSavePos && bSaveOtherPos); // must be deleted completely!
-            pHt.reset(new 
SwHistoryNoTextFieldmark(dynamic_cast<sw::mark::IFieldmark const&>(rBkmk)));
+            pHt.reset(new 
SwHistoryNoTextFieldmark(dynamic_cast<sw::mark::Fieldmark const&>(rBkmk)));
             break;
         default:
             pHt.reset(new SwHistoryBookmark(rBkmk, bSavePos, bSaveOtherPos));
diff --git a/sw/source/core/undo/unbkmk.cxx b/sw/source/core/undo/unbkmk.cxx
index 8288453307a4..db36026f4c67 100644
--- a/sw/source/core/undo/unbkmk.cxx
+++ b/sw/source/core/undo/unbkmk.cxx
@@ -152,7 +152,7 @@ void SwUndoRenameBookmark::RedoImpl(::sw::UndoRedoContext & 
rContext)
     Rename(rContext, m_sOldName, m_sNewName);
 }
 
-SwUndoInsNoTextFieldmark::SwUndoInsNoTextFieldmark(const 
::sw::mark::IFieldmark& rFieldmark)
+SwUndoInsNoTextFieldmark::SwUndoInsNoTextFieldmark(const 
::sw::mark::Fieldmark& rFieldmark)
     : SwUndo(SwUndoId::INSERT, &rFieldmark.GetMarkPos().GetDoc())
     , m_pHistoryNoTextFieldmark(new SwHistoryNoTextFieldmark(rFieldmark))
 {
@@ -168,7 +168,7 @@ void 
SwUndoInsNoTextFieldmark::RedoImpl(::sw::UndoRedoContext & rContext)
     m_pHistoryNoTextFieldmark->SetInDoc(&rContext.GetDoc(), false);
 }
 
-SwUndoDelNoTextFieldmark::SwUndoDelNoTextFieldmark(const 
::sw::mark::IFieldmark& rFieldmark)
+SwUndoDelNoTextFieldmark::SwUndoDelNoTextFieldmark(const 
::sw::mark::Fieldmark& rFieldmark)
     : SwUndo(SwUndoId::DELETE, &rFieldmark.GetMarkPos().GetDoc())
     , m_pHistoryNoTextFieldmark(new SwHistoryNoTextFieldmark(rFieldmark))
 {
@@ -186,7 +186,7 @@ void 
SwUndoDelNoTextFieldmark::RedoImpl(::sw::UndoRedoContext & rContext)
     m_pHistoryNoTextFieldmark->ResetInDoc(rContext.GetDoc());
 }
 
-SwUndoInsTextFieldmark::SwUndoInsTextFieldmark(const ::sw::mark::IFieldmark& 
rFieldmark)
+SwUndoInsTextFieldmark::SwUndoInsTextFieldmark(const ::sw::mark::Fieldmark& 
rFieldmark)
     : SwUndo(SwUndoId::INSERT, &rFieldmark.GetMarkPos().GetDoc())
     , m_pHistoryTextFieldmark(new SwHistoryTextFieldmark(rFieldmark))
 {
@@ -202,7 +202,7 @@ void SwUndoInsTextFieldmark::RedoImpl(::sw::UndoRedoContext 
& rContext)
     m_pHistoryTextFieldmark->SetInDoc(&rContext.GetDoc(), false);
 }
 
-SwUndoDelTextFieldmark::SwUndoDelTextFieldmark(const ::sw::mark::IFieldmark& 
rFieldmark)
+SwUndoDelTextFieldmark::SwUndoDelTextFieldmark(const ::sw::mark::Fieldmark& 
rFieldmark)
     : SwUndo(SwUndoId::DELETE, &rFieldmark.GetMarkPos().GetDoc())
     , m_pHistoryTextFieldmark(new SwHistoryTextFieldmark(rFieldmark))
 {
diff --git a/sw/source/core/unocore/unobkm.cxx 
b/sw/source/core/unocore/unobkm.cxx
index ea8363ac0f2e..5790e4eba1cb 100644
--- a/sw/source/core/unocore/unobkm.cxx
+++ b/sw/source/core/unocore/unobkm.cxx
@@ -508,7 +508,7 @@ SwXBookmark::removeVetoableChangeListener(
 void SwXFieldmarkParameters::insertByName(const OUString& aName, const 
uno::Any& aElement)
 {
     SolarMutexGuard aGuard;
-    IFieldmark::parameter_map_t* pParameters = getCoreParameters();
+    Fieldmark::parameter_map_t* pParameters = getCoreParameters();
     if(pParameters->find(aName) != pParameters->end())
         throw container::ElementExistException();
     (*pParameters)[aName] = aElement;
@@ -524,8 +524,8 @@ void SwXFieldmarkParameters::removeByName(const OUString& 
aName)
 void SwXFieldmarkParameters::replaceByName(const OUString& aName, const 
uno::Any& aElement)
 {
     SolarMutexGuard aGuard;
-    IFieldmark::parameter_map_t* pParameters = getCoreParameters();
-    IFieldmark::parameter_map_t::iterator pEntry = pParameters->find(aName);
+    Fieldmark::parameter_map_t* pParameters = getCoreParameters();
+    Fieldmark::parameter_map_t::iterator pEntry = pParameters->find(aName);
     if(pEntry == pParameters->end())
         throw container::NoSuchElementException();
     pEntry->second = aElement;
@@ -534,8 +534,8 @@ void SwXFieldmarkParameters::replaceByName(const OUString& 
aName, const uno::Any
 uno::Any SwXFieldmarkParameters::getByName(const OUString& aName)
 {
     SolarMutexGuard aGuard;
-    IFieldmark::parameter_map_t* pParameters = getCoreParameters();
-    IFieldmark::parameter_map_t::iterator pEntry = pParameters->find(aName);
+    Fieldmark::parameter_map_t* pParameters = getCoreParameters();
+    Fieldmark::parameter_map_t::iterator pEntry = pParameters->find(aName);
     if(pEntry == pParameters->end())
         throw container::NoSuchElementException();
     return pEntry->second;
@@ -544,14 +544,14 @@ uno::Any SwXFieldmarkParameters::getByName(const 
OUString& aName)
 uno::Sequence<OUString> SwXFieldmarkParameters::getElementNames()
 {
     SolarMutexGuard aGuard;
-    IFieldmark::parameter_map_t* pParameters = getCoreParameters();
+    Fieldmark::parameter_map_t* pParameters = getCoreParameters();
     return comphelper::mapKeysToSequence(*pParameters);
 }
 
 sal_Bool SwXFieldmarkParameters::hasByName(const OUString& aName)
 {
     SolarMutexGuard aGuard;
-    IFieldmark::parameter_map_t* pParameters = getCoreParameters();
+    Fieldmark::parameter_map_t* pParameters = getCoreParameters();
     return (pParameters->find(aName) != pParameters->end());
 }
 
@@ -572,7 +572,7 @@ void SwXFieldmarkParameters::Notify(const SfxHint& rHint)
         m_pFieldmark = nullptr;
 }
 
-IFieldmark::parameter_map_t* SwXFieldmarkParameters::getCoreParameters()
+Fieldmark::parameter_map_t* SwXFieldmarkParameters::getCoreParameters()
 {
     if(!m_pFieldmark)
         throw uno::RuntimeException();
@@ -620,7 +620,7 @@ void SwXFieldmark::attachToRange( const uno::Reference < 
text::XTextRange >& xTe
 OUString SwXFieldmark::getFieldType()
 {
     SolarMutexGuard aGuard;
-    const IFieldmark *pBkm = dynamic_cast<const IFieldmark*>(GetBookmark());
+    const Fieldmark *pBkm = dynamic_cast<const Fieldmark*>(GetBookmark());
     if(!pBkm)
         throw uno::RuntimeException();
     return pBkm->GetFieldname();
@@ -629,7 +629,7 @@ OUString SwXFieldmark::getFieldType()
 void SwXFieldmark::setFieldType(const OUString & fieldType)
 {
     SolarMutexGuard aGuard;
-    IFieldmark *pBkm = dynamic_cast<IFieldmark*>(GetBookmark());
+    Fieldmark *pBkm = dynamic_cast<Fieldmark*>(GetBookmark());
     if(!pBkm)
         throw uno::RuntimeException();
 
@@ -640,7 +640,7 @@ void SwXFieldmark::setFieldType(const OUString & fieldType)
     // note: this must not change between point-fieldmarks and range-fieldmarks
     if(fieldType == ODF_FORMDROPDOWN || fieldType == ODF_FORMCHECKBOX || 
fieldType == ODF_FORMDATE)
     {
-        ::sw::mark::IFieldmark* pNewFieldmark = 
GetIDocumentMarkAccess()->changeFormFieldmarkType(pBkm, fieldType);
+        ::sw::mark::Fieldmark* pNewFieldmark = 
GetIDocumentMarkAccess()->changeFormFieldmarkType(pBkm, fieldType);
         if (pNewFieldmark)
         {
             registerInMark(*this, pNewFieldmark);
@@ -664,7 +664,7 @@ void SwXFieldmark::setFieldType(const OUString & fieldType)
 uno::Reference<container::XNameContainer> SwXFieldmark::getParameters()
 {
     SolarMutexGuard aGuard;
-    IFieldmark *pBkm = dynamic_cast<IFieldmark*>(GetBookmark());
+    Fieldmark *pBkm = dynamic_cast<Fieldmark*>(GetBookmark());
     if(!pBkm)
         throw uno::RuntimeException();
     return uno::Reference<container::XNameContainer>(new 
SwXFieldmarkParameters(pBkm));
@@ -803,7 +803,7 @@ uno::Reference<text::XTextRange> SAL_CALL 
SwXFieldmark::getAnchor()
 }
 
 rtl::Reference<SwXTextRange>
-SwXFieldmark::GetCommand(IFieldmark const& rMark)
+SwXFieldmark::GetCommand(Fieldmark const& rMark)
 {
     SwPosition const sepPos(sw::mark::FindFieldSep(rMark));
     SwPosition start(rMark.GetMarkStart());
@@ -812,7 +812,7 @@ SwXFieldmark::GetCommand(IFieldmark const& rMark)
 }
 
 rtl::Reference<SwXTextRange>
-SwXFieldmark::GetResult(IFieldmark const& rMark)
+SwXFieldmark::GetResult(Fieldmark const& rMark)
 {
     SwPosition sepPos(sw::mark::FindFieldSep(rMark));
     sepPos.AdjustContent(1);
@@ -826,7 +826,7 @@ SwXFieldmark::getPresentation(sal_Bool const bShowCommand)
 {
     SolarMutexGuard g;
 
-    IFieldmark const*const pMark(dynamic_cast<IFieldmark*>(GetBookmark()));
+    Fieldmark const*const pMark(dynamic_cast<Fieldmark*>(GetBookmark()));
     if (!pMark)
     {
         throw lang::DisposedException();
@@ -849,7 +849,7 @@ SwXFieldmark::getPresentation(sal_Bool const bShowCommand)
         OUString const type(getFieldType());
         if (type == ODF_FORMCHECKBOX || type == ODF_FORMDROPDOWN)
         {
-            return sw::mark::ExpandFieldmark(const_cast<IFieldmark *>(pMark));
+            return sw::mark::ExpandFieldmark(const_cast<Fieldmark *>(pMark));
         }
         else
         {
diff --git a/sw/source/core/unocore/unoportenum.cxx 
b/sw/source/core/unocore/unoportenum.cxx
index d975f3c20960..285ecd4b9c76 100644
--- a/sw/source/core/unocore/unoportenum.cxx
+++ b/sw/source/core/unocore/unoportenum.cxx
@@ -414,7 +414,7 @@ lcl_ExportFieldMark(
     const sal_Unicode Char = pTextNode->GetText()[start];
     if (CH_TXT_ATR_FIELDSTART == Char)
     {
-        ::sw::mark::IFieldmark* pFieldmark = nullptr;
+        ::sw::mark::Fieldmark* pFieldmark = nullptr;
         pFieldmark = rDoc.getIDocumentMarkAccess()->
             getFieldmarkAt(*pUnoCursor->GetMark());
         pPortion = new SwXTextPortion(
@@ -433,7 +433,7 @@ lcl_ExportFieldMark(
     }
     else if (CH_TXT_ATR_FIELDEND == Char)
     {
-        ::sw::mark::IFieldmark* pFieldmark = nullptr;
+        ::sw::mark::Fieldmark* pFieldmark = nullptr;
         pFieldmark = rDoc.getIDocumentMarkAccess()->
             getFieldmarkAt(*pUnoCursor->GetMark());
         pPortion = new SwXTextPortion(
@@ -446,7 +446,7 @@ lcl_ExportFieldMark(
     }
     else if (CH_TXT_ATR_FORMELEMENT == Char)
     {
-        ::sw::mark::IFieldmark* pFieldmark =
+        ::sw::mark::Fieldmark* pFieldmark =
             
rDoc.getIDocumentMarkAccess()->getFieldmarkAt(*pUnoCursor->GetMark());
         pPortion = new SwXTextPortion(
             pUnoCursor, i_xParentText, PORTION_FIELD_START_END);
diff --git a/sw/source/core/unocore/unotext.cxx 
b/sw/source/core/unocore/unotext.cxx
index de9789faf3eb..b189bc6d9167 100644
--- a/sw/source/core/unocore/unotext.cxx
+++ b/sw/source/core/unocore/unotext.cxx
@@ -1956,7 +1956,7 @@ void SwXText::ConvertCell(
 
     // tdf#149649 delete any fieldmarks overlapping the cell
     IDocumentMarkAccess & rIDMA(*m_pDoc->getIDocumentMarkAccess());
-    while (sw::mark::IFieldmark *const pMark = 
rIDMA.getInnerFieldmarkFor(*aStartCellPam.Start()))
+    while (sw::mark::Fieldmark *const pMark = 
rIDMA.getInnerFieldmarkFor(*aStartCellPam.Start()))
     {
         if (pMark->GetMarkEnd() <= *aEndCellPam.End())
         {
@@ -1984,7 +1984,7 @@ void SwXText::ConvertCell(
             }
         }
     }
-    while (sw::mark::IFieldmark *const pMark = 
rIDMA.getInnerFieldmarkFor(*aEndCellPam.End()))
+    while (sw::mark::Fieldmark *const pMark = 
rIDMA.getInnerFieldmarkFor(*aEndCellPam.End()))
     {
         if (*aStartCellPam.Start() <= pMark->GetMarkStart())
         {
diff --git a/sw/source/core/view/viewsh.cxx b/sw/source/core/view/viewsh.cxx
index 0811862713ee..9a4173433ae9 100644
--- a/sw/source/core/view/viewsh.cxx
+++ b/sw/source/core/view/viewsh.cxx
@@ -2307,7 +2307,7 @@ IsCursorInFieldmarkHidden(SwPaM const& rCursor, 
sw::FieldmarkMode const eMode)
         if (*rCursor.GetPoint() < (**iter).GetMarkEnd())
         {
             SwPosition const sepPos(sw::mark::FindFieldSep(
-                        dynamic_cast<sw::mark::IFieldmark&>(**iter)));
+                        dynamic_cast<sw::mark::Fieldmark&>(**iter)));
             if (eMode == sw::FieldmarkMode::ShowResult)
             {
                 if (*rCursor.GetPoint() <= sepPos
diff --git a/sw/source/filter/html/wrthtml.cxx 
b/sw/source/filter/html/wrthtml.cxx
index d97349a28c36..a6c1d06e7e6d 100644
--- a/sw/source/filter/html/wrthtml.cxx
+++ b/sw/source/filter/html/wrthtml.cxx
@@ -1320,7 +1320,7 @@ void SwHTMLWriter::OutPointFieldmarks( const SwPosition& 
rPos )
     if (!pMarkAccess)
         return;
 
-    const sw::mark::IFieldmark* pMark = pMarkAccess->getFieldmarkAt(rPos);
+    const sw::mark::Fieldmark* pMark = pMarkAccess->getFieldmarkAt(rPos);
     if (!pMark)
         return;
 
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx 
b/sw/source/filter/ww8/docxattributeoutput.cxx
index 4ce101ef27e9..4c0b51108b2a 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -265,9 +265,9 @@ public:
 
 class FieldMarkParamsHelper
 {
-    const sw::mark::IFieldmark& mrFieldmark;
+    const sw::mark::Fieldmark& mrFieldmark;
     public:
-    explicit FieldMarkParamsHelper( const sw::mark::IFieldmark& rFieldmark ) : 
mrFieldmark( rFieldmark ) {}
+    explicit FieldMarkParamsHelper( const sw::mark::Fieldmark& rFieldmark ) : 
mrFieldmark( rFieldmark ) {}
     OUString const & getName() const { return mrFieldmark.GetName(); }
     template < typename T >
     bool extractParam( const OUString& rKey, T& rResult )
@@ -275,7 +275,7 @@ class FieldMarkParamsHelper
         bool bResult = false;
         if ( mrFieldmark.GetParameters() )
         {
-            sw::mark::IFieldmark::parameter_map_t::const_iterator it = 
mrFieldmark.GetParameters()->find( rKey );
+            sw::mark::Fieldmark::parameter_map_t::const_iterator it = 
mrFieldmark.GetParameters()->find( rKey );
             if ( it != mrFieldmark.GetParameters()->end() )
                 bResult = ( it->second >>= rResult );
         }
@@ -2461,7 +2461,7 @@ void DocxAttributeOutput::DoWriteAnnotationMarks()
 
 void DocxAttributeOutput::WriteFFData(  const FieldInfos& rInfos )
 {
-    const ::sw::mark::IFieldmark& rFieldmark = *rInfos.pFieldmark;
+    const ::sw::mark::Fieldmark& rFieldmark = *rInfos.pFieldmark;
     FieldMarkParamsHelper params( rFieldmark );
 
     OUString sEntryMacro;
@@ -8567,7 +8567,7 @@ void DocxAttributeOutput::WriteField_Impl(const SwField 
*const pField,
     }
 }
 
-void DocxAttributeOutput::WriteFormData_Impl( const ::sw::mark::IFieldmark& 
rFieldmark )
+void DocxAttributeOutput::WriteFormData_Impl( const ::sw::mark::Fieldmark& 
rFieldmark )
 {
     if ( !m_Fields.empty() )
         m_Fields.begin()->pFieldmark = &rFieldmark;
diff --git a/sw/source/filter/ww8/docxattributeoutput.hxx 
b/sw/source/filter/ww8/docxattributeoutput.hxx
index f7c8d2892ac9..8fc216f973b5 100644
--- a/sw/source/filter/ww8/docxattributeoutput.hxx
+++ b/sw/source/filter/ww8/docxattributeoutput.hxx
@@ -60,7 +60,7 @@ namespace oox::drawingml { class DrawingML; }
 struct FieldInfos
 {
     std::shared_ptr<const SwField> pField;
-    const ::sw::mark::IFieldmark* pFieldmark;
+    const ::sw::mark::Fieldmark* pFieldmark;
     ww::eField  eType;
     bool        bOpen;
     bool        bSep;
@@ -436,7 +436,7 @@ public:
     void WriteField_Impl(const SwField* pField, ww::eField eType,
             const OUString& rFieldCmd, FieldFlags nMode,
             OUString const* pBookmarkName = nullptr);
-    void WriteFormData_Impl( const ::sw::mark::IFieldmark& rFieldmark );
+    void WriteFormData_Impl( const ::sw::mark::Fieldmark& rFieldmark );
 
     void WriteBookmarks_Impl( std::vector< OUString >& rStarts, std::vector< 
OUString >& rEnds, const SwRedlineData* pRedlineData = nullptr );
     void WriteFinalBookmarks_Impl( std::vector< OUString >& rStarts, 
std::vector< OUString >& rEnds );
diff --git a/sw/source/filter/ww8/docxexport.cxx 
b/sw/source/filter/ww8/docxexport.cxx
index 79168a35b03b..5ac28047ce88 100644
--- a/sw/source/filter/ww8/docxexport.cxx
+++ b/sw/source/filter/ww8/docxexport.cxx
@@ -325,12 +325,12 @@ void DocxExport::OutputField( const SwField* pField, 
ww::eField eFieldType, cons
     m_pAttrOutput->WriteField_Impl( pField, eFieldType, rFieldCmd, nMode );
 }
 
-void DocxExport::WriteFormData( const ::sw::mark::IFieldmark& rFieldmark )
+void DocxExport::WriteFormData( const ::sw::mark::Fieldmark& rFieldmark )
 {
     m_pAttrOutput->WriteFormData_Impl( rFieldmark );
 }
 
-void DocxExport::WriteHyperlinkData( const ::sw::mark::IFieldmark& 
/*rFieldmark*/ )
+void DocxExport::WriteHyperlinkData( const ::sw::mark::Fieldmark& 
/*rFieldmark*/ )
 {
     SAL_INFO("sw.ww8", "TODO DocxExport::WriteHyperlinkData().");
 }
diff --git a/sw/source/filter/ww8/docxexport.hxx 
b/sw/source/filter/ww8/docxexport.hxx
index a29ad9aaf3e9..fd5f08a20d61 100644
--- a/sw/source/filter/ww8/docxexport.hxx
+++ b/sw/source/filter/ww8/docxexport.hxx
@@ -183,8 +183,8 @@ public:
             const OUString& rFieldCmd, FieldFlags nMode = FieldFlags::All ) 
override;
 
     /// Write the data of the form field
-    virtual void WriteFormData( const ::sw::mark::IFieldmark& rFieldmark ) 
override;
-    virtual void WriteHyperlinkData( const ::sw::mark::IFieldmark& rFieldmark 
) override;
+    virtual void WriteFormData( const ::sw::mark::Fieldmark& rFieldmark ) 
override;
+    virtual void WriteHyperlinkData( const ::sw::mark::Fieldmark& rFieldmark ) 
override;
 
     virtual void DoComboBox(const OUString &rName,
                     const OUString &rHelp,
diff --git a/sw/source/filter/ww8/rtfexport.cxx 
b/sw/source/filter/ww8/rtfexport.cxx
index 6503a23b8a4e..d2337de3845b 100644
--- a/sw/source/filter/ww8/rtfexport.cxx
+++ b/sw/source/filter/ww8/rtfexport.cxx
@@ -331,7 +331,7 @@ void RtfExport::OutputField(const SwField* pField, 
ww::eField eFieldType, const
     m_pAttrOutput->WriteField_Impl(pField, eFieldType, rFieldCmd, nMode);
 }
 
-void RtfExport::WriteFormData(const ::sw::mark::IFieldmark& rFieldmark)
+void RtfExport::WriteFormData(const ::sw::mark::Fieldmark& rFieldmark)
 {
     sal_Int32 nType;
     if (rFieldmark.GetFieldname() == ODF_FORMDROPDOWN)
@@ -389,7 +389,7 @@ void RtfExport::WriteFormData(const ::sw::mark::IFieldmark& 
rFieldmark)
     m_pAttrOutput->RunText().append("}}"); // close FORMFIELD destination
 }
 
-void RtfExport::WriteHyperlinkData(const ::sw::mark::IFieldmark& 
/*rFieldmark*/)
+void RtfExport::WriteHyperlinkData(const ::sw::mark::Fieldmark& /*rFieldmark*/)
 {
     SAL_INFO("sw.rtf", "TODO: " << __func__);
 }
diff --git a/sw/source/filter/ww8/rtfexport.hxx 
b/sw/source/filter/ww8/rtfexport.hxx
index 3769808a3489..b9a7c1cbdade 100644
--- a/sw/source/filter/ww8/rtfexport.hxx
+++ b/sw/source/filter/ww8/rtfexport.hxx
@@ -107,8 +107,8 @@ public:
                      FieldFlags nMode = FieldFlags::All) override;
 
     /// Write the data of the form field
-    void WriteFormData(const ::sw::mark::IFieldmark& rFieldmark) override;
-    void WriteHyperlinkData(const ::sw::mark::IFieldmark& rFieldmark) override;
+    void WriteFormData(const ::sw::mark::Fieldmark& rFieldmark) override;
+    void WriteHyperlinkData(const ::sw::mark::Fieldmark& rFieldmark) override;
 
     void DoComboBox(const OUString& rName, const OUString& rHelp, const 
OUString& ToolTip,
                     const OUString& rSelected,
diff --git a/sw/source/filter/ww8/writerhelper.cxx 
b/sw/source/filter/ww8/writerhelper.cxx
index 1e21525ce679..0d71b51f10b5 100644
--- a/sw/source/filter/ww8/writerhelper.cxx
+++ b/sw/source/filter/ww8/writerhelper.cxx
@@ -716,7 +716,7 @@ namespace sw
                 {
                     SwPosition const end(*rPos.GetNode().GetTextNode(),
                                          nIndex - 1);
-                    sw::mark::IFieldmark *const pFieldMark(
+                    sw::mark::Fieldmark *const pFieldMark(
                         
rPos.GetDoc().getIDocumentMarkAccess()->getFieldmarkAt(end));
                     SAL_WARN_IF(!pFieldMark, "sw.ww8", "expected a field 
mark");
                     if (pFieldMark && pFieldMark->GetMarkPos().GetNodeIndex() 
== (*aResult)->m_aMkPos.m_nNode.GetIndex()+1
diff --git a/sw/source/filter/ww8/wrtw8nds.cxx 
b/sw/source/filter/ww8/wrtw8nds.cxx
index c2f47666ba23..d08c49432cd7 100644
--- a/sw/source/filter/ww8/wrtw8nds.cxx
+++ b/sw/source/filter/ww8/wrtw8nds.cxx
@@ -120,7 +120,7 @@ using namespace sw::types;
 using namespace sw::mark;
 using namespace ::oox::vml;
 
-static OUString lcl_getFieldCode( const IFieldmark* pFieldmark )
+static OUString lcl_getFieldCode( const Fieldmark* pFieldmark )
 {
     assert(pFieldmark);
 
@@ -141,7 +141,7 @@ static OUString lcl_getFieldCode( const IFieldmark* 
pFieldmark )
     return pFieldmark->GetFieldname();
 }
 
-static ww::eField lcl_getFieldId(const IFieldmark*const pFieldmark)
+static ww::eField lcl_getFieldId(const Fieldmark*const pFieldmark)
 {
     assert(pFieldmark);
 
@@ -2572,7 +2572,7 @@ void MSWordExportBase::OutputTextNode( SwTextNode& rNode )
                 if ( ch == CH_TXT_ATR_FIELDSTART )
                 {
                     SwPosition aPosition( rNode, nCurrentPos );
-                    ::sw::mark::IFieldmark const*const pFieldmark = 
pMarkAccess->getFieldmarkAt(aPosition);
+                    ::sw::mark::Fieldmark const*const pFieldmark = 
pMarkAccess->getFieldmarkAt(aPosition);
                     assert(pFieldmark);
 
                     // Date field is exported as content control, not as a 
simple field
@@ -2598,7 +2598,7 @@ void MSWordExportBase::OutputTextNode( SwTextNode& rNode )
                         OUString sCode = lcl_getFieldCode( pFieldmark );
                         if (pFieldmark->GetFieldname() == ODF_UNHANDLED )
                         {
-                            IFieldmark::parameter_map_t::const_iterator it = 
pFieldmark->GetParameters()->find( ODF_ID_PARAM );
+                            Fieldmark::parameter_map_t::const_iterator it = 
pFieldmark->GetParameters()->find( ODF_ID_PARAM );
                             if ( it != pFieldmark->GetParameters()->end() )
                             {
                                 OUString sFieldId;
@@ -2625,7 +2625,7 @@ void MSWordExportBase::OutputTextNode( SwTextNode& rNode )
                 {
                     SwPosition aPosition(rNode, nCurrentPos);
                     // the innermost field is the correct one
-                    sw::mark::IFieldmark const*const pFieldmark = 
pMarkAccess->getInnerFieldmarkFor(aPosition);
+                    sw::mark::Fieldmark const*const pFieldmark = 
pMarkAccess->getInnerFieldmarkFor(aPosition);
                     assert(pFieldmark);
                     // DateFieldmark / ODF_FORMDATE is not a field...
                     if (pFieldmark->GetFieldname() != ODF_FORMDATE)
@@ -2640,7 +2640,7 @@ void MSWordExportBase::OutputTextNode( SwTextNode& rNode )
                         if (pFieldmark->GetFieldname() == ODF_UNHANDLED)
                         {
                             // Check for the presence of a linked OLE object
-                            IFieldmark::parameter_map_t::const_iterator it = 
pFieldmark->GetParameters()->find( ODF_OLE_PARAM );
+                            Fieldmark::parameter_map_t::const_iterator it = 
pFieldmark->GetParameters()->find( ODF_OLE_PARAM );
                             if ( it != pFieldmark->GetParameters()->end() )
                             {
                                 OUString sOleId;
@@ -2655,7 +2655,7 @@ void MSWordExportBase::OutputTextNode( SwTextNode& rNode )
                 else if ( ch == CH_TXT_ATR_FIELDEND )
                 {
                     SwPosition aPosition( rNode, nCurrentPos );
-                    ::sw::mark::IFieldmark const*const pFieldmark = 
pMarkAccess->getFieldmarkAt(aPosition);
+                    ::sw::mark::Fieldmark const*const pFieldmark = 
pMarkAccess->getFieldmarkAt(aPosition);
 
                     assert(pFieldmark);
 
@@ -2673,7 +2673,7 @@ void MSWordExportBase::OutputTextNode( SwTextNode& rNode )
                             ww::eField eFieldId = lcl_getFieldId( pFieldmark );
                             if (pFieldmark->GetFieldname() == ODF_UNHANDLED)
                             {
-                                IFieldmark::parameter_map_t::const_iterator it 
= pFieldmark->GetParameters()->find( ODF_ID_PARAM );
+                                Fieldmark::parameter_map_t::const_iterator it 
= pFieldmark->GetParameters()->find( ODF_ID_PARAM );
                                 if ( it != pFieldmark->GetParameters()->end() )
                                 {
                                     OUString sFieldId;
@@ -2695,7 +2695,7 @@ void MSWordExportBase::OutputTextNode( SwTextNode& rNode )
                 else if ( ch == CH_TXT_ATR_FORMELEMENT )
                 {
                     SwPosition aPosition( rNode, nCurrentPos );
-                    ::sw::mark::IFieldmark const*const pFieldmark = 
pMarkAccess->getFieldmarkAt(aPosition);
+                    ::sw::mark::Fieldmark const*const pFieldmark = 
pMarkAccess->getFieldmarkAt(aPosition);
                     assert(pFieldmark);
 
                     bool const isDropdownOrCheckbox(pFieldmark->GetFieldname() 
== ODF_FORMDROPDOWN ||
diff --git a/sw/source/filter/ww8/wrtww8.cxx b/sw/source/filter/ww8/wrtww8.cxx
index a5d7dac2ff32..c4b53c6a9c81 100644
--- a/sw/source/filter/ww8/wrtww8.cxx
+++ b/sw/source/filter/ww8/wrtww8.cxx
@@ -1448,7 +1448,7 @@ void WW8Export::AppendBookmarks( const SwTextNode& rNd, 
sal_Int32 nCurrentPos, s
     for(const ::sw::mark::IMark* p : aArr)
     {
         const ::sw::mark::IMark& rBkmk = *p;
-        if(dynamic_cast< const ::sw::mark::IFieldmark *>(&rBkmk))
+        if(dynamic_cast< const ::sw::mark::Fieldmark *>(&rBkmk))
             continue;
 
         const SwPosition* pPos = &rBkmk.GetMarkPos();
@@ -4193,9 +4193,9 @@ void WW8SHDLong::Write( WW8Export& rExport )
     rExport.InsUInt16( 0 ); // ipat
 }
 
-void WW8Export::WriteFormData( const ::sw::mark::IFieldmark& rFieldmark )
+void WW8Export::WriteFormData( const ::sw::mark::Fieldmark& rFieldmark )
 {
-    const ::sw::mark::IFieldmark* pFieldmark = &rFieldmark;
+    const ::sw::mark::Fieldmark* pFieldmark = &rFieldmark;
     const ::sw::mark::CheckboxFieldmark* pAsCheckbox = dynamic_cast< const 
::sw::mark::CheckboxFieldmark* >( pFieldmark );
 
     if ( ! ( rFieldmark.GetFieldname() == ODF_FORMTEXT ||
@@ -4250,7 +4250,7 @@ void WW8Export::WriteFormData( const 
::sw::mark::IFieldmark& rFieldmark )
         ffres = 1;
     else if ( type == 2 )
     {
-        ::sw::mark::IFieldmark::parameter_map_t::const_iterator pResParameter 
= rFieldmark.GetParameters()->find(ODF_FORMDROPDOWN_RESULT);
+        ::sw::mark::Fieldmark::parameter_map_t::const_iterator pResParameter = 
rFieldmark.GetParameters()->find(ODF_FORMDROPDOWN_RESULT);
         if(pResParameter != rFieldmark.GetParameters()->end())
             pResParameter->second >>= ffres;
         else
@@ -4267,7 +4267,7 @@ void WW8Export::WriteFormData( const 
::sw::mark::IFieldmark& rFieldmark )
     OUString ffentrymcr;
     OUString ffexitmcr;
 
-    ::sw::mark::IFieldmark::parameter_map_t::const_iterator pParameter
+    ::sw::mark::Fieldmark::parameter_map_t::const_iterator pParameter
         = rFieldmark.GetParameters()->find(u"Type"_ustr);
     if (type == 0) // iTypeText
     {
@@ -4361,8 +4361,8 @@ void WW8Export::WriteFormData( const 
::sw::mark::IFieldmark& rFieldmark )
     if (type==2)
     {
         aFieldHeader.bits |= 0x8000; // ffhaslistbox
-        const ::sw::mark::IFieldmark::parameter_map_t* const pParameters = 
rFieldmark.GetParameters();
-        ::sw::mark::IFieldmark::parameter_map_t::const_iterator pListEntries = 
pParameters->find(ODF_FORMDROPDOWN_LISTENTRY);
+        const ::sw::mark::Fieldmark::parameter_map_t* const pParameters = 
rFieldmark.GetParameters();
+        ::sw::mark::Fieldmark::parameter_map_t::const_iterator pListEntries = 
pParameters->find(ODF_FORMDROPDOWN_LISTENTRY);
         if(pListEntries != pParameters->end())
         {
             uno::Sequence< OUString > vListEntries;
@@ -4435,7 +4435,7 @@ void WW8Export::WriteFormData( const 
::sw::mark::IFieldmark& rFieldmark )
     }
 }
 
-void WW8Export::WriteHyperlinkData( const sw::mark::IFieldmark& /*rFieldmark*/ 
)
+void WW8Export::WriteHyperlinkData( const sw::mark::Fieldmark& /*rFieldmark*/ )
 {
     //@TODO implement me !!!
 }
diff --git a/sw/source/filter/ww8/wrtww8.hxx b/sw/source/filter/ww8/wrtww8.hxx
index 94a7b56dc07b..c6f99189da68 100644
--- a/sw/source/filter/ww8/wrtww8.hxx
+++ b/sw/source/filter/ww8/wrtww8.hxx
@@ -128,7 +128,7 @@ class SwMSConvertControls;
 class WW8_WrPc;
 struct WW8_PdAttrDesc;
 class SvxBrushItem;
-namespace sw::mark { class IFieldmark; }
+namespace sw::mark { class Fieldmark; }
 namespace com::sun::star::embed { class XEmbeddedObject; }
 
 typedef std::map<const css::embed::XEmbeddedObject*, sal_Int32> WW8OleMap;
@@ -800,8 +800,8 @@ public:
             const OUString& rFieldCmd, FieldFlags nMode = FieldFlags::All ) = 
0;
 
     /// Write the data of the form field
-    virtual void WriteFormData( const ::sw::mark::IFieldmark& rFieldmark ) = 0;
-    virtual void WriteHyperlinkData( const ::sw::mark::IFieldmark& rFieldmark 
) = 0;
+    virtual void WriteFormData( const ::sw::mark::Fieldmark& rFieldmark ) = 0;
+    virtual void WriteHyperlinkData( const ::sw::mark::Fieldmark& rFieldmark ) 
= 0;
 
     virtual void DoComboBox(const OUString &rName,
                     const OUString &rHelp,
@@ -1192,8 +1192,8 @@ public:
     void GetCurrentItems(ww::bytes &rItems) const;
 
     /// Write the data of the form field
-    virtual void WriteFormData( const ::sw::mark::IFieldmark& rFieldmark ) 
override;
-    virtual void WriteHyperlinkData( const ::sw::mark::IFieldmark& rFieldmark 
) override;
+    virtual void WriteFormData( const ::sw::mark::Fieldmark& rFieldmark ) 
override;
+    virtual void WriteHyperlinkData( const ::sw::mark::Fieldmark& rFieldmark ) 
override;
 
     /// Fields.
     WW8_WrPlcField* CurrentFieldPlc() const;
diff --git a/sw/source/filter/ww8/ww8par.hxx b/sw/source/filter/ww8/ww8par.hxx
index 7855c712d6f0..9512550fe93c 100644
--- a/sw/source/filter/ww8/ww8par.hxx
+++ b/sw/source/filter/ww8/ww8par.hxx
@@ -561,7 +561,7 @@ class WW8FieldEntry
         OUString msBookmarkName;
         OUString msMarkType;
         OUString msMarkCode;
-        ::sw::mark::IFieldmark::parameter_map_t maParams;
+        ::sw::mark::Fieldmark::parameter_map_t maParams;
 
     public:
         sw::hack::Position maStartPos;
@@ -580,7 +580,7 @@ class WW8FieldEntry
         void SetBookmarkName(const OUString& bookmarkName);
         void SetBookmarkType(const OUString& bookmarkType);
         void SetBookmarkCode(const OUString& bookmarkCode);
-        ::sw::mark::IFieldmark::parameter_map_t& getParameters() { return 
maParams;}
+        ::sw::mark::Fieldmark::parameter_map_t& getParameters() { return 
maParams;}
 };
 
 //    mini marker for some flags
diff --git a/sw/source/filter/ww8/ww8par3.cxx b/sw/source/filter/ww8/ww8par3.cxx
index e6fc3ec44e55..94ea2e754a90 100644
--- a/sw/source/filter/ww8/ww8par3.cxx
+++ b/sw/source/filter/ww8/ww8par3.cxx
@@ -222,11 +222,11 @@ eF_ResT SwWW8ImplReader::Read_F_FormCheckBox( 
WW8FieldDesc* pF, OUString& rStr )
     if (!aBookmarkName.isEmpty())
     {
         IDocumentMarkAccess* pMarksAccess = m_rDoc.getIDocumentMarkAccess( );
-        IFieldmark* pFieldmark = pMarksAccess->makeNoTextFieldBookmark(
+        Fieldmark* pFieldmark = pMarksAccess->makeNoTextFieldBookmark(
                 *m_pPaM, aBookmarkName, ODF_FORMCHECKBOX );
         OSL_ENSURE(pFieldmark!=nullptr, "hmmm; why was the bookmark not 
created?");
         if (pFieldmark!=nullptr) {
-            IFieldmark::parameter_map_t* const pParameters = 
pFieldmark->GetParameters();
+            Fieldmark::parameter_map_t* const pParameters = 
pFieldmark->GetParameters();
             CheckboxFieldmark* pCheckboxFm = 
dynamic_cast<CheckboxFieldmark*>(pFieldmark);
             (*pParameters)[ODF_FORMCHECKBOX_HELPTEXT] <<= aFormula.msToolTip;
 
@@ -292,7 +292,7 @@ eF_ResT SwWW8ImplReader::Read_F_FormListBox( WW8FieldDesc* 
pF, OUString& rStr)
         if (!aBookmarkName.isEmpty())
         {
             IDocumentMarkAccess* pMarksAccess = m_rDoc.getIDocumentMarkAccess( 
);
-            IFieldmark *pFieldmark =
+            Fieldmark *pFieldmark =
                     pMarksAccess->makeNoTextFieldBookmark( *m_pPaM, 
aBookmarkName, ODF_FORMDROPDOWN );
             OSL_ENSURE(pFieldmark!=nullptr, "hmmm; why was the bookmark not 
created?");
             if ( pFieldmark != nullptr )
diff --git a/sw/source/filter/ww8/ww8par5.cxx b/sw/source/filter/ww8/ww8par5.cxx
index 774eb3740546..39295160adc4 100644
--- a/sw/source/filter/ww8/ww8par5.cxx
+++ b/sw/source/filter/ww8/ww8par5.cxx
@@ -545,7 +545,7 @@ sal_uInt16 SwWW8ImplReader::End_Field()
             SwPaM aFieldPam( m_aFieldStack.back().GetPtNode().GetNode(), 
m_aFieldStack.back().GetPtContent(), aEndPos.GetNode(), 
aEndPos.GetContentIndex());
 
             IDocumentMarkAccess* pMarksAccess = m_rDoc.getIDocumentMarkAccess( 
);
-            IFieldmark *pFieldmark = SanityCheck(aFieldPam) ? 
pMarksAccess->makeFieldBookmark(
+            Fieldmark *pFieldmark = SanityCheck(aFieldPam) ? 
pMarksAccess->makeFieldBookmark(
                         aFieldPam, m_aFieldStack.back().GetBookmarkName(), 
ODF_FORMTEXT,
                         aFieldPam.Start() /*same pos as start!*/ ) : nullptr;
             OSL_ENSURE(pFieldmark!=nullptr, "hmmm; why was the bookmark not 
created?");
@@ -553,7 +553,7 @@ sal_uInt16 SwWW8ImplReader::End_Field()
                 // adapt redline positions to inserted field mark start
                 // dummy char (assume not necessary for end dummy char)
                 
m_xRedlineStack->MoveAttrsFieldmarkInserted(*aFieldPam.Start());
-                const IFieldmark::parameter_map_t& rParametersToAdd = 
m_aFieldStack.back().getParameters();
+                const Fieldmark::parameter_map_t& rParametersToAdd = 
m_aFieldStack.back().getParameters();
                 pFieldmark->GetParameters()->insert(rParametersToAdd.begin(), 
rParametersToAdd.end());
             }
         }
@@ -671,7 +671,7 @@ sal_uInt16 SwWW8ImplReader::End_Field()
 
                     IDocumentMarkAccess* pMarksAccess = 
m_rDoc.getIDocumentMarkAccess( );
 
-                    IFieldmark* pFieldmark = pMarksAccess->makeFieldBookmark(
+                    Fieldmark* pFieldmark = pMarksAccess->makeFieldBookmark(
                                 aFieldPam,
                                 m_aFieldStack.back().GetBookmarkName(),
                                 ODF_UNHANDLED,
@@ -681,7 +681,7 @@ sal_uInt16 SwWW8ImplReader::End_Field()
                         // adapt redline positions to inserted field mark start
-e 
... etc. - the rest is truncated

Reply via email to