diff --git a/src/dhcp_configuration.cpp b/src/dhcp_configuration.cpp
index d421111..154bbee 100644
--- a/src/dhcp_configuration.cpp
+++ b/src/dhcp_configuration.cpp
@@ -49,10 +49,10 @@
         conf.setFile(newest_file.path());
     }
 
-    ConfigIntf::dnsEnabled(getDHCPProp(conf, "UseDNS"));
-    ConfigIntf::ntpEnabled(getDHCPProp(conf, "UseNTP"));
-    ConfigIntf::hostNameEnabled(getDHCPProp(conf, "UseHostname"));
-    ConfigIntf::sendHostNameEnabled(getDHCPProp(conf, "SendHostname"));
+    ConfigIntf::dnsEnabled(getDHCPProp(conf, "UseDNS"), true);
+    ConfigIntf::ntpEnabled(getDHCPProp(conf, "UseNTP"), true);
+    ConfigIntf::hostNameEnabled(getDHCPProp(conf, "UseHostname"), true);
+    ConfigIntf::sendHostNameEnabled(getDHCPProp(conf, "SendHostname"), true);
     emit_object_added();
 }
 
diff --git a/src/ethernet_interface.cpp b/src/ethernet_interface.cpp
index e3e7662..b57a24f 100644
--- a/src/ethernet_interface.cpp
+++ b/src/ethernet_interface.cpp
@@ -88,17 +88,27 @@
     manager(manager), bus(bus), objPath(std::move(objPath)),
     ifIdx(info.intf.idx)
 {
-    interfaceName(*info.intf.name);
+    interfaceName(*info.intf.name, true);
     auto dhcpVal = getDHCPValue(config);
-    EthernetInterfaceIntf::dhcp4(dhcpVal.v4);
-    EthernetInterfaceIntf::dhcp6(dhcpVal.v6);
-    EthernetInterfaceIntf::ipv6AcceptRA(getIPv6AcceptRA(config));
-    EthernetInterfaceIntf::nicEnabled(enabled);
+    EthernetInterfaceIntf::dhcp4(dhcpVal.v4, true);
+    EthernetInterfaceIntf::dhcp6(dhcpVal.v6, true);
+    EthernetInterfaceIntf::ipv6AcceptRA(getIPv6AcceptRA(config), true);
+    EthernetInterfaceIntf::nicEnabled(enabled, true);
 
     EthernetInterfaceIntf::ntpServers(
-        config.map.getValueStrings("Network", "NTP"));
+        config.map.getValueStrings("Network", "NTP"), true);
 
-    updateInfo(info.intf);
+    updateInfo(info.intf, true);
+
+    if (info.defgw4)
+    {
+        EthernetInterface::defaultGateway(std::to_string(*info.defgw4), true);
+    }
+    if (info.defgw6)
+    {
+        EthernetInterface::defaultGateway6(std::to_string(*info.defgw6), true);
+    }
+    emit_object_added();
 
     if (info.intf.vlan_id)
     {
@@ -108,14 +118,6 @@
         }
         vlan.emplace(bus, this->objPath.c_str(), info.intf, *this);
     }
-    if (info.defgw4)
-    {
-        EthernetInterface::defaultGateway(std::to_string(*info.defgw4));
-    }
-    if (info.defgw6)
-    {
-        EthernetInterface::defaultGateway6(std::to_string(*info.defgw6));
-    }
     for (const auto& [_, addr] : info.addrs)
     {
         addAddr(addr);
@@ -124,28 +126,26 @@
     {
         addStaticNeigh(neigh);
     }
-
-    this->emit_object_added();
 }
 
