From 8fcab2766aadd3ff99ef1e5cef660abc65dac540 Mon Sep 17 00:00:00 2001
From: Joachim Wuttke <j.wuttke@fz-juelich.de>
Date: Wed, 10 Jul 2024 19:02:37 +0200
Subject: [PATCH] provide and use XML::writeTaggedValue

---
 GUI/Model/Axis/AmplitudeAxisItem.cpp    | 16 ++----
 GUI/Model/Axis/BasicAxisItem.cpp        | 12 +---
 GUI/Model/Beam/DistributionItems.cpp    |  4 +-
 GUI/Model/Beam/GrazingScanItem.cpp      |  4 +-
 GUI/Model/Beam/SourceItems.cpp          |  8 +--
 GUI/Model/Data/Data1DItem.cpp           | 20 ++-----
 GUI/Model/Data/Data2DItem.cpp           |  4 +-
 GUI/Model/Data/DataItem.cpp             |  4 +-
 GUI/Model/Descriptor/AxisProperty.cpp   |  4 +-
 GUI/Model/Detector/DetectorItem.cpp     |  4 +-
 GUI/Model/File/DatafileItem.cpp         |  4 +-
 GUI/Model/File/DatafilesSet.cpp         |  4 +-
 GUI/Model/Job/BatchInfo.cpp             | 28 +++------
 GUI/Model/Job/JobItem.cpp               |  4 +-
 GUI/Model/Job/JobsSet.cpp               |  4 +-
 GUI/Model/Mask/MaskItems.cpp            | 12 +---
 GUI/Model/Material/MaterialItem.cpp     | 16 ++----
 GUI/Model/Mini/MinimizerItems.cpp       | 76 +++++++------------------
 GUI/Model/Par/ParameterBackup.cpp       |  4 +-
 GUI/Model/Par/ParameterTreeItems.cpp    |  4 +-
 GUI/Model/Sample/CompoundItem.cpp       |  4 +-
 GUI/Model/Sample/CoreAndShellItem.cpp   | 12 +---
 GUI/Model/Sample/InterferenceItems.cpp  | 12 +---
 GUI/Model/Sample/ItemWithMaterial.cpp   |  4 +-
 GUI/Model/Sample/LayerItem.cpp          | 12 +---
 GUI/Model/Sample/MesocrystalItem.cpp    |  4 +-
 GUI/Model/Sample/ParticleItem.cpp       |  4 +-
 GUI/Model/Sample/ParticleLayoutItem.cpp |  8 +--
 GUI/Model/Sample/SampleItem.cpp         | 12 +---
 GUI/Model/Sample/SamplesSet.cpp         |  4 +-
 GUI/Model/Sim/InstrumentItems.cpp       | 36 +++---------
 GUI/Model/Sim/InstrumentsSet.cpp        |  4 +-
 GUI/Model/Sim/SimulationOptionsItem.cpp | 36 +++---------
 GUI/Model/Tune/FitParameterItem.cpp     | 12 +---
 GUI/Model/Tune/FitParameterLinkItem.cpp |  8 +--
 GUI/Model/Tune/FitSuiteItem.cpp         | 12 +---
 GUI/Model/Util/UtilXML.h                |  6 +-
 37 files changed, 107 insertions(+), 319 deletions(-)

diff --git a/GUI/Model/Axis/AmplitudeAxisItem.cpp b/GUI/Model/Axis/AmplitudeAxisItem.cpp
index 4092ed702a0..6d41320f674 100644
--- a/GUI/Model/Axis/AmplitudeAxisItem.cpp
+++ b/GUI/Model/Axis/AmplitudeAxisItem.cpp
@@ -46,18 +46,10 @@ void AmplitudeAxisItem::writeTo(QXmlStreamWriter* w) const
     w->writeStartElement(Tag::BaseData);
     BasicAxisItem::writeTo(w);
     w->writeEndElement();
-    w->writeStartElement(Tag::LockMinMax);
-    XML::writeAttribute(w, XML::Attrib::value, m_lock_min_max);
-    w->writeEndElement();
-    w->writeStartElement(Tag::LogScale);
-    XML::writeAttribute(w, XML::Attrib::value, m_log_scale);
-    w->writeEndElement();
-    w->writeStartElement(Tag::LogRangeOrders);
-    XML::writeAttribute(w, XML::Attrib::value, m_log_range_orders);
-    w->writeEndElement();
-    w->writeStartElement(Tag::IsVisible);
-    XML::writeAttribute(w, XML::Attrib::value, m_visible);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::LockMinMax, m_lock_min_max);
+    XML::writeTaggedValue(w, Tag::LogScale, m_log_scale);
+    XML::writeTaggedValue(w, Tag::LogRangeOrders, m_log_range_orders);
+    XML::writeTaggedValue(w, Tag::IsVisible, m_visible);
 }
 
 void AmplitudeAxisItem::readFrom(QXmlStreamReader* r)
diff --git a/GUI/Model/Axis/BasicAxisItem.cpp b/GUI/Model/Axis/BasicAxisItem.cpp
index edd5635f04c..f83cb09653b 100644
--- a/GUI/Model/Axis/BasicAxisItem.cpp
+++ b/GUI/Model/Axis/BasicAxisItem.cpp
@@ -66,15 +66,9 @@ Scale BasicAxisItem::makeScale(std::string name) const
 void BasicAxisItem::writeTo(QXmlStreamWriter* w) const
 {
     XML::writeAttribute(w, XML::Attrib::version, uint(1));
-    w->writeStartElement(Tag::Nbins);
-    XML::writeAttribute(w, XML::Attrib::value, m_nbins);
-    w->writeEndElement();
-    w->writeStartElement(Tag::MinDeg);
-    XML::writeAttribute(w, XML::Attrib::value, m_min);
-    w->writeEndElement();
-    w->writeStartElement(Tag::MaxDeg);
-    XML::writeAttribute(w, XML::Attrib::value, m_max);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::Nbins, m_nbins);
+    XML::writeTaggedValue(w, Tag::MinDeg, m_min);
+    XML::writeTaggedValue(w, Tag::MaxDeg, m_max);
 }
 
 void BasicAxisItem::readFrom(QXmlStreamReader* r)
diff --git a/GUI/Model/Beam/DistributionItems.cpp b/GUI/Model/Beam/DistributionItems.cpp
index 3050a85072d..d4aa7f94278 100644
--- a/GUI/Model/Beam/DistributionItems.cpp
+++ b/GUI/Model/Beam/DistributionItems.cpp
@@ -47,9 +47,7 @@ DistributionItem::DistributionItem()
 void DistributionItem::writeTo(QXmlStreamWriter* w) const
 {
     XML::writeAttribute(w, XML::Attrib::version, uint(1));
-    w->writeStartElement(Tag::NumberOfSamples);
-    XML::writeAttribute(w, XML::Attrib::value, m_number_of_samples);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::NumberOfSamples, m_number_of_samples);
 
     // relative sampling width
     m_rel_sampling_width.writeTo2(w, Tag::RelSamplingWidth);
