diff --git a/MeshLib/MeshEditing/ElementValueModification.cpp b/MeshLib/MeshEditing/ElementValueModification.cpp
index 6f54233b804637d45785cb459f9f1d7ebc9065dc..acefe0d011cd0baf3196b2839a3e0d6f121c9e6e 100644
--- a/MeshLib/MeshEditing/ElementValueModification.cpp
+++ b/MeshLib/MeshEditing/ElementValueModification.cpp
@@ -77,16 +77,30 @@ bool ElementValueModification::replace(MeshLib::Mesh &mesh, unsigned old_value,
 
 unsigned ElementValueModification::condense(MeshLib::Mesh &mesh)
 {
-	std::vector<unsigned> value_mapping (ElementValueModification::getMeshValues(mesh));
-	std::vector<unsigned> reverse_mapping(value_mapping.back()+1, 0);
+	boost::optional<MeshLib::PropertyVector<int> &>
+		optional_property_value_vec(
+			mesh.getProperties().getPropertyVector<int>("MaterialIDs")
+		);
+
+	if (!optional_property_value_vec) {
+		return 0;
+	}
+
+	MeshLib::PropertyVector<int> & property_value_vector(
+		optional_property_value_vec.get()
+	);
+	std::vector<int> value_mapping(
+		getSortedPropertyValues(property_value_vector)
+	);
+
+	std::vector<int> reverse_mapping(value_mapping.back()+1, 0);
 	const unsigned nValues (value_mapping.size());
 	for (unsigned i=0; i<nValues; ++i)
 		reverse_mapping[value_mapping[i]] = i;
 
-	const std::size_t nElements (mesh.getNElements());
-	std::vector<MeshLib::Element*> &elements (const_cast<std::vector<MeshLib::Element*>&>(mesh.getElements()));
-	for (unsigned i=0; i<nElements; ++i)
-		elements[i]->setValue(reverse_mapping[elements[i]->getValue()]);
+	std::size_t const n_property_values(property_value_vector.size());
+	for (std::size_t i=0; i<n_property_values; ++i)
+		property_value_vector[i] = reverse_mapping[property_value_vector[i]];
 
 	return nValues;
 }