chart2/source/controller/chartapiwrapper/AxisWrapper.cxx                       
    |    8 
 
chart2/source/controller/chartapiwrapper/WrappedAxisAndGridExistenceProperties.cxx
 |    7 
 chart2/source/controller/dialogs/ObjectNameProvider.cxx                        
    |    3 
 chart2/source/controller/dialogs/dlg_InsertErrorBars.cxx                       
    |    4 
 chart2/source/controller/dialogs/dlg_ObjectProperties.cxx                      
    |    3 
 chart2/source/controller/itemsetwrapper/AxisItemConverter.cxx                  
    |    9 
 chart2/source/controller/itemsetwrapper/MultipleChartConverters.cxx            
    |    7 
 chart2/source/controller/itemsetwrapper/SeriesOptionsItemConverter.cxx         
    |    3 
 chart2/source/controller/main/ChartController_Insert.cxx                       
    |    3 
 chart2/source/controller/main/ChartController_Properties.cxx                   
    |   11 
 chart2/source/controller/main/ChartController_Tools.cxx                        
    |    3 
 chart2/source/controller/main/ChartController_Window.cxx                       
    |    8 
 chart2/source/controller/main/ControllerCommandDispatch.cxx                    
    |    1 
 chart2/source/controller/main/ObjectHierarchy.cxx                              
    |   16 
 chart2/source/controller/sidebar/ChartAxisPanel.cxx                            
    |   21 
 chart2/source/inc/Axis.hxx                                                     
    |    9 
 chart2/source/inc/AxisHelper.hxx                                               
    |   51 +
 chart2/source/inc/BaseCoordinateSystem.hxx                                     
    |    6 
 chart2/source/inc/ChartType.hxx                                                
    |    4 
 chart2/source/inc/Diagram.hxx                                                  
    |    2 
 chart2/source/inc/DiagramHelper.hxx                                            
    |    5 
 chart2/source/inc/ObjectIdentifier.hxx                                         
    |    6 
 chart2/source/model/main/Axis.cxx                                              
    |    2 
 chart2/source/model/main/BaseCoordinateSystem.cxx                              
    |   48 +
 chart2/source/model/main/Diagram.cxx                                           
    |   22 
 chart2/source/model/template/BubbleChartType.cxx                               
    |    3 
 chart2/source/model/template/ChartType.cxx                                     
    |    9 
 chart2/source/model/template/ChartTypeTemplate.cxx                             
    |   35 -
 chart2/source/model/template/NetChartType.cxx                                  
    |    5 
 chart2/source/model/template/PieChartType.cxx                                  
    |    3 
 chart2/source/model/template/PieChartTypeTemplate.cxx                          
    |    5 
 chart2/source/model/template/ScatterChartType.cxx                              
    |    3 
 chart2/source/tools/AxisHelper.cxx                                             
    |  277 ++++++----
 chart2/source/tools/DataSeriesHelper.cxx                                       
    |    9 
 chart2/source/tools/DiagramHelper.cxx                                          
    |   33 -
 chart2/source/tools/ExplicitCategoriesProvider.cxx                             
    |    9 
 chart2/source/tools/ObjectIdentifier.cxx                                       
    |   37 +
 chart2/source/tools/ReferenceSizeProvider.cxx                                  
    |   29 -
 chart2/source/tools/TitleHelper.cxx                                            
    |   18 
 chart2/source/view/axes/VCartesianCoordinateSystem.cxx                         
    |    5 
 chart2/source/view/axes/VCoordinateSystem.cxx                                  
    |    5 
 chart2/source/view/axes/VPolarCoordinateSystem.cxx                             
    |    5 
 chart2/source/view/inc/VCoordinateSystem.hxx                                   
    |    4 
 chart2/source/view/main/ChartView.cxx                                          
    |   15 
 solenv/clang-format/excludelist                                                
    |    2 
 45 files changed, 511 insertions(+), 262 deletions(-)

New commits:
commit 333ccb081b4ab62adce50ca4c93162b9baf984d0
Author:     Noel Grandin <noelgran...@gmail.com>
AuthorDate: Sat Feb 5 14:58:07 2022 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Sat Feb 5 20:39:03 2022 +0100

    use more concrete types in chart2, Axis
    
    Change-Id: If80b6487ad2b8ac75f98f798b839aff2b8a5c23e
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129522
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/chart2/source/controller/chartapiwrapper/AxisWrapper.cxx 
b/chart2/source/controller/chartapiwrapper/AxisWrapper.cxx
index db3e413ba919..21f952069205 100644
--- a/chart2/source/controller/chartapiwrapper/AxisWrapper.cxx
+++ b/chart2/source/controller/chartapiwrapper/AxisWrapper.cxx
@@ -18,6 +18,7 @@
  */
 
 #include "AxisWrapper.hxx"
+#include <Axis.hxx>
 #include <AxisHelper.hxx>
 #include <TitleHelper.hxx>
 #include "Chart2ModelContact.hxx"