diff --git a/GUI/Model/Beam/GrazingScanItem.cpp b/GUI/Model/Beam/GrazingScanItem.cpp
index 579f834540b..24cd81292ba 100644
--- a/GUI/Model/Beam/GrazingScanItem.cpp
+++ b/GUI/Model/Beam/GrazingScanItem.cpp
@@ -82,9 +82,7 @@ void GrazingScanItem::writeTo(QXmlStreamWriter* w) const
     w->writeStartElement(Tag::BaseData);
     BeamDistributionItem::writeTo(w);
     w->writeEndElement();
-    w->writeStartElement(Tag::IsUniformAxis);
-    XML::writeAttribute(w, XML::Attrib::value, m_current_axis_is_uniform_axis);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::IsUniformAxis, m_current_axis_is_uniform_axis);
 
     // uniform axis
     if (m_uniform_alpha_axis) {
diff --git a/GUI/Model/Beam/SourceItems.cpp b/GUI/Model/Beam/SourceItems.cpp
index 0d4f21ea5d7..1ce8307fdf5 100644
--- a/GUI/Model/Beam/SourceItems.cpp
+++ b/GUI/Model/Beam/SourceItems.cpp
@@ -71,15 +71,11 @@ void SourceItem::writeTo(QXmlStreamWriter* w) const
     w->writeStartElement(Tag::AzimuthalAngle);
     m_azimuthal_angle_item->writeTo(w);
     w->writeEndElement();
-    w->writeStartElement(Tag::ExpandBeamParametersGroupbox);
-    XML::writeAttribute(w, XML::Attrib::value, expandBeamParameters);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::ExpandBeamParametersGroupbox, expandBeamParameters);
     w->writeStartElement(Tag::Footprint);
     m_footprint.writeTo(w);
     w->writeEndElement();
-    w->writeStartElement(Tag::ExpandFootprintGroupbox);
-    XML::writeAttribute(w, XML::Attrib::value, expandFootprint);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::ExpandFootprintGroupbox, expandFootprint);
 }
 
 void SourceItem::readFrom(QXmlStreamReader* r)
diff --git a/GUI/Model/Data/Data1DItem.cpp b/GUI/Model/Data/Data1DItem.cpp
index 590e950b238..b7b4471cab8 100644
--- a/GUI/Model/Data/Data1DItem.cpp
+++ b/GUI/Model/Data/Data1DItem.cpp
@@ -168,21 +168,11 @@ void Data1DItem::writeTo(QXmlStreamWriter* w) const
     w->writeStartElement(Tag::BaseData);
     DataItem::writeBaseTo(w);
     w->writeEndElement();
-    w->writeStartElement(Tag::LineType);
-    XML::writeAttribute(w, XML::Attrib::value, m_line_type);
-    w->writeEndElement();
-    w->writeStartElement(Tag::Color);
-    XML::writeAttribute(w, XML::Attrib::value, m_color.name(QColor::HexArgb));
-    w->writeEndElement();
-    w->writeStartElement(Tag::Thickness);
-    XML::writeAttribute(w, XML::Attrib::value, m_thickness);
-    w->writeEndElement();
-    w->writeStartElement(Tag::ScatterType);
-    XML::writeAttribute(w, XML::Attrib::value, m_scatter_type);
-    w->writeEndElement();
-    w->writeStartElement(Tag::ScatterSize);
-    XML::writeAttribute(w, XML::Attrib::value, m_scatter_size);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::LineType, m_line_type);
+    XML::writeTaggedValue(w, Tag::Color, m_color.name(QColor::HexArgb));
+    XML::writeTaggedValue(w, Tag::Thickness, m_thickness);
+    XML::writeTaggedValue(w, Tag::ScatterType, m_scatter_type);
+    XML::writeTaggedValue(w, Tag::ScatterSize, m_scatter_size);
 }
 
 void Data1DItem::readFrom(QXmlStreamReader* r)
diff --git a/GUI/Model/Data/Data2DItem.cpp b/GUI/Model/Data/Data2DItem.cpp
index 03118cffc75..8812a14c4f1 100644
--- a/GUI/Model/Data/Data2DItem.cpp
+++ b/GUI/Model/Data/Data2DItem.cpp
@@ -217,9 +217,7 @@ void Data2DItem::writeTo(QXmlStreamWriter* w) const
     w->writeStartElement(Tag::BaseData);
     DataItem::writeBaseTo(w);
     w->writeEndElement();
-    w->writeStartElement(Tag::Interpolation);
-    XML::writeAttribute(w, XML::Attrib::value, m_is_interpolated);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::Interpolation, m_is_interpolated);
     w->writeStartElement(Tag::ZAxis);
     m_z_axis->writeTo(w);
     w->writeEndElement();
diff --git a/GUI/Model/Data/DataItem.cpp b/GUI/Model/Data/DataItem.cpp
index aab1c96fa1f..fdaa4c2999e 100644
--- a/GUI/Model/Data/DataItem.cpp
+++ b/GUI/Model/Data/DataItem.cpp
@@ -216,9 +216,7 @@ QString DataItem::yAxisLabel() const
 void DataItem::writeBaseTo(QXmlStreamWriter* w) const
 {
     XML::writeAttribute(w, XML::Attrib::version, uint(3));
-    w->writeStartElement(Tag::FileName);
-    XML::writeAttribute(w, XML::Attrib::value, m_fname);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::FileName, m_fname);
     w->writeStartElement(Tag::XAxis);
     m_x_axis->writeTo(w);
     w->writeEndElement();
diff --git a/GUI/Model/Descriptor/AxisProperty.cpp b/GUI/Model/Descriptor/AxisProperty.cpp
index a72f7aa09b1..413c8a830aa 100644
--- a/GUI/Model/Descriptor/AxisProperty.cpp
+++ b/GUI/Model/Descriptor/AxisProperty.cpp
@@ -52,9 +52,7 @@ void AxisProperty::initMax(const QString& label, const QString& tooltip, double
 void AxisProperty::writeTo(QXmlStreamWriter* w) const
 {
     XML::writeAttribute(w, XML::Attrib::version, uint(2));
-    w->writeStartElement(Tag::Nbins);
-    XML::writeAttribute(w, XML::Attrib::value, m_nbins);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::Nbins, m_nbins);
 
     // min
     m_min.writeTo2(w, Tag::Min);
diff --git a/GUI/Model/Detector/DetectorItem.cpp b/GUI/Model/Detector/DetectorItem.cpp
index 17f703dc2eb..675dd7c946f 100644
--- a/GUI/Model/Detector/DetectorItem.cpp
+++ b/GUI/Model/Detector/DetectorItem.cpp
@@ -98,9 +98,7 @@ void DetectorItem::writeTo(QXmlStreamWriter* w) const
     w->writeStartElement(Tag::ResolutionFunction);
     m_resolution_function.writeTo(w);
     w->writeEndElement();
-    w->writeStartElement(Tag::ExpandResolutionFuncGroupbox);
-    XML::writeAttribute(w, XML::Attrib::value, expandResolutionFunc);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::ExpandResolutionFuncGroupbox, expandResolutionFunc);
     w->writeStartElement(Tag::MaskContainer);
     m_masks->writeTo(w);
     w->writeEndElement();