-void EthernetInterface::updateInfo(const InterfaceInfo& info)
+void EthernetInterface::updateInfo(const InterfaceInfo& info, bool skipSignal)
 {
-    EthernetInterfaceIntf::linkUp(info.flags & IFF_RUNNING);
+    EthernetInterfaceIntf::linkUp(info.flags & IFF_RUNNING, skipSignal);
     if (info.mac)
     {
-        MacAddressIntf::macAddress(std::to_string(*info.mac));
+        MacAddressIntf::macAddress(std::to_string(*info.mac), skipSignal);
     }
     if (info.mtu)
     {
-        EthernetInterfaceIntf::mtu(*info.mtu);
+        EthernetInterfaceIntf::mtu(*info.mtu, skipSignal);
     }
     if (ifIdx > 0)
     {
         auto ethInfo = ignoreError("GetEthInfo", *info.name, {}, [&] {
             return system::getEthInfo(*info.name);
         });
-        EthernetInterfaceIntf::autoNeg(ethInfo.autoneg);
-        EthernetInterfaceIntf::speed(ethInfo.speed);
+        EthernetInterfaceIntf::autoNeg(ethInfo.autoneg, skipSignal);
+        EthernetInterfaceIntf::speed(ethInfo.speed, skipSignal);
     }
 }
 
@@ -874,8 +874,8 @@
     VlanIfaces(bus, objPath.c_str(), VlanIfaces::action::defer_emit),
     parentIdx(*info.parent_idx), eth(eth)
 {
-    VlanIntf::id(*info.vlan_id);
-    this->emit_object_added();
+    VlanIntf::id(*info.vlan_id, true);
+    emit_object_added();
 }
 
 void EthernetInterface::VlanProperties::delete_()
diff --git a/src/ethernet_interface.hpp b/src/ethernet_interface.hpp
index e617eae..a1e9975 100644
--- a/src/ethernet_interface.hpp
+++ b/src/ethernet_interface.hpp
@@ -96,7 +96,7 @@
     void addStaticNeigh(const NeighborInfo& info);
 
     /** @brief Updates the interface information based on new InterfaceInfo */
-    void updateInfo(const InterfaceInfo& info);
+    void updateInfo(const InterfaceInfo& info, bool skipSignal = false);
 
     /** @brief Function used to load the ntpservers
      */
diff --git a/src/ipaddress.cpp b/src/ipaddress.cpp
index 560129d..07e37e4 100644
--- a/src/ipaddress.cpp
+++ b/src/ipaddress.cpp
@@ -59,13 +59,12 @@
     IPIfaces(bus, objPath.str.c_str(), IPIfaces::action::defer_emit),
     parent(parent), objPath(std::move(objPath))
 {
-    IP::address(std::to_string(addr.getAddr()));
-    IP::prefixLength(addr.getPfx());
+    IP::address(std::to_string(addr.getAddr()), true);
+    IP::prefixLength(addr.getPfx(), true);
     IP::type(std::visit([](auto v) { return Proto<decltype(v)>::value; },
-                        addr.getAddr()));
-    IP::origin(origin);
-
-    // Emit deferred signal.
+                        addr.getAddr()),
+             true);
+    IP::origin(origin, true);
     emit_object_added();
 }
 std::string IPAddress::address(std::string /*ipAddress*/)
diff --git a/src/neighbor.cpp b/src/neighbor.cpp
index 0f5140e..6b8d853 100644
--- a/src/neighbor.cpp
+++ b/src/neighbor.cpp
@@ -34,11 +34,9 @@
     NeighborObj(bus, objPath.str.c_str(), NeighborObj::action::defer_emit),
     parent(parent), objPath(std::move(objPath))
 {
-    NeighborObj::ipAddress(std::to_string(addr));
-    NeighborObj::macAddress(std::to_string(lladdr));
-    NeighborObj::state(state);
-
-    // Emit deferred signal.
+    NeighborObj::ipAddress(std::to_string(addr), true);
+    NeighborObj::macAddress(std::to_string(lladdr), true);
+    NeighborObj::state(state, true);
     emit_object_added();
 }
 
diff --git a/src/system_configuration.cpp b/src/system_configuration.cpp
index 192f12d..0ba4d82 100644
--- a/src/system_configuration.cpp
+++ b/src/system_configuration.cpp
@@ -28,9 +28,9 @@
     Iface(bus, objPath.c_str(), Iface::action::defer_emit),
     bus(bus)
 {
-    SystemConfigIntf::hostName(getHostNameFromSystem());
+    SystemConfigIntf::hostName(getHostNameFromSystem(), true);
 
-    this->emit_object_added();
+    emit_object_added();
 }
 
 std::string SystemConfiguration::hostName(std::string name)
