diff --git a/src/language/modules/SchemeModule.cpp b/src/language/modules/SchemeModule.cpp
index f05fcafa67e4de0459b4543f599e9fce70beadd2..b595e0d34ec1f45734d927aa7cf89a1ff493764d 100644
--- a/src/language/modules/SchemeModule.cpp
+++ b/src/language/modules/SchemeModule.cpp
@@ -701,4 +701,17 @@ SchemeModule::registerCheckpointResume() const
                                           const HighFive::Group& symbol_table_group) -> EmbeddedData {
                            return readIDiscreteFunctionDescriptor(symbol_name, symbol_table_group);
                          }));
+
+  CheckpointResumeRepository::instance()
+    .addCheckpointResume(ast_node_data_type_from<std::shared_ptr<const IQuadratureDescriptor>>,
+                         std::function([](const std::string& symbol_name, const EmbeddedData& embedded_data,
+                                          HighFive::File& file, HighFive::Group& checkpoint_group,
+                                          HighFive::Group& symbol_table_group) {
+                           writeIQuadratureDescriptor(symbol_name, embedded_data, file, checkpoint_group,
+                                                      symbol_table_group);
+                         }),
+                         std::function([](const std::string& symbol_name,
+                                          const HighFive::Group& symbol_table_group) -> EmbeddedData {
+                           return readIQuadratureDescriptor(symbol_name, symbol_table_group);
+                         }));
 }
diff --git a/src/utils/checkpointing/CheckpointUtils.cpp b/src/utils/checkpointing/CheckpointUtils.cpp
index e6e503d1aecff38d050c09d17ca714db41b33c7b..6a45d332a1a23ee150d2082ea3118a7f333cd61d 100644
--- a/src/utils/checkpointing/CheckpointUtils.cpp
+++ b/src/utils/checkpointing/CheckpointUtils.cpp
@@ -1,5 +1,6 @@
 #include <utils/checkpointing/CheckpointUtils.hpp>
 
+#include <analysis/IQuadratureDescriptor.hpp>
 #include <language/modules/MeshModuleTypes.hpp>
 #include <language/modules/SchemeModuleTypes.hpp>
 #include <language/utils/ASTNodeDataTypeTraits.hpp>
@@ -20,6 +21,7 @@
 #include <utils/checkpointing/IInterfaceDescriptorHFType.hpp>
 #include <utils/checkpointing/IZoneDescriptorHFType.hpp>
 #include <utils/checkpointing/ItemTypeHFType.hpp>
+#include <utils/checkpointing/QuadratureTypeHFType.hpp>
 #include <utils/checkpointing/RefItemListHFType.hpp>
 
 template <ItemType item_type, size_t Dimension>
@@ -223,6 +225,25 @@ writeIInterfaceDescriptor(const std::string& symbol_name,
   }
 }
 