diff --git a/GUI/Model/File/DatafileItem.cpp b/GUI/Model/File/DatafileItem.cpp
index 5e53414e9bc..87fdb79c767 100644
--- a/GUI/Model/File/DatafileItem.cpp
+++ b/GUI/Model/File/DatafileItem.cpp
@@ -137,9 +137,7 @@ void DatafileItem::updateFileName()
 void DatafileItem::writeTo(QXmlStreamWriter* w) const
 {
     XML::writeAttribute(w, XML::Attrib::version, uint(2));
-    w->writeStartElement(Tag::Name);
-    XML::writeAttribute(w, XML::Attrib::value, name());
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::Name, name());
 
     // data
     if (m_data_item) {
diff --git a/GUI/Model/File/DatafilesSet.cpp b/GUI/Model/File/DatafilesSet.cpp
index 601abbfc5ae..4164446406f 100644
--- a/GUI/Model/File/DatafilesSet.cpp
+++ b/GUI/Model/File/DatafilesSet.cpp
@@ -39,9 +39,7 @@ void DatafilesSet::writeTo(QXmlStreamWriter* w) const
         dfi->writeTo(w);
         w->writeEndElement();
     }
-    w->writeStartElement(Tag::CurrentIndex);
-    XML::writeAttribute(w, XML::Attrib::value, currentIndex());
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::CurrentIndex, currentIndex());
 }
 
 void DatafilesSet::readFrom(QXmlStreamReader* r)
diff --git a/GUI/Model/Job/BatchInfo.cpp b/GUI/Model/Job/BatchInfo.cpp
index 71c2af62f10..94eefd6c8f5 100644
--- a/GUI/Model/Job/BatchInfo.cpp
+++ b/GUI/Model/Job/BatchInfo.cpp
@@ -84,27 +84,13 @@ void BatchInfo::setStatus(JobStatus status)
 void BatchInfo::writeTo(QXmlStreamWriter* w) const
 {
     XML::writeAttribute(w, XML::Attrib::version, uint(2));
-    w->writeStartElement(Tag::Name);
-    XML::writeAttribute(w, XML::Attrib::value, m_name);
-    w->writeEndElement();
-    w->writeStartElement(Tag::Identifier);
-    XML::writeAttribute(w, XML::Attrib::value, m_identifier);
-    w->writeEndElement();
-    w->writeStartElement(Tag::BeginTime);
-    XML::writeAttribute(w, XML::Attrib::value, m_begin_time.toString(Qt::ISODateWithMs));
-    w->writeEndElement();
-    w->writeStartElement(Tag::EndTime);
-    XML::writeAttribute(w, XML::Attrib::value, m_end_time.toString(Qt::ISODateWithMs));
-    w->writeEndElement();
-    w->writeStartElement(Tag::Progress);
-    XML::writeAttribute(w, XML::Attrib::value, m_progress);
-    w->writeEndElement();
-    w->writeStartElement(Tag::Comments);
-    XML::writeAttribute(w, XML::Attrib::value, m_comments);
-    w->writeEndElement();
-    w->writeStartElement(Tag::Status);
-    XML::writeAttribute(w, XML::Attrib::value, jobStatusToString(m_status));
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::Name, m_name);
+    XML::writeTaggedValue(w, Tag::Identifier, m_identifier);
+    XML::writeTaggedValue(w, Tag::BeginTime, m_begin_time.toString(Qt::ISODateWithMs));
+    XML::writeTaggedValue(w, Tag::EndTime, m_end_time.toString(Qt::ISODateWithMs));
+    XML::writeTaggedValue(w, Tag::Progress, m_progress);
+    XML::writeTaggedValue(w, Tag::Comments, m_comments);
+    XML::writeTaggedValue(w, Tag::Status, jobStatusToString(m_status));
 }
 
 void BatchInfo::readFrom(QXmlStreamReader* r)
diff --git a/GUI/Model/Job/JobItem.cpp b/GUI/Model/Job/JobItem.cpp
index c3617242498..5b752457c44 100644
--- a/GUI/Model/Job/JobItem.cpp
+++ b/GUI/Model/Job/JobItem.cpp
@@ -223,9 +223,7 @@ void JobItem::writeTo(QXmlStreamWriter* w) const
     w->writeStartElement(Tag::BatchInfo);
     m_batch_info->writeTo(w);
     w->writeEndElement();
-    w->writeStartElement(Tag::Activity);
-    XML::writeAttribute(w, XML::Attrib::value, m_activity);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::Activity, m_activity);
 
     // simulated data
     if (m_simulated_data_item) {
diff --git a/GUI/Model/Job/JobsSet.cpp b/GUI/Model/Job/JobsSet.cpp
index ee3f77a6fc2..b28d33ba9bf 100644
--- a/GUI/Model/Job/JobsSet.cpp
+++ b/GUI/Model/Job/JobsSet.cpp
@@ -47,9 +47,7 @@ void JobsSet::writeTo(QXmlStreamWriter* w) const
         job->writeTo(w);
         w->writeEndElement();
     }
-    w->writeStartElement(Tag::CurrentIndex);
-    XML::writeAttribute(w, XML::Attrib::value, currentIndex());
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::CurrentIndex, currentIndex());
 }
 
 void JobsSet::readFrom(QXmlStreamReader* r)
diff --git a/GUI/Model/Mask/MaskItems.cpp b/GUI/Model/Mask/MaskItems.cpp
index 9b0194a60c0..f3232e6d916 100644
--- a/GUI/Model/Mask/MaskItems.cpp
+++ b/GUI/Model/Mask/MaskItems.cpp
@@ -66,15 +66,9 @@ void MaskItem::setIsVisible(bool visible)
 void MaskItem::writeTo(QXmlStreamWriter* w) const
 {
     XML::writeAttribute(w, XML::Attrib::version, uint(1));
-    w->writeStartElement(Tag::Name);
-    XML::writeAttribute(w, XML::Attrib::value, name());
-    w->writeEndElement();
-    w->writeStartElement(Tag::MaskValue);
-    XML::writeAttribute(w, XML::Attrib::value, m_mask_value);
-    w->writeEndElement();
-    w->writeStartElement(Tag::IsVisible);
-    XML::writeAttribute(w, XML::Attrib::value, m_is_visible);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::Name, name());
+    XML::writeTaggedValue(w, Tag::MaskValue, m_mask_value);
+    XML::writeTaggedValue(w, Tag::IsVisible, m_is_visible);
 }
 
 void MaskItem::readFrom(QXmlStreamReader* r)
