diff --git a/src/plugins/irc/irc-command.c b/src/plugins/irc/irc-command.c
index c4e21af..46e30cf 100644
--- a/src/plugins/irc/irc-command.c
+++ b/src/plugins/irc/irc-command.c
@@ -3073,18 +3073,20 @@ irc_command_notify (void *data, struct t_gui_buffer *buffer, int argc,
         {
             irc_notify_set_server_option (ptr_server);
             weechat_printf (ptr_server->buffer,
-                            _("%s: notification added for %s%s"),
+                            _("%s: notification added for %s%s%s"),
                             IRC_PLUGIN_NAME,
                             irc_nick_color_for_server_message (ptr_server,
                                                                NULL,
                                                                ptr_notify->nick),
-                            ptr_notify->nick);
+                            ptr_notify->nick,
+                            weechat_color("reset"));
             irc_notify_check_now (ptr_notify);
         }
         else
         {
-            weechat_printf (NULL, _("%s%s: error adding notification"),
-                            weechat_prefix ("error"), IRC_PLUGIN_NAME);
+            if (ptr_server->notify_limit_reached == 0)
+                weechat_printf (NULL, _("%s%s: error adding notification"),
+                                weechat_prefix ("error"), IRC_PLUGIN_NAME);
         }
 
         return WEECHAT_RC_OK;