+void
+writeIQuadratureDescriptor(const std::string& symbol_name,
+                           const EmbeddedData& embedded_data,
+                           HighFive::File&,
+                           HighFive::Group&,
+                           HighFive::Group& symbol_table_group)
+{
+  HighFive::Group variable_group = symbol_table_group.createGroup("embedded/" + symbol_name);
+
+  std::shared_ptr<const IQuadratureDescriptor> iquadrature_descriptor_p =
+    dynamic_cast<const DataHandler<const IQuadratureDescriptor>&>(embedded_data.get()).data_ptr();
+
+  const IQuadratureDescriptor& iquadrature_descriptor = *iquadrature_descriptor_p;
+
+  variable_group.createAttribute("type", dataTypeName(ast_node_data_type_from<decltype(iquadrature_descriptor_p)>));
+  variable_group.createAttribute("quadrature_type", iquadrature_descriptor.type());
+  variable_group.createAttribute("quadrature_degree", iquadrature_descriptor.degree());
+}
+
 void
 writeItemType(const std::string& symbol_name,
               const EmbeddedData& embedded_data,
diff --git a/src/utils/checkpointing/CheckpointUtils.hpp b/src/utils/checkpointing/CheckpointUtils.hpp
index e5d91a20e533f934c7f47889954e99806d36f2f4..9c9a03a193dff12f26002fbc6d3fa1d1f4d8904a 100644
--- a/src/utils/checkpointing/CheckpointUtils.hpp
+++ b/src/utils/checkpointing/CheckpointUtils.hpp
@@ -54,18 +54,24 @@ void writeIDiscreteFunctionDescriptor(const std::string& symbol_name,
                                       HighFive::Group& checkpoint_group,
                                       HighFive::Group& symbol_table_group);
 
-void writeItemType(const std::string& symbol_name,
-                   const EmbeddedData& embedded_data,
-                   HighFive::File& file,
-                   HighFive::Group& checkpoint_group,
-                   HighFive::Group& symbol_table_group);
-
 void writeIInterfaceDescriptor(const std::string& symbol_name,
                                const EmbeddedData& embedded_data,
                                HighFive::File& file,
                                HighFive::Group& checkpoint_group,
                                HighFive::Group& symbol_table_group);
 
+void writeIQuadratureDescriptor(const std::string& symbol_name,
+                                const EmbeddedData& embedded_data,
+                                HighFive::File& file,
+                                HighFive::Group& checkpoint_group,
+                                HighFive::Group& symbol_table_group);
+
+void writeItemType(const std::string& symbol_name,
+                   const EmbeddedData& embedded_data,
+                   HighFive::File& file,
+                   HighFive::Group& checkpoint_group,
+                   HighFive::Group& symbol_table_group);
+
 void writeIZoneDescriptor(const std::string& symbol_name,
                           const EmbeddedData& embedded_data,
                           HighFive::File& file,
diff --git a/src/utils/checkpointing/QuadratureTypeHFType.hpp b/src/utils/checkpointing/QuadratureTypeHFType.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..05fd325ca15e395c6233c237e8f927fb12409d78
--- /dev/null
+++ b/src/utils/checkpointing/QuadratureTypeHFType.hpp
@@ -0,0 +1,16 @@
+#ifndef QUADRATURE_TYPE_HF_TYPE_HPP
+#define QUADRATURE_TYPE_HF_TYPE_HPP
+
+#include <analysis/QuadratureType.hpp>
+#include <utils/checkpointing/CheckpointUtils.hpp>
+
+HighFive::EnumType<QuadratureType> PUGS_INLINE
+create_enum_quadrature_descriptor_type()
+{
+  return {{"gauss", QuadratureType::Gauss},
+          {"gauss-legendre", QuadratureType::GaussLegendre},
+          {"gauss-lobatto", QuadratureType::GaussLobatto}};
+}
+HIGHFIVE_REGISTER_TYPE(QuadratureType, create_enum_quadrature_descriptor_type);
+
+#endif   // QUADRATURE_TYPE_HF_TYPE_HPP
diff --git a/src/utils/checkpointing/ResumeUtils.cpp b/src/utils/checkpointing/ResumeUtils.cpp
index 7dc506aef95c6e77f1f795def8c8344db58d8234..a4a47125ff26cbe9d44d5064833291c8e3472854 100644
--- a/src/utils/checkpointing/ResumeUtils.cpp
+++ b/src/utils/checkpointing/ResumeUtils.cpp
@@ -1,5 +1,8 @@
 #include <utils/checkpointing/ResumeUtils.hpp>
 
+#include <analysis/GaussLegendreQuadratureDescriptor.hpp>
+#include <analysis/GaussLobattoQuadratureDescriptor.hpp>
+#include <analysis/GaussQuadratureDescriptor.hpp>
 #include <language/utils/DataHandler.hpp>
 #include <language/utils/SymbolTable.hpp>
 #include <mesh/NamedBoundaryDescriptor.hpp>
@@ -15,6 +18,7 @@
 #include <utils/checkpointing/IInterfaceDescriptorHFType.hpp>
 #include <utils/checkpointing/IZoneDescriptorHFType.hpp>
 #include <utils/checkpointing/ItemTypeHFType.hpp>
+#include <utils/checkpointing/QuadratureTypeHFType.hpp>
 #include <utils/checkpointing/ResumingData.hpp>
 
 EmbeddedData
@@ -100,6 +104,37 @@ readIInterfaceDescriptor(const std::string& symbol_name, const HighFive::Group&
   return embedded_data;
 }
 
+EmbeddedData
+readIQuadratureDescriptor(const std::string& symbol_name, const HighFive::Group& symbol_table_group)
+{
+  const HighFive::Group iquadraturedescriptor_group = symbol_table_group.getGroup("embedded/" + symbol_name);
+  const QuadratureType quadrature_type =
+    iquadraturedescriptor_group.getAttribute("quadrature_type").read<QuadratureType>();
+  const size_t degree = iquadraturedescriptor_group.getAttribute("quadrature_degree").read<size_t>();
+
+  EmbeddedData embedded_data;
+
+  switch (quadrature_type) {
+  case QuadratureType::Gauss: {
+    embedded_data = {std::make_shared<DataHandler<const IQuadratureDescriptor>>(
+      std::make_shared<const GaussQuadratureDescriptor>(degree))};
+    break;
+  }
+  case QuadratureType::GaussLegendre: {
+    embedded_data = {std::make_shared<DataHandler<const IQuadratureDescriptor>>(
+      std::make_shared<const GaussLegendreQuadratureDescriptor>(degree))};
+    break;
+  }
+  case QuadratureType::GaussLobatto: {
+    embedded_data = {std::make_shared<DataHandler<const IQuadratureDescriptor>>(
+      std::make_shared<const GaussLobattoQuadratureDescriptor>(degree))};
+    break;
+  }
+  }
+
+  return embedded_data;
+}
+
 EmbeddedData
 readItemType(const std::string& symbol_name, const HighFive::Group& symbol_table_group)
 {
diff --git a/src/utils/checkpointing/ResumeUtils.hpp b/src/utils/checkpointing/ResumeUtils.hpp
index c8797804e990385b628f5607452c7a30432e3f4f..777216896d1abeaee39713d261b147f5bc68bdb0 100644
--- a/src/utils/checkpointing/ResumeUtils.hpp
+++ b/src/utils/checkpointing/ResumeUtils.hpp
@@ -31,6 +31,7 @@ read(const HighFive::Group& group, const std::string& name)
 EmbeddedData readIBoundaryDescriptor(const std::string& symbol_name, const HighFive::Group& symbol_table_group);
 EmbeddedData readIDiscreteFunctionDescriptor(const std::string& symbol_name, const HighFive::Group& symbol_table_group);
 EmbeddedData readIInterfaceDescriptor(const std::string& symbol_name, const HighFive::Group& symbol_table_group);
+EmbeddedData readIQuadratureDescriptor(const std::string& symbol_name, const HighFive::Group& symbol_table_group);
 EmbeddedData readItemType(const std::string& symbol_name, const HighFive::Group& symbol_table_group);
 EmbeddedData readIZoneDescriptor(const std::string& symbol_name, const HighFive::Group& symbol_table_group);
 EmbeddedData readMesh(const std::string& symbol_name, const HighFive::Group& symbol_table_group);