diff --git a/GUI/Model/Material/MaterialItem.cpp b/GUI/Model/Material/MaterialItem.cpp
index 69052800b22..d1ac7b8da24 100644
--- a/GUI/Model/Material/MaterialItem.cpp
+++ b/GUI/Model/Material/MaterialItem.cpp
@@ -134,21 +134,13 @@ std::unique_ptr<Material> MaterialItem::createMaterial() const
 void MaterialItem::writeTo(QXmlStreamWriter* w) const
 {
     XML::writeAttribute(w, XML::Attrib::version, uint(1));
-    w->writeStartElement(Tag::Name);
-    XML::writeAttribute(w, XML::Attrib::value, m_name);
-    w->writeEndElement();
-    w->writeStartElement(Tag::Id);
-    XML::writeAttribute(w, XML::Attrib::value, m_id);
-    w->writeEndElement();
-    w->writeStartElement(Tag::Color);
-    XML::writeAttribute(w, XML::Attrib::value, m_color);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::Name, m_name);
+    XML::writeTaggedValue(w, Tag::Id, m_id);
+    XML::writeTaggedValue(w, Tag::Color, m_color);
     w->writeStartElement(Tag::Magnetization);
     m_magnetization.writeTo(w);
     w->writeEndElement();
-    w->writeStartElement(Tag::UseRefractiveIndex);
-    XML::writeAttribute(w, XML::Attrib::value, m_use_refractive_index);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::UseRefractiveIndex, m_use_refractive_index);
 
     if (m_use_refractive_index) {
         // delta
diff --git a/GUI/Model/Mini/MinimizerItems.cpp b/GUI/Model/Mini/MinimizerItems.cpp
index 50bf08aa465..f56d9e40ed2 100644
--- a/GUI/Model/Mini/MinimizerItems.cpp
+++ b/GUI/Model/Mini/MinimizerItems.cpp
@@ -420,21 +420,11 @@ void MinuitMinimizerItem::writeTo(QXmlStreamWriter* w) const
     w->writeStartElement(Tag::Algorithm);
     m_algorithm.writeTo(w);
     w->writeEndElement();
-    w->writeStartElement(Tag::Strategy);
-    XML::writeAttribute(w, XML::Attrib::value, m_strategy);
-    w->writeEndElement();
-    w->writeStartElement(Tag::ErrorDef);
-    XML::writeAttribute(w, XML::Attrib::value, m_error_def);
-    w->writeEndElement();
-    w->writeStartElement(Tag::Tolerance);
-    XML::writeAttribute(w, XML::Attrib::value, m_tolerance);
-    w->writeEndElement();
-    w->writeStartElement(Tag::Precision);
-    XML::writeAttribute(w, XML::Attrib::value, m_precision);
-    w->writeEndElement();
-    w->writeStartElement(Tag::MaxFuncCalls);
-    XML::writeAttribute(w, XML::Attrib::value, m_max_func_calls);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::Strategy, m_strategy);
+    XML::writeTaggedValue(w, Tag::ErrorDef, m_error_def);
+    XML::writeTaggedValue(w, Tag::Tolerance, m_tolerance);
+    XML::writeTaggedValue(w, Tag::Precision, m_precision);
+    XML::writeTaggedValue(w, Tag::MaxFuncCalls, m_max_func_calls);
 }
 
 void MinuitMinimizerItem::readFrom(QXmlStreamReader* r)
@@ -507,9 +497,7 @@ void GSLMultiMinimizerItem::writeTo(QXmlStreamWriter* w) const
     w->writeStartElement(Tag::Algorithm);
     m_algorithm.writeTo(w);
     w->writeEndElement();
-    w->writeStartElement(Tag::MaxIterations);
-    XML::writeAttribute(w, XML::Attrib::value, m_max_iterations);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::MaxIterations, m_max_iterations);
 }
 
 void GSLMultiMinimizerItem::readFrom(QXmlStreamReader* r)
@@ -573,18 +561,10 @@ std::unique_ptr<IMinimizer> GeneticMinimizerItem::createMinimizer() const
 void GeneticMinimizerItem::writeTo(QXmlStreamWriter* w) const
 {
     XML::writeAttribute(w, XML::Attrib::version, uint(1));
-    w->writeStartElement(Tag::Tolerance);
-    XML::writeAttribute(w, XML::Attrib::value, m_tolerance);
-    w->writeEndElement();
-    w->writeStartElement(Tag::MaxIterations);
-    XML::writeAttribute(w, XML::Attrib::value, m_max_iterations);
-    w->writeEndElement();
-    w->writeStartElement(Tag::PopulationSize);
-    XML::writeAttribute(w, XML::Attrib::value, m_population_size);
-    w->writeEndElement();
-    w->writeStartElement(Tag::RandomSeed);
-    XML::writeAttribute(w, XML::Attrib::value, m_random_seed);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::Tolerance, m_tolerance);
+    XML::writeTaggedValue(w, Tag::MaxIterations, m_max_iterations);
+    XML::writeTaggedValue(w, Tag::PopulationSize, m_population_size);
+    XML::writeTaggedValue(w, Tag::RandomSeed, m_random_seed);
 }
 
 void GeneticMinimizerItem::readFrom(QXmlStreamReader* r)
@@ -672,27 +652,13 @@ std::unique_ptr<IMinimizer> SimAnMinimizerItem::createMinimizer() const
 void SimAnMinimizerItem::writeTo(QXmlStreamWriter* w) const
 {
     XML::writeAttribute(w, XML::Attrib::version, uint(1));
-    w->writeStartElement(Tag::MaxIterations);
-    XML::writeAttribute(w, XML::Attrib::value, m_max_iterations);
-    w->writeEndElement();
-    w->writeStartElement(Tag::IterationsAtTemp);
-    XML::writeAttribute(w, XML::Attrib::value, m_iterations_at_temp);
-    w->writeEndElement();
-    w->writeStartElement(Tag::StepSize);
-    XML::writeAttribute(w, XML::Attrib::value, m_step_size);
-    w->writeEndElement();
-    w->writeStartElement(Tag::BoltzmannK);
-    XML::writeAttribute(w, XML::Attrib::value, m_boltzmann_K);
-    w->writeEndElement();
-    w->writeStartElement(Tag::Tinit);
-    XML::writeAttribute(w, XML::Attrib::value, m_boltzmann_T_init);
-    w->writeEndElement();
-    w->writeStartElement(Tag::BoltzmannMu);
-    XML::writeAttribute(w, XML::Attrib::value, m_boltzmann__mu);
-    w->writeEndElement();
-    w->writeStartElement(Tag::Tmin);
-    XML::writeAttribute(w, XML::Attrib::value, m_boltzmann_T_min);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::MaxIterations, m_max_iterations);
+    XML::writeTaggedValue(w, Tag::IterationsAtTemp, m_iterations_at_temp);
+    XML::writeTaggedValue(w, Tag::StepSize, m_step_size);
+    XML::writeTaggedValue(w, Tag::BoltzmannK, m_boltzmann_K);
+    XML::writeTaggedValue(w, Tag::Tinit, m_boltzmann_T_init);
+    XML::writeTaggedValue(w, Tag::BoltzmannMu, m_boltzmann__mu);
+    XML::writeTaggedValue(w, Tag::Tmin, m_boltzmann_T_min);
 }
 
 void SimAnMinimizerItem::readFrom(QXmlStreamReader* r)
