diff --git a/GUI/Model/Axis/AmplitudeAxisItem.cpp b/GUI/Model/Axis/AmplitudeAxisItem.cpp
index 4092ed702a0a9c7a3f7fede6094d737c9c184a9a..6d41320f674e3d87d3ff34e1ed2b0fa171fec20a 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 edd5635f04c51b593cd800ad6ef3e6a775457dff..f83cb09653b962bb2237266589d248b0eda69ea5 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 3050a85072d7e1ab79c9ce379c9ca1c5cd213995..d4aa7f9427891402e30d3497a1cbebdb43058522 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 579f834540be203a7975c321f4b1a958ac973c2a..24cd81292ba2f7afac31b1c0df23ccfefa6d55f6 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 0d4f21ea5d711929174183a205a0a1fe258564c2..1ce8307fdf55d6c55bb8740e4379a03ad293acf1 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 590e950b238993ce51dc80ba1fe8f7de15ad310e..b7b4471cab8baf2961e0738ee21b1446cb5001dc 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 03118cffc7567f62db4c4a7f18338e3f31128b3d..8812a14c4f157d11cba37b36580a47afc23ae904 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 aab1c96fa1f39891b2ca41a374a57007c253a17b..fdaa4c2999e8d7114d1e155ff989bf58b8581cc7 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 a72f7aa09b10f9477ff1bd7935a5a6ef4c8dd2c2..413c8a830aa7553562fa14761a17d2d6771998ba 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 17f703dc2eb5224526d667c3be24378e6ff7205f..675dd7c946fa0ca1b4cc88a81ff4ce1daca582d6 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 5e53414e9bccab659193242a08a6cf9e3e0f9466..87fdb79c76704863330a6c3aac843a6ab6397a9d 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 601abbfc5aec76f40990c38e5d8a1d785ceb46a7..4164446406f6ea4ba0939accf1b3654dfd61722e 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 71c2af62f107c24bd91da4f75f9d4ef9601b850a..94eefd6c8f5f75a9ca67e53da8961362a6ef14ab 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 c3617242498070babb2f554daeb0d1bdbca7e8dd..5b752457c44fd8a21ded5068d44e17bbe116001c 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 ee3f77a6fc255d9c499edb7b86759c973a91eb67..b28d33ba9bf94a44c7e015911d57a603dcc2bca0 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 9b0194a60c0f8fe936877ce009d7a0dabdee2530..f3232e6d916c5da441c4c377aa1cb2faba512c50 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 69052800b22d7cc3048e6f8a681e007cf1bca05e..d1ac7b8da24bc175dd7db16181795d9f196db668 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 50bf08aa465bc8a3b21df3bbc4413513fb75b74b..f56d9e40ed2a7202a1b82a3427cb2b43833c1884 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 4aa095197b6611a589ed44f7d2c51a36c42188df..7f0039b685a8e7e2e7a3103954c0b3435ec0bebf 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 551855999f1259cec04d59b7e1bbdc1ece6c1309..89d6c12f6d236483e7ae922ae0201d9809f05f31 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 4b2e22c9df5bbeb6bb48cc0ed50b691f105dd3ff..3c03447d1448b7027de2b547b026db226178dd84 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 a173e7ae2859e6c458f746059b73372bf842d4f0..0b34c617a582b0c175edf0df5d923f765190ee26 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 72319b7ac7573459a089b42fc27cbc6934ab5068..0ec346a66d115af555caafce641de82e7a701d79 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 af583b65842a2893b7f210dbb01d744087c91962..d167f3e18213e1abfb30016a0f537fb639c46a5e 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 a946db0045bdc43de83ba7369e6e0a3836e0d370..fe0d4dfba250ba93e81437869658dfbfa63f5e00 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 c11a1564e2c7813f765213e94b420070a78542cd..7468ef78d0659d764bbc4743eefe71dfb7c9714b 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 840ccb4fd1d25e3a422037962c1eeed82894ae49..d307e5b66ee5116f82f69ece4840bed28b05feae 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 cfaf57865622563c1a4a4387b8c4dc2e7b757c13..2f4141306e3958b986dc47e3a45e749dfe087777 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 d30cb67000e13ee3fe553258ad796b97363b5ad1..b37b793d6a5e1287df1a432542448cf7ccef8f17 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 67e2ef648fbdd4676de997b60648bd8e685734bf..03dd18433b67b80bc37980179a69e40c4234d504 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 3ddd0e6464848fe04614e903fa7c98993973b282..21d069c2c6580f11f09a8b3594f04cf84171129c 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 f89e0d3cc644d245629f1affceaaa70b28d33f14..b42731c8fbeadbb11711c86b68724d9d018e3625 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 1e81c4ab0c92d394c19e12ad09a3cc1305ca128f..669113bc25fa64188f9943fcbddf632d4de13024 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 229819e3177061c21c06f1f756c12a659f3b4869..bc4e35ee1ae006d23ddc94b8006e022558e3db66 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 db583fcb2ef13a7589ebf1614e0530f76f095130..967bc325fff30b7adc08fb8ac101f088c46d9af9 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 5f3dfb662ba3f0c1dca464dfcd4c107371b46cae..6b72a965a27695cd91471c4e8494ad58e7068fd9 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 c8a34e4c658bf2ff673ba1f1adbb12526e9d539e..1059a933e82ae13ae3346016c2fd50a8dbc9e18f 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();
 };