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.grandin@collabora.co.uk>
diff --git a/chart2/source/controller/chartapiwrapper/AxisWrapper.cxx b/chart2/source/controller/chartapiwrapper/AxisWrapper.cxx
index db3e413..21f9520 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 4895e1c..2f7181c 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 cdee656..d9c3648 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 0008d6e..fcb0eef 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 f16eb8f..583c711 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 69cc0ba..40dd061 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 b44d13f..a26cce3 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 1615c72d..aff808e 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 00defbc..ae33e37 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 b094833..58bac63 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 dd04d61..9c8e2f0 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 2e9e599..5eb195b 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 a7d0ff5..4e326eb3 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 58f17fb..0472cf2 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 2b6bc55..b222691 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 b85930a..7b5ce75 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 4e2480a..2cb10b8 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 2241c84..afb02c0 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 4c95fac..a84d798 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 16beacd..07712e9 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 3a83644..d5f81f3 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 5e52fbf..f4ce480 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 9bae79c..9507f37 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 bc02bf7..52ef7ff 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 60bcbd5..f160987 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 c2d7d36..8a23388 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 588b3fa..eff91f9 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>
@@ -68,12 +69,18 @@ ChartType::~ChartType()
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 902c54e..df4cb7d 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 971befd..8441215 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 1208283..4727a47 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 9b7ef05..46a3e57 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 63d46fe..1835abc 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 8f9b93c..52225c4 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>
@@ -102,6 +103,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 ) );
    if( aScale.AutoDateAxis && aScale.AxisType == AxisType::CATEGORY )