@@ -759,12 +725,8 @@ std::unique_ptr<IMinimizer> GSLLMAMinimizerItem::createMinimizer() const
 void GSLLMAMinimizerItem::writeTo(QXmlStreamWriter* w) const
 {
     XML::writeAttribute(w, XML::Attrib::version, uint(1));
-    w->writeStartElement(Tag::Tolerance);
-    XML::writeAttribute(w, XML::Attrib::value, m_tolerance);
-    w->writeEndElement();
-    w->writeStartElement(Tag::MaxIterations);
-    XML::writeAttribute(w, XML::Attrib::value, m_max_iterations);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::Tolerance, m_tolerance);
+    XML::writeTaggedValue(w, Tag::MaxIterations, m_max_iterations);
 }
 
 void GSLLMAMinimizerItem::readFrom(QXmlStreamReader* r)
diff --git a/GUI/Model/Par/ParameterBackup.cpp b/GUI/Model/Par/ParameterBackup.cpp
index 4aa095197b6..7f0039b685a 100644
--- a/GUI/Model/Par/ParameterBackup.cpp
+++ b/GUI/Model/Par/ParameterBackup.cpp
@@ -49,9 +49,7 @@ bool ParameterBackup::contains(const QString& link)
 void ParameterBackup::writeTo(QXmlStreamWriter* w) const
 {
     XML::writeAttribute(w, XML::Attrib::version, uint(1));
-    w->writeStartElement(Tag::Title);
-    XML::writeAttribute(w, XML::Attrib::value, m_title);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::Title, m_title);
     w->writeStartElement(Tag::BackupValues);
     for (auto v = m_backup_values.cbegin(); v != m_backup_values.cend(); v++) {
         w->writeEmptyElement(Tag::BackupValue);
diff --git a/GUI/Model/Par/ParameterTreeItems.cpp b/GUI/Model/Par/ParameterTreeItems.cpp
index 551855999f1..89d6c12f6d2 100644
--- a/GUI/Model/Par/ParameterTreeItems.cpp
+++ b/GUI/Model/Par/ParameterTreeItems.cpp
@@ -154,9 +154,7 @@ ParameterContainerItem::ParameterContainerItem()
 void ParameterContainerItem::writeTo(QXmlStreamWriter* w) const
 {
     XML::writeAttribute(w, XML::Attrib::version, uint(2));
-    w->writeStartElement(Tag::CurrentIndex);
-    XML::writeAttribute(w, XML::Attrib::value, m_current_index);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::CurrentIndex, m_current_index);
     w->writeStartElement(Tag::Backups);
     for (const auto& backup : m_backup_values) {
         w->writeStartElement(Tag::Backup);
diff --git a/GUI/Model/Sample/CompoundItem.cpp b/GUI/Model/Sample/CompoundItem.cpp
index 4b2e22c9df5..3c03447d144 100644
--- a/GUI/Model/Sample/CompoundItem.cpp
+++ b/GUI/Model/Sample/CompoundItem.cpp
@@ -73,9 +73,7 @@ void CompoundItem::writeTo(QXmlStreamWriter* w) const
         PolyItem<ParticlesCatalog>::writeItemTo(t, w);
         w->writeEndElement();
     }
-    w->writeStartElement(Tag::ExpandCompoundGroupbox);
-    XML::writeAttribute(w, XML::Attrib::value, expandCompound);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::ExpandCompoundGroupbox, expandCompound);
 }
 
 void CompoundItem::readFrom(QXmlStreamReader* r)
diff --git a/GUI/Model/Sample/CoreAndShellItem.cpp b/GUI/Model/Sample/CoreAndShellItem.cpp
index a173e7ae285..0b34c617a58 100644
--- a/GUI/Model/Sample/CoreAndShellItem.cpp
+++ b/GUI/Model/Sample/CoreAndShellItem.cpp
@@ -67,15 +67,9 @@ void CoreAndShellItem::writeTo(QXmlStreamWriter* w) const
         m_shell->writeTo(w);
         w->writeEndElement();
     }
-    w->writeStartElement(Tag::ExpandMainGroupbox);
-    XML::writeAttribute(w, XML::Attrib::value, expandMain);
-    w->writeEndElement();
-    w->writeStartElement(Tag::ExpandCoreGroupbox);
-    XML::writeAttribute(w, XML::Attrib::value, expandCore);
-    w->writeEndElement();
-    w->writeStartElement(Tag::ExpandShellGroupbox);
-    XML::writeAttribute(w, XML::Attrib::value, expandShell);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::ExpandMainGroupbox, expandMain);
+    XML::writeTaggedValue(w, Tag::ExpandCoreGroupbox, expandCore);
+    XML::writeTaggedValue(w, Tag::ExpandShellGroupbox, expandShell);
 }
 
 void CoreAndShellItem::readFrom(QXmlStreamReader* r)
diff --git a/GUI/Model/Sample/InterferenceItems.cpp b/GUI/Model/Sample/InterferenceItems.cpp
index 72319b7ac75..0ec346a66d1 100644
--- a/GUI/Model/Sample/InterferenceItems.cpp
+++ b/GUI/Model/Sample/InterferenceItems.cpp
@@ -141,9 +141,7 @@ void Interference2DAbstractLatticeItem::writeTo(QXmlStreamWriter* w) const
     w->writeStartElement(Tag::BaseData);
     InterferenceItem::writeTo(w);
     w->writeEndElement();
-    w->writeStartElement(Tag::IntegrateOverXi);
-    XML::writeAttribute(w, XML::Attrib::value, m_xi_integration);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::IntegrateOverXi, m_xi_integration);
     w->writeStartElement(Tag::LatticeType);
     m_lattice_type.writeTo(w);
     w->writeEndElement();
@@ -341,12 +339,8 @@ void InterferenceFinite2DLatticeItem::writeTo(QXmlStreamWriter* w) const
     w->writeStartElement(Tag::BaseData);
     Interference2DAbstractLatticeItem::writeTo(w);
     w->writeEndElement();