@@ -3145,10 +3147,16 @@ irc_command_notify (void *data, struct t_gui_buffer *buffer, int argc,
             ptr_notify = irc_notify_search (ptr_server, argv[2]);
             if (ptr_notify)
             {
-                irc_notify_free (ptr_server, ptr_notify);
+                weechat_printf (ptr_server->buffer,
+                            _("%s: notification deleted for %s%s%s"),
+                                IRC_PLUGIN_NAME,
+                                irc_nick_color_for_server_message (ptr_server,
+                                                                   NULL,
+                                                                   ptr_notify->nick),
+                                ptr_notify->nick,
+                                weechat_color("reset"));
+                irc_notify_free (ptr_server, ptr_notify, 0);
                 irc_notify_set_server_option (ptr_server);
-                weechat_printf (NULL, _("%s: notification deleted"),
-                                IRC_PLUGIN_NAME);
             }
             else
             {
diff --git a/src/plugins/irc/irc-message.c b/src/plugins/irc/irc-message.c
index cfdca3c..722058c 100644
--- a/src/plugins/irc/irc-message.c
+++ b/src/plugins/irc/irc-message.c
@@ -785,6 +785,14 @@ irc_message_split (struct t_irc_server *server, const char *message)
         if (strlen (message) > 510)
             split_ok = irc_message_split_join (hashtable, host, arguments);
     }
+    else if (weechat_strcasecmp (command, "monitor") == 0)
+    {
+        split_ok = irc_message_split_string (hashtable, host, command,
+                                             NULL, "",
+                                             (argv_eol[index_args][0] == ' ') ?
+                                             argv_eol[index_args] + 1 : argv_eol[index_args],
+                                             NULL, ',', max_length_host);
+    }
     else if ((weechat_strcasecmp (command, "privmsg") == 0)
              || (weechat_strcasecmp (command, "notice") == 0))
     {
diff --git a/src/plugins/irc/irc-notify.c b/src/plugins/irc/irc-notify.c
index 546e707..05f8416 100644
--- a/src/plugins/irc/irc-notify.c
+++ b/src/plugins/irc/irc-notify.c
@@ -25,6 +25,8 @@
 #include <stddef.h>
 #include <stdio.h>
 #include <string.h>
+#include <sys/time.h>
+#include <time.h>
 
 #include "../weechat-plugin.h"
 #include "irc.h"
@@ -40,6 +42,7 @@
 /* timers to run "ison" and "whois" commands */
 struct t_hook *irc_notify_timer_ison = NULL;    /* timer for "ison"         */
 struct t_hook *irc_notify_timer_whois = NULL;   /* timer for "whois"        */
+struct t_hook *irc_notify_timer_monitor = NULL; /* timer to check for isupport */
 
 /* hsignal for redirected commands */
 struct t_hook *irc_notify_hsignal = NULL;
@@ -184,10 +187,36 @@ struct t_irc_notify *
 irc_notify_new (struct t_irc_server *server, const char *nick, int check_away)
 {
     struct t_irc_notify *new_notify;
+    struct t_irc_notify *ptr_notify;
+    const char *monitor_limit2;
+    int monitor_limit, i;
 
-    if (!server || !nick || !nick[0])
+    if (!server || !nick || !nick[0] || irc_notify_search (server, nick))
         return NULL;
 
+    /* count number of notify nicks and compare with monitor limit */
+    i = 0;
+    monitor_limit = 0;
+    monitor_limit2 = irc_server_get_isupport_value(server,"MONITOR");
+    if (monitor_limit2)
+    {
+        monitor_limit = atoi(monitor_limit2);
+        for (ptr_notify = server->notify_list; ptr_notify;
+             ptr_notify = ptr_notify->next_notify)
+        {
+            i ++;
+        }
+        if (i >= monitor_limit)
+        {
+            weechat_printf (server->buffer,
+                            "%snotify: limit of monitored nicks (%s) reached.",
+                            weechat_prefix ("error"), monitor_limit2);
+            server->notify_limit_reached = 1;
+            return NULL;
+        }else
+            server->notify_limit_reached = 0;
+    }
+
     new_notify = malloc (sizeof (*new_notify));
     if (new_notify)
     {
@@ -212,7 +241,7 @@ irc_notify_new (struct t_irc_server *server, const char *nick, int check_away)
 }
 
 /*
- * irc_notify_check_now: check now ison/whois for a notify (called when a
+ * irc_notify_check_now: check now ison/whois/monitor for a notify (called when a
  *                       notify is added)
  */
 
@@ -221,12 +250,21 @@ irc_notify_check_now (struct t_irc_notify *notify)
 {
     if (notify->server->is_connected)
     {
-        /* send the ISON for nick */
-        irc_redirect_new (notify->server, "ison", "notify", 1,
-                          NULL, 0, NULL);
-        irc_server_sendf (notify->server,
-                          IRC_SERVER_SEND_OUTQ_PRIO_LOW, NULL,
-                          "ISON :%s", notify->nick);
+        if (!irc_server_get_isupport_value(notify->server,"MONITOR"))
+        {
+            /* send ISON for nick */
+            irc_redirect_new (notify->server, "ison", "notify", 1,
+                              NULL, 0, NULL);
+            irc_server_sendf (notify->server,
+                              IRC_SERVER_SEND_OUTQ_PRIO_LOW, NULL,
+                              "ISON :%s", notify->nick);
+        }else
+        {
+            /* send MONITOR for nick */
+            irc_server_sendf (notify->server,
+                              IRC_SERVER_SEND_OUTQ_PRIO_LOW, NULL,
+                              "monitor + %s", notify->nick);
+        }
 
         if (notify->check_away)
         {
@@ -241,6 +279,121 @@ irc_notify_check_now (struct t_irc_notify *notify)
 }
 
 /*
+ * irc_notify_connected_to_server: build notify list and send MONITOR/ISON on connection
+ */
+
+void
+irc_notify_connected_to_server (struct t_irc_server *server)
+{
+    const char *notify;
+    char **items, *pos_params, **params, *notify_list, *notify_list2;
+    int i, j, num_items, num_params, check_away, size, num_notify, use_monitor;
+
+    notify = IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_NOTIFY);
+
+    if (!notify || !notify[0] || !server->is_connected)
+        return;
+
+    items = weechat_string_split (notify, ",", 0, 0, &num_items);
+
+    if (items)
+    {
+        for (i = 0; i < num_items; i++)
+        {
+            check_away = 0;
+            pos_params = strchr (items[i], ' ');
+            if (pos_params)
+            {
+                pos_params[0] = '\0';
+                pos_params++;
+                while (pos_params[0] == ' ')
+                {
+                    pos_params++;
+                }
+                params = weechat_string_split (pos_params, "/", 0, 0,
+                                               &num_params);
+                if (params)
+                {
+                    for (j = 0; j < num_params; j++)
+                    {
+                        if (weechat_strcasecmp (params[j], "away") == 0)
+                            check_away = 1;
+                    }
+                    weechat_string_free_split (params);
+                }
+            }
+            irc_notify_new (server, items[i], check_away);
+        }
+        /* build notify_list */
+
+        size = 1;
+        notify_list = malloc (size);
+        if (!notify_list)
+            return;
+
+        notify_list[0] = '\0';
+        num_notify = 0;
+        use_monitor = 0;
+
+        if (irc_server_get_isupport_value(server,"MONITOR"))
+            use_monitor = 1;
+
+        for (i = 0; i < num_items; i++)
+        {
+            size += strlen (items[i]) + ((notify_list[0]) ? 1 : 0);
+            notify_list2 = realloc (notify_list, size);
+            if (!notify_list2)
+            {
+                free (notify_list2);
+                break;
+            }
+            notify_list = notify_list2;
+            if (notify_list[0])
+                strcat (notify_list, (use_monitor == 0) ? " " : ",");
+            strcat (notify_list, items[i]);
+            num_notify++;
+            if ((num_items >= 0) && (num_notify == num_items))
+                break;
+        }
+        weechat_string_free_split (items);
+    }
+
+    /* send MONITOR / ISON only once, with all notify nicks */
+    if (use_monitor > 0)
+            irc_server_sendf (server,
+                              IRC_SERVER_SEND_OUTQ_PRIO_LOW, NULL,
+                              "monitor + %s", notify_list);
+    else
+    {
+            irc_redirect_new (server, "ison", "notify", 1,
+                              NULL, 0, NULL);
+            irc_server_sendf (server,
+                              IRC_SERVER_SEND_OUTQ_PRIO_LOW, NULL,
+                              "ISON :%s", notify_list);
+    }
+        if (!notify_list[0])
+            free (notify_list);
+}
+
+/*
+ * irc_notify_change_status_server_disconnect: change notify list for offline server
+ */
+
+void
+irc_notify_change_status_server_disconnect (struct t_irc_server *server)
+{
+    struct t_irc_notify *ptr_notify;
+
+    if (server->notify_list)
+        for (ptr_notify = server->notify_list; ptr_notify;
+             ptr_notify = ptr_notify->next_notify)
+        {
+            ptr_notify->is_on_server = -1;
+            server->command_for_notify = -1;
+        }
+}
+
+/*
  * irc_notify_new_for_server: create notify list for server with option
  *                            "irc.server.xxx.notify"
  */
@@ -277,6 +430,7 @@ irc_notify_new_for_server (struct t_irc_server *server)
                 }
                 params = weechat_string_split (pos_params, "/", 0, 0,
                                                &num_params);
+                
                 if (params)
                 {
                     for (j = 0; j < num_params; j++)
@@ -315,13 +469,18 @@ irc_notify_new_for_all_servers ()
  */
 
 void
-irc_notify_free (struct t_irc_server *server, struct t_irc_notify *notify)
+irc_notify_free (struct t_irc_server *server, struct t_irc_notify *notify, int clear_all)
 {
     weechat_hook_signal_send ("irc_notify_removing",
                               WEECHAT_HOOK_SIGNAL_POINTER, notify);
 
     /* free data */
     if (notify->nick)
+        if (irc_server_get_isupport_value(server,"MONITOR") && (!clear_all) && (server->is_connected) && !irc_signal_upgrade_received)
+            /* send MONITOR for nick to remove one nick */
+            irc_server_sendf (notify->server,
+                              IRC_SERVER_SEND_OUTQ_PRIO_LOW, NULL,
+                              "monitor - %s", notify->nick);
         free (notify->nick);
     if (notify->away_message)
         free (notify->away_message);
@@ -349,9 +508,16 @@ irc_notify_free (struct t_irc_server *server, struct t_irc_notify *notify)
 void
 irc_notify_free_all (struct t_irc_server *server)
 {
+    /* free all nicknames being monitored at once */
+    if (irc_server_get_isupport_value(server,"MONITOR") && (server->is_connected) && !irc_signal_upgrade_received)
+        irc_server_sendf (server,
+                          IRC_SERVER_SEND_OUTQ_PRIO_LOW, NULL,
+                          "monitor c");
+
+    /* free notify list */
     while (server->notify_list)
     {
-        irc_notify_free (server, server->notify_list);
+        irc_notify_free (server, server->notify_list,1);
     }
 }
 
@@ -839,7 +1005,9 @@ irc_notify_timer_ison_cb (void *data, int remaining_calls)
     for (ptr_server = irc_servers; ptr_server;
          ptr_server = ptr_server->next_server)
     {
-        if (ptr_server->is_connected && ptr_server->notify_list)
+        if (ptr_server->is_connected
+            && ptr_server->notify_list
+            && (!irc_server_get_isupport_value(ptr_server,"MONITOR")))
         {
             message = malloc (7);
             if (!message)
@@ -951,6 +1119,36 @@ irc_notify_timer_whois_cb (void *data, int remaining_calls)
     return WEECHAT_RC_OK;
 }
 
+int
+irc_notify_timer_monitor_cb (void *data, int remaining_calls)
+{
+    struct t_irc_server *ptr_server;
+
+    /* make C compiler happy */
+    (void) data;
+    (void) remaining_calls;
+
+    for (ptr_server = irc_servers; ptr_server;
+         ptr_server = ptr_server->next_server)
+    {
+        if (ptr_server->is_connected
+            && (ptr_server->command_for_notify < 0))
+        {
+            if (irc_server_get_isupport_value(ptr_server,"MONITOR"))
+            {   /* use monitor */
+                irc_notify_connected_to_server(ptr_server);
+                ptr_server->command_for_notify = 0;
+            }else
+            {   /* use ison */
+                irc_notify_connected_to_server(ptr_server);
+                ptr_server->command_for_notify = 1;
+            }
+        }
+    }
+
+    return WEECHAT_RC_OK;
+}
+
 /*
  * irc_notify_hdata_notify_cb: return hdata for notify
  */
@@ -1068,6 +1266,17 @@ irc_notify_hook_timer_whois ()
         0, 0, &irc_notify_timer_whois_cb, NULL);
 }
 
+void
+irc_notify_hook_timer_monitor ()
+{
+    if (irc_notify_timer_monitor)
+        weechat_unhook (irc_notify_timer_monitor);
+
+    irc_notify_timer_monitor = weechat_hook_timer (
+        3 * 1000,
+        0, 1, &irc_notify_timer_monitor_cb, NULL);
+}
+
 /*
  * irc_notify_init: hook timers and hsignals
  */
@@ -1094,6 +1303,8 @@ irc_notify_end ()
         weechat_unhook (irc_notify_timer_ison);
     if (irc_notify_timer_whois)
         weechat_unhook (irc_notify_timer_whois);
+    if (irc_notify_timer_monitor)
+        weechat_unhook (irc_notify_timer_monitor);
     if (irc_notify_hsignal)
         weechat_unhook (irc_notify_hsignal);
 }
diff --git a/src/plugins/irc/irc-notify.h b/src/plugins/irc/irc-notify.h
index d5e2acc..612a615 100644
--- a/src/plugins/irc/irc-notify.h
+++ b/src/plugins/irc/irc-notify.h
@@ -52,9 +52,14 @@ extern struct t_irc_notify *irc_notify_new (struct t_irc_server *server,
                                             int check_away);
 extern void irc_notify_check_now (struct t_irc_notify *notify);
 extern void irc_notify_new_for_server (struct t_irc_server *server);
+extern void irc_notify_change_status_server_disconnect (struct t_irc_server *server);
+extern void irc_notify_hook_timer_monitor ();
 extern void irc_notify_new_for_all_servers ();
+extern void irc_notify_connected_to_server (struct t_irc_server *server);
 extern void irc_notify_free (struct t_irc_server *server,
-                             struct t_irc_notify *notify);
+                             struct t_irc_notify *notify, int clear_all);
+extern void irc_notify_set_is_on_server (struct t_irc_notify *notify,
+                                         int is_on_server);
 extern void irc_notify_free_all (struct t_irc_server *server);
 extern void irc_notify_display_list (struct t_irc_server *server);
 extern int irc_notify_timer_ison_cb (void *data, int remaining_calls);
diff --git a/src/plugins/irc/irc-protocol.c b/src/plugins/irc/irc-protocol.c
index 81c9d0f..d942f7e 100644
--- a/src/plugins/irc/irc-protocol.c
+++ b/src/plugins/irc/irc-protocol.c
@@ -50,6 +50,7 @@
 #include "irc-nick.h"
 #include "irc-sasl.h"
 #include "irc-server.h"
+#include "irc-notify.h"
 
 
 /*
@@ -1988,6 +1989,9 @@ IRC_PROTOCOL_CALLBACK(001)
     /* connection to IRC server is ok! */
     server->is_connected = 1;
     server->reconnect_delay = 0;
+    server->connect_to_server = time (NULL);
+    irc_notify_hook_timer_monitor ();
+
     if (server->hook_timer_connection)
     {
         weechat_unhook (server->hook_timer_connection);
@@ -4423,6 +4427,94 @@ IRC_PROTOCOL_CALLBACK(729)
 }
 
 /*
+ * irc_protocol_cb_730: '730' command received RPL_MONONLINE
+ */
+
+IRC_PROTOCOL_CALLBACK(730)
+{
+    struct t_irc_notify *ptr_notify;
+
+    const char *monitor_nick;
+    char **nick_requested;
+    int i,num_nick_requested;
+
+    /* 730 message looks like
+     *   :<server> 730 mynick :nick!user@host[,nick!user@host]*
+     */
+
+    IRC_PROTOCOL_MIN_ARGS(4);
+
+    nick_requested = weechat_string_split (argv[3], ",", 0, 0,
+                                            &num_nick_requested);
+
+    if (nick_requested)
+        for (i = 0; i < num_nick_requested; i++)
+        {
+            monitor_nick = irc_message_get_nick_from_host (nick_requested[i]);
+            ptr_notify = irc_notify_search (server, monitor_nick);
+            if (ptr_notify)
+                irc_notify_set_is_on_server(ptr_notify,1);
+        }
+    if (nick_requested)
+        weechat_string_free_split (nick_requested);
+
+    return WEECHAT_RC_OK;
+}
+
+/*
+ * irc_protocol_cb_731: '731' command received RPL_MONOFFLINE
+ */
+
+IRC_PROTOCOL_CALLBACK(731)
+{
+    struct t_irc_notify *ptr_notify;
+
+    const char *monitor_nick;
+    char **nick_requested;
+    int i,num_nick_requested;
+
+    /* 730 message looks like
+     *   :<server> 731 mynick :nick[,nick2]
+     */
+
+    IRC_PROTOCOL_MIN_ARGS(4);
+
+    nick_requested = weechat_string_split (argv[3], ",", 0, 0,
+                                            &num_nick_requested);
+
+    if (nick_requested)
+        for (i = 0; i < num_nick_requested; i++)
+        {
+            monitor_nick = irc_message_get_nick_from_host (nick_requested[i]);
+            ptr_notify = irc_notify_search (server, monitor_nick);
+            if (ptr_notify)
+                irc_notify_set_is_on_server(ptr_notify,0);
+        }
+    if (nick_requested)
+        weechat_string_free_split (nick_requested);
+
+    return WEECHAT_RC_OK;
+}
+
+/*
+ * irc_protocol_cb_734: '734' command received ERR_MONLISTFULL
+ */
+
+IRC_PROTOCOL_CALLBACK(734)
+{
+    /*
+     * 734 message looks like:
+     *   :<server> 734 <nick> <limit> <nicks> :Monitor list is full.
+    */
+    IRC_PROTOCOL_MIN_ARGS(5);
+    weechat_printf (server->buffer,
+                            "%snotify: limit of monitored nicks (%s) reached.",
+                            weechat_prefix ("error"), argv[3]);
+
+    return WEECHAT_RC_OK;
+}
+
+/*
  * irc_protocol_cb_900: '900' command (logged in as (SASL))
  */
 
@@ -4658,6 +4750,9 @@ irc_protocol_recv_command (struct t_irc_server *server,
           { "671", /* whois (secure connection) */ 1, 0, &irc_protocol_cb_whois_nick_msg },
           { "728", /* quietlist */ 1, 0, &irc_protocol_cb_728 },
           { "729", /* end of quietlist */ 1, 0, &irc_protocol_cb_729 },
+          { "730", /* RPL_MONONLINE */ 1, 0, &irc_protocol_cb_730 },
+          { "731", /* RPL_MONOFFLINE */ 1, 0, &irc_protocol_cb_731 },
+          { "734", /* ERR_MONLISTFULL */ 1, 0, &irc_protocol_cb_734 },
           { "900", /* logged in as (SASL) */ 1, 0, &irc_protocol_cb_900 },
           { "901", /* you are now logged in */ 1, 0, &irc_protocol_cb_901 },
           { "903", /* SASL authentication successful */ 1, 0, &irc_protocol_cb_sasl_end },
diff --git a/src/plugins/irc/irc-server.c b/src/plugins/irc/irc-server.c
index 018cb59..a2906b8 100644
--- a/src/plugins/irc/irc-server.c
+++ b/src/plugins/irc/irc-server.c
@@ -905,6 +905,9 @@ irc_server_alloc (const char *name)
     new_server->casemapping = IRC_SERVER_CASEMAPPING_RFC1459;
     new_server->chantypes = NULL;
     new_server->chanmodes = NULL;
+    new_server->notify_limit_reached = 0;
+    new_server->command_for_notify = -1;
+    new_server->connect_to_server = 0;
     new_server->reconnect_delay = 0;
     new_server->reconnect_start = 0;
     new_server->command_time = 0;
@@ -3990,6 +3993,9 @@ irc_server_disconnect (struct t_irc_server *server, int switch_address,
 
     server->disconnected = 1;
 
+    /* change notify list on disconnected server */
+    irc_notify_change_status_server_disconnect (server);
+
     /* send signal "irc_server_disconnected" with server name */
     weechat_hook_signal_send ("irc_server_disconnected",
                               WEECHAT_HOOK_SIGNAL_STRING, server->name);
@@ -4464,6 +4470,9 @@ irc_server_hdata_server_cb (void *data, const char *hdata_name)
         WEECHAT_HDATA_VAR(struct t_irc_server, casemapping, INTEGER, 0, NULL, NULL);
         WEECHAT_HDATA_VAR(struct t_irc_server, chantypes, STRING, 0, NULL, NULL);
         WEECHAT_HDATA_VAR(struct t_irc_server, chanmodes, STRING, 0, NULL, NULL);
+        WEECHAT_HDATA_VAR(struct t_irc_server, notify_limit_reached, INTEGER, 0, NULL, NULL);
+        WEECHAT_HDATA_VAR(struct t_irc_server, command_for_notify, INTEGER, 0, NULL, NULL);
+        WEECHAT_HDATA_VAR(struct t_irc_server, connect_to_server, TIME, 0, NULL, NULL);
         WEECHAT_HDATA_VAR(struct t_irc_server, reconnect_delay, INTEGER, 0, NULL, NULL);
         WEECHAT_HDATA_VAR(struct t_irc_server, reconnect_start, TIME, 0, NULL, NULL);
         WEECHAT_HDATA_VAR(struct t_irc_server, command_time, TIME, 0, NULL, NULL);
@@ -4668,6 +4677,12 @@ irc_server_add_to_infolist (struct t_infolist *infolist,
         return 0;
     if (!weechat_infolist_new_var_string (ptr_item, "chanmodes", server->chanmodes))
         return 0;
+    if (!weechat_infolist_new_var_integer (ptr_item, "notify_limit_reached", server->notify_limit_reached))
+        return 0;
+    if (!weechat_infolist_new_var_integer (ptr_item, "command_for_notify", server->command_for_notify))
+        return 0;
+    if (!weechat_infolist_new_var_time (ptr_item, "connect_to_server", server->connect_to_server))
+        return 0;
     if (!weechat_infolist_new_var_integer (ptr_item, "reconnect_delay", server->reconnect_delay))
         return 0;
     if (!weechat_infolist_new_var_time (ptr_item, "reconnect_start", server->reconnect_start))
@@ -4986,6 +5001,9 @@ irc_server_print_log ()
                             irc_server_casemapping_string[ptr_server->casemapping]);
         weechat_log_printf ("  chantypes. . . . . . : '%s'",  ptr_server->chantypes);
         weechat_log_printf ("  chanmodes. . . . . . : '%s'",  ptr_server->chanmodes);
+        weechat_log_printf ("  notify_limit_reached : %d",    ptr_server->notify_limit_reached);
+        weechat_log_printf ("  command_for_notify . : %d",    ptr_server->command_for_notify);
+        weechat_log_printf ("  connect_to_server. . : %ld",   ptr_server->connect_to_server);
         weechat_log_printf ("  reconnect_delay. . . : %d",    ptr_server->reconnect_delay);
         weechat_log_printf ("  reconnect_start. . . : %ld",   ptr_server->reconnect_start);
         weechat_log_printf ("  command_time . . . . : %ld",   ptr_server->command_time);
diff --git a/src/plugins/irc/irc-server.h b/src/plugins/irc/irc-server.h
index c8911c3..cced5ec 100644
--- a/src/plugins/irc/irc-server.h
+++ b/src/plugins/irc/irc-server.h
@@ -179,12 +179,16 @@ struct t_irc_server
     char *chanmodes;                /* chanmodes from msg 005                */
                                     /* (eg "beI,k,l,imnpstaqr")              */
     int reconnect_delay;            /* current reconnect delay (growing)     */
+    time_t connect_to_server;       /* time, when connection to server was   */
+                                    /* established                           */
     time_t reconnect_start;         /* this time + delay = reconnect time    */
     time_t command_time;            /* this time + command_delay = time to   */
                                     /* autojoin channels                     */
     int reconnect_join;             /* 1 if channels opened to rejoin        */
     int disable_autojoin;           /* 1 if user asked to not autojoin chans */
     int is_away;                    /* 1 is user is marked as away           */
+    int command_for_notify;         /* 0 if monitor, 1 if ison               */
+    int notify_limit_reached;       /* 1 if limit is reached                 */
     char *away_message;             /* away message, NULL if not away        */
     time_t away_time;               /* time() when user marking as away      */
     int lag;                        /* lag (in milliseconds)                 */
diff --git a/src/plugins/irc/irc-upgrade.c b/src/plugins/irc/irc-upgrade.c
index 83eff4d..467729a 100644
--- a/src/plugins/irc/irc-upgrade.c
+++ b/src/plugins/irc/irc-upgrade.c
@@ -395,6 +395,8 @@ irc_upgrade_read_cb (void *data,
                         if (str)
                             irc_upgrade_current_server->chanmodes = strdup (str);
                     }
+                    irc_upgrade_current_server->command_for_notify = weechat_infolist_integer (infolist, "command_for_notify");
+                    irc_upgrade_current_server->connect_to_server = weechat_infolist_time (infolist, "connect_to_server");
                     irc_upgrade_current_server->reconnect_delay = weechat_infolist_integer (infolist, "reconnect_delay");
                     irc_upgrade_current_server->reconnect_start = weechat_infolist_time (infolist, "reconnect_start");
                     irc_upgrade_current_server->command_time = weechat_infolist_time (infolist, "command_time");
