diff --git a/fpm/fpm.h b/fpm/fpm.h
index 96f05f4..9a1dbf2 100644
--- a/fpm/fpm.h
+++ b/fpm/fpm.h
@@ -87,6 +87,14 @@
  * table(s) when it reconnects.
  */
 
+/*
+ * Local host as a default server for fpm connection 
+ */
+#define FPM_DEFAULT_IP              (htonl (INADDR_LOOPBACK))
+
+/*
+ * default port for fpm connections
+ */
 #define FPM_DEFAULT_PORT 2620
 
 /*
@@ -270,4 +278,10 @@
   return 1;
 }
 
+// tcp maximum range
+#define TCP_MAX_PORT   65535
+
+// tcp minimum range 
+#define TCP_MIN_PORT   1
+
 #endif /* _FPM_H */
diff --git a/zebra/zebra_fpm.c b/zebra/zebra_fpm.c
index e02d174..fa2bc3a 100644
--- a/zebra/zebra_fpm.c
+++ b/zebra/zebra_fpm.c
@@ -153,6 +153,7 @@
 
   zfpm_state_t state;
 
+  in_addr_t   fpm_server;
   /*
    * Port on which the FPM is running.
    */
@@ -1126,7 +1127,10 @@
 #ifdef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
   serv.sin_len = sizeof (struct sockaddr_in);
 #endif /* HAVE_STRUCT_SOCKADDR_IN_SIN_LEN */
-  serv.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
+  if (!zfpm_g->fpm_server)
+    serv.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
+  else 
+    serv.sin_addr.s_addr = (zfpm_g->fpm_server);
 
   /*
    * Connect to the FPM.
@@ -1518,6 +1522,86 @@
   return CMD_SUCCESS;
 }
 
+/*
+ * update fpm connection information 
+ */
+DEFUN ( fpm_remote_ip, 
+        fpm_remote_ip_cmd,
+        "fpm connection ip A.B.C.D port <1-65535>",
+        "fpm connection remote ip and port\n"
+        "Remote fpm server ip A.B.C.D\n"
+        "Enter ip ")
+{
+
+   in_addr_t fpm_server;
+   uint32_t port_no;
+
+   fpm_server = inet_addr (argv[0]);
+   if (fpm_server == INADDR_NONE)
+     return CMD_ERR_INCOMPLETE;
+
+   port_no = atoi (argv[1]);
+   if (port_no < TCP_MIN_PORT || port_no > TCP_MAX_PORT)
+     return CMD_ERR_INCOMPLETE;
+
+   if (zfpm_g->fpm_server == fpm_server && 
+      zfpm_g->fpm_port == port_no)
+      goto cmd_success;
+
+   zfpm_g->fpm_server = fpm_server;
+   zfpm_g->fpm_port = port_no;
+
+   if (zfpm_conn_is_up ())
+      zfpm_connection_down ("Restarting to new connection");
+
+cmd_success:
+   return CMD_SUCCESS;
+}
+
+DEFUN ( no_fpm_remote_ip, 
+        no_fpm_remote_ip_cmd,
+        "no fpm connection ip A.B.C.D port <1-65535>",
+        "fpm connection remote ip and port\n"
+        "Connection\n"
+        "Remote fpm server ip A.B.C.D\n"
+        "Enter ip ")
+{
+   if (zfpm_g->fpm_server != inet_addr (argv[0]) || 
+              zfpm_g->fpm_port !=  atoi (argv[1]))
+       return CMD_ERR_NO_MATCH;
+
+   zfpm_g->fpm_server = FPM_DEFAULT_IP;
+   zfpm_g->fpm_port = FPM_DEFAULT_PORT;
+
+   if (zfpm_conn_is_up ())
+      zfpm_connection_down ("Reverting backto default fpm connection");
+
+   return CMD_SUCCESS;
+}
+
+
+/**
+ * fpm_remote_srv_write 
+ *
+ * Module to write remote fpm connection 
+ *
+ * Returns ZERO on success.
+ */
+
+int fpm_remote_srv_write (struct vty *vty )
+{
+   struct in_addr in;
+
+   in.s_addr = zfpm_g->fpm_server;
+
+   if (zfpm_g->fpm_server != FPM_DEFAULT_IP || 
+          zfpm_g->fpm_port != FPM_DEFAULT_PORT)
+      vty_out (vty,"fpm connection ip %s port %d%s", inet_ntoa (in),zfpm_g->fpm_port,VTY_NEWLINE);
+
+   return 0;
+}
+
+
 /**
  * zfpm_init
  *
@@ -1561,11 +1645,16 @@
 
   install_element (ENABLE_NODE, &show_zebra_fpm_stats_cmd);
   install_element (ENABLE_NODE, &clear_zebra_fpm_stats_cmd);
+  install_element (CONFIG_NODE, &fpm_remote_ip_cmd);
+  install_element (CONFIG_NODE, &no_fpm_remote_ip_cmd);
 
   if (!enable) {
     return 1;
   }
 
+  if (!zfpm_g->fpm_server)
+     zfpm_g->fpm_server = FPM_DEFAULT_IP;
+
   if (!port)
     port = FPM_DEFAULT_PORT;
 
diff --git a/zebra/zserv.c b/zebra/zserv.c
index afd722a..4b67c28 100644
--- a/zebra/zserv.c
+++ b/zebra/zserv.c
@@ -1864,6 +1864,24 @@
   1
 };
 
+#ifdef HAVE_FPM
+/* function to write the fpm config info */
+static int 
+config_write_fpm (struct vty *vty)
+{
+  return 
+     fpm_remote_srv_write (vty);
+}
+
+/* Zebra node  */
+static struct cmd_node zebra_node = 
+{
+  ZEBRA_NODE,
+  "",
+  1
+};
+#endif
+
 
 /* Initialisation of zebra and installation of commands. */
 void
@@ -1875,6 +1893,9 @@
   /* Install configuration write function. */
   install_node (&table_node, config_write_table);
   install_node (&forwarding_node, config_write_forwarding);
+#ifdef HAVE_FPM
+  install_node (&zebra_node, config_write_fpm);
+#endif
 
   install_element (VIEW_NODE, &show_ip_forwarding_cmd);
   install_element (ENABLE_NODE, &show_ip_forwarding_cmd);