-    w->writeStartElement(Tag::DomainSize1);
-    XML::writeAttribute(w, XML::Attrib::value, m_domain_size1);
-    w->writeEndElement();
-    w->writeStartElement(Tag::DomainSize2);
-    XML::writeAttribute(w, XML::Attrib::value, m_domain_size2);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::DomainSize1, m_domain_size1);
+    XML::writeTaggedValue(w, Tag::DomainSize2, m_domain_size2);
 }
 
 void InterferenceFinite2DLatticeItem::readFrom(QXmlStreamReader* r)
diff --git a/GUI/Model/Sample/ItemWithMaterial.cpp b/GUI/Model/Sample/ItemWithMaterial.cpp
index af583b65842..d167f3e1821 100644
--- a/GUI/Model/Sample/ItemWithMaterial.cpp
+++ b/GUI/Model/Sample/ItemWithMaterial.cpp
@@ -65,9 +65,7 @@ MaterialItem* ItemWithMaterial::materialItem() const
 void ItemWithMaterial::writeTo(QXmlStreamWriter* w) const
 {
     XML::writeAttribute(w, XML::Attrib::version, uint(1));
-    w->writeStartElement(Tag::MaterialId);
-    XML::writeAttribute(w, XML::Attrib::value, m_material_identifier);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::MaterialId, m_material_identifier);
 }
 
 void ItemWithMaterial::readFrom(QXmlStreamReader* r)
diff --git a/GUI/Model/Sample/LayerItem.cpp b/GUI/Model/Sample/LayerItem.cpp
index a946db0045b..fe0d4dfba25 100644
--- a/GUI/Model/Sample/LayerItem.cpp
+++ b/GUI/Model/Sample/LayerItem.cpp
@@ -124,12 +124,8 @@ void LayerItem::writeTo(QXmlStreamWriter* w) const
     w->writeStartElement(Tag::MaterialData);
     ItemWithMaterial::writeTo(w);
     w->writeEndElement();
-    w->writeStartElement(Tag::Color);
-    XML::writeAttribute(w, XML::Attrib::value, m_color);
-    w->writeEndElement();
-    w->writeStartElement(Tag::NumSlices);
-    XML::writeAttribute(w, XML::Attrib::value, m_num_slices);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::Color, m_color);
+    XML::writeTaggedValue(w, Tag::NumSlices, m_num_slices);
 
     // thickness
     m_thickness.writeTo2(w, Tag::Thickness);
@@ -143,9 +139,7 @@ void LayerItem::writeTo(QXmlStreamWriter* w) const
         layout->writeTo(w);
         w->writeEndElement();
     }
-    w->writeStartElement(Tag::ExpandLayerGroupbox);
-    XML::writeAttribute(w, XML::Attrib::value, expandLayer);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::ExpandLayerGroupbox, expandLayer);
 }
 
 void LayerItem::readFrom(QXmlStreamReader* r)
diff --git a/GUI/Model/Sample/MesocrystalItem.cpp b/GUI/Model/Sample/MesocrystalItem.cpp
index c11a1564e2c..7468ef78d06 100644
--- a/GUI/Model/Sample/MesocrystalItem.cpp
+++ b/GUI/Model/Sample/MesocrystalItem.cpp
@@ -82,9 +82,7 @@ void MesocrystalItem::writeTo(QXmlStreamWriter* w) const
     w->writeStartElement(Tag::BasisParticle);
     m_basis_particle.writeTo(w);
     w->writeEndElement();
-    w->writeStartElement(Tag::ExpandMesocrystalGroupbox);
-    XML::writeAttribute(w, XML::Attrib::value, expandMesocrystal);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::ExpandMesocrystalGroupbox, expandMesocrystal);
 }
 
 void MesocrystalItem::readFrom(QXmlStreamReader* r)
diff --git a/GUI/Model/Sample/ParticleItem.cpp b/GUI/Model/Sample/ParticleItem.cpp
index 840ccb4fd1d..d307e5b66ee 100644
--- a/GUI/Model/Sample/ParticleItem.cpp
+++ b/GUI/Model/Sample/ParticleItem.cpp
@@ -56,9 +56,7 @@ void ParticleItem::writeTo(QXmlStreamWriter* w) const
     w->writeStartElement(Tag::FormFactor);
     m_form_factor.writeTo(w);
     w->writeEndElement();
-    w->writeStartElement(Tag::ExpandParticleGroupbox);
-    XML::writeAttribute(w, XML::Attrib::value, expandParticle);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::ExpandParticleGroupbox, expandParticle);
 }
 
 void ParticleItem::readFrom(QXmlStreamReader* r)
diff --git a/GUI/Model/Sample/ParticleLayoutItem.cpp b/GUI/Model/Sample/ParticleLayoutItem.cpp
index cfaf5786562..2f4141306e3 100644
--- a/GUI/Model/Sample/ParticleLayoutItem.cpp
+++ b/GUI/Model/Sample/ParticleLayoutItem.cpp
@@ -117,12 +117,8 @@ void ParticleLayoutItem::writeTo(QXmlStreamWriter* w) const
         PolyItem<ParticlesCatalog>::writeItemTo(t, w);
         w->writeEndElement();
     }
-    w->writeStartElement(Tag::ExpandLayoutGroupbox);
-    XML::writeAttribute(w, XML::Attrib::value, expandParticleLayout);
-    w->writeEndElement();
-    w->writeStartElement(Tag::ExpandInterferenceGroupbox);
-    XML::writeAttribute(w, XML::Attrib::value, expandInterference);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::ExpandLayoutGroupbox, expandParticleLayout);
+    XML::writeTaggedValue(w, Tag::ExpandInterferenceGroupbox, expandInterference);
 }
 
 void ParticleLayoutItem::readFrom(QXmlStreamReader* r)
diff --git a/GUI/Model/Sample/SampleItem.cpp b/GUI/Model/Sample/SampleItem.cpp
index d30cb67000e..b37b793d6a5 100644
--- a/GUI/Model/Sample/SampleItem.cpp
+++ b/GUI/Model/Sample/SampleItem.cpp
@@ -127,12 +127,8 @@ void SampleItem::moveLayer(LayerItem* layer, LayerItem* aboveThisLayer)
 void SampleItem::writeTo(QXmlStreamWriter* w) const
 {
     XML::writeAttribute(w, XML::Attrib::version, uint(1));
-    w->writeStartElement(Tag::Name);
-    XML::writeAttribute(w, XML::Attrib::value, name());
-    w->writeEndElement();
-    w->writeStartElement(Tag::Description);
-    XML::writeAttribute(w, XML::Attrib::value, description());
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::Name, name());
+    XML::writeTaggedValue(w, Tag::Description, description());
 
     // cross-correlation length
     m_cross_correlation_length.writeTo2(w, Tag::CrossCorrelationLength);
@@ -149,9 +145,7 @@ void SampleItem::writeTo(QXmlStreamWriter* w) const
         layer->writeTo(w);
         w->writeEndElement();
     }
-    w->writeStartElement(Tag::ExpandInfoGroupbox);
-    XML::writeAttribute(w, XML::Attrib::value, expandInfo);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::ExpandInfoGroupbox, expandInfo);
 }
 
 void SampleItem::readFrom(QXmlStreamReader* r)
