diff --git a/parse_xml.cpp b/parse_xml.cpp
index 38a09b4..3d67e1c 100644
--- a/parse_xml.cpp
+++ b/parse_xml.cpp
@@ -473,22 +473,24 @@
 struct HalInterfaceConverter : public XmlNodeConverter<HalInterface> {
     std::string elementName() const override { return "interface"; }
     void mutateNode(const HalInterface &intf, NodeType *root, DocType *d) const override {
-        appendTextElement(root, "name", intf.name, d);
-        appendTextElements(root, "instance", intf.instances, d);
+        appendTextElement(root, "name", intf.name(), d);
+        appendTextElements(root, "instance", intf.mInstances, d);
     }
     bool buildObject(HalInterface* intf, NodeType* root, std::string* error) const override {
         std::vector<std::string> instances;
-        if (!parseTextElement(root, "name", &intf->name, error) ||
+        if (!parseTextElement(root, "name", &intf->mName, error) ||
             !parseTextElements(root, "instance", &instances, error)) {
             return false;
         }
-        intf->instances.clear();
-        intf->instances.insert(instances.begin(), instances.end());
-        if (intf->instances.size() != instances.size()) {
-            *error = "Duplicated instances in " + intf->name;
-            return false;
+        bool success = true;
+        for (const auto& e : instances) {
+            if (!intf->insertInstance(e, false /* isRegex */)) {
+                if (!error->empty()) *error += "\n";
+                *error += "Duplicated instance '" + e + "' in " + intf->name();
+                success = false;
+            }
         }
-        return true;
+        return success;
     }
 };
 
@@ -514,7 +516,7 @@
             return false;
         }
         for (auto&& interface : interfaces) {
-            std::string name{interface.name};
+            std::string name{interface.name()};
             auto res = object->interfaces.emplace(std::move(name), std::move(interface));
             if (!res.second) {
                 *error = "Duplicated interface entry \"" + res.first->first +
@@ -663,8 +665,7 @@
 
         object->interfaces.clear();
         for (auto &&interface : interfaces) {
-            auto res = object->interfaces.emplace(interface.name,
-                                                  std::move(interface));
+            auto res = object->interfaces.emplace(interface.name(), std::move(interface));
             if (!res.second) {
                 *error = "Duplicated interface entry \"" + res.first->first +
                          "\"; if additional instances are needed, add them to the "