@@ -574,7 +575,7 @@ awt::Size AxisWrapper::getCurrentSizeForReference()
 
 Reference< chart2::XAxis > AxisWrapper::getAxis()
 {
-    Reference< chart2::XAxis > xAxis;
+    rtl::Reference< Axis > xAxis;
     try
     {
         sal_Int32 nDimensionIndex = 0;
@@ -586,9 +587,8 @@ Reference< chart2::XAxis > AxisWrapper::getAxis()
         if( !xAxis.is() )
         {
             xAxis = AxisHelper::createAxis( nDimensionIndex, bMainAxis, 
xDiagram, m_spChart2ModelContact->m_xContext );
-            Reference< beans::XPropertySet > xProp( xAxis, uno::UNO_QUERY );
-            if( xProp.is() )
-                xProp->setPropertyValue("Show", uno::Any( false ) );
+            if( xAxis.is() )
+                xAxis->setPropertyValue("Show", uno::Any( false ) );
         }
     }
     catch( const uno::Exception & )
diff --git 
a/chart2/source/controller/chartapiwrapper/WrappedAxisAndGridExistenceProperties.cxx
 
b/chart2/source/controller/chartapiwrapper/WrappedAxisAndGridExistenceProperties.cxx
index 4895e1c40b9d..2f7181cfbb0e 100644
--- 
a/chart2/source/controller/chartapiwrapper/WrappedAxisAndGridExistenceProperties.cxx
+++ 
b/chart2/source/controller/chartapiwrapper/WrappedAxisAndGridExistenceProperties.cxx
@@ -25,6 +25,7 @@
 #include <com/sun/star/beans/XPropertySet.hpp>
 #include <com/sun/star/chart2/XAxis.hpp>
 #include <com/sun/star/chart2/XDiagram.hpp>
+#include <Axis.hxx>
 #include <AxisHelper.hxx>
 #include <WrappedProperty.hxx>
 #include "Chart2ModelContact.hxx"
@@ -372,11 +373,11 @@ void WrappedAxisLabelExistenceProperty::setPropertyValue( 
const Any& rOuterValue
         return;
 
     rtl::Reference< ::chart::Diagram > xDiagram( 
m_spChart2ModelContact->getDiagram() );
-    Reference< beans::XPropertySet > xProp( AxisHelper::getAxis( 
m_nDimensionIndex, m_bMain, xDiagram ), uno::UNO_QUERY );
+    rtl::Reference< Axis > xProp = AxisHelper::getAxis( m_nDimensionIndex, 
m_bMain, xDiagram );
     if( !xProp.is() && bNewValue )
     {
         //create axis if needed
-        xProp.set( AxisHelper::createAxis( m_nDimensionIndex, m_bMain, 
xDiagram, m_spChart2ModelContact->m_xContext ), uno::UNO_QUERY );
+        xProp = AxisHelper::createAxis( m_nDimensionIndex, m_bMain, xDiagram, 
m_spChart2ModelContact->m_xContext );
         if( xProp.is() )
             xProp->setPropertyValue( "Show", uno::Any( false ) );
     }
@@ -388,7 +389,7 @@ Any WrappedAxisLabelExistenceProperty::getPropertyValue( 
const Reference< beans:
 {
     Any aRet;
     rtl::Reference< ::chart::Diagram > xDiagram( 
m_spChart2ModelContact->getDiagram() );
-    Reference< beans::XPropertySet > xProp( AxisHelper::getAxis( 
m_nDimensionIndex, m_bMain, xDiagram ), uno::UNO_QUERY );
+    rtl::Reference< Axis > xProp = AxisHelper::getAxis( m_nDimensionIndex, 
m_bMain, xDiagram );
     if( xProp.is() )
         aRet = xProp->getPropertyValue( "DisplayLabels" );
     else
diff --git a/chart2/source/controller/dialogs/ObjectNameProvider.cxx 
b/chart2/source/controller/dialogs/ObjectNameProvider.cxx
index cdee6567f544..d9c36482256b 100644
--- a/chart2/source/controller/dialogs/ObjectNameProvider.cxx
+++ b/chart2/source/controller/dialogs/ObjectNameProvider.cxx
@@ -24,6 +24,7 @@
 #include <ObjectNameProvider.hxx>
 #include <ResId.hxx>
 #include <strings.hrc>
+#include <Axis.hxx>
 #include <AxisHelper.hxx>
 #include <ChartModel.hxx>
 #include <ChartModelHelper.hxx>
@@ -425,7 +426,7 @@ OUString ObjectNameProvider::getGridName( const OUString& 
rObjectCID
     sal_Int32 nCooSysIndex = -1;
     sal_Int32 nDimensionIndex = -1;
     sal_Int32 nAxisIndex = -1;
-    Reference< XAxis > xAxis( ObjectIdentifier::getAxisForCID( rObjectCID , 
xChartModel ) );
+    rtl::Reference< Axis > xAxis = ObjectIdentifier::getAxisForCID( rObjectCID 
, xChartModel );
     AxisHelper::getIndicesForAxis( xAxis, ChartModelHelper::findDiagram( 
xChartModel )
               , nCooSysIndex , nDimensionIndex, nAxisIndex );
 
diff --git a/chart2/source/controller/dialogs/dlg_InsertErrorBars.cxx 
b/chart2/source/controller/dialogs/dlg_InsertErrorBars.cxx
index 0008d6e7d00f..fcb0eefd3ba9 100644
--- a/chart2/source/controller/dialogs/dlg_InsertErrorBars.cxx
+++ b/chart2/source/controller/dialogs/dlg_InsertErrorBars.cxx
@@ -26,6 +26,7 @@
 #include <ObjectIdentifier.hxx>
 #include <DiagramHelper.hxx>
 #include <Diagram.hxx>
+#include <Axis.hxx>
 #include <AxisHelper.hxx>
 #include <ObjectNameProvider.hxx>
 #include <DataSeries.hxx>
@@ -76,10 +77,9 @@ double 
InsertErrorBarsDialog::getAxisMinorStepWidthForErrorBarDecimals(
     ExplicitValueProvider* pExplicitValueProvider( 
comphelper::getFromUnoTunnel<ExplicitValueProvider>(xChartView) );
     if( pExplicitValueProvider )
     {
-        Reference< XAxis > xAxis;
         rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( 
xChartModel ) );
         rtl::Reference< DataSeries > xSeries = 
ObjectIdentifier::getDataSeriesForCID( rSelectedObjectCID, xChartModel );
-        xAxis = DiagramHelper::getAttachedAxis( xSeries, xDiagram );
+        rtl::Reference< Axis > xAxis = DiagramHelper::getAttachedAxis( 
xSeries, xDiagram );
         if(!xAxis.is())
             xAxis = AxisHelper::getAxis( 1/*nDimensionIndex*/, 
true/*bMainAxis*/, xDiagram );
         if(xAxis.is())
diff --git a/chart2/source/controller/dialogs/dlg_ObjectProperties.cxx 
b/chart2/source/controller/dialogs/dlg_ObjectProperties.cxx
index f16eb8f42807..583c71128514 100644
--- a/chart2/source/controller/dialogs/dlg_ObjectProperties.cxx
+++ b/chart2/source/controller/dialogs/dlg_ObjectProperties.cxx
@@ -41,6 +41,7 @@
 #include <DiagramHelper.hxx>
 #include <Diagram.hxx>
 #include <NumberFormatterWrapper.hxx>
+#include <Axis.hxx>
 #include <AxisHelper.hxx>
 #include <ExplicitCategoriesProvider.hxx>
 #include <ChartModel.hxx>
@@ -157,7 +158,7 @@ void ObjectPropertiesDialogParameter::init( const 
rtl::Reference<::chart::ChartM
 
         if( m_bHasScaleProperties )
         {
-            uno::Reference< XAxis > xAxis( ObjectIdentifier::getAxisForCID( 
m_aObjectCID, xChartModel ) );
+            rtl::Reference< Axis > xAxis = ObjectIdentifier::getAxisForCID( 
m_aObjectCID, xChartModel );
             if( xAxis.is() )
             {
                 //no scale page for series axis
diff --git a/chart2/source/controller/itemsetwrapper/AxisItemConverter.cxx 
b/chart2/source/controller/itemsetwrapper/AxisItemConverter.cxx
index 69cc0ba83f95..40dd0616e5cb 100644
--- a/chart2/source/controller/itemsetwrapper/AxisItemConverter.cxx
+++ b/chart2/source/controller/itemsetwrapper/AxisItemConverter.cxx
@@ -27,6 +27,7 @@
 #include "SchWhichPairs.hxx"
 #include <ChartModelHelper.hxx>
 #include <ChartModel.hxx>
+#include <Axis.hxx>
 #include <AxisHelper.hxx>
 #include <CommonConverters.hxx>
 #include <ChartType.hxx>
@@ -358,7 +359,7 @@ void AxisItemConverter::FillSpecialItem( sal_uInt16 
nWhichId, SfxItemSet & rOutI
             rtl::Reference< BaseCoordinateSystem > xCooSys( 
AxisHelper::getCoordinateSystemOfAxis(
                 m_xAxis, ChartModelHelper::findDiagram( m_xChartDoc ) ) );
 
-            Reference< chart2::XAxis > xCrossingMainAxis( 
AxisHelper::getCrossingMainAxis( m_xAxis, xCooSys ) );
+            rtl::Reference< Axis > xCrossingMainAxis = 
AxisHelper::getCrossingMainAxis( m_xAxis, xCooSys );
 
             sal_Int32 nFormatKey = 
ExplicitValueProvider::getExplicitNumberFormatKeyForAxis(
                 xCrossingMainAxis, xCooSys, m_xChartDoc);
@@ -723,7 +724,7 @@ bool AxisItemConverter::ApplySpecialItem( sal_uInt16 
nWhichId, const SfxItemSet
                         sal_Int32 nAxisIndex=0;
                         if( AxisHelper::getIndicesForAxis( m_xAxis, xCooSys, 
nDimensionIndex, nAxisIndex ) && nAxisIndex==0 )
                         {
-                            Reference< beans::XPropertySet > 
xCrossingMainAxis( AxisHelper::getCrossingMainAxis( m_xAxis, xCooSys ), 
uno::UNO_QUERY );
+                            rtl::Reference< Axis > xCrossingMainAxis = 
AxisHelper::getCrossingMainAxis( m_xAxis, xCooSys );
                             if( xCrossingMainAxis.is() )
                             {
                                 double fValue = 0.0;
@@ -758,7 +759,7 @@ bool AxisItemConverter::ApplySpecialItem( sal_uInt16 
nWhichId, const SfxItemSet
                 //move the parallel axes to the other side if necessary
                 if( eAxisPos==css::chart::ChartAxisPosition_START || 
eAxisPos==css::chart::ChartAxisPosition_END )
                 {
-                    Reference< beans::XPropertySet > xParallelAxis( 
AxisHelper::getParallelAxis( m_xAxis, ChartModelHelper::findDiagram( 
m_xChartDoc ) ), uno::UNO_QUERY );
+                    rtl::Reference< Axis > xParallelAxis = 
AxisHelper::getParallelAxis( m_xAxis, ChartModelHelper::findDiagram( 
m_xChartDoc ) );
                     if( xParallelAxis.is() )
                     {
                         css::chart::ChartAxisPosition eOtherPos;
@@ -841,7 +842,7 @@ bool AxisItemConverter::ApplySpecialItem( sal_uInt16 
nWhichId, const SfxItemSet
                 //move the parallel axes to the other side if necessary
                 if( ePos==css::chart::ChartAxisLabelPosition_OUTSIDE_START || 
ePos==css::chart::ChartAxisLabelPosition_OUTSIDE_END )
                 {
-                    Reference< beans::XPropertySet > xParallelAxis( 
AxisHelper::getParallelAxis( m_xAxis, ChartModelHelper::findDiagram( 
m_xChartDoc ) ), uno::UNO_QUERY );
+                    rtl::Reference< Axis > xParallelAxis = 
AxisHelper::getParallelAxis( m_xAxis, ChartModelHelper::findDiagram( 
m_xChartDoc ) );
                     if( xParallelAxis.is() )
                     {
                         css::chart::ChartAxisLabelPosition eOtherPos;
diff --git 
a/chart2/source/controller/itemsetwrapper/MultipleChartConverters.cxx 
b/chart2/source/controller/itemsetwrapper/MultipleChartConverters.cxx
index b44d13f9fa97..a26cce3ee4e5 100644
--- a/chart2/source/controller/itemsetwrapper/MultipleChartConverters.cxx
+++ b/chart2/source/controller/itemsetwrapper/MultipleChartConverters.cxx
@@ -30,6 +30,7 @@
 #include <DataSeries.hxx>
 #include <TitleHelper.hxx>
 #include <TitleItemConverter.hxx>
+#include <Axis.hxx>
 #include <AxisHelper.hxx>
 #include <chartview/ExplicitValueProvider.hxx>
 #include <com/sun/star/chart2/XChartDocument.hpp>
@@ -53,10 +54,10 @@ AllAxisItemConverter::AllAxisItemConverter(
         : MultipleItemConverter( rItemPool )
 {
     rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( 
xChartModel ) );
-    const Sequence< Reference< XAxis > > aElementList( 
AxisHelper::getAllAxesOfDiagram( xDiagram ) );
-    for( Reference< XAxis > const & axis : aElementList )
+    const std::vector< rtl::Reference< Axis > > aElementList = 
AxisHelper::getAllAxesOfDiagram( xDiagram );
+    for( rtl::Reference< Axis > const & axis : aElementList )
     {
-        uno::Reference< beans::XPropertySet > xObjectProperties(axis, 
uno::UNO_QUERY);
+        uno::Reference< beans::XPropertySet > xObjectProperties(axis);
         m_aConverters.emplace_back( new ::chart::wrapper::AxisItemConverter(
             xObjectProperties, rItemPool, rDrawModel,
             xChartModel, nullptr, nullptr,
diff --git 
a/chart2/source/controller/itemsetwrapper/SeriesOptionsItemConverter.cxx 
b/chart2/source/controller/itemsetwrapper/SeriesOptionsItemConverter.cxx
index 1615c72d5549..aff808e82a15 100644
--- a/chart2/source/controller/itemsetwrapper/SeriesOptionsItemConverter.cxx
+++ b/chart2/source/controller/itemsetwrapper/SeriesOptionsItemConverter.cxx
@@ -22,6 +22,7 @@
 
 #include <ChartModelHelper.hxx>
 #include <ChartType.hxx>
+#include <Axis.hxx>
 #include <AxisHelper.hxx>
 #include <DiagramHelper.hxx>
 #include <Diagram.hxx>
@@ -80,7 +81,7 @@ SeriesOptionsItemConverter::SeriesOptionsItemConverter(
         m_xCooSys = DataSeriesHelper::getCoordinateSystemOfSeries( 
xDataSeries, xDiagram );
         if( m_xCooSys.is() )
         {
-            uno::Reference< chart2::XAxis > xAxis( AxisHelper::getAxis( 1, 0, 
m_xCooSys ) );
+            rtl::Reference< Axis > xAxis = AxisHelper::getAxis( 1, 0, 
m_xCooSys );
             chart2::ScaleData aScale( xAxis->getScaleData() );
             m_bClockwise = (aScale.Orientation == 
chart2::AxisOrientation_REVERSE);
         }
diff --git a/chart2/source/controller/main/ChartController_Insert.cxx 
b/chart2/source/controller/main/ChartController_Insert.cxx
index 00defbc33582..ae33e372b29c 100644
--- a/chart2/source/controller/main/ChartController_Insert.cxx
+++ b/chart2/source/controller/main/ChartController_Insert.cxx
@@ -29,6 +29,7 @@
 
 #include <ChartModel.hxx>
 #include <ChartModelHelper.hxx>
+#include <Axis.hxx>
 #include <AxisHelper.hxx>
 #include <TitleHelper.hxx>
 #include <DataSeries.hxx>
@@ -707,7 +708,7 @@ void ChartController::executeDispatch_InsertAxisTitle()
                 ActionDescriptionProvider::ActionType::Insert, SchResId( 
STR_OBJECT_TITLE )),
             m_xUndoManager );
 
-            Reference< XAxis > xAxis = ObjectIdentifier::getAxisForCID( 
m_aSelection.getSelectedCID(), getChartModel() );
+            rtl::Reference< Axis > xAxis = ObjectIdentifier::getAxisForCID( 
m_aSelection.getSelectedCID(), getChartModel() );
             sal_Int32 nDimensionIndex = -1;
             sal_Int32 nCooSysIndex = -1;
             sal_Int32 nAxisIndex = -1;
diff --git a/chart2/source/controller/main/ChartController_Properties.cxx 
b/chart2/source/controller/main/ChartController_Properties.cxx
index b094833f317a..58bac63b0484 100644
--- a/chart2/source/controller/main/ChartController_Properties.cxx
+++ b/chart2/source/controller/main/ChartController_Properties.cxx
@@ -38,6 +38,7 @@
 #include <RegressionEquationItemConverter.hxx>
 #include <ErrorBarItemConverter.hxx>
 #include <ChartModelHelper.hxx>
+#include <Axis.hxx>
 #include <AxisHelper.hxx>
 #include <TitleHelper.hxx>
 #include <ChartType.hxx>
@@ -378,7 +379,7 @@ OUString lcl_getAxisCIDForCommand( std::string_view 
rDispatchCommand, const rtl:
     }
 
     rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram( 
xChartModel );
-    uno::Reference< XAxis > xAxis( AxisHelper::getAxis( nDimensionIndex, 
bMainAxis, xDiagram ) );
+    rtl::Reference< Axis > xAxis = AxisHelper::getAxis( nDimensionIndex, 
bMainAxis, xDiagram );
     return ObjectIdentifier::createClassifiedIdentifierForObject( xAxis, 
xChartModel );
 }
 
@@ -419,7 +420,7 @@ OUString lcl_getGridCIDForCommand( std::string_view 
rDispatchCommand, const rtl:
         nDimensionIndex=2; bMainGrid=false;
     }
 
-    uno::Reference< XAxis > xAxis( AxisHelper::getAxis( nDimensionIndex, 
true/*bMainAxis*/, xDiagram ) );
+    rtl::Reference< Axis > xAxis = AxisHelper::getAxis( nDimensionIndex, 
true/*bMainAxis*/, xDiagram );
 
     sal_Int32   nSubGridIndex= bMainGrid ? -1 : 0;
     OUString aCID( ObjectIdentifier::createClassifiedIdentifierForGrid( xAxis, 
xChartModel, nSubGridIndex ) );
@@ -592,7 +593,7 @@ OUString lcl_getObjectCIDForCommand( std::string_view 
rDispatchCommand, const rt
             return rSelectedCID;
         else
         {
-            Reference< XAxis > xAxis = ObjectIdentifier::getAxisForCID( 
rSelectedCID, xChartDocument );
+            rtl::Reference< Axis > xAxis = ObjectIdentifier::getAxisForCID( 
rSelectedCID, xChartDocument );
             return ObjectIdentifier::createClassifiedIdentifierForObject( 
xAxis , xChartDocument );
         }
     }
@@ -603,7 +604,7 @@ OUString lcl_getObjectCIDForCommand( std::string_view 
rDispatchCommand, const rt
             return rSelectedCID;
         else
         {
-            Reference< XAxis > xAxis = ObjectIdentifier::getAxisForCID( 
rSelectedCID, xChartDocument );
+            rtl::Reference< Axis > xAxis = ObjectIdentifier::getAxisForCID( 
rSelectedCID, xChartDocument );
             return ObjectIdentifier::createClassifiedIdentifierForGrid( xAxis, 
xChartDocument );
         }
 
@@ -615,7 +616,7 @@ OUString lcl_getObjectCIDForCommand( std::string_view 
rDispatchCommand, const rt
             return rSelectedCID;
         else
         {
-            Reference< XAxis > xAxis = ObjectIdentifier::getAxisForCID( 
rSelectedCID, xChartDocument );
+            rtl::Reference< Axis > xAxis = ObjectIdentifier::getAxisForCID( 
rSelectedCID, xChartDocument );
             return ObjectIdentifier::createClassifiedIdentifierForGrid( xAxis, 
xChartDocument, 0 /*sub grid index*/ );
         }
     }
diff --git a/chart2/source/controller/main/ChartController_Tools.cxx 
b/chart2/source/controller/main/ChartController_Tools.cxx
index dd04d61f0360..9c8e2f02cbec 100644
--- a/chart2/source/controller/main/ChartController_Tools.cxx
+++ b/chart2/source/controller/main/ChartController_Tools.cxx
@@ -37,6 +37,7 @@
 #include <DrawViewWrapper.hxx>
 #include <Legend.hxx>
 #include <LegendHelper.hxx>
+#include <Axis.hxx>
 #include <AxisHelper.hxx>
 #include <RegressionCurveModel.hxx>
 #include <RegressionCurveHelper.hxx>
@@ -114,7 +115,7 @@ bool lcl_deleteDataSeries(
                 xUndoManager );
 
             rtl::Reference< Diagram > xDiagram = 
ChartModelHelper::findDiagram( xModel );
-            uno::Reference< chart2::XAxis > xAxis( 
DiagramHelper::getAttachedAxis( xSeries, xDiagram ) );
+            rtl::Reference< Axis > xAxis = DiagramHelper::getAttachedAxis( 
xSeries, xDiagram );
 
             DataSeriesHelper::deleteSeries( xSeries, xChartType );
 
diff --git a/chart2/source/controller/main/ChartController_Window.cxx 
b/chart2/source/controller/main/ChartController_Window.cxx
index 2e9e599e47e7..5eb195b90643 100644
--- a/chart2/source/controller/main/ChartController_Window.cxx
+++ b/chart2/source/controller/main/ChartController_Window.cxx
@@ -47,6 +47,7 @@
 #include <StatisticsHelper.hxx>
 #include <DataSeries.hxx>
 #include <DataSeriesHelper.hxx>
+#include <Axis.hxx>
 #include <AxisHelper.hxx>
 #include <LegendHelper.hxx>
 #include <servicenames_charttypes.hxx>
@@ -1195,7 +1196,7 @@ void ChartController::execute_Command( const 
CommandEvent& rCEvt )
 
                 else if( eObjectType  == OBJECTTYPE_AXIS || eObjectType == 
OBJECTTYPE_GRID || eObjectType == OBJECTTYPE_SUBGRID )
                 {
-                    Reference< XAxis > xAxis = 
ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getChartModel() 
);
+                    rtl::Reference< Axis > xAxis = 
ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getChartModel() 
);
                     if( xAxis.is() && xDiagram.is() )
                     {
                         sal_Int32 nDimensionIndex = -1;
@@ -1206,10 +1207,7 @@ void ChartController::execute_Command( const 
CommandEvent& rCEvt )
                         bool bIsAxisVisible = AxisHelper::isAxisVisible( xAxis 
);
                         bool bIsMajorGridVisible = AxisHelper::isGridShown( 
nDimensionIndex, nCooSysIndex, true /*bMainGrid*/, xDiagram );
                         bool bIsMinorGridVisible = AxisHelper::isGridShown( 
nDimensionIndex, nCooSysIndex, false /*bMainGrid*/, xDiagram );
-                        bool bHasTitle = false;
-                        uno::Reference< XTitled > xTitled( xAxis, 
uno::UNO_QUERY );
-                        if( xTitled.is())
-                            bHasTitle = !TitleHelper::getCompleteString( 
xTitled->getTitleObject() ).isEmpty();
+                        bool bHasTitle = !TitleHelper::getCompleteString( 
xAxis->getTitleObject() ).isEmpty();
 
                         if( eObjectType  != OBJECTTYPE_AXIS && bIsAxisVisible )
                             lcl_insertMenuCommand( xPopupMenu, nUniqueId++, 
".uno:FormatAxis" );
diff --git a/chart2/source/controller/main/ControllerCommandDispatch.cxx 
b/chart2/source/controller/main/ControllerCommandDispatch.cxx
index a7d0ff5fc4f2..4e326eb313c7 100644
--- a/chart2/source/controller/main/ControllerCommandDispatch.cxx
+++ b/chart2/source/controller/main/ControllerCommandDispatch.cxx
@@ -22,6 +22,7 @@
 #include <ChartModel.hxx>
 #include <DiagramHelper.hxx>
 #include <Diagram.hxx>
+#include <Axis.hxx>
 #include <AxisHelper.hxx>
 #include <TitleHelper.hxx>
 #include <LegendHelper.hxx>
diff --git a/chart2/source/controller/main/ObjectHierarchy.cxx 
b/chart2/source/controller/main/ObjectHierarchy.cxx
index 58f17fb7f279..0472cf23e9a6 100644
--- a/chart2/source/controller/main/ObjectHierarchy.cxx
+++ b/chart2/source/controller/main/ObjectHierarchy.cxx
@@ -23,6 +23,7 @@
 #include <DiagramHelper.hxx>
 #include <Diagram.hxx>
 #include <RegressionCurveHelper.hxx>
+#include <Axis.hxx>
 #include <AxisHelper.hxx>
 #include <chartview/ExplicitValueProvider.hxx>
 #include <ChartType.hxx>
@@ -94,12 +95,11 @@ void lcl_getChildOIDs(
     }
 }
 
-void lcl_addAxisTitle( const Reference< XAxis >& xAxis, 
::chart::ObjectHierarchy::tChildContainer& rContainer, const 
rtl::Reference<::chart::ChartModel>& xChartModel )
+void lcl_addAxisTitle( const rtl::Reference< ::chart::Axis >& xAxis, 
::chart::ObjectHierarchy::tChildContainer& rContainer, const 
rtl::Reference<::chart::ChartModel>& xChartModel )
 {
-    Reference< XTitled > xAxisTitled( xAxis, uno::UNO_QUERY );
-    if( xAxisTitled.is())
+    if( xAxis.is())
     {
-        Reference< XTitle > xAxisTitle( xAxisTitled->getTitleObject());
+        Reference< XTitle > xAxisTitle( xAxis->getTitleObject());
         if( xAxisTitle.is())
             rContainer.emplace_back( 
::chart::ObjectIdentifier::createClassifiedIdentifierForObject( xAxisTitle, 
xChartModel ) );
     }
@@ -153,8 +153,8 @@ void ObjectHierarchy::createTree( const 
rtl::Reference<::chart::ChartModel>& xCh
         if( !m_bOrderingForElementSelector )
         {
             // Axis Titles. Note: These are interpreted of being top level
-            const Sequence< Reference< XAxis > > aAxes( 
AxisHelper::getAllAxesOfDiagram( xDiagram ) );
-            for( Reference< XAxis > const & axis : aAxes )
+            const std::vector< rtl::Reference< Axis > > aAxes = 
AxisHelper::getAllAxesOfDiagram( xDiagram );
+            for( rtl::Reference< Axis > const & axis : aAxes )
                 lcl_addAxisTitle( axis, aTopLevelContainer, xChartDocument );
 
             // Diagram
@@ -223,7 +223,7 @@ void ObjectHierarchy::createAxesTree(
     if( !bSupportsAxesGrids )
         return;
 
-    Sequence< Reference< XAxis > > aAxes( AxisHelper::getAllAxesOfDiagram( 
xDiagram, /* bOnlyVisible = */ true ) );
+    std::vector< rtl::Reference< Axis > > aAxes = 
AxisHelper::getAllAxesOfDiagram( xDiagram, /* bOnlyVisible = */ true );
     if( !m_bOrderingForElementSelector )
     {
         for (const auto & rAxis : std::as_const(aAxes))
@@ -233,7 +233,7 @@ void ObjectHierarchy::createAxesTree(
     // get all axes, also invisible ones
     aAxes = AxisHelper::getAllAxesOfDiagram( xDiagram );
     // Grids
-    for( Reference< XAxis > const & xAxis : std::as_const(aAxes) )
+    for( rtl::Reference< Axis > const & xAxis : aAxes )
     {
         if(!xAxis.is())
             continue;
diff --git a/chart2/source/controller/sidebar/ChartAxisPanel.cxx 
b/chart2/source/controller/sidebar/ChartAxisPanel.cxx
index 2b6bc5535b27..b222691b74cf 100644
--- a/chart2/source/controller/sidebar/ChartAxisPanel.cxx
+++ b/chart2/source/controller/sidebar/ChartAxisPanel.cxx
@@ -29,6 +29,7 @@
 #include "ChartAxisPanel.hxx"
 #include <ChartController.hxx>
 #include <ChartModel.hxx>
+#include <Axis.hxx>
 
 using namespace css;
 using namespace css::uno;
@@ -40,8 +41,7 @@ namespace {
 bool isLabelShown(const rtl::Reference<::chart::ChartModel>& xModel,
         const OUString& rCID)
 {
-    css::uno::Reference< css::beans::XPropertySet > xAxis(
-        ObjectIdentifier::getAxisForCID(rCID, xModel), uno::UNO_QUERY );
+    rtl::Reference< ::chart::Axis > xAxis = 
ObjectIdentifier::getAxisForCID(rCID, xModel);
 
     if (!xAxis.is())
         return false;
@@ -58,8 +58,7 @@ bool isLabelShown(const rtl::Reference<::chart::ChartModel>& 
xModel,
 void setLabelShown(const rtl::Reference<::chart::ChartModel>& xModel,
         const OUString& rCID, bool bVisible)
 {
-    css::uno::Reference< css::beans::XPropertySet > xAxis(
-        ObjectIdentifier::getAxisForCID(rCID, xModel), uno::UNO_QUERY );
+    rtl::Reference< ::chart::Axis > xAxis = 
ObjectIdentifier::getAxisForCID(rCID, xModel);
 
     if (!xAxis.is())
         return;
@@ -83,8 +82,7 @@ AxisLabelPosMap const aLabelPosMap[] = {
 sal_Int32 getLabelPosition(const rtl::Reference<::chart::ChartModel>& xModel,
         const OUString& rCID)
 {
-    css::uno::Reference< css::beans::XPropertySet > xAxis(
-        ObjectIdentifier::getAxisForCID(rCID, xModel), uno::UNO_QUERY );
+    rtl::Reference< ::chart::Axis > xAxis = 
ObjectIdentifier::getAxisForCID(rCID, xModel);
 
     if (!xAxis.is())
         return 0;
@@ -107,8 +105,7 @@ sal_Int32 getLabelPosition(const 
rtl::Reference<::chart::ChartModel>& xModel,
 void setLabelPosition(const rtl::Reference<::chart::ChartModel>& xModel,
         const OUString& rCID, sal_Int32 nPos)
 {
-    css::uno::Reference< css::beans::XPropertySet > xAxis(
-        ObjectIdentifier::getAxisForCID(rCID, xModel), uno::UNO_QUERY );
+    rtl::Reference< ::chart::Axis > xAxis = 
ObjectIdentifier::getAxisForCID(rCID, xModel);
 
     if (!xAxis.is())
         return;
@@ -178,8 +175,8 @@ OUString getCID(const 
css::uno::Reference<css::frame::XModel>& xModel)
 void setAxisRotation(const rtl::Reference<::chart::ChartModel>& xModel,
         const OUString& rCID, double nVal)
 {
-    css::uno::Reference< css::beans::XPropertySet > xAxis(
-        ObjectIdentifier::getAxisForCID(rCID, xModel), uno::UNO_QUERY );
+    rtl::Reference< ::chart::Axis > xAxis =
+        ObjectIdentifier::getAxisForCID(rCID, xModel);
 
     if (!xAxis.is())
         return;
@@ -190,8 +187,8 @@ void setAxisRotation(const 
rtl::Reference<::chart::ChartModel>& xModel,
 double getAxisRotation(const rtl::Reference<::chart::ChartModel>& xModel,
         const OUString& rCID)
 {
-    css::uno::Reference< css::beans::XPropertySet > xAxis(
-        ObjectIdentifier::getAxisForCID(rCID, xModel), uno::UNO_QUERY );
+    rtl::Reference< ::chart::Axis > xAxis =
+        ObjectIdentifier::getAxisForCID(rCID, xModel);
 
     if (!xAxis.is())
         return 0;
diff --git a/chart2/source/model/main/Axis.hxx b/chart2/source/inc/Axis.hxx
similarity index 96%
rename from chart2/source/model/main/Axis.hxx
rename to chart2/source/inc/Axis.hxx
index b85930a23456..7b5ce75fa6fa 100644
--- a/chart2/source/model/main/Axis.hxx
+++ b/chart2/source/inc/Axis.hxx
@@ -18,7 +18,7 @@
  */
 #pragma once
 
-#include <OPropertySet.hxx>
+#include "OPropertySet.hxx"
 #include <cppuhelper/basemutex.hxx>
 #include <cppuhelper/implbase.hxx>
 #include <comphelper/uno3.hxx>
@@ -27,7 +27,8 @@
 #include <com/sun/star/chart2/XAxis.hpp>
 #include <com/sun/star/chart2/XTitled.hpp>
 #include <com/sun/star/util/XCloneable.hpp>
-#include <ModifyListenerHelper.hxx>
+#include "ModifyListenerHelper.hxx"
+#include "charttoolsdllapi.hxx"
 
 namespace chart
 {
@@ -44,7 +45,7 @@ typedef ::cppu::WeakImplHelper<
     Axis_Base;
 }
 
-class Axis final :
+class OOO_DLLPUBLIC_CHARTTOOLS Axis final :
     public cppu::BaseMutex,
     public impl::Axis_Base,
     public ::property::OPropertySet
@@ -75,6 +76,7 @@ private:
     // ____ OPropertySet ____
     virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper() override;
 
+public:
     // ____ XPropertySet ____
     virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL
         getPropertySetInfo() override;
@@ -101,6 +103,7 @@ private:
     virtual void SAL_CALL removeModifyListener(
         const css::uno::Reference< css::util::XModifyListener >& aListener ) 
override;
 
+private:
     // ____ XModifyListener ____
     virtual void SAL_CALL modified(
         const css::lang::EventObject& aEvent ) override;
diff --git a/chart2/source/inc/AxisHelper.hxx b/chart2/source/inc/AxisHelper.hxx
index 4e2480a65eee..2cb10b832254 100644
--- a/chart2/source/inc/AxisHelper.hxx
+++ b/chart2/source/inc/AxisHelper.hxx
@@ -38,6 +38,7 @@ namespace com::sun::star::uno { class XComponentContext; }
 
 namespace chart
 {
+class Axis;
 class BaseCoordinateSystem;
 class ChartType;
 class Diagram;
@@ -56,21 +57,26 @@ public:
 
     static void checkDateAxis( css::chart2::ScaleData& rScale, 
ExplicitCategoriesProvider* pExplicitCategoriesProvider, bool 
bChartTypeAllowsDateAxis );
     static css::chart2::ScaleData getDateCheckedScale( const 
css::uno::Reference< css::chart2::XAxis >& xAxis, ChartModel& rModel );
+    static css::chart2::ScaleData getDateCheckedScale( const rtl::Reference< 
::chart::Axis >& xAxis, ChartModel& rModel );
 
     static sal_Int32 getExplicitNumberFormatKeyForAxis(
                   const css::uno::Reference< css::chart2::XAxis >& xAxis
                 , const rtl::Reference< ::chart::BaseCoordinateSystem >& 
xCorrespondingCoordinateSystem
                 , const rtl::Reference< ::chart::ChartModel>& xChartDoc
                 , bool bSearchForParallelAxisIfNothingIsFound );
+    static sal_Int32 getExplicitNumberFormatKeyForAxis(
+                  const rtl::Reference< ::chart::Axis >& xAxis
+                , const rtl::Reference< ::chart::BaseCoordinateSystem >& 
xCorrespondingCoordinateSystem
+                , const rtl::Reference< ::chart::ChartModel>& xChartDoc
+                , bool bSearchForParallelAxisIfNothingIsFound );
 
-    static css::uno::Reference<
-           css::chart2::XAxis >
+    static rtl::Reference< ::chart::Axis >
         createAxis( sal_Int32 nDimensionIndex, bool bMainAxis
                 , const rtl::Reference< ::chart::Diagram >& xDiagram
                 , const css::uno::Reference< css::uno::XComponentContext >& 
xContext
                 , ReferenceSizeProvider * pRefSizeProvider = nullptr );
 
-    static css::uno::Reference< css::chart2::XAxis >
+    static rtl::Reference< ::chart::Axis >
         createAxis(
             sal_Int32 nDimensionIndex
             , sal_Int32 nAxisIndex // 0==main or 1==secondary axis
@@ -97,13 +103,17 @@ public:
                 , const rtl::Reference< ::chart::Diagram >& xDiagram );
 
     static void makeAxisVisible( const css::uno::Reference< css::chart2::XAxis 
>& xAxis );
+    static void makeAxisVisible( const rtl::Reference< ::chart::Axis >& xAxis 
);
     static void makeGridVisible( const css::uno::Reference< 
css::beans::XPropertySet >& xGridProperties );
 
     static void makeAxisInvisible( const css::uno::Reference< 
css::chart2::XAxis >& xAxis );
+    static void makeAxisInvisible( const rtl::Reference< ::chart::Axis >& 
xAxis );
     static void makeGridInvisible( const css::uno::Reference< 
css::beans::XPropertySet >& xGridProperties );
 
     static void hideAxisIfNoDataIsAttached( const css::uno::Reference< 
css::chart2::XAxis >& xAxis
                                           , const rtl::Reference< 
::chart::Diagram >& xDiagram);
+    static void hideAxisIfNoDataIsAttached( const rtl::Reference< 
::chart::Axis >& xAxis
+                                          , const rtl::Reference< 
::chart::Diagram >& xDiagram);
 
     SAL_DLLPRIVATE static bool areAxisLabelsVisible( const 
css::uno::Reference< css::beans::XPropertySet >& xAxisProperties );
     static bool isAxisVisible( const css::uno::Reference< css::chart2::XAxis 
>& xAxis );
@@ -118,21 +128,31 @@ public:
         getCoordinateSystemOfAxis(
               const css::uno::Reference< css::chart2::XAxis >& xAxis
             , const rtl::Reference< ::chart::Diagram >& xDiagram );
+    static rtl::Reference< ::chart::BaseCoordinateSystem >
+        getCoordinateSystemOfAxis(
+              const rtl::Reference< ::chart::Axis >& xAxis
+            , const rtl::Reference< ::chart::Diagram >& xDiagram );
 
-    static css::uno::Reference< css::chart2::XAxis >
+    static rtl::Reference< ::chart::Axis >
         getAxis( sal_Int32 nDimensionIndex, bool bMainAxis
                 , const rtl::Reference< ::chart::Diagram >& xDiagram );
-    static css::uno::Reference< css::chart2::XAxis >
+    static rtl::Reference< ::chart::Axis >
         getAxis( sal_Int32 nDimensionIndex, sal_Int32 nAxisIndex
             , const rtl::Reference< ::chart::BaseCoordinateSystem >& xCooSys );
 
-    static css::uno::Reference< css::chart2::XAxis >
+    static rtl::Reference< ::chart::Axis >
         getCrossingMainAxis( const css::uno::Reference< css::chart2::XAxis >& 
xAxis
             , const rtl::Reference< ::chart::BaseCoordinateSystem >& xCooSys );
+    static rtl::Reference< ::chart::Axis >
+        getCrossingMainAxis( const rtl::Reference< ::chart::Axis >& xAxis
+            , const rtl::Reference< ::chart::BaseCoordinateSystem >& xCooSys );
 
-    static css::uno::Reference< css::chart2::XAxis >
+    static rtl::Reference< ::chart::Axis >
         getParallelAxis( const css::uno::Reference< css::chart2::XAxis >& xAxis
             , const rtl::Reference< ::chart::Diagram >& xDiagram );
+    static rtl::Reference< ::chart::Axis >
+        getParallelAxis( const rtl::Reference< ::chart::Axis >& xAxis
+            , const rtl::Reference< ::chart::Diagram >& xDiagram );
 
     static css::uno::Reference< css::beans::XPropertySet >
         getGridProperties( const rtl::Reference< ::chart::BaseCoordinateSystem 
>& xCooSys
@@ -144,28 +164,39 @@ public:
     static sal_Int32 getDimensionIndexOfAxis(
               const css::uno::Reference< css::chart2::XAxis >& xAxis
             , const rtl::Reference< ::chart::Diagram >& xDiagram );
+    static sal_Int32 getDimensionIndexOfAxis(
+              const rtl::Reference< ::chart::Axis >& xAxis
+            , const rtl::Reference< ::chart::Diagram >& xDiagram );
 
     static bool getIndicesForAxis(
               const css::uno::Reference< css::chart2::XAxis >& xAxis
             , const rtl::Reference< ::chart::BaseCoordinateSystem >& xCooSys
             , sal_Int32& rOutDimensionIndex, sal_Int32& rOutAxisIndex );
+    static bool getIndicesForAxis(
+              const rtl::Reference< ::chart::Axis >& xAxis
+            , const rtl::Reference< ::chart::BaseCoordinateSystem >& xCooSys
+            , sal_Int32& rOutDimensionIndex, sal_Int32& rOutAxisIndex );
 
     static bool getIndicesForAxis(
               const css::uno::Reference< css::chart2::XAxis >& xAxis
             , const rtl::Reference< ::chart::Diagram >& xDiagram
             , sal_Int32& rOutCooSysIndex, sal_Int32& rOutDimensionIndex, 
sal_Int32& rOutAxisIndex );
+    static bool getIndicesForAxis(
+              const rtl::Reference< ::chart::Axis >& xAxis
+            , const rtl::Reference< ::chart::Diagram >& xDiagram
+            , sal_Int32& rOutCooSysIndex, sal_Int32& rOutDimensionIndex, 
sal_Int32& rOutAxisIndex );
 
     /** @param bOnlyVisible if </TRUE>, only axes with property "Show" set to
                </sal_True> are returned
      */
-    static css::uno::Sequence< css::uno::Reference< css::chart2::XAxis > >
+    static std::vector< rtl::Reference< ::chart::Axis > >
             getAllAxesOfDiagram( const rtl::Reference< ::chart::Diagram >& 
xDiagram
             , bool bOnlyVisible = false );
 
     /** @param bOnlyVisible if </TRUE>, only axes with property "Show" set to
                </sal_True> are returned
      */
-    SAL_DLLPRIVATE static std::vector< css::uno::Reference< css::chart2::XAxis 
> >
+    SAL_DLLPRIVATE static std::vector< rtl::Reference< ::chart::Axis > >
             getAllAxesOfCoordinateSystem( const rtl::Reference< 
::chart::BaseCoordinateSystem >& xCooSys
             , bool bOnlyVisible = false );
 
@@ -190,6 +221,8 @@ public:
 
     static bool shouldAxisBeDisplayed( const css::uno::Reference< 
css::chart2::XAxis >& xAxis
                                        , const rtl::Reference< 
::chart::BaseCoordinateSystem >& xCooSys );
+    static bool shouldAxisBeDisplayed( const rtl::Reference< ::chart::Axis >& 
xAxis
+                                       , const rtl::Reference< 
::chart::BaseCoordinateSystem >& xCooSys );
     static bool isSecondaryYAxisNeeded( const rtl::Reference<
                     ::chart::BaseCoordinateSystem >& xCooSys );
 
diff --git a/chart2/source/inc/BaseCoordinateSystem.hxx 
b/chart2/source/inc/BaseCoordinateSystem.hxx
index 2241c8490b83..afb02c07f1f4 100644
--- a/chart2/source/inc/BaseCoordinateSystem.hxx
+++ b/chart2/source/inc/BaseCoordinateSystem.hxx
@@ -33,6 +33,7 @@
 
 namespace chart
 {
+class Axis;
 class ChartType;
 
 namespace impl
@@ -96,6 +97,9 @@ public:
     virtual void SAL_CALL removeModifyListener(
         const css::uno::Reference< css::util::XModifyListener >& aListener ) 
override;
 
+    void setAxisByDimension( sal_Int32 nDimension, const rtl::Reference< 
::chart::Axis >& xAxis, sal_Int32 nIndex );
+    rtl::Reference< ::chart::Axis > getAxisByDimension2(sal_Int32 nDimension, 
sal_Int32 nIndex ) const;
+
     void setChartTypes( const std::vector< rtl::Reference< ::chart::ChartType 
> >& aChartTypes );
     const std::vector< rtl::Reference<::chart::ChartType > > & 
getChartTypes2() const { return m_aChartTypes; }
 
@@ -120,7 +124,7 @@ protected:
 
 private:
     sal_Int32                                             m_nDimensionCount;
-    typedef std::vector< std::vector< css::uno::Reference< css::chart2::XAxis 
> > > tAxisVecVecType;
+    typedef std::vector< std::vector< rtl::Reference< ::chart::Axis > > > 
tAxisVecVecType;
     tAxisVecVecType m_aAllAxis; //outer sequence is the dimension; inner 
sequence is the axis index that indicates main or secondary axis
     std::vector< rtl::Reference<::chart::ChartType > >          m_aChartTypes;
 };
diff --git a/chart2/source/inc/ChartType.hxx b/chart2/source/inc/ChartType.hxx
index 4c95fac5a704..a84d79893d5a 100644
--- a/chart2/source/inc/ChartType.hxx
+++ b/chart2/source/inc/ChartType.hxx
@@ -35,6 +35,7 @@
 
 namespace chart
 {
+class BaseCoordinateSystem;
 class DataSeries;
 class ModifyEventForwarder;
 
@@ -102,6 +103,9 @@ public:
         const std::vector< rtl::Reference< ::chart::DataSeries > >& 
aDataSeries );
     const std::vector< rtl::Reference< ::chart::DataSeries > > & 
getDataSeries2() const { return m_aDataSeries; }
 
+    static rtl::Reference< ::chart::BaseCoordinateSystem >
+        createCoordinateSystem2( ::sal_Int32 DimensionCount );
+
 protected:
 
     // ____ XModifyListener ____
diff --git a/chart2/source/inc/Diagram.hxx b/chart2/source/inc/Diagram.hxx
index 16beacd59894..07712e93dc65 100644
--- a/chart2/source/inc/Diagram.hxx
+++ b/chart2/source/inc/Diagram.hxx
@@ -144,6 +144,8 @@ public:
         tCoordinateSystemContainerType;
 
     const tCoordinateSystemContainerType & getBaseCoordinateSystems() { return 
m_aCoordSystems; }
+    void setCoordinateSystems(
+        const std::vector< rtl::Reference< ::chart::BaseCoordinateSystem > >& 
aCoordinateSystems );
 
     const rtl::Reference< ::chart::Legend > & getLegend2() const { return 
m_xLegend; }
     void setLegend(const rtl::Reference< ::chart::Legend > &);
diff --git a/chart2/source/inc/DiagramHelper.hxx 
b/chart2/source/inc/DiagramHelper.hxx
index 3a83644696e4..d5f81f30d552 100644
--- a/chart2/source/inc/DiagramHelper.hxx
+++ b/chart2/source/inc/DiagramHelper.hxx
@@ -42,6 +42,7 @@ namespace com::sun::star::util { class 
XNumberFormatsSupplier; }
 
 namespace chart
 {
+class Axis;
 class BaseCoordinateSystem;
 class ChartType;
 class ChartTypeManager;
@@ -159,11 +160,11 @@ public:
         const css::uno::Reference< css::uno::XComponentContext > & xContext,
         bool bAdaptAxes=true );
 
-    static css::uno::Reference< css::chart2::XAxis > getAttachedAxis(
+    static rtl::Reference< ::chart::Axis > getAttachedAxis(
         const css::uno::Reference< css::chart2::XDataSeries >& xSeries,
         const rtl::Reference< ::chart::Diagram >& xDiagram );
 
-    static css::uno::Reference< css::chart2::XAxis > getAttachedAxis(
+    static rtl::Reference< ::chart::Axis > getAttachedAxis(
         const rtl::Reference< ::chart::DataSeries >& xSeries,
         const rtl::Reference< ::chart::Diagram >& xDiagram );
 
diff --git a/chart2/source/inc/ObjectIdentifier.hxx 
b/chart2/source/inc/ObjectIdentifier.hxx
index 5e52fbfa1ac5..f4ce48011419 100644
--- a/chart2/source/inc/ObjectIdentifier.hxx
+++ b/chart2/source/inc/ObjectIdentifier.hxx
@@ -42,6 +42,7 @@ namespace com::sun::star::uno { class XInterface; }
 
 namespace chart
 {
+class Axis;
 class BaseCoordinateSystem;
 class DataSeries;
 class Diagram;
@@ -112,6 +113,9 @@ public:
     static OUString createClassifiedIdentifierForObject(
           const rtl::Reference< ::chart::Legend >& xObject
         , const rtl::Reference<::chart::ChartModel>& xChartModel );
+    static OUString createClassifiedIdentifierForObject(
+          const rtl::Reference< ::chart::Axis >& xObject
+        , const rtl::Reference<::chart::ChartModel>& xChartModel );
 
     static OUString createClassifiedIdentifierForParticle(
         const OUString& rParticle );
@@ -198,7 +202,7 @@ public:
                 , const rtl::Reference< ::chart::ChartModel >& xChartDocument 
);
 
     //return the axis object that belongs to rObjectCID if any
-    static css::uno::Reference< css::chart2::XAxis >
+    static rtl::Reference< ::chart::Axis >
             getAxisForCID(
                   const OUString& rObjectCID
                 , const rtl::Reference<::chart::ChartModel>& xChartModel );
diff --git a/chart2/source/model/main/Axis.cxx 
b/chart2/source/model/main/Axis.cxx
index 9bae79cf8adc..9507f3719088 100644
--- a/chart2/source/model/main/Axis.cxx
+++ b/chart2/source/model/main/Axis.cxx
@@ -17,7 +17,7 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
-#include "Axis.hxx"
+#include <Axis.hxx>
 #include "GridProperties.hxx"
 #include <CharacterProperties.hxx>
 #include <LinePropertiesHelper.hxx>
diff --git a/chart2/source/model/main/BaseCoordinateSystem.cxx 
b/chart2/source/model/main/BaseCoordinateSystem.cxx
index bc02bf753561..52ef7ffde0d7 100644
--- a/chart2/source/model/main/BaseCoordinateSystem.cxx
+++ b/chart2/source/model/main/BaseCoordinateSystem.cxx
@@ -22,7 +22,7 @@
 #include <UserDefinedProperties.hxx>
 #include <CloneHelper.hxx>
 #include <ModifyListenerHelper.hxx>
-#include "Axis.hxx"
+#include <Axis.hxx>
 #include <ChartType.hxx>
 #include <com/sun/star/chart2/AxisType.hpp>
 #include <com/sun/star/container/NoSuchElementException.hpp>
@@ -125,7 +125,7 @@ BaseCoordinateSystem::BaseCoordinateSystem(
     for( sal_Int32 nN=0; nN<m_nDimensionCount; nN++ )
     {
         m_aAllAxis[nN].resize( 1 );
-        Reference< chart2::XAxis > xAxis( new Axis );
+        rtl::Reference< Axis > xAxis( new Axis );
         m_aAllAxis[nN][0] = xAxis;
 
         ModifyListenerHelper::addListenerToAllElements( m_aAllAxis[nN], 
m_xModifyEventForwarder );
@@ -159,7 +159,7 @@ BaseCoordinateSystem::BaseCoordinateSystem(
     m_aAllAxis.resize(rSource.m_aAllAxis.size());
     tAxisVecVecType::size_type nN=0;
     for( nN=0; nN<m_aAllAxis.size(); nN++ )
-        CloneHelper::CloneRefVector<chart2::XAxis>( rSource.m_aAllAxis[nN], 
m_aAllAxis[nN] );
+        CloneHelper::CloneRefVector( rSource.m_aAllAxis[nN], m_aAllAxis[nN] );
     for (const auto & rxChartType : rSource.m_aChartTypes)
         m_aChartTypes.push_back(rxChartType->cloneChartType());
 
@@ -207,7 +207,33 @@ void SAL_CALL BaseCoordinateSystem::setAxisByDimension(
         m_aAllAxis[ nDimensionIndex ][nIndex] = nullptr;
     }
 
-    Reference< chart2::XAxis > xOldAxis( m_aAllAxis[ nDimensionIndex ][nIndex] 
);
+    rtl::Reference< Axis > xOldAxis( m_aAllAxis[ nDimensionIndex ][nIndex] );
+    if( xOldAxis.is())
+        ModifyListenerHelper::removeListener( xOldAxis, 
m_xModifyEventForwarder );
+    m_aAllAxis[ nDimensionIndex ][nIndex] = dynamic_cast<Axis*>(xAxis.get());
+    if( xAxis.is())
+        ModifyListenerHelper::addListener( xAxis, m_xModifyEventForwarder );
+    fireModifyEvent();
+}
+
+void BaseCoordinateSystem::setAxisByDimension(
+    sal_Int32 nDimensionIndex,
+    const rtl::Reference< Axis >& xAxis,
+    sal_Int32 nIndex )
+{
+    if( nDimensionIndex < 0 || nDimensionIndex >= getDimension() )
+        throw lang::IndexOutOfBoundsException();
+
+    if( nIndex < 0 )
+        throw lang::IndexOutOfBoundsException();
+
+    if( m_aAllAxis[ nDimensionIndex ].size() < o3tl::make_unsigned( nIndex+1 ))
+    {
+        m_aAllAxis[ nDimensionIndex ].resize( nIndex+1 );
+        m_aAllAxis[ nDimensionIndex ][nIndex] = nullptr;
+    }
+
+    rtl::Reference< Axis > xOldAxis( m_aAllAxis[ nDimensionIndex ][nIndex] );
     if( xOldAxis.is())
         ModifyListenerHelper::removeListener( xOldAxis, 
m_xModifyEventForwarder );
     m_aAllAxis[ nDimensionIndex ][nIndex] = xAxis;
@@ -230,6 +256,20 @@ Reference< chart2::XAxis > SAL_CALL 
BaseCoordinateSystem::getAxisByDimension(
     return m_aAllAxis[ nDimensionIndex ][nAxisIndex];
 }
 
+rtl::Reference< Axis > BaseCoordinateSystem::getAxisByDimension2(
+            sal_Int32 nDimensionIndex, sal_Int32 nAxisIndex ) const
+{
+    if( nDimensionIndex < 0 || nDimensionIndex >= m_nDimensionCount )
+        throw lang::IndexOutOfBoundsException();
+
+    OSL_ASSERT( m_aAllAxis.size() == static_cast< size_t >( 
m_nDimensionCount));
+
+    if( nAxisIndex < 0 || nAxisIndex > static_cast<sal_Int32>(m_aAllAxis[ 
nDimensionIndex ].size()) )
+        throw lang::IndexOutOfBoundsException();
+
+    return m_aAllAxis[ nDimensionIndex ][nAxisIndex];
+}
+
 sal_Int32 SAL_CALL BaseCoordinateSystem::getMaximumAxisIndexByDimension( 
sal_Int32 nDimensionIndex )
 {
     if( nDimensionIndex < 0 || nDimensionIndex >= getDimension() )
diff --git a/chart2/source/model/main/Diagram.cxx 
b/chart2/source/model/main/Diagram.cxx
index 60bcbd5124f7..f160987addc3 100644
--- a/chart2/source/model/main/Diagram.cxx
+++ b/chart2/source/model/main/Diagram.cxx
@@ -524,6 +524,28 @@ void SAL_CALL Diagram::setCoordinateSystems(
     fireModifyEvent();
 }
 
+void Diagram::setCoordinateSystems(
+    const std::vector< rtl::Reference< BaseCoordinateSystem > >& 
aCoordinateSystems )
+{
+    tCoordinateSystemContainerType aNew;
+    tCoordinateSystemContainerType aOld;
+    if( !aCoordinateSystems.empty() )
+    {
+        OSL_ENSURE( aCoordinateSystems.size()<=1, "more than one 
coordinatesystem is not supported yet by the fileformat" );
+        aNew.push_back( aCoordinateSystems[0] );
+    }
+    {
+        MutexGuard aGuard( m_aMutex );
+        std::swap( aOld, m_aCoordSystems );
+        m_aCoordSystems = aNew;
+    }
+    for (auto & xSystem : aOld)
+        xSystem->removeModifyListener(m_xModifyEventForwarder);
+    for (auto & xSystem : aNew)
+        xSystem->addModifyListener(m_xModifyEventForwarder);
+    fireModifyEvent();
+}
+
 // ____ XCloneable ____
 Reference< util::XCloneable > SAL_CALL Diagram::createClone()
 {
diff --git a/chart2/source/model/template/BubbleChartType.cxx 
b/chart2/source/model/template/BubbleChartType.cxx
index c2d7d367ea65..8a23388ab336 100644
--- a/chart2/source/model/template/BubbleChartType.cxx
+++ b/chart2/source/model/template/BubbleChartType.cxx
@@ -21,6 +21,7 @@
 #include <PropertyHelper.hxx>
 #include <servicenames_charttypes.hxx>
 #include <CartesianCoordinateSystem.hxx>
+#include <Axis.hxx>
 #include <AxisHelper.hxx>
 #include <AxisIndexDefines.hxx>
 #include <com/sun/star/chart2/AxisType.hpp>
@@ -123,7 +124,7 @@ Reference< chart2::XCoordinateSystem > SAL_CALL
 
     for( sal_Int32 i=0; i<DimensionCount; ++i )
     {
-        Reference< chart2::XAxis > xAxis( xResult->getAxisByDimension( i, 
MAIN_AXIS_INDEX ) );
+        rtl::Reference< Axis > xAxis = xResult->getAxisByDimension2( i, 
MAIN_AXIS_INDEX );
         if( !xAxis.is() )
         {
             OSL_FAIL("a created coordinate system should have an axis for each 
dimension");
diff --git a/chart2/source/model/template/ChartType.cxx 
b/chart2/source/model/template/ChartType.cxx
index 588b3fa653e9..eff91f9cc9bb 100644
--- a/chart2/source/model/template/ChartType.cxx
+++ b/chart2/source/model/template/ChartType.cxx
@@ -19,6 +19,7 @@
 
 #include <ChartType.hxx>
 #include <CartesianCoordinateSystem.hxx>
+#include <Axis.hxx>
 #include <AxisHelper.hxx>
 #include <CloneHelper.hxx>
 #include <AxisIndexDefines.hxx>
@@ -67,13 +68,19 @@ ChartType::~ChartType()
 // ____ XChartType ____
 Reference< chart2::XCoordinateSystem > SAL_CALL
     ChartType::createCoordinateSystem( ::sal_Int32 DimensionCount )
+{
+    return createCoordinateSystem2(DimensionCount);
+}
+
+rtl::Reference< BaseCoordinateSystem >
+    ChartType::createCoordinateSystem2( ::sal_Int32 DimensionCount )
 {
     rtl::Reference< CartesianCoordinateSystem > xResult =
         new CartesianCoordinateSystem( DimensionCount );
 
     for( sal_Int32 i=0; i<DimensionCount; ++i )
     {
-        Reference< chart2::XAxis > xAxis( xResult->getAxisByDimension( i, 
MAIN_AXIS_INDEX ) );
+        rtl::Reference< Axis > xAxis = xResult->getAxisByDimension2( i, 
MAIN_AXIS_INDEX );
         if( !xAxis.is() )
         {
             OSL_FAIL("a created coordinate system should have an axis for each 
dimension");
diff --git a/chart2/source/model/template/ChartTypeTemplate.cxx 
b/chart2/source/model/template/ChartTypeTemplate.cxx
index 902c54ed6a89..df4cb7d17c92 100644
--- a/chart2/source/model/template/ChartTypeTemplate.cxx
+++ b/chart2/source/model/template/ChartTypeTemplate.cxx
@@ -25,6 +25,7 @@
 #include <DataSeries.hxx>
 #include <DataSource.hxx>
 
+#include <Axis.hxx>
 #include <AxisHelper.hxx>
 #include <Diagram.hxx>
 #include <DiagramHelper.hxx>
@@ -420,18 +421,14 @@ void ChartTypeTemplate::resetStyles( const 
rtl::Reference< ::chart::Diagram >& x
     bool bPercent = (getStackMode(0) == StackMode::YStackedPercent);
     if( bPercent )
     {
-        const Sequence< Reference< chart2::XAxis > > aAxisSeq( 
AxisHelper::getAllAxesOfDiagram( xDiagram ) );
-        for( Reference< chart2::XAxis > const & axis : aAxisSeq )
+        const std::vector< rtl::Reference< Axis > > aAxisSeq( 
AxisHelper::getAllAxesOfDiagram( xDiagram ) );
+        for( rtl::Reference< Axis > const & axis : aAxisSeq )
         {
             if( AxisHelper::getDimensionIndexOfAxis( axis, xDiagram )== 1 )
             {
-                Reference< beans::XPropertySet > xAxisProp( axis, 
uno::UNO_QUERY );
-                if( xAxisProp.is())
-                {
-                    // set number format to source format
-                    
xAxisProp->setPropertyValue(CHART_UNONAME_LINK_TO_SRC_NUMFMT, uno::Any(true));
-                    xAxisProp->setPropertyValue(CHART_UNONAME_NUMFMT, 
uno::Any());
-                }
+                // set number format to source format
+                axis->setPropertyValue(CHART_UNONAME_LINK_TO_SRC_NUMFMT, 
uno::Any(true));
+                axis->setPropertyValue(CHART_UNONAME_NUMFMT, uno::Any());
             }
         }
     }
@@ -499,7 +496,7 @@ void ChartTypeTemplate::createCoordinateSystems(
     rtl::Reference< ChartType > xChartType( 
getChartTypeForNewSeries(aFormerlyUsedChartTypes));
     if( ! xChartType.is())
         return;
-    Reference< XCoordinateSystem > xCooSys( 
xChartType->createCoordinateSystem( getDimension()));
+    rtl::Reference< BaseCoordinateSystem > xCooSys = 
ChartType::createCoordinateSystem2( getDimension());
     if( ! xCooSys.is())
     {
         // chart type wants no coordinate systems
@@ -514,13 +511,13 @@ void ChartTypeTemplate::createCoordinateSystems(
             AxisHelper::makeGridVisible( xAxis->getGridProperties() );
     }
 
-    Sequence< Reference< XCoordinateSystem > > aCoordinateSystems(
-        xDiagram->getCoordinateSystems());
+    std::vector< rtl::Reference< BaseCoordinateSystem > > aCoordinateSystems(
+        xDiagram->getBaseCoordinateSystems());
 
-    if( aCoordinateSystems.hasElements())
+    if( !aCoordinateSystems.empty() )
     {
         bool bOk = true;
-        for( sal_Int32 i=0; bOk && i<aCoordinateSystems.getLength(); ++i )
+        for( sal_Int32 i=0; bOk && 
i<static_cast<sal_Int32>(aCoordinateSystems.size()); ++i )
             bOk = bOk && ( xCooSys->getCoordinateSystemType() == 
aCoordinateSystems[i]->getCoordinateSystemType() &&
                            (xCooSys->getDimension() == 
aCoordinateSystems[i]->getDimension()) );
         // coordinate systems are ok
@@ -530,9 +527,9 @@ void ChartTypeTemplate::createCoordinateSystems(
     }
 
     //copy as much info from former coordinate system as possible:
-    if( aCoordinateSystems.hasElements() )
+    if( !aCoordinateSystems.empty() )
     {
-        Reference< XCoordinateSystem > xOldCooSys( aCoordinateSystems[0] );
+        rtl::Reference< BaseCoordinateSystem > xOldCooSys( 
aCoordinateSystems[0] );
         sal_Int32 nMaxDimensionCount = std::min( xCooSys->getDimension(), 
xOldCooSys->getDimension() );
 
         for(sal_Int32 nDimensionIndex=0; nDimensionIndex<nMaxDimensionCount; 
nDimensionIndex++)
@@ -540,7 +537,7 @@ void ChartTypeTemplate::createCoordinateSystems(
             const sal_Int32 nMaximumAxisIndex = 
xOldCooSys->getMaximumAxisIndexByDimension(nDimensionIndex);
             for(sal_Int32 nAxisIndex=0; nAxisIndex<=nMaximumAxisIndex; 
++nAxisIndex)
             {
-                uno::Reference< XAxis > xAxis( xOldCooSys->getAxisByDimension( 
nDimensionIndex, nAxisIndex ) );
+                rtl::Reference< Axis > xAxis = 
xOldCooSys->getAxisByDimension2( nDimensionIndex, nAxisIndex );
                 if( xAxis.is())
                 {
                     xCooSys->setAxisByDimension( nDimensionIndex, xAxis, 
nAxisIndex );
@@ -573,7 +570,7 @@ void ChartTypeTemplate::adaptScales(
                 const sal_Int32 nMaxIndex = 
xCooSys->getMaximumAxisIndexByDimension(nDimensionX);
                 for(sal_Int32 nI=0; nI<=nMaxIndex; ++nI)
                 {
-                    Reference< XAxis > xAxis( 
xCooSys->getAxisByDimension(nDimensionX,nI) );
+                    rtl::Reference< Axis > xAxis = 
xCooSys->getAxisByDimension2(nDimensionX,nI);
                     if( xAxis.is())
                     {
                         ScaleData aData( xAxis->getScaleData() );
@@ -606,7 +603,7 @@ void ChartTypeTemplate::adaptScales(
                 const sal_Int32 nMaxIndex = 
xCooSys->getMaximumAxisIndexByDimension(1);
                 for(sal_Int32 nI=0; nI<=nMaxIndex; ++nI)
                 {
-                    Reference< chart2::XAxis > xAxis( 
xCooSys->getAxisByDimension( 1,nI ));
+                    rtl::Reference< Axis > xAxis = 
xCooSys->getAxisByDimension2( 1,nI );
                     if( xAxis.is())
                     {
                         bool bPercent = (getStackMode(0) == 
StackMode::YStackedPercent);
diff --git a/chart2/source/model/template/NetChartType.cxx 
b/chart2/source/model/template/NetChartType.cxx
index 971befddfca9..8441215818d8 100644
--- a/chart2/source/model/template/NetChartType.cxx
+++ b/chart2/source/model/template/NetChartType.cxx
@@ -22,6 +22,7 @@
 #include <servicenames_charttypes.hxx>
 #include <AxisIndexDefines.hxx>
 #include <AxisHelper.hxx>
+#include <Axis.hxx>
 
 #include <cppuhelper/supportsservice.hxx>
 #include <com/sun/star/chart2/AxisType.hpp>
@@ -58,7 +59,7 @@ Reference< XCoordinateSystem > SAL_CALL
     rtl::Reference< PolarCoordinateSystem > xResult =
         new PolarCoordinateSystem( DimensionCount );
 
-    Reference< XAxis > xAxis( xResult->getAxisByDimension( 0, MAIN_AXIS_INDEX 
) );
+    rtl::Reference< Axis > xAxis = xResult->getAxisByDimension2( 0, 
MAIN_AXIS_INDEX );
     if( xAxis.is() )
     {
         ScaleData aScaleData = xAxis->getScaleData();
@@ -68,7 +69,7 @@ Reference< XCoordinateSystem > SAL_CALL
         xAxis->setScaleData( aScaleData );
     }
 
-    xAxis = xResult->getAxisByDimension( 1, MAIN_AXIS_INDEX );
+    xAxis = xResult->getAxisByDimension2( 1, MAIN_AXIS_INDEX );
     if( xAxis.is() )
     {
         ScaleData aScaleData = xAxis->getScaleData();
diff --git a/chart2/source/model/template/PieChartType.cxx 
b/chart2/source/model/template/PieChartType.cxx
index 1208283fcc1e..4727a47acc26 100644
--- a/chart2/source/model/template/PieChartType.cxx
+++ b/chart2/source/model/template/PieChartType.cxx
@@ -20,6 +20,7 @@
 #include "PieChartType.hxx"
 #include <PropertyHelper.hxx>
 #include <PolarCoordinateSystem.hxx>
+#include <Axis.hxx>
 #include <AxisHelper.hxx>
 #include <servicenames_charttypes.hxx>
 #include <AxisIndexDefines.hxx>
@@ -158,7 +159,7 @@ Reference< chart2::XCoordinateSystem > SAL_CALL
 
     for( sal_Int32 i=0; i<DimensionCount; ++i )
     {
-        Reference< chart2::XAxis > xAxis( xResult->getAxisByDimension( i, 
MAIN_AXIS_INDEX ) );
+        rtl::Reference< Axis > xAxis = xResult->getAxisByDimension2( i, 
MAIN_AXIS_INDEX );
         if( !xAxis.is() )
         {
             OSL_FAIL("a created coordinate system should have an axis for each 
dimension");
diff --git a/chart2/source/model/template/PieChartTypeTemplate.cxx 
b/chart2/source/model/template/PieChartTypeTemplate.cxx
index 9b7ef05323fc..46a3e57e2a88 100644
--- a/chart2/source/model/template/PieChartTypeTemplate.cxx
+++ b/chart2/source/model/template/PieChartTypeTemplate.cxx
@@ -27,6 +27,7 @@
 #include <servicenames_charttypes.hxx>
 #include <DataSeries.hxx>
 #include <DataSeriesHelper.hxx>
+#include <Axis.hxx>
 #include <AxisHelper.hxx>
 #include <ThreeDHelper.hxx>
 #include <PropertyHelper.hxx>
@@ -238,8 +239,8 @@ void PieChartTypeTemplate::adaptScales(
     {
         try
         {
-            Reference< chart2::XAxis > xAxis( AxisHelper::getAxis( 1 
/*nDimensionIndex*/,0 /*nAxisIndex*/
-                    , coords ) );
+            rtl::Reference< Axis > xAxis = AxisHelper::getAxis( 1 
/*nDimensionIndex*/,0 /*nAxisIndex*/
+                    , coords );
             if( xAxis.is() )
             {
                 chart2::ScaleData aScaleData( xAxis->getScaleData() );
diff --git a/chart2/source/model/template/ScatterChartType.cxx 
b/chart2/source/model/template/ScatterChartType.cxx
index 63d46fed23b9..1835abc10a1d 100644
--- a/chart2/source/model/template/ScatterChartType.cxx
+++ b/chart2/source/model/template/ScatterChartType.cxx
@@ -21,6 +21,7 @@
 #include <PropertyHelper.hxx>
 #include <servicenames_charttypes.hxx>
 #include <CartesianCoordinateSystem.hxx>
+#include <Axis.hxx>
 #include <AxisHelper.hxx>
 #include <AxisIndexDefines.hxx>
 #include <unonames.hxx>
@@ -168,7 +169,7 @@ Reference< chart2::XCoordinateSystem > SAL_CALL
 
     for( sal_Int32 i=0; i<DimensionCount; ++i )
     {
-        Reference< chart2::XAxis > xAxis( xResult->getAxisByDimension( i, 
MAIN_AXIS_INDEX ) );
+        rtl::Reference< Axis > xAxis = xResult->getAxisByDimension2( i, 
MAIN_AXIS_INDEX );
         if( !xAxis.is() )
         {
             OSL_FAIL("a created coordinate system should have an axis for each 
dimension");
diff --git a/chart2/source/tools/AxisHelper.cxx 
b/chart2/source/tools/AxisHelper.cxx
index 8f9b93cf8873..52225c48b413 100644
--- a/chart2/source/tools/AxisHelper.cxx
+++ b/chart2/source/tools/AxisHelper.cxx
@@ -22,6 +22,7 @@
 #include <Diagram.hxx>
 #include <ChartTypeHelper.hxx>
 #include <ChartType.hxx>
+#include <Axis.hxx>
 #include <AxisIndexDefines.hxx>
 #include <LabeledDataSequence.hxx>
 #include <LinePropertiesHelper.hxx>
@@ -101,6 +102,13 @@ bool AxisHelper::isLogarithmic( const Reference< XScaling 
>& xScaling )
 }
 
 chart2::ScaleData AxisHelper::getDateCheckedScale( const Reference< 
chart2::XAxis >& xAxis, ChartModel& rModel )
+{
+    rtl::Reference< Axis > pAxis = dynamic_cast<Axis*>(xAxis.get());
+    assert(pAxis || !xAxis);
+    return getDateCheckedScale(pAxis, rModel);
+}
+
+chart2::ScaleData AxisHelper::getDateCheckedScale( const rtl::Reference< Axis 
>& xAxis, ChartModel& rModel )
 {
     ScaleData aScale = xAxis->getScaleData();
     rtl::Reference< BaseCoordinateSystem > xCooSys( 
ChartModelHelper::getFirstCoordinateSystem( &rModel ) );
@@ -140,19 +148,29 @@ sal_Int32 AxisHelper::getExplicitNumberFormatKeyForAxis(
                 , const rtl::Reference< BaseCoordinateSystem > & 
xCorrespondingCoordinateSystem
                 , const rtl::Reference<ChartModel>& xChartDoc
                 , bool bSearchForParallelAxisIfNothingIsFound )
+{
+    rtl::Reference< Axis > pAxis = dynamic_cast<Axis*>(xAxis.get());
+    assert(pAxis || !xAxis);
+    return getExplicitNumberFormatKeyForAxis(pAxis, 
xCorrespondingCoordinateSystem, xChartDoc, 
bSearchForParallelAxisIfNothingIsFound);
+}
+
+sal_Int32 AxisHelper::getExplicitNumberFormatKeyForAxis(
+                  const rtl::Reference< Axis >& xAxis
+                , const rtl::Reference< BaseCoordinateSystem > & 
xCorrespondingCoordinateSystem
+                , const rtl::Reference<ChartModel>& xChartDoc
+                , bool bSearchForParallelAxisIfNothingIsFound )
 {
     sal_Int32 nNumberFormatKey(0);
     sal_Int32 nAxisIndex = 0;
     sal_Int32 nDimensionIndex = 1;
     AxisHelper::getIndicesForAxis( xAxis, xCorrespondingCoordinateSystem, 
nDimensionIndex, nAxisIndex );
 
-    Reference< beans::XPropertySet > xProp( xAxis, uno::UNO_QUERY );
-    if (!xProp.is())
+    if (!xAxis.is())
         return 0;
 
     bool bLinkToSource = true;
-    xProp->getPropertyValue(CHART_UNONAME_LINK_TO_SRC_NUMFMT) >>= 
bLinkToSource;
-    xProp->getPropertyValue(CHART_UNONAME_NUMFMT) >>= nNumberFormatKey;
+    xAxis->getPropertyValue(CHART_UNONAME_LINK_TO_SRC_NUMFMT) >>= 
bLinkToSource;
+    xAxis->getPropertyValue(CHART_UNONAME_NUMFMT) >>= nNumberFormatKey;
 
     if (bLinkToSource)
     {
@@ -309,7 +327,7 @@ sal_Int32 AxisHelper::getExplicitNumberFormatKeyForAxis(
                 if( !bNumberFormatKeyFoundViaAttachedData && nDimensionIndex 
== 1 )
                 {
                     sal_Int32 nParallelAxisIndex = (nAxisIndex==1) ?0 :1;
-                    Reference< XAxis > xParallelAxis( AxisHelper::getAxis( 1, 
nParallelAxisIndex, xCorrespondingCoordinateSystem ) );
+                    rtl::Reference< Axis > xParallelAxis = 
AxisHelper::getAxis( 1, nParallelAxisIndex, xCorrespondingCoordinateSystem );
                     nNumberFormatKey = 
AxisHelper::getExplicitNumberFormatKeyForAxis(xParallelAxis, 
xCorrespondingCoordinateSystem, xChartDoc, false);
                 }
             }
@@ -319,7 +337,7 @@ sal_Int32 AxisHelper::getExplicitNumberFormatKeyForAxis(
     return nNumberFormatKey;
 }
 
-Reference< XAxis > AxisHelper::createAxis(
+rtl::Reference< Axis > AxisHelper::createAxis(
           sal_Int32 nDimensionIndex
         , sal_Int32 nAxisIndex // 0==main or 1==secondary axis
         , const rtl::Reference< BaseCoordinateSystem >& xCooSys
@@ -331,64 +349,52 @@ Reference< XAxis > AxisHelper::createAxis(
     if( nDimensionIndex >= xCooSys->getDimension() )
         return nullptr;
 
-    Reference< XAxis > xAxis( 
xContext->getServiceManager()->createInstanceWithContext(
-                    "com.sun.star.chart2.Axis", xContext ), uno::UNO_QUERY );
+    rtl::Reference< Axis > xAxis = new Axis();
 
-    OSL_ASSERT( xAxis.is());
-    if( xAxis.is())
+    xCooSys->setAxisByDimension( nDimensionIndex, xAxis, nAxisIndex );
+
+    if( nAxisIndex>0 )//when inserting secondary axes copy some things from 
the main axis
     {
-        xCooSys->setAxisByDimension( nDimensionIndex, xAxis, nAxisIndex );
+        css::chart::ChartAxisPosition eNewAxisPos( 
css::chart::ChartAxisPosition_END );
 
-        if( nAxisIndex>0 )//when inserting secondary axes copy some things 
from the main axis
+        rtl::Reference< Axis > xMainAxis = xCooSys->getAxisByDimension2( 
nDimensionIndex, 0 );
+        if( xMainAxis.is() )
         {
-            css::chart::ChartAxisPosition eNewAxisPos( 
css::chart::ChartAxisPosition_END );
-
-            Reference< XAxis > xMainAxis( xCooSys->getAxisByDimension( 
nDimensionIndex, 0 ) );
-            if( xMainAxis.is() )
-            {
-                ScaleData aScale = xAxis->getScaleData();
-                ScaleData aMainScale = xMainAxis->getScaleData();
-
-                aScale.AxisType = aMainScale.AxisType;
-                aScale.AutoDateAxis = aMainScale.AutoDateAxis;
-                aScale.Categories = aMainScale.Categories;
-                aScale.Orientation = aMainScale.Orientation;
-                aScale.ShiftedCategoryPosition = 
aMainScale.ShiftedCategoryPosition;
-
-                xAxis->setScaleData( aScale );
-
-                //ensure that the second axis is not placed on the main axis
-                Reference< beans::XPropertySet > xMainProp( xMainAxis, 
uno::UNO_QUERY );
-                if( xMainProp.is() )
-                {
-                    css::chart::ChartAxisPosition eMainAxisPos( 
css::chart::ChartAxisPosition_ZERO );
-                    xMainProp->getPropertyValue("CrossoverPosition") >>= 
eMainAxisPos;
-                    if( eMainAxisPos == css::chart::ChartAxisPosition_END )
-                        eNewAxisPos = css::chart::ChartAxisPosition_START;
-                }
-            }
-
-            Reference< beans::XPropertySet > xProp( xAxis, uno::UNO_QUERY );
-            if( xProp.is() )
-                xProp->setPropertyValue("CrossoverPosition", 
uno::Any(eNewAxisPos) );
+            ScaleData aScale = xAxis->getScaleData();
+            ScaleData aMainScale = xMainAxis->getScaleData();
+
+            aScale.AxisType = aMainScale.AxisType;
+            aScale.AutoDateAxis = aMainScale.AutoDateAxis;
+            aScale.Categories = aMainScale.Categories;
+            aScale.Orientation = aMainScale.Orientation;
+            aScale.ShiftedCategoryPosition = 
aMainScale.ShiftedCategoryPosition;
+
+            xAxis->setScaleData( aScale );
+
+            //ensure that the second axis is not placed on the main axis
+            css::chart::ChartAxisPosition eMainAxisPos( 
css::chart::ChartAxisPosition_ZERO );
+            xMainAxis->getPropertyValue("CrossoverPosition") >>= eMainAxisPos;
+            if( eMainAxisPos == css::chart::ChartAxisPosition_END )
+                eNewAxisPos = css::chart::ChartAxisPosition_START;
         }
 
-        Reference< beans::XPropertySet > xProp( xAxis, uno::UNO_QUERY );
-        if( xProp.is() ) try
-        {
-            // set correct initial AutoScale
-            if( pRefSizeProvider )
-                pRefSizeProvider->setValuesAtPropertySet( xProp );
-        }
-        catch( const uno::Exception& )
-        {
-            TOOLS_WARN_EXCEPTION("chart2", "" );
-        }
+        xAxis->setPropertyValue("CrossoverPosition", uno::Any(eNewAxisPos) );
+    }
+
+    try
+    {
+        // set correct initial AutoScale
+        if( pRefSizeProvider )
+            pRefSizeProvider->setValuesAtPropertySet( xAxis );
+    }
+    catch( const uno::Exception& )
+    {
+        TOOLS_WARN_EXCEPTION("chart2", "" );
     }
     return xAxis;
 }
 
-Reference< XAxis > AxisHelper::createAxis( sal_Int32 nDimensionIndex, bool 
bMainAxis
+rtl::Reference< Axis > AxisHelper::createAxis( sal_Int32 nDimensionIndex, bool 
bMainAxis
                 , const rtl::Reference< Diagram >& xDiagram
                 , const Reference< uno::XComponentContext >& xContext
                 , ReferenceSizeProvider * pRefSizeProvider )
@@ -414,12 +420,12 @@ void AxisHelper::showAxis( sal_Int32 nDimensionIndex, 
bool bMainAxis
         return;
 
     bool bNewAxisCreated = false;
-    Reference< XAxis > xAxis( AxisHelper::getAxis( nDimensionIndex, bMainAxis, 
xDiagram ) );
+    rtl::Reference< Axis > xAxis = AxisHelper::getAxis( nDimensionIndex, 
bMainAxis, xDiagram );
     if( !xAxis.is() && xContext.is() )
     {
         // create axis
         bNewAxisCreated = true;
-        xAxis.set( AxisHelper::createAxis( nDimensionIndex, bMainAxis, 
xDiagram, xContext, pRefSizeProvider ) );
+        xAxis = AxisHelper::createAxis( nDimensionIndex, bMainAxis, xDiagram, 
xContext, pRefSizeProvider );
     }
 
     OSL_ASSERT( xAxis.is());
@@ -437,7 +443,7 @@ void AxisHelper::showGrid( sal_Int32 nDimensionIndex, 
sal_Int32 nCooSysIndex, bo
     if(!xCooSys.is())
         return;
 
-    Reference< XAxis > xAxis( AxisHelper::getAxis( nDimensionIndex, 
MAIN_AXIS_INDEX, xCooSys ) );
+    rtl::Reference< Axis > xAxis = AxisHelper::getAxis( nDimensionIndex, 
MAIN_AXIS_INDEX, xCooSys );
     if(!xAxis.is())
     {
         //hhhh todo create axis without axis visibility
@@ -466,6 +472,16 @@ void AxisHelper::makeAxisVisible( const Reference< XAxis 
>& xAxis )
     }
 }
 
+void AxisHelper::makeAxisVisible( const rtl::Reference< Axis >& xAxis )
+{
+    if( xAxis.is() )
+    {
+        xAxis->setPropertyValue( "Show", uno::Any( true ) );
+        LinePropertiesHelper::SetLineVisible( xAxis );
+        xAxis->setPropertyValue( "DisplayLabels", uno::Any( true ) );
+    }
+}
+
 void AxisHelper::makeGridVisible( const Reference< beans::XPropertySet >& 
xGridProperties )
 {
     if( xGridProperties.is() )
@@ -490,14 +506,29 @@ void AxisHelper::makeAxisInvisible( const Reference< 
XAxis >& xAxis )
     }
 }
 
+void AxisHelper::makeAxisInvisible( const rtl::Reference< Axis >& xAxis )
+{
+    if( xAxis.is() )
+    {
+        xAxis->setPropertyValue( "Show", uno::Any( false ) );
+    }
+}
+
 void AxisHelper::hideAxisIfNoDataIsAttached( const Reference< XAxis >& xAxis, 
const rtl::Reference< Diagram >& xDiagram )
+{
+    rtl::Reference< Axis > pAxis = dynamic_cast<Axis*>(xAxis.get());
+    assert(pAxis || !xAxis);
+    hideAxisIfNoDataIsAttached(pAxis, xDiagram);
+}
+
+void AxisHelper::hideAxisIfNoDataIsAttached( const rtl::Reference< Axis >& 
xAxis, const rtl::Reference< Diagram >& xDiagram )
 {
     //axis is hidden if no data is attached anymore but data is available
     bool bOtherSeriesAttachedToThisAxis = false;
     std::vector< rtl::Reference< DataSeries > > aSeriesVector = 
DiagramHelper::getDataSeriesFromDiagram( xDiagram );
     for (auto const& series : aSeriesVector)
     {
-        uno::Reference< chart2::XAxis > xCurrentAxis = 
DiagramHelper::getAttachedAxis(series, xDiagram );
+        rtl::Reference< Axis > xCurrentAxis = 
DiagramHelper::getAttachedAxis(series, xDiagram );
         if( xCurrentAxis==xAxis )
         {
             bOtherSeriesAttachedToThisAxis = true;
@@ -518,7 +549,7 @@ void AxisHelper::hideGrid( sal_Int32 nDimensionIndex, 
sal_Int32 nCooSysIndex, bo
     if(!xCooSys.is())
         return;
 
-    Reference< XAxis > xAxis( AxisHelper::getAxis( nDimensionIndex, 
MAIN_AXIS_INDEX, xCooSys ) );
+    rtl::Reference< Axis > xAxis = AxisHelper::getAxis( nDimensionIndex, 
MAIN_AXIS_INDEX, xCooSys );
     if(!xAxis.is())
         return;
 
@@ -549,7 +580,7 @@ bool AxisHelper::isGridShown( sal_Int32 nDimensionIndex, 
sal_Int32 nCooSysIndex,
     if(!xCooSys.is())
         return bRet;
 
-    Reference< XAxis > xAxis( AxisHelper::getAxis( nDimensionIndex, 
MAIN_AXIS_INDEX, xCooSys ) );
+    rtl::Reference< Axis > xAxis = AxisHelper::getAxis( nDimensionIndex, 
MAIN_AXIS_INDEX, xCooSys );
     if(!xAxis.is())
         return bRet;
 
@@ -576,14 +607,14 @@ rtl::Reference< ::chart::BaseCoordinateSystem > 
AxisHelper::getCoordinateSystemB
     return nullptr;
 }
 
-Reference< XAxis > AxisHelper::getAxis( sal_Int32 nDimensionIndex, bool 
bMainAxis
+rtl::Reference< Axis > AxisHelper::getAxis( sal_Int32 nDimensionIndex, bool 
bMainAxis
             , const rtl::Reference< Diagram >& xDiagram )
 {
-    Reference< XAxis > xRet;
+    rtl::Reference< Axis > xRet;
     try
     {
         rtl::Reference< BaseCoordinateSystem > xCooSys = 
AxisHelper::getCoordinateSystemByIndex( xDiagram, 0 );
-        xRet.set( AxisHelper::getAxis( nDimensionIndex, bMainAxis ? 0 : 1, 
xCooSys ) );
+        xRet = AxisHelper::getAxis( nDimensionIndex, bMainAxis ? 0 : 1, 
xCooSys );
     }
     catch( const uno::Exception & )
     {
@@ -591,10 +622,10 @@ Reference< XAxis > AxisHelper::getAxis( sal_Int32 
nDimensionIndex, bool bMainAxi
     return xRet;
 }
 
-Reference< XAxis > AxisHelper::getAxis( sal_Int32 nDimensionIndex, sal_Int32 
nAxisIndex
+rtl::Reference< Axis > AxisHelper::getAxis( sal_Int32 nDimensionIndex, 
sal_Int32 nAxisIndex
             , const rtl::Reference< BaseCoordinateSystem >& xCooSys )
 {
-    Reference< XAxis > xRet;
+    rtl::Reference< Axis > xRet;
     if(!xCooSys.is())
         return xRet;
 
@@ -606,11 +637,19 @@ Reference< XAxis > AxisHelper::getAxis( sal_Int32 
nDimensionIndex, sal_Int32 nAx
 
     assert(nAxisIndex >= 0);
     assert(nDimensionIndex >= 0);
-    xRet.set( xCooSys->getAxisByDimension( nDimensionIndex, nAxisIndex ) );
+    xRet = xCooSys->getAxisByDimension2( nDimensionIndex, nAxisIndex );
     return xRet;
 }
 
-Reference< XAxis > AxisHelper::getCrossingMainAxis( const Reference< XAxis >& 
xAxis
+rtl::Reference< Axis > AxisHelper::getCrossingMainAxis( const Reference< 
chart2::XAxis >& xAxis
+            , const rtl::Reference< BaseCoordinateSystem >& xCooSys )
+{
+    rtl::Reference< Axis > pAxis = dynamic_cast<Axis*>(xAxis.get());
+    assert(pAxis || !xAxis);
+    return getCrossingMainAxis(pAxis, xCooSys);
+}
+
+rtl::Reference< Axis > AxisHelper::getCrossingMainAxis( const rtl::Reference< 
Axis >& xAxis
             , const rtl::Reference< BaseCoordinateSystem >& xCooSys )
 {
     sal_Int32 nDimensionIndex = 0;
@@ -630,7 +669,7 @@ Reference< XAxis > AxisHelper::getCrossingMainAxis( const 
Reference< XAxis >& xA
     return AxisHelper::getAxis( nDimensionIndex, 0, xCooSys );
 }
 
-Reference< XAxis > AxisHelper::getParallelAxis( const Reference< XAxis >& xAxis
+rtl::Reference< Axis > AxisHelper::getParallelAxis( const Reference< XAxis >& 
xAxis
             , const rtl::Reference< Diagram >& xDiagram )
 {
     try
@@ -700,7 +739,7 @@ Reference< beans::XPropertySet > 
AxisHelper::getGridProperties(
 {
     Reference< beans::XPropertySet > xRet;
 
-    Reference< XAxis > xAxis( AxisHelper::getAxis( nDimensionIndex, 
nAxisIndex, xCooSys ) );
+    rtl::Reference< Axis > xAxis( AxisHelper::getAxis( nDimensionIndex, 
nAxisIndex, xCooSys ) );
     if( xAxis.is() )
     {
         if( nSubGridIndex<0 )
@@ -727,8 +766,29 @@ sal_Int32 AxisHelper::getDimensionIndexOfAxis(
     return nDimensionIndex;
 }
 
+sal_Int32 AxisHelper::getDimensionIndexOfAxis(
+              const rtl::Reference< Axis >& xAxis
+            , const rtl::Reference< Diagram >& xDiagram )
+{
+    sal_Int32 nDimensionIndex = -1;
+    sal_Int32 nCooSysIndex = -1;
+    sal_Int32 nAxisIndex = -1;
+    AxisHelper::getIndicesForAxis( xAxis, xDiagram, nCooSysIndex , 
nDimensionIndex, nAxisIndex );
+    return nDimensionIndex;
+}
+
 bool AxisHelper::getIndicesForAxis(
-              const Reference< XAxis >& xAxis
+              const Reference< chart2::XAxis >& xAxis
+            , const rtl::Reference< BaseCoordinateSystem >& xCooSys
+            , sal_Int32& rOutDimensionIndex, sal_Int32& rOutAxisIndex )
+{
+    rtl::Reference< Axis > pAxis = dynamic_cast<Axis*>(xAxis.get());
+    assert(pAxis || !xAxis);
+    return getIndicesForAxis(pAxis, xCooSys, rOutDimensionIndex, 
rOutAxisIndex);
+}
+
+bool AxisHelper::getIndicesForAxis(
+              const rtl::Reference< Axis >& xAxis
             , const rtl::Reference< BaseCoordinateSystem >& xCooSys
             , sal_Int32& rOutDimensionIndex, sal_Int32& rOutAxisIndex )
 {
@@ -740,14 +800,14 @@ bool AxisHelper::getIndicesForAxis(
     if( !xCooSys || !xAxis )
         return false;
 
-    Reference< XAxis > xCurrentAxis;
+    rtl::Reference< Axis > xCurrentAxis;
     sal_Int32 nDimensionCount( xCooSys->getDimension() );
     for( sal_Int32 nDimensionIndex = 0; nDimensionIndex < nDimensionCount; 
nDimensionIndex++ )
     {
         sal_Int32 nMaxAxisIndex = 
xCooSys->getMaximumAxisIndexByDimension(nDimensionIndex);
         for( sal_Int32 nAxisIndex = 0; nAxisIndex <= nMaxAxisIndex; 
nAxisIndex++ )
         {
-             xCurrentAxis = 
xCooSys->getAxisByDimension(nDimensionIndex,nAxisIndex);
+             xCurrentAxis = 
xCooSys->getAxisByDimension2(nDimensionIndex,nAxisIndex);
              if( xCurrentAxis == xAxis )
              {
                  rOutDimensionIndex = nDimensionIndex;
@@ -759,7 +819,15 @@ bool AxisHelper::getIndicesForAxis(
     return false;
 }
 
-bool AxisHelper::getIndicesForAxis( const Reference< XAxis >& xAxis, const 
rtl::Reference< Diagram >& xDiagram
+bool AxisHelper::getIndicesForAxis( const Reference< chart2::XAxis >& xAxis, 
const rtl::Reference< Diagram >& xDiagram
+            , sal_Int32& rOutCooSysIndex, sal_Int32& rOutDimensionIndex, 
sal_Int32& rOutAxisIndex )
+{
+    rtl::Reference< Axis > pAxis = dynamic_cast<Axis*>(xAxis.get());
+    assert(pAxis || !xAxis);
+    return getIndicesForAxis(pAxis, xDiagram, rOutCooSysIndex, 
rOutDimensionIndex, rOutAxisIndex);
+}
+
+bool AxisHelper::getIndicesForAxis( const rtl::Reference< Axis >& xAxis, const 
rtl::Reference< Diagram >& xDiagram
             , sal_Int32& rOutCooSysIndex, sal_Int32& rOutDimensionIndex, 
sal_Int32& rOutAxisIndex )
 {
     //returns true if indices are found
@@ -781,11 +849,11 @@ bool AxisHelper::getIndicesForAxis( const Reference< 
XAxis >& xAxis, const rtl::
     return false;
 }
 
-std::vector< Reference< XAxis > > AxisHelper::getAllAxesOfCoordinateSystem(
+std::vector< rtl::Reference< Axis > > AxisHelper::getAllAxesOfCoordinateSystem(
       const rtl::Reference< BaseCoordinateSystem >& xCooSys
     , bool bOnlyVisible /* = false */ )
 {
-    std::vector< Reference< XAxis > > aAxisVector;
+    std::vector< rtl::Reference< Axis > > aAxisVector;
 
     if(xCooSys.is())
     {
@@ -800,15 +868,13 @@ std::vector< Reference< XAxis > > 
AxisHelper::getAllAxesOfCoordinateSystem(
                 {
                     try
                     {
-                        Reference< XAxis > xAxis( xCooSys->getAxisByDimension( 
nDimensionIndex, nAxisIndex ) );
+                        rtl::Reference< Axis > xAxis = 
xCooSys->getAxisByDimension2( nDimensionIndex, nAxisIndex );
                         if( xAxis.is() )
                         {
                             bool bAddAxis = true;
                             if( bOnlyVisible )
                             {
-                                Reference< beans::XPropertySet > xAxisProp( 
xAxis, uno::UNO_QUERY );
-                                if( !xAxisProp.is() ||
-                                    !(xAxisProp->getPropertyValue( "Show") >>= 
bAddAxis) )
+                                if( !(xAxis->getPropertyValue( "Show") >>= 
bAddAxis) )
                                     bAddAxis = false;
                             }
                             if( bAddAxis )
@@ -827,30 +893,28 @@ std::vector< Reference< XAxis > > 
AxisHelper::getAllAxesOfCoordinateSystem(
     return aAxisVector;
 }
 
-Sequence< Reference< XAxis > > AxisHelper::getAllAxesOfDiagram(
+std::vector< rtl::Reference< Axis > > AxisHelper::getAllAxesOfDiagram(
       const rtl::Reference< Diagram >& xDiagram
     , bool bOnlyVisible )
 {
-    std::vector< Reference< XAxis > > aAxisVector;
+    std::vector< rtl::Reference< Axis > > aAxisVector;
 
     for( rtl::Reference< BaseCoordinateSystem > const & coords : 
xDiagram->getBaseCoordinateSystems() )
     {
-        std::vector< Reference< XAxis > > aAxesPerCooSys( 
AxisHelper::getAllAxesOfCoordinateSystem( coords, bOnlyVisible ) );
+        std::vector< rtl::Reference< Axis > > aAxesPerCooSys = 
AxisHelper::getAllAxesOfCoordinateSystem( coords, bOnlyVisible );
         aAxisVector.insert( aAxisVector.end(), aAxesPerCooSys.begin(), 
aAxesPerCooSys.end() );
     }
 
-    return comphelper::containerToSequence( aAxisVector );
+    return aAxisVector;
 }
 
 Sequence< Reference< beans::XPropertySet > > AxisHelper::getAllGrids( const 
rtl::Reference< Diagram >& xDiagram )
 {
-    const Sequence< Reference< XAxis > > aAllAxes( 
AxisHelper::getAllAxesOfDiagram( xDiagram ) );
+    const std::vector< rtl::Reference< Axis > > aAllAxes = 
AxisHelper::getAllAxesOfDiagram( xDiagram );
     std::vector< Reference< beans::XPropertySet > > aGridVector;
 
-    for( Reference< XAxis > const & xAxis : aAllAxes )
+    for( rtl::Reference< Axis > const & xAxis : aAllAxes )
     {
-        if(!xAxis.is())
-            continue;
         Reference< beans::XPropertySet > xGridProperties( 
xAxis->getGridProperties() );
         if( xGridProperties.is() )
             aGridVector.push_back( xGridProperties );
@@ -934,6 +998,31 @@ bool AxisHelper::shouldAxisBeDisplayed( const Reference< 
XAxis >& xAxis
     return bRet;
 }
 
+bool AxisHelper::shouldAxisBeDisplayed( const rtl::Reference< Axis >& xAxis
+                                       , const rtl::Reference< 
BaseCoordinateSystem >& xCooSys )
+{
+    bool bRet = false;
+
+    if( xAxis.is() && xCooSys.is() )
+    {
+        sal_Int32 nDimensionIndex=-1;
+        sal_Int32 nAxisIndex=-1;
+        if( AxisHelper::getIndicesForAxis( xAxis, xCooSys, nDimensionIndex, 
nAxisIndex ) )
+        {
+            sal_Int32 nDimensionCount = xCooSys->getDimension();
+            rtl::Reference< ChartType > xChartType( 
AxisHelper::getChartTypeByIndex( xCooSys, 0 ) );
+
+            bool bMainAxis = (nAxisIndex==MAIN_AXIS_INDEX);
+            if( bMainAxis )
+                bRet = 
ChartTypeHelper::isSupportingMainAxis(xChartType,nDimensionCount,nDimensionIndex);
+            else
+                bRet = 
ChartTypeHelper::isSupportingSecondaryAxis(xChartType,nDimensionCount);
+        }
+    }
+
+    return bRet;
+}
+
 void AxisHelper::getAxisOrGridExistence( Sequence< sal_Bool >& rExistenceList
         , const rtl::Reference< Diagram>& xDiagram, bool bAxis )
 {
@@ -1004,6 +1093,15 @@ bool AxisHelper::changeVisibilityOfGrids( const 
rtl::Reference< Diagram >& xDiag
 rtl::Reference< BaseCoordinateSystem > AxisHelper::getCoordinateSystemOfAxis(
               const Reference< XAxis >& xAxis
             , const rtl::Reference< Diagram >& xDiagram )
+{
+    rtl::Reference< Axis > pAxis = dynamic_cast<Axis*>(xAxis.get());
+    assert(pAxis || !xAxis);
+    return getCoordinateSystemOfAxis(pAxis, xDiagram);
+}
+
+rtl::Reference< BaseCoordinateSystem > AxisHelper::getCoordinateSystemOfAxis(
+              const rtl::Reference< Axis >& xAxis
+            , const rtl::Reference< Diagram >& xDiagram )
 {
     if (!xDiagram)
         return nullptr;
@@ -1011,10 +1109,9 @@ rtl::Reference< BaseCoordinateSystem > 
AxisHelper::getCoordinateSystemOfAxis(
     rtl::Reference< BaseCoordinateSystem > xRet;
     for( rtl::Reference< BaseCoordinateSystem > const & xCooSys : 
xDiagram->getBaseCoordinateSystems() )
     {
-        std::vector< Reference< XAxis > > aAllAxis( 
AxisHelper::getAllAxesOfCoordinateSystem( xCooSys ) );
+        std::vector< rtl::Reference< Axis > > aAllAxis = 
AxisHelper::getAllAxesOfCoordinateSystem( xCooSys );
 
-        std::vector< Reference< XAxis > >::iterator aFound =
-              std::find( aAllAxis.begin(), aAllAxis.end(), xAxis );
+        auto aFound = std::find( aAllAxis.begin(), aAllAxis.end(), xAxis );
         if( aFound != aAllAxis.end())
         {
             xRet = xCooSys;
diff --git a/chart2/source/tools/DataSeriesHelper.cxx 
b/chart2/source/tools/DataSeriesHelper.cxx
index 964f2f05a436..830a94d0a240 100644
--- a/chart2/source/tools/DataSeriesHelper.cxx
+++ b/chart2/source/tools/DataSeriesHelper.cxx
@@ -25,6 +25,7 @@
 #include <Diagram.hxx>
 #include <BaseCoordinateSystem.hxx>
 #include <LabeledDataSequence.hxx>
+#include <Axis.hxx>
 
 #include <com/sun/star/beans/XPropertySet.hpp>
 #include <com/sun/star/chart2/DataPointLabel.hpp>
@@ -503,8 +504,8 @@ void setStackModeAtSeries(
 
     for (auto const& axisIndex : aAxisIndexSet)
     {
-        Reference< chart2::XAxis > xAxis(
-            xCorrespondingCoordinateSystem->getAxisByDimension(1, axisIndex));
+        rtl::Reference< Axis > xAxis =
+            xCorrespondingCoordinateSystem->getAxisByDimension2(1, axisIndex);
         if( xAxis.is())
         {
             bool bPercent = (eStackMode == StackMode::YStackedPercent);
@@ -551,8 +552,8 @@ sal_Int32 getNumberFormatKeyFromAxis(
         nAxisIndex = getAttachedAxisIndex( xSeries );
     try
     {
-        Reference< beans::XPropertySet > xAxisProp(
-            xCorrespondingCoordinateSystem->getAxisByDimension( 
nDimensionIndex, nAxisIndex ), uno::UNO_QUERY );
+        rtl::Reference< Axis > xAxisProp =
+            xCorrespondingCoordinateSystem->getAxisByDimension2( 
nDimensionIndex, nAxisIndex );
         if( xAxisProp.is())
             xAxisProp->getPropertyValue(CHART_UNONAME_NUMFMT) >>= nResult;
     }
diff --git a/chart2/source/tools/DiagramHelper.cxx 
b/chart2/source/tools/DiagramHelper.cxx
index a20c8bbd7510..c45bb92e663e 100644
--- a/chart2/source/tools/DiagramHelper.cxx
+++ b/chart2/source/tools/DiagramHelper.cxx
@@ -21,6 +21,7 @@
 #include <Diagram.hxx>
 #include <DataSeries.hxx>
 #include <DataSeriesHelper.hxx>
+#include <Axis.hxx>
 #include <AxisHelper.hxx>
 #include <ChartType.hxx>
 #include <ChartTypeHelper.hxx>
@@ -145,7 +146,7 @@ void DiagramHelper::setVertical(
                 const sal_Int32 nMaximumScaleIndex = 
xCooSys->getMaximumAxisIndexByDimension(nDimIndex);
                 for (sal_Int32 nI = 0; nI <= nMaximumScaleIndex; ++nI)
                 {
-                    Reference<chart2::XAxis> xAxis = 
xCooSys->getAxisByDimension(nDimIndex,nI);
+                    rtl::Reference<Axis> xAxis = 
xCooSys->getAxisByDimension2(nDimIndex,nI);
                     if (!xAxis.is())
                         continue;
 
@@ -153,11 +154,7 @@ void DiagramHelper::setVertical(
                     if (!bChanged)
                         continue;
 
-                    Reference< XTitled > xTitled( xAxis, uno::UNO_QUERY );
-                    if (!xTitled.is())
-                        continue;
-
-                    Reference< beans::XPropertySet > xTitleProps( 
xTitled->getTitleObject(), uno::UNO_QUERY );
+                    Reference< beans::XPropertySet > xTitleProps( 
xAxis->getTitleObject(), uno::UNO_QUERY );
                     if (!xTitleProps.is())
                         continue;
 
@@ -247,7 +244,7 @@ void DiagramHelper::setStackMode(
             const sal_Int32 nMaximumScaleIndex = 
xCooSys->getMaximumAxisIndexByDimension(1);
             for(sal_Int32 nI=0; nI<=nMaximumScaleIndex; ++nI)
             {
-                Reference< chart2::XAxis > xAxis( xCooSys->getAxisByDimension( 
1,nI ));
+                rtl::Reference< Axis > xAxis = xCooSys->getAxisByDimension2( 
1,nI );
                 if( xAxis.is())
                 {
                     chart2::ScaleData aScaleData = xAxis->getScaleData();
@@ -379,8 +376,8 @@ StackMode DiagramHelper::getStackModeFromChartType(
                         if( nSeriesCount )
                             nAxisIndex = 
DataSeriesHelper::getAttachedAxisIndex(aSeries[0]);
 
-                        Reference< chart2::XAxis > xAxis(
-                            
xCorrespondingCoordinateSystem->getAxisByDimension( 1,nAxisIndex ));
+                        rtl::Reference< Axis > xAxis =
+                            
xCorrespondingCoordinateSystem->getAxisByDimension2( 1,nAxisIndex );
                         if( xAxis.is())
                         {
                             chart2::ScaleData aScaleData = 
xAxis->getScaleData();
@@ -547,7 +544,7 @@ bool DiagramHelper::attachSeriesToAxis( bool 
bAttachToMainAxis
 
     if( bChanged && xDiagram.is() )
     {
-        uno::Reference< XAxis > xAxis( AxisHelper::getAxis( 1, 
bAttachToMainAxis, xDiagram ) );
+        rtl::Reference< Axis > xAxis = AxisHelper::getAxis( 1, 
bAttachToMainAxis, xDiagram );
         if(!xAxis.is()) //create an axis if necessary
             xAxis = AxisHelper::createAxis( 1, bAttachToMainAxis, xDiagram, 
xContext );
         if( bAdaptAxes )
@@ -560,14 +557,14 @@ bool DiagramHelper::attachSeriesToAxis( bool 
bAttachToMainAxis
     return bChanged;
 }
 
-uno::Reference< XAxis > DiagramHelper::getAttachedAxis(
+rtl::Reference< Axis > DiagramHelper::getAttachedAxis(
         const uno::Reference< XDataSeries >& xSeries,
         const rtl::Reference< Diagram >& xDiagram )
 {
     return AxisHelper::getAxis( 1, DiagramHelper::isSeriesAttachedToMainAxis( 
xSeries ), xDiagram );
 }
 
-uno::Reference< XAxis > DiagramHelper::getAttachedAxis(
+rtl::Reference< Axis > DiagramHelper::getAttachedAxis(
         const rtl::Reference< DataSeries >& xSeries,
         const rtl::Reference< Diagram >& xDiagram )
 {
@@ -697,7 +694,7 @@ std::vector< Reference< XAxis > > 
lcl_getAxisHoldingCategoriesFromDiagram(
                 const sal_Int32 nMaximumScaleIndex = 
xCooSys->getMaximumAxisIndexByDimension(nN);
                 for(sal_Int32 nI=0; nI<=nMaximumScaleIndex; ++nI)
                 {
-                    Reference< XAxis > xAxis = xCooSys->getAxisByDimension( 
nN,nI );
+                    rtl::Reference< Axis > xAxis = 
xCooSys->getAxisByDimension2( nN,nI );
                     OSL_ASSERT( xAxis.is());
                     if( xAxis.is())
                     {
@@ -738,7 +735,7 @@ bool DiagramHelper::isCategoryDiagram(
                 const sal_Int32 nMaximumScaleIndex = 
xCooSys->getMaximumAxisIndexByDimension(nN);
                 for(sal_Int32 nI=0; nI<=nMaximumScaleIndex; ++nI)
                 {
-                    Reference< XAxis > xAxis = xCooSys->getAxisByDimension( 
nN,nI );
+                    rtl::Reference< Axis > xAxis = 
xCooSys->getAxisByDimension2( nN,nI );
                     OSL_ASSERT( xAxis.is());
                     if( xAxis.is())
                     {
@@ -1009,10 +1006,10 @@ void DiagramHelper::switchToDateCategories( const 
rtl::Reference<::chart::ChartM
     {
         ControllerLockGuardUNO aCtrlLockGuard( xChartDoc );
 
-        Reference< chart2::XCoordinateSystem > xCooSys( 
ChartModelHelper::getFirstCoordinateSystem( xChartDoc ) );
+        rtl::Reference< BaseCoordinateSystem > xCooSys = 
ChartModelHelper::getFirstCoordinateSystem( xChartDoc );
         if( xCooSys.is() )
         {
-            Reference< XAxis > xAxis( xCooSys->getAxisByDimension(0,0) );
+            rtl::Reference< Axis > xAxis = xCooSys->getAxisByDimension2(0,0);
             lcl_switchToDateCategories( xChartDoc, xAxis );
         }
     }
@@ -1024,10 +1021,10 @@ void DiagramHelper::switchToTextCategories( const 
rtl::Reference<::chart::ChartM
     {
         ControllerLockGuardUNO aCtrlLockGuard( xChartDoc );
 
-        Reference< chart2::XCoordinateSystem > xCooSys( 
ChartModelHelper::getFirstCoordinateSystem( xChartDoc ) );
+        rtl::Reference< BaseCoordinateSystem > xCooSys = 
ChartModelHelper::getFirstCoordinateSystem( xChartDoc );
         if( xCooSys.is() )
         {
-            Reference< XAxis > xAxis( xCooSys->getAxisByDimension(0,0) );
+            rtl::Reference< Axis > xAxis = xCooSys->getAxisByDimension2(0,0);
             lcl_switchToTextCategories( xChartDoc, xAxis );
         }
     }
diff --git a/chart2/source/tools/ExplicitCategoriesProvider.cxx 
b/chart2/source/tools/ExplicitCategoriesProvider.cxx
index b388ed0576a5..9def633272b3 100644
--- a/chart2/source/tools/ExplicitCategoriesProvider.cxx
+++ b/chart2/source/tools/ExplicitCategoriesProvider.cxx
@@ -21,6 +21,7 @@
 #include <DiagramHelper.hxx>
 #include <ChartType.hxx>
 #include <ChartTypeHelper.hxx>
+#include <Axis.hxx>
 #include <AxisHelper.hxx>
 #include <DataSourceHelper.hxx>
 #include <ChartModel.hxx>
@@ -61,7 +62,7 @@ ExplicitCategoriesProvider::ExplicitCategoriesProvider( const 
rtl::Reference< Ba
         if( xCooSysModel.is() )
         {
             // TODO: handle different category names on the primary and 
secondary category axis.
-            uno::Reference< XAxis > xAxis( 
xCooSysModel->getAxisByDimension(0,0) );
+            rtl::Reference< Axis > xAxis = 
xCooSysModel->getAxisByDimension2(0,0);
             if( xAxis.is() )
             {
                 ScaleData aScale( xAxis->getScaleData() );
@@ -180,7 +181,7 @@ void ExplicitCategoriesProvider::convertCategoryAnysToText( 
uno::Sequence< OUStr
     rtl::Reference< BaseCoordinateSystem > xCooSysModel( 
ChartModelHelper::getFirstCoordinateSystem( &rModel ) );
     if( xCooSysModel.is() )
     {
-        Reference< chart2::XAxis > xAxis( 
xCooSysModel->getAxisByDimension(0,0) );
+        rtl::Reference< Axis > xAxis = xCooSysModel->getAxisByDimension2(0,0);
         nAxisNumberFormat = AxisHelper::getExplicitNumberFormatKeyForAxis(
             xAxis, xCooSysModel, &rModel, false );
     }
@@ -408,13 +409,13 @@ static bool lcl_fillDateCategories( const uno::Reference< 
data::XDataSequence >&
         bool bOwnData = false;
         bool bOwnDataAnddAxisHasAnyFormat = false;
         bool bOwnDataAnddAxisHasDateFormat = false;
-        Reference< XCoordinateSystem > xCooSysModel( 
ChartModelHelper::getFirstCoordinateSystem( &rModel ) );
+        rtl::Reference< BaseCoordinateSystem > xCooSysModel( 
ChartModelHelper::getFirstCoordinateSystem( &rModel ) );
         if( xCooSysModel.is() )
         {
             if( rModel.hasInternalDataProvider() )
             {
                 bOwnData = true;
-                Reference< beans::XPropertySet > xAxisProps( 
xCooSysModel->getAxisByDimension(0,0), uno::UNO_QUERY );
+                rtl::Reference< Axis > xAxisProps = 
xCooSysModel->getAxisByDimension2(0,0);
                 sal_Int32 nAxisNumberFormat = 0;
                 if (xAxisProps.is() && 
(xAxisProps->getPropertyValue(CHART_UNONAME_NUMFMT) >>= nAxisNumberFormat))
                 {
diff --git a/chart2/source/tools/ObjectIdentifier.cxx 
b/chart2/source/tools/ObjectIdentifier.cxx
index 6ac81020f4b6..a34c3a33d13e 100644
--- a/chart2/source/tools/ObjectIdentifier.cxx
+++ b/chart2/source/tools/ObjectIdentifier.cxx
@@ -26,6 +26,7 @@
 #include <ChartModel.hxx>
 #include <ChartModelHelper.hxx>
 #include <ChartType.hxx>
+#include <Axis.hxx>
 #include <AxisHelper.hxx>
 #include <servicenames_charttypes.hxx>
 #include <DiagramHelper.hxx>
@@ -395,6 +396,34 @@ OUString 
ObjectIdentifier::createClassifiedIdentifierForObject(
     return OUString();
 }
 
+OUString ObjectIdentifier::createClassifiedIdentifierForObject(
+          const rtl::Reference<::chart::Axis>& xAxis
+        , const rtl::Reference<::chart::ChartModel>& xChartModel )
+{
+    try
+    {
+        //axis
+        if( xAxis.is() )
+        {
+            rtl::Reference< BaseCoordinateSystem > xCooSys( 
AxisHelper::getCoordinateSystemOfAxis( xAxis, ChartModelHelper::findDiagram( 
xChartModel ) ) );
+            OUString aCooSysParticle( createParticleForCoordinateSystem( 
xCooSys, xChartModel ) );
+            sal_Int32 nDimensionIndex=-1;
+            sal_Int32 nAxisIndex=-1;
+            AxisHelper::getIndicesForAxis( xAxis, xCooSys, nDimensionIndex, 
nAxisIndex );
+            OUString aAxisParticle( createParticleForAxis( nDimensionIndex, 
nAxisIndex ) );
+            return createClassifiedIdentifierForParticles( aCooSysParticle, 
aAxisParticle );
+        }
+    }
+    catch(const uno::Exception&)
+    {
+        DBG_UNHANDLED_EXCEPTION("chart2");
+    }
+
+    OSL_FAIL("give object could not be identified in 
createClassifiedIdentifierForObject");
+
+    return OUString();
+}
+
 OUString ObjectIdentifier::createClassifiedIdentifierForParticle(
         const OUString& rParticle )
 {
@@ -1108,10 +1137,10 @@ Reference< beans::XPropertySet > 
ObjectIdentifier::getObjectPropertySet(
                     sal_Int32 nAxisIndex = -1;
                     lcl_parseAxisIndices( nDimensionIndex, nAxisIndex, 
rObjectCID );
 
-                    Reference< chart2::XAxis > xAxis(
-                        AxisHelper::getAxis( nDimensionIndex, nAxisIndex, 
xCooSys ) );
+                    rtl::Reference< Axis > xAxis =
+                        AxisHelper::getAxis( nDimensionIndex, nAxisIndex, 
xCooSys );
                     if( xAxis.is() )
-                        xObjectProperties.set( xAxis, uno::UNO_QUERY );
+                        xObjectProperties = xAxis;
                 }
                 break;
             case OBJECTTYPE_AXIS_UNITLABEL:
@@ -1226,7 +1255,7 @@ Reference< beans::XPropertySet > 
ObjectIdentifier::getObjectPropertySet(
     return xObjectProperties;
 }
 
-Reference< XAxis > ObjectIdentifier::getAxisForCID(
+rtl::Reference< Axis > ObjectIdentifier::getAxisForCID(
                 const OUString& rObjectCID
                 , const rtl::Reference<::chart::ChartModel>& xChartModel )
 {
diff --git a/chart2/source/tools/ReferenceSizeProvider.cxx 
b/chart2/source/tools/ReferenceSizeProvider.cxx
index a8b35f008b5b..0b99582dde70 100644
--- a/chart2/source/tools/ReferenceSizeProvider.cxx
+++ b/chart2/source/tools/ReferenceSizeProvider.cxx
@@ -24,6 +24,7 @@
 #include <DataSeries.hxx>
 #include <DiagramHelper.hxx>
 #include <Diagram.hxx>
+#include <Axis.hxx>
 #include <AxisHelper.hxx>
 #include <com/sun/star/chart2/XChartDocument.hpp>
 #include <com/sun/star/chart2/XTitled.hpp>
@@ -245,19 +246,13 @@ ReferenceSizeProvider::AutoResizeState 
ReferenceSizeProvider::getAutoResizeState
         return eResult;
 
     // Axes (incl. Axis Titles)
-    const Sequence< Reference< XAxis > > aAxes( 
AxisHelper::getAllAxesOfDiagram( xDiagram ) );
-    for( Reference< XAxis > const & axis : aAxes )
+    const std::vector< rtl::Reference< Axis > > aAxes = 
AxisHelper::getAllAxesOfDiagram( xDiagram );
+    for( rtl::Reference< Axis > const & axis : aAxes )
     {
-        Reference< beans::XPropertySet > xProp( axis, uno::UNO_QUERY );
-        if( xProp.is())
-            getAutoResizeFromPropSet( xProp, eResult );
-        Reference< XTitled > xTitled( axis, uno::UNO_QUERY );
-        if( xTitled.is())
-        {
-            impl_getAutoResizeFromTitled( xTitled, eResult );
-            if( eResult == AUTO_RESIZE_AMBIGUOUS )
-                return eResult;
-        }
+        getAutoResizeFromPropSet( axis, eResult );
+        impl_getAutoResizeFromTitled( axis, eResult );
+        if( eResult == AUTO_RESIZE_AMBIGUOUS )
+            return eResult;
     }
 
     // DataSeries/Points
@@ -323,13 +318,11 @@ void ReferenceSizeProvider::setAutoResizeState( 
ReferenceSizeProvider::AutoResiz
         setValuesAtPropertySet( xLegendProp );
 
     // Axes (incl. Axis Titles)
-    const Sequence< Reference< XAxis > > aAxes( 
AxisHelper::getAllAxesOfDiagram( xDiagram ) );
-    for( Reference< XAxis > const & axis : aAxes )
+    const std::vector< rtl::Reference< Axis > > aAxes = 
AxisHelper::getAllAxesOfDiagram( xDiagram );
+    for( rtl::Reference< Axis > const & axis : aAxes )
     {
-        Reference< beans::XPropertySet > xProp( axis, uno::UNO_QUERY );
-        if( xProp.is())
-            setValuesAtPropertySet( xProp );
-        impl_setValuesAtTitled( Reference< XTitled >( axis, uno::UNO_QUERY ));
+        setValuesAtPropertySet( axis );
+        impl_setValuesAtTitled( axis );
     }
 
     // DataSeries/Points
diff --git a/chart2/source/tools/TitleHelper.cxx 
b/chart2/source/tools/TitleHelper.cxx
index 06ffe005d67f..58d4d6980aa6 100644
--- a/chart2/source/tools/TitleHelper.cxx
+++ b/chart2/source/tools/TitleHelper.cxx
@@ -20,6 +20,7 @@
 #include <TitleHelper.hxx>
 #include <ChartModel.hxx>
 #include <ChartModelHelper.hxx>
+#include <Axis.hxx>
 #include <AxisHelper.hxx>
 #include <DiagramHelper.hxx>
 #include <Diagram.hxx>
@@ -65,23 +66,23 @@ uno::Reference< XTitled > lcl_getTitleParentFromDiagram(
             break;
         case TitleHelper::X_AXIS_TITLE:
             if( xDiagram.is())
-                xResult.set( AxisHelper::getAxis( 0, true, xDiagram ), 
uno::UNO_QUERY );
+                xResult = AxisHelper::getAxis( 0, true, xDiagram );
             break;
         case TitleHelper::Y_AXIS_TITLE:

... etc. - the rest is truncated

Reply via email to