diff --git a/GUI/Model/Sample/SamplesSet.cpp b/GUI/Model/Sample/SamplesSet.cpp
index 67e2ef648fb..03dd18433b6 100644
--- a/GUI/Model/Sample/SamplesSet.cpp
+++ b/GUI/Model/Sample/SamplesSet.cpp
@@ -38,9 +38,7 @@ void SamplesSet::writeTo(QXmlStreamWriter* w) const
         t->writeTo(w);
         w->writeEndElement();
     }
-    w->writeStartElement(Tag::CurrentIndex);
-    XML::writeAttribute(w, XML::Attrib::value, currentIndex());
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::CurrentIndex, currentIndex());
 }
 
 void SamplesSet::readFrom(QXmlStreamReader* r)
diff --git a/GUI/Model/Sim/InstrumentItems.cpp b/GUI/Model/Sim/InstrumentItems.cpp
index 3ddd0e64648..21d069c2c65 100644
--- a/GUI/Model/Sim/InstrumentItems.cpp
+++ b/GUI/Model/Sim/InstrumentItems.cpp
@@ -126,42 +126,24 @@ bool InstrumentItem::alignedWith(const DatafileItem* dfi) const
 void InstrumentItem::writeTo(QXmlStreamWriter* w) const
 {
     XML::writeAttribute(w, XML::Attrib::version, uint(2));
-    w->writeStartElement(Tag::Id);
-    XML::writeAttribute(w, XML::Attrib::value, m_id);
-    w->writeEndElement();
-    w->writeStartElement(Tag::Name);
-    XML::writeAttribute(w, XML::Attrib::value, name());
-    w->writeEndElement();
-    w->writeStartElement(Tag::Description);
-    XML::writeAttribute(w, XML::Attrib::value, description());
-    w->writeEndElement();
-    w->writeStartElement(Tag::WithPolarizer);
-    XML::writeAttribute(w, XML::Attrib::value, m_with_polarizer);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::Id, m_id);
+    XML::writeTaggedValue(w, Tag::Name, name());
+    XML::writeTaggedValue(w, Tag::Description, description());
+    XML::writeTaggedValue(w, Tag::WithPolarizer, m_with_polarizer);
     w->writeStartElement(Tag::PolarizerBlochVector);
     m_polarizer_bloch_vector.writeTo(w);
     w->writeEndElement();
-    w->writeStartElement(Tag::WithAnalyzer);
-    XML::writeAttribute(w, XML::Attrib::value, m_with_analyzer);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::WithAnalyzer, m_with_analyzer);
     w->writeStartElement(Tag::AnalyzerBlochVector);
     m_analyzer_bloch_vector.writeTo(w);
     w->writeEndElement();
     w->writeStartElement(Tag::Background);
     m_background.writeTo(w);
     w->writeEndElement();
-    w->writeStartElement(Tag::ExpandInfoGroupbox);
-    XML::writeAttribute(w, XML::Attrib::value, expandInfo);
-    w->writeEndElement();
-    w->writeStartElement(Tag::ExpandPolarizerAnalyzerGroupbox);
-    XML::writeAttribute(w, XML::Attrib::value, expandPolarizerAnalyzer);
-    w->writeEndElement();
-    w->writeStartElement(Tag::ExpandEnvironmentGroupbox);
-    XML::writeAttribute(w, XML::Attrib::value, expandEnvironment);
-    w->writeEndElement();
-    w->writeStartElement(Tag::ExpandDetectorGroupbox);
-    XML::writeAttribute(w, XML::Attrib::value, expandDetector);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::ExpandInfoGroupbox, expandInfo);
+    XML::writeTaggedValue(w, Tag::ExpandPolarizerAnalyzerGroupbox, expandPolarizerAnalyzer);
+    XML::writeTaggedValue(w, Tag::ExpandEnvironmentGroupbox, expandEnvironment);
+    XML::writeTaggedValue(w, Tag::ExpandDetectorGroupbox, expandDetector);
 }
 
 void InstrumentItem::readFrom(QXmlStreamReader* r)
diff --git a/GUI/Model/Sim/InstrumentsSet.cpp b/GUI/Model/Sim/InstrumentsSet.cpp
index f89e0d3cc64..b42731c8fbe 100644
--- a/GUI/Model/Sim/InstrumentsSet.cpp
+++ b/GUI/Model/Sim/InstrumentsSet.cpp
@@ -37,9 +37,7 @@ void InstrumentsSet::writeTo(QXmlStreamWriter* w) const
         t->writeTo(w);
         w->writeEndElement();
     }
-    w->writeStartElement(Tag::CurrentIndex);
-    XML::writeAttribute(w, XML::Attrib::value, currentIndex());
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::CurrentIndex, currentIndex());
 }
 
 void InstrumentsSet::readFrom(QXmlStreamReader* r)
diff --git a/GUI/Model/Sim/SimulationOptionsItem.cpp b/GUI/Model/Sim/SimulationOptionsItem.cpp
index 1e81c4ab0c9..669113bc25f 100644
--- a/GUI/Model/Sim/SimulationOptionsItem.cpp
+++ b/GUI/Model/Sim/SimulationOptionsItem.cpp
@@ -52,33 +52,15 @@ void SimulationOptionsItem::setUseMonteCarloIntegration(unsigned numberOfPoints)
 void SimulationOptionsItem::writeTo(QXmlStreamWriter* w) const
 {
     XML::writeAttribute(w, XML::Attrib::version, uint(2));
-    w->writeStartElement(Tag::RunImmediately);
-    XML::writeAttribute(w, XML::Attrib::value, m_run_immediately);
-    w->writeEndElement();
-    w->writeStartElement(Tag::NumberOfThreads);
-    XML::writeAttribute(w, XML::Attrib::value, m_number_of_threads);
-    w->writeEndElement();
-    w->writeStartElement(Tag::Analytical);
-    XML::writeAttribute(w, XML::Attrib::value, m_computation_method_analytical);
-    w->writeEndElement();
-    w->writeStartElement(Tag::NumberOfMonteCarloPoints);
-    XML::writeAttribute(w, XML::Attrib::value, m_number_of_monte_carlo_points);
-    w->writeEndElement();
-    w->writeStartElement(Tag::UseAverageMaterials);
-    XML::writeAttribute(w, XML::Attrib::value, m_use_average_materials);
-    w->writeEndElement();
-    w->writeStartElement(Tag::IncludeSpecularPeak);
-    XML::writeAttribute(w, XML::Attrib::value, m_include_specular_peak);
-    w->writeEndElement();
-    w->writeStartElement(Tag::UseFastMesoAlgorithm);
-    XML::writeAttribute(w, XML::Attrib::value, m_use_meso_reciprocal_sum);
-    w->writeEndElement();
-    w->writeStartElement(Tag::MesoCutoffRadius);
-    XML::writeAttribute(w, XML::Attrib::value, m_meso_radius_factor);
-    w->writeEndElement();
-    w->writeStartElement(Tag::ExpandAdvancedOptionsGroupbox);
-    XML::writeAttribute(w, XML::Attrib::value, expandAdvancedOptions);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::RunImmediately, m_run_immediately);
+    XML::writeTaggedValue(w, Tag::NumberOfThreads, m_number_of_threads);
+    XML::writeTaggedValue(w, Tag::Analytical, m_computation_method_analytical);
+    XML::writeTaggedValue(w, Tag::NumberOfMonteCarloPoints, m_number_of_monte_carlo_points);
+    XML::writeTaggedValue(w, Tag::UseAverageMaterials, m_use_average_materials);
+    XML::writeTaggedValue(w, Tag::IncludeSpecularPeak, m_include_specular_peak);
+    XML::writeTaggedValue(w, Tag::UseFastMesoAlgorithm, m_use_meso_reciprocal_sum);
+    XML::writeTaggedValue(w, Tag::MesoCutoffRadius, m_meso_radius_factor);
+    XML::writeTaggedValue(w, Tag::ExpandAdvancedOptionsGroupbox, expandAdvancedOptions);
 }
 
 void SimulationOptionsItem::readFrom(QXmlStreamReader* r)
