diff --git a/src/libslic3r/Config.hpp b/src/libslic3r/Config.hpp
index 2704bbcf3..e8ed43356 100644
--- a/src/libslic3r/Config.hpp
+++ b/src/libslic3r/Config.hpp
@@ -810,6 +810,14 @@ public:
     ConfigOption*           clone() const override { return new ConfigOptionEnum<T>(*this); }
     ConfigOptionEnum<T>&    operator=(const ConfigOption *opt) { this->set(opt); return *this; }
     bool                    operator==(const ConfigOptionEnum<T> &rhs) const { return this->value == rhs.value; }
+    int                     getInt() const override { return (int)this->value; }
+
+    void set(const ConfigOption *rhs) override {
+        if (rhs->type() != this->type())
+            throw std::runtime_error("ConfigOptionEnum<T>: Assigning an incompatible type");
+        // rhs could be of the following type: ConfigOptionEnumGeneric or ConfigOptionEnum<T>
+        this->value = (T)rhs->getInt();
+    }
 
     std::string serialize() const override
     {
@@ -879,6 +887,13 @@ public:
     ConfigOptionEnumGeneric&    operator=(const ConfigOption *opt) { this->set(opt); return *this; }
     bool                        operator==(const ConfigOptionEnumGeneric &rhs) const { return this->value == rhs.value; }
 
+    void set(const ConfigOption *rhs) override {
+        if (rhs->type() != this->type())
+            throw std::runtime_error("ConfigOptionEnumGeneric: Assigning an incompatible type");
+        // rhs could be of the following type: ConfigOptionEnumGeneric or ConfigOptionEnum<T>
+        this->value = rhs->getInt();
+    }
+
     std::string serialize() const override
     {
         for (const auto &kvp : *this->keys_map)