/**
  * An update would exceed the update interval. Prints out a warning message.
+ * @param override_log_level Override log level with zero if true
  * @param current_time Current time.
  * @param old_time Time of update #MaxUpdatesWithinInterval ago.
  * @param MaxUpdatesWithinInterval Number of allowed updates in one update interval.
  * @param service The service which exceeds update interval.
  */
-void Logger::print_update_not_allowed(const time_t current_time, const time_t old_time, const int MaxUpdatesWithinInterval, const string& service)
+void Logger::print_update_not_allowed(bool override_log_level, const time_t current_time, const time_t old_time, const int MaxUpdatesWithinInterval, const string& service)
 {
     int level = 1;
+
+    if (override_log_level)
+        level = 0;
+
     if ( (level <= Loglevel) || ((level <= ExternalWarningLevel) && (!ExternalWarningLog.empty())) )
     {
         ostringstream msg;
 
 
     void print_multiple_main_conf_option(const std::string& main_conf_file, const std::string& message) const;
 
-    void print_update_not_allowed(const time_t current_time, const time_t old_time, const int MaxUpdatesWithinInterval, const std::string& service);
+    void print_update_not_allowed(bool override_log_level, const time_t current_time, const time_t old_time, const int MaxUpdatesWithinInterval, const std::string& service);
 
     void print_update_service_failure(const std::string& service);
 
 
 /**
  * Checks if update will exceed max update interval.
  * @param current_time Current time.
+ * @param changed_to_online True if we just changed to online, false if we were already online
  * @return True if update is allowed, false if update would exceed max update interval.
  */
-bool Service::update_allowed(const time_t current_time)
+bool Service::update_allowed(const time_t current_time, bool changed_to_online)
 {
     list<time_t>::iterator iter;
     int i=0;
     {
         if ( (i == (MaxUpdatesWithinInterval-1)) && ( (*iter + ((time_t)UpdateInterval*60)) >= current_time ) )
         {
-            Log->print_update_not_allowed(current_time,*iter,MaxUpdatesWithinInterval,get_service_name());
+            Log->print_update_not_allowed(changed_to_online, current_time,*iter,MaxUpdatesWithinInterval,get_service_name());
             return false;
         }
         i++;
 /**
  * Service update method, common to each service.
  * @param ip The new ip to set for the hostname.
+ * @param current_time Current time
+ * @param changed_to_online True if we just changed to online, false if we were already online
  */
-void Service::update(const string& ip, const time_t current_time)
+void Service::update(const string& ip, const time_t current_time, bool changed_to_online)
 {
     const std::string service_name = get_service_name();
 
         return;
     }
 
-    Log->print_update_service(service_name);
-
     // test if update is permitted by UpdateInterval Status
-    if ( update_allowed(current_time) )
+    if ( update_allowed(current_time, changed_to_online) )
     {
+        Log->print_update_service(service_name);
+
         if ( perform_update(ip) == 0 )
         {
             // if update was successful, we need to set the Lastupdated and ActualIP base member.
 
 
     virtual int perform_update(const std::string& ip) = 0;
 
-    void update(const std::string& ip, const time_t current_time);
+    void update(const std::string& ip, const time_t current_time, bool changed_to_online);
 
-    bool update_allowed(const time_t current_time);
+    bool update_allowed(const time_t current_time, bool changed_to_online);
 
     void set_last_update(const time_t current_time);
 
 
         {
             // Update
             Log->print_update_service(hostname, ip_dns_recheck, ip_last_update, ip_host, lastupdated);
-            service->update(ip_host,current_time);
+            service->update(ip_host, current_time, changed_to_online);
         }
         else
         {
             {
                 // Update
                 Log->print_update_service_ttl_expired(hostname, ip_dns_recheck, ip_last_update, ip_host, lastupdated, dns_cache_ttl, current_time);
-                service->update(ip_host,current_time);
+                service->update(ip_host, current_time, changed_to_online);
             }
             else
             {