diff --git a/GUI/Model/Tune/FitParameterItem.cpp b/GUI/Model/Tune/FitParameterItem.cpp
index 229819e3177..bc4e35ee1ae 100644
--- a/GUI/Model/Tune/FitParameterItem.cpp
+++ b/GUI/Model/Tune/FitParameterItem.cpp
@@ -80,9 +80,7 @@ void FitDoubleItem::writeTo(QXmlStreamWriter* w) const
 {
     // no need to write m_limits and m_decimals
     XML::writeAttribute(w, XML::Attrib::version, uint(1));
-    w->writeStartElement(Tag::Value);
-    XML::writeAttribute(w, XML::Attrib::value, m_value);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::Value, m_value);
 }
 
 void FitDoubleItem::readFrom(QXmlStreamReader* r)
@@ -116,9 +114,7 @@ void FitEditableDoubleItem::writeTo(QXmlStreamWriter* w) const
     w->writeStartElement(Tag::BaseData);
     FitDoubleItem::writeTo(w);
     w->writeEndElement();
-    w->writeStartElement(Tag::IsEnabled);
-    XML::writeAttribute(w, XML::Attrib::value, m_is_enabled);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::IsEnabled, m_is_enabled);
 }
 
 void FitEditableDoubleItem::readFrom(QXmlStreamReader* r)
@@ -339,9 +335,7 @@ QObject* FitParameterItem::typeItem() const
 void FitParameterItem::writeTo(QXmlStreamWriter* w) const
 {
     XML::writeAttribute(w, XML::Attrib::version, uint(1));
-    w->writeStartElement(Tag::DisplayName);
-    XML::writeAttribute(w, XML::Attrib::value, m_display_name);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::DisplayName, m_display_name);
     w->writeStartElement(Tag::TypeItem);
     m_type_item->writeTo(w);
     w->writeEndElement();
diff --git a/GUI/Model/Tune/FitParameterLinkItem.cpp b/GUI/Model/Tune/FitParameterLinkItem.cpp
index db583fcb2ef..967bc325fff 100644
--- a/GUI/Model/Tune/FitParameterLinkItem.cpp
+++ b/GUI/Model/Tune/FitParameterLinkItem.cpp
@@ -36,9 +36,7 @@ LinkItem::LinkItem(QObject* parent)
 void LinkItem::writeTo(QXmlStreamWriter* w) const
 {
     XML::writeAttribute(w, XML::Attrib::version, uint(1));
-    w->writeStartElement(Tag::Link);
-    XML::writeAttribute(w, XML::Attrib::value, m_link);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::Link, m_link);
 }
 
 void LinkItem::readFrom(QXmlStreamReader* r)
@@ -70,9 +68,7 @@ FitParameterLinkItem::FitParameterLinkItem(QObject* parent)
 void FitParameterLinkItem::writeTo(QXmlStreamWriter* w) const
 {
     XML::writeAttribute(w, XML::Attrib::version, uint(1));
-    w->writeStartElement(Tag::Title);
-    XML::writeAttribute(w, XML::Attrib::value, m_title);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::Title, m_title);
     w->writeStartElement(Tag::LinkItem);
     m_link_item->writeTo(w);
     w->writeEndElement();
diff --git a/GUI/Model/Tune/FitSuiteItem.cpp b/GUI/Model/Tune/FitSuiteItem.cpp
index 5f3dfb662ba..6b72a965a27 100644
--- a/GUI/Model/Tune/FitSuiteItem.cpp
+++ b/GUI/Model/Tune/FitSuiteItem.cpp
@@ -62,15 +62,9 @@ void FitSuiteItem::setChi2(const double chi2)
 void FitSuiteItem::writeTo(QXmlStreamWriter* w) const
 {
     XML::writeAttribute(w, XML::Attrib::version, uint(1));
-    w->writeStartElement(Tag::UpdateInterval);
-    XML::writeAttribute(w, XML::Attrib::value, m_update_interval);
-    w->writeEndElement();
-    w->writeStartElement(Tag::IterationsCount);
-    XML::writeAttribute(w, XML::Attrib::value, m_iter_count);
-    w->writeEndElement();
-    w->writeStartElement(Tag::Chi2);
-    XML::writeAttribute(w, XML::Attrib::value, m_chi2);
-    w->writeEndElement();
+    XML::writeTaggedValue(w, Tag::UpdateInterval, m_update_interval);
+    XML::writeTaggedValue(w, Tag::IterationsCount, m_iter_count);
+    XML::writeTaggedValue(w, Tag::Chi2, m_chi2);
 
     // minimizer container
     if (m_minimizer_container) {
diff --git a/GUI/Model/Util/UtilXML.h b/GUI/Model/Util/UtilXML.h
index c8a34e4c658..1059a933e82 100644
--- a/GUI/Model/Util/UtilXML.h
+++ b/GUI/Model/Util/UtilXML.h
@@ -56,12 +56,10 @@ void writeAttribute(QXmlStreamWriter* writer, const QString& attributeName, T d)
 {
     writer->writeAttribute(attributeName, QString::number(d));
 };
-template <typename T>
-void writeAttribute2(QXmlStreamWriter* w, const QString& tag, const QString& attributeName,
-                     T value)
+template <typename T> void writeTaggedValue(QXmlStreamWriter* w, const QString& tag, T value)
 {
     w->writeStartElement(tag);
-    XML::writeAttribute(w, attributeName, value);
+    XML::writeAttribute(w, XML::Attrib::value, value);
     w->writeEndElement();
 };
 
-- 
GitLab