@@ -141,18 +149,28 @@ sal_Int32 AxisHelper::getExplicitNumberFormatKeyForAxis(
                , 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 );
            ScaleData aScale = xAxis->getScaleData();
            ScaleData aMainScale = xMainAxis->getScaleData();

            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;

                aScale.AxisType = aMainScale.AxisType;
                aScale.AutoDateAxis = aMainScale.AutoDateAxis;
                aScale.Categories = aMainScale.Categories;
                aScale.Orientation = aMainScale.Orientation;
                aScale.ShiftedCategoryPosition = aMainScale.ShiftedCategoryPosition;
            xAxis->setScaleData( aScale );

                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) );
            //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 )
{
@@ -1005,16 +1094,24 @@ 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;

    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 964f2f0..830a94d 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 a20c8bbd..c45bb92 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 b388ed0..9def633 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 6ac8102..a34c3a3 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 a8b35f0..0b99582 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 06ffe00..58d4d69 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:
            if( xDiagram.is())
                xResult.set( AxisHelper::getAxis( 1, true, xDiagram ), uno::UNO_QUERY );
                xResult = AxisHelper::getAxis( 1, true, xDiagram );
            break;
        case TitleHelper::Z_AXIS_TITLE:
            if( xDiagram.is())
                xResult.set( AxisHelper::getAxis( 2, true, xDiagram ), uno::UNO_QUERY );
                xResult = AxisHelper::getAxis( 2, true, xDiagram );
            break;
        case TitleHelper::SECONDARY_X_AXIS_TITLE:
            if( xDiagram.is())
                xResult.set( AxisHelper::getAxis( 0, false, xDiagram ), uno::UNO_QUERY );
                xResult = AxisHelper::getAxis( 0, false, xDiagram );
            break;
        case TitleHelper::SECONDARY_Y_AXIS_TITLE:
            if( xDiagram.is())
                xResult.set( AxisHelper::getAxis( 1, false, xDiagram ), uno::UNO_QUERY );
                xResult = AxisHelper::getAxis( 1, false, xDiagram );
            break;

        case TitleHelper::MAIN_TITLE:
@@ -203,7 +204,7 @@ uno::Reference< XTitle > TitleHelper::createTitle(
    if( !xTitled.is() )
    {
        rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( xModel ) );
        uno::Reference< chart2::XAxis > xAxis;
        rtl::Reference< Axis > xAxis;
        switch( eTitleType )
        {
            case TitleHelper::SECONDARY_X_AXIS_TITLE:
@@ -215,10 +216,9 @@ uno::Reference< XTitle > TitleHelper::createTitle(
            default:
               break;
        }
        uno::Reference< beans::XPropertySet > xProps( xAxis, uno::UNO_QUERY );
        if( xProps.is() )
        if( xAxis.is() )
        {
            xProps->setPropertyValue( "Show", uno::Any( false ) );
            xAxis->setPropertyValue( "Show", uno::Any( false ) );
            xTitled = lcl_getTitleParent( eTitleType, xModel );
        }
    }
diff --git a/chart2/source/view/axes/VCartesianCoordinateSystem.cxx b/chart2/source/view/axes/VCartesianCoordinateSystem.cxx
index 3f7f7ca..64d02eb 100644
--- a/chart2/source/view/axes/VCartesianCoordinateSystem.cxx
+++ b/chart2/source/view/axes/VCartesianCoordinateSystem.cxx
@@ -22,6 +22,7 @@
#include "VCartesianAxis.hxx"
#include <BaseCoordinateSystem.hxx>
#include <AxisIndexDefines.hxx>
#include <Axis.hxx>
#include <AxisHelper.hxx>
#include <cppuhelper/implbase.hxx>
#include <ChartModel.hxx>
@@ -79,7 +80,7 @@ void VCartesianCoordinateSystem::createGridShapes()
    for( sal_Int32 nDimensionIndex=0; nDimensionIndex<3; nDimensionIndex++)
    {
        sal_Int32 nAxisIndex = MAIN_AXIS_INDEX;
        Reference< XAxis > xAxis( AxisHelper::getAxis( nDimensionIndex, nAxisIndex, m_xCooSysModel ) );
        rtl::Reference< Axis > xAxis = AxisHelper::getAxis( nDimensionIndex, nAxisIndex, m_xCooSysModel );
        if(!xAxis.is() || !AxisHelper::shouldAxisBeDisplayed( xAxis, m_xCooSysModel ))
            continue;

@@ -126,7 +127,7 @@ void VCartesianCoordinateSystem::createVAxisList(
        sal_Int32 nMaxAxisIndex = m_xCooSysModel->getMaximumAxisIndexByDimension(nDimensionIndex);
        for( sal_Int32 nAxisIndex = 0; nAxisIndex <= nMaxAxisIndex; nAxisIndex++ )
        {
            Reference< XAxis > xAxis = getAxisByDimension(nDimensionIndex,nAxisIndex);
            rtl::Reference< Axis > xAxis = getAxisByDimension(nDimensionIndex,nAxisIndex);
            if(!xAxis.is() || !AxisHelper::shouldAxisBeDisplayed( xAxis, m_xCooSysModel ))
                continue;

diff --git a/chart2/source/view/axes/VCoordinateSystem.cxx b/chart2/source/view/axes/VCoordinateSystem.cxx
index 222383c..416112749 100644
--- a/chart2/source/view/axes/VCoordinateSystem.cxx
+++ b/chart2/source/view/axes/VCoordinateSystem.cxx
@@ -29,6 +29,7 @@
#include <servicenames_coosystems.hxx>
#include <ObjectIdentifier.hxx>
#include <ExplicitCategoriesProvider.hxx>
#include <Axis.hxx>
#include "VAxisBase.hxx"
#include <defines.hxx>
#include <chartview/ExplicitValueProvider.hxx>
@@ -185,10 +186,10 @@ uno::Sequence< sal_Int32 > VCoordinateSystem::getCoordinateSystemResolution(
    return aResolution;
}

Reference< XAxis > VCoordinateSystem::getAxisByDimension( sal_Int32 nDimensionIndex, sal_Int32 nAxisIndex ) const
rtl::Reference< Axis > VCoordinateSystem::getAxisByDimension( sal_Int32 nDimensionIndex, sal_Int32 nAxisIndex ) const
{
    if( m_xCooSysModel.is() )
        return m_xCooSysModel->getAxisByDimension( nDimensionIndex, nAxisIndex );
        return m_xCooSysModel->getAxisByDimension2( nDimensionIndex, nAxisIndex );
    return nullptr;
}

diff --git a/chart2/source/view/axes/VPolarCoordinateSystem.cxx b/chart2/source/view/axes/VPolarCoordinateSystem.cxx
index 2030455..1312b4f 100644
--- a/chart2/source/view/axes/VPolarCoordinateSystem.cxx
+++ b/chart2/source/view/axes/VPolarCoordinateSystem.cxx
@@ -22,6 +22,7 @@
#include "VPolarAxis.hxx"
#include <BaseCoordinateSystem.hxx>
#include <AxisIndexDefines.hxx>
#include <Axis.hxx>
#include <AxisHelper.hxx>
#include <ChartModel.hxx>
#include <com/sun/star/chart2/XCoordinateSystem.hpp>
@@ -87,7 +88,7 @@ void VPolarCoordinateSystem::createVAxisList(
        sal_Int32 nMaxAxisIndex = m_xCooSysModel->getMaximumAxisIndexByDimension(nDimensionIndex);
        for( sal_Int32 nAxisIndex = 0; nAxisIndex <= nMaxAxisIndex; nAxisIndex++ )
        {
            Reference< XAxis > xAxis( getAxisByDimension(nDimensionIndex,nAxisIndex) );
            rtl::Reference< Axis > xAxis = getAxisByDimension(nDimensionIndex,nAxisIndex);
            if(!xAxis.is() || !AxisHelper::shouldAxisBeDisplayed( xAxis, m_xCooSysModel ))
                continue;
            AxisProperties aAxisProperties(xAxis,getExplicitCategoriesProvider());
@@ -170,7 +171,7 @@ void VPolarCoordinateSystem::createGridShapes()
    {
        sal_Int32 nAxisIndex = MAIN_AXIS_INDEX;

        Reference< XAxis > xAxis( AxisHelper::getAxis( nDimensionIndex, nAxisIndex, m_xCooSysModel ) );
        rtl::Reference< Axis > xAxis = AxisHelper::getAxis( nDimensionIndex, nAxisIndex, m_xCooSysModel );
        if(!xAxis.is() || !AxisHelper::shouldAxisBeDisplayed( xAxis, m_xCooSysModel ))
            continue;

diff --git a/chart2/source/view/inc/VCoordinateSystem.hxx b/chart2/source/view/inc/VCoordinateSystem.hxx
index 24ebc03..22b5833 100644
--- a/chart2/source/view/inc/VCoordinateSystem.hxx
+++ b/chart2/source/view/inc/VCoordinateSystem.hxx
@@ -45,8 +45,8 @@ namespace com::sun::star::lang { class XMultiServiceFactory; }

namespace chart
{
class Axis;
class BaseCoordinateSystem;

class VAxisBase;

class VCoordinateSystem
@@ -141,7 +141,7 @@ public:
protected: //methods
    VCoordinateSystem( const rtl::Reference< ::chart::BaseCoordinateSystem >& xCooSys );

    css::uno::Reference< css::chart2::XAxis >
    rtl::Reference< ::chart::Axis >
        getAxisByDimension( sal_Int32 nDimensionIndex, sal_Int32 nAxisIndex  ) const;
    static css::uno::Sequence< css::uno::Reference< css::beans::XPropertySet > >
        getGridListFromAxis( const css::uno::Reference< css::chart2::XAxis >& xAxis );
diff --git a/chart2/source/view/main/ChartView.cxx b/chart2/source/view/main/ChartView.cxx
index fe27e7f..a0b09a8 100644
--- a/chart2/source/view/main/ChartView.cxx
+++ b/chart2/source/view/main/ChartView.cxx
@@ -45,6 +45,7 @@
#include <DiagramHelper.hxx>
#include <RelativePositionHelper.hxx>
#include <servicenames.hxx>
#include <Axis.hxx>
#include <AxisHelper.hxx>
#include <AxisIndexDefines.hxx>
#include <BaseGFXHelper.hxx>
@@ -343,7 +344,7 @@ private:
    /** A map whose key is a `XAxis` interface and the related value is
     *  an object of `AxisUsage` type.
     */
    std::map< uno::Reference< XAxis >, AxisUsage > m_aAxisUsageList;
    std::map< rtl::Reference< Axis >, AxisUsage > m_aAxisUsageList;

    /**
     * Max axis index of all dimensions.  Currently this can be either 0 or 1
@@ -485,7 +486,7 @@ void SeriesPlotterContainer::initializeCooSysAndSeriesPlotter(
        {
            if (xCooSys->getMaximumAxisIndexByDimension(1) > 0)
            {
                Reference< beans::XPropertySet > xAxisProp(xCooSys->getAxisByDimension(1, 1), uno::UNO_QUERY);
                rtl::Reference< Axis > xAxisProp = xCooSys->getAxisByDimension2(1, 1);
                xAxisProp->getPropertyValue("Show") >>= bSecondaryYaxisVisible;
            }
        }
@@ -647,7 +648,7 @@ void SeriesPlotterContainer::initAxisUsageList(const Date& rNullDate)
            const sal_Int32 nMaxAxisIndex = xCooSys->getMaximumAxisIndexByDimension(nDimIndex);
            for (sal_Int32 nAxisIndex = 0; nAxisIndex <= nMaxAxisIndex; ++nAxisIndex)
            {
                uno::Reference<XAxis> xAxis = xCooSys->getAxisByDimension(nDimIndex, nAxisIndex);
                rtl::Reference<Axis> xAxis = xCooSys->getAxisByDimension2(nDimIndex, nAxisIndex);

                if (!xAxis.is())
                    continue;
@@ -719,7 +720,7 @@ void SeriesPlotterContainer::setNumberFormatsFromAxes()
        if(pVCooSys)
        {
            AxesNumberFormats aAxesNumberFormats;
            const uno::Reference< XCoordinateSystem >& xCooSys = pVCooSys->getModel();
            const rtl::Reference< BaseCoordinateSystem >& xCooSys = pVCooSys->getModel();
            sal_Int32 nDimensionCount = xCooSys->getDimension();
            for(sal_Int32 nDimensionIndex=0; nDimensionIndex<nDimensionCount; ++nDimensionIndex)
            {
@@ -728,7 +729,7 @@ void SeriesPlotterContainer::setNumberFormatsFromAxes()
                {
                    try
                    {
                        Reference< beans::XPropertySet > xAxisProp( xCooSys->getAxisByDimension( nDimensionIndex, nAxisIndex ), uno::UNO_QUERY );
                        rtl::Reference< Axis > xAxisProp = xCooSys->getAxisByDimension2( nDimensionIndex, nAxisIndex );
                        if( xAxisProp.is())
                        {
                            sal_Int32 nNumberFormatKey(0);
@@ -915,8 +916,8 @@ void SeriesPlotterContainer::AdaptScaleOfYAxisWithoutAttachedSeries( ChartModel&
            ExplicitIncrementData aExplicitIncrement( aVCooSysList[nC]->getExplicitIncrement( nDimensionIndex, nAxisIndex ) );

            rtl::Reference< BaseCoordinateSystem > xCooSys( aVCooSysList[nC]->getModel() );
            Reference< XAxis > xAxis( xCooSys->getAxisByDimension( nDimensionIndex, nAxisIndex ) );
            Reference< beans::XPropertySet > xCrossingMainAxis( AxisHelper::getCrossingMainAxis( xAxis, xCooSys ), uno::UNO_QUERY );
            rtl::Reference< Axis > xAxis = xCooSys->getAxisByDimension2( nDimensionIndex, nAxisIndex );
            rtl::Reference< Axis > xCrossingMainAxis = AxisHelper::getCrossingMainAxis( xAxis, xCooSys );

            if( xCrossingMainAxis.is() )
            {
diff --git a/solenv/clang-format/excludelist b/solenv/clang-format/excludelist
index 6033d55..d68935f 100644
--- a/solenv/clang-format/excludelist
+++ b/solenv/clang-format/excludelist
@@ -1007,6 +1007,7 @@ chart2/source/controller/sidebar/ChartSeriesPanel.cxx
chart2/source/controller/sidebar/ChartSeriesPanel.hxx
chart2/source/controller/sidebar/ChartSidebarSelectionListener.cxx
chart2/source/controller/uitest/uiobject.cxx
chart2/source/inc/Axis.hxx
chart2/source/inc/AxisHelper.hxx
chart2/source/inc/BaseGFXHelper.hxx
chart2/source/inc/BaseCoordinateSystem.hxx
@@ -1084,7 +1085,6 @@ chart2/source/model/filter/XMLFilter.cxx
chart2/source/model/inc/StockBar.hxx
chart2/source/model/inc/XMLFilter.hxx
chart2/source/model/main/Axis.cxx
chart2/source/model/main/Axis.hxx
chart2/source/model/main/BaseCoordinateSystem.cxx
chart2/source/model/main/CartesianCoordinateSystem.cxx
chart2/source/model/main/ChartModel.cxx