diff --git a/snmp_client.cpp b/snmp_client.cpp
index 2d2e1d5..52eb744 100644
--- a/snmp_client.cpp
+++ b/snmp_client.cpp
@@ -1,5 +1,6 @@
 #include "snmp_client.hpp"
 #include "snmp_conf_manager.hpp"
+#include "snmp_serialize.hpp"
 
 namespace phosphor
 {
@@ -21,6 +22,34 @@
     emit_object_added();
 }
 
+std::string Client::address(std::string value)
+{
+    if (value == Ifaces::address())
+    {
+        return value;
+    }
+
+    parent.checkClientConfigured(value, port());
+
+    auto addr = Ifaces::address(value);
+    serialize(id, *this, parent.dbusPersistentLocation);
+    return addr;
+}
+
+uint16_t Client::port(uint16_t value)
+{
+    if (value == Ifaces::port())
+    {
+        return value;
+    }
+
+    parent.checkClientConfigured(address(), value);
+
+    auto port = Ifaces::port(value);
+    serialize(id, *this, parent.dbusPersistentLocation);
+    return port;
+}
+
 void Client::delete_()
 {
     parent.deleteSNMPClient(id);
diff --git a/snmp_client.hpp b/snmp_client.hpp
index aab72cc..51ebabb 100644
--- a/snmp_client.hpp
+++ b/snmp_client.hpp
@@ -61,6 +61,26 @@
     {
     }
 
+    /** @brief Update the address of the object.
+     *
+     *  @param[in] value - IP address
+     *
+     *  @return On success the updated IP address
+     */
+    std::string address(std::string value) override;
+
+    /** @brief Update the port
+     *
+     *  @param[in] value - port number
+     *
+     *  @return On success the updated port number
+     */
+    uint16_t port(uint16_t value) override;
+
+    using sdbusplus::xyz::openbmc_project::Network::server::Client::address;
+
+    using sdbusplus::xyz::openbmc_project::Network::server::Client::port;
+
     /** @brief Delete this d-bus object.
      */
     void delete_() override;
diff --git a/test/Makefile.am.include b/test/Makefile.am.include
index 97b018c..9bbf050 100644
--- a/test/Makefile.am.include
+++ b/test/Makefile.am.include
@@ -31,7 +31,8 @@
 	%reldir%/test_error_notification.cpp \
 	%reldir%/test_snmp_conf_manager.cpp \
 	%reldir%/test_snmp_util.cpp \
-	%reldir%/test_snmp_serialize.cpp
+	%reldir%/test_snmp_serialize.cpp \
+	%reldir%/test_snmp_client.cpp
 
 test_notification_LDADD = $(top_builddir)/phosphor_network_snmpconf-snmp_conf_manager.o \
 	$(top_builddir)/phosphor_network_snmpconf-snmp_client.o \
diff --git a/test/test_snmp_client.cpp b/test/test_snmp_client.cpp
new file mode 100644
index 0000000..fe49f2b
--- /dev/null
+++ b/test/test_snmp_client.cpp
@@ -0,0 +1,83 @@
+#include <gtest/gtest.h>
+
+#include <xyz/openbmc_project/Common/error.hpp>
+
+#include "snmp_conf_manager.hpp"
+#include "snmp_serialize.hpp"
+
+namespace phosphor
+{
+namespace network
+{
+namespace snmp
+{
+
+using InvalidArgument =
+    sdbusplus::xyz::openbmc_project::Common::Error::InvalidArgument;
+
+auto mgrObjPath = "/xyz/openbmc_test/snmp/manager";
+
+class TestSNMPClient : public testing::Test
+{
+  public:
+    sdbusplus::bus::bus bus;
+    ConfManager manager;
+    std::string confDir;
+    TestSNMPClient() :
+        bus(sdbusplus::bus::new_default()), manager(bus, mgrObjPath)
+    {
+        char tmp[] = "/tmp/snmpClient.XXXXXX";
+        std::string confDir = mkdtemp(tmp);
+        manager.dbusPersistentLocation = confDir;
+    }
+
+    ~TestSNMPClient()
+    {
+        fs::remove_all(manager.dbusPersistentLocation);
+    }
+};
+
+TEST_F(TestSNMPClient, UpdateProperty)
+{
+    std::string objPath = mgrObjPath;
+    objPath += "/" + std::to_string(1);
+    Client client(bus, objPath.c_str(), manager, "1.1.1.1", 202);
+    EXPECT_EQ(client.address(), "1.1.1.1");
+    EXPECT_EQ(client.port(), 202);
+    client.address("2.2.2.2");
+    EXPECT_EQ(client.address(), "2.2.2.2");
+    client.port(404);
+    EXPECT_EQ(client.port(), 404);
+}
+
+TEST_F(TestSNMPClient, AddEmptyAddress)
+{
+    std::string objPath = mgrObjPath;
+    objPath += "/" + std::to_string(1);
+    Client client(bus, objPath.c_str(), manager, "1.1.1.1", 202);
+    EXPECT_EQ(client.address(), "1.1.1.1");
+    EXPECT_EQ(client.port(), 202);
+
+    EXPECT_THROW(client.address(""), InvalidArgument);
+}
+
+TEST_F(TestSNMPClient, CheckPersistency)
+{
+    std::string objPath = mgrObjPath;
+    objPath += "/" + std::to_string(1);
+
+    Client client(bus, objPath.c_str(), manager, "1.1.1.1", 23);
+    client.address("2.2.2.2");
+
+    Client restoreClient(bus, objPath.c_str(), manager);
+    auto persistentPath = manager.dbusPersistentLocation;
+    persistentPath += "/1";
+    deserialize(persistentPath, restoreClient);
+
+    EXPECT_EQ("2.2.2.2", restoreClient.address());
+    EXPECT_EQ(23, restoreClient.port());
+}
+
+} // namespace snmp
+} // namespace network
+} // namespace phosphor
