diff --git a/bundles/org.eclipse.epp.logging.aeri.core/src/org/eclipse/epp/logging/aeri/core/SystemControl.java b/bundles/org.eclipse.epp.logging.aeri.core/src/org/eclipse/epp/logging/aeri/core/SystemControl.java
index 7f6beff..45dd5ed 100644
--- a/bundles/org.eclipse.epp.logging.aeri.core/src/org/eclipse/epp/logging/aeri/core/SystemControl.java
+++ b/bundles/org.eclipse.epp.logging.aeri.core/src/org/eclipse/epp/logging/aeri/core/SystemControl.java
@@ -98,7 +98,7 @@
     }
 
     public static boolean isDebug() {
-        return getSystemSettings().isDebugEnabled();
+        return Constants.DEBUG || getSystemSettings().isDebugEnabled();
     }
 
     public static void registerHandlers(Class<?>... handlers) {
diff --git a/bundles/org.eclipse.epp.logging.aeri.core/src/org/eclipse/epp/logging/aeri/core/filters/DecoratingDebugFilter.java b/bundles/org.eclipse.epp.logging.aeri.core/src/org/eclipse/epp/logging/aeri/core/filters/DecoratingDebugFilter.java
index 60b77c4..93da5f8 100644
--- a/bundles/org.eclipse.epp.logging.aeri.core/src/org/eclipse/epp/logging/aeri/core/filters/DecoratingDebugFilter.java
+++ b/bundles/org.eclipse.epp.logging.aeri.core/src/org/eclipse/epp/logging/aeri/core/filters/DecoratingDebugFilter.java
@@ -7,8 +7,6 @@
  */
 package org.eclipse.epp.logging.aeri.core.filters;
 
-import static org.eclipse.epp.logging.aeri.core.Constants.DEBUG;
-
 import java.text.MessageFormat;
 
 import org.eclipse.core.runtime.ILog;
@@ -17,6 +15,7 @@
 import org.eclipse.core.runtime.Status;
 import org.eclipse.epp.logging.aeri.core.Constants;
 import org.eclipse.epp.logging.aeri.core.IReport;
+import org.eclipse.epp.logging.aeri.core.SystemControl;
 import org.eclipse.jdt.annotation.Nullable;
 import org.osgi.framework.FrameworkUtil;
 
@@ -48,7 +47,7 @@
     @Override
     public boolean apply(@Nullable T input) {
         boolean apply = predicate.apply(input);
-        if (!apply && DEBUG) {
+        if (!apply && SystemControl.isDebug()) {
             if (input instanceof IStatus) {
                 debugStatus((IStatus) input);
             } else if (input instanceof IReport) {
diff --git a/bundles/org.eclipse.epp.logging.aeri.core/src/org/eclipse/epp/logging/aeri/core/util/Logs.java b/bundles/org.eclipse.epp.logging.aeri.core/src/org/eclipse/epp/logging/aeri/core/util/Logs.java
index 2a41fad..754f326 100644
--- a/bundles/org.eclipse.epp.logging.aeri.core/src/org/eclipse/epp/logging/aeri/core/util/Logs.java
+++ b/bundles/org.eclipse.epp.logging.aeri.core/src/org/eclipse/epp/logging/aeri/core/util/Logs.java
@@ -26,7 +26,7 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
-import org.eclipse.epp.logging.aeri.core.Constants;
+import org.eclipse.epp.logging.aeri.core.SystemControl;
 import org.eclipse.epp.logging.aeri.core.l10n.LogMessages;
 import org.eclipse.jdt.annotation.Nullable;
 import org.osgi.framework.Bundle;
@@ -390,7 +390,7 @@
     }
 
     public static void debug(String message, Throwable throwable, Object... args) {
-        if (Constants.DEBUG) {
+        if (SystemControl.isDebug()) {
             LogMessages log = new LogMessages(IStatus.INFO, 404, message);
             log(log, throwable, args);
         }
diff --git a/bundles/org.eclipse.epp.logging.aeri.ide/src/org/eclipse/epp/internal/logging/aeri/ide/notifications/MylynNotificationsSupport.java b/bundles/org.eclipse.epp.logging.aeri.ide/src/org/eclipse/epp/internal/logging/aeri/ide/notifications/MylynNotificationsSupport.java
index 8709b07..95ce710 100644
--- a/bundles/org.eclipse.epp.logging.aeri.ide/src/org/eclipse/epp/internal/logging/aeri/ide/notifications/MylynNotificationsSupport.java
+++ b/bundles/org.eclipse.epp.logging.aeri.ide/src/org/eclipse/epp/internal/logging/aeri/ide/notifications/MylynNotificationsSupport.java
@@ -12,7 +12,6 @@
 import static org.eclipse.epp.internal.logging.aeri.ide.IDEWorkflow.TOPIC_BASE;
 import static org.eclipse.epp.internal.logging.aeri.ide.utils.IDEConstants.BUNDLE_ID;
 import static org.eclipse.epp.internal.logging.aeri.ide.utils.Servers.sort;
-import static org.eclipse.epp.logging.aeri.core.Constants.DEBUG;
 
 import java.util.List;
 import java.util.Set;
@@ -27,6 +26,7 @@
 import org.eclipse.epp.internal.logging.aeri.ide.ILogEventGroup;
 import org.eclipse.epp.internal.logging.aeri.ide.IServerDescriptor;
 import org.eclipse.epp.internal.logging.aeri.ide.l10n.LogMessages;
+import org.eclipse.epp.logging.aeri.core.SystemControl;
 import org.eclipse.epp.logging.aeri.core.util.Logs;
 import org.eclipse.mylyn.commons.notifications.ui.NotificationsUi;
 
@@ -102,7 +102,7 @@
     }
 
     private void testIsNotificationInProgress() {
-        if (DEBUG && isNotificationInProgress()) {
+        if (SystemControl.isDebug() && isNotificationInProgress()) {
             Logs.log(LogMessages.DEBUG_NOTIFICATION_IN_PROGRESS, ImmutableList.of(displayed));
         }
     }
diff --git a/bundles/org.eclipse.epp.logging.aeri.ide/src/org/eclipse/epp/internal/logging/aeri/ide/server/mars/ServerProblemsHistory.java b/bundles/org.eclipse.epp.logging.aeri.ide/src/org/eclipse/epp/internal/logging/aeri/ide/server/mars/ServerProblemsHistory.java
index 7343bbd..7c5fcff 100644
--- a/bundles/org.eclipse.epp.logging.aeri.ide/src/org/eclipse/epp/internal/logging/aeri/ide/server/mars/ServerProblemsHistory.java
+++ b/bundles/org.eclipse.epp.logging.aeri.ide/src/org/eclipse/epp/internal/logging/aeri/ide/server/mars/ServerProblemsHistory.java
@@ -15,6 +15,7 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.net.UnknownHostException;
 import java.util.concurrent.CancellationException;
 import java.util.concurrent.TimeUnit;
 
@@ -302,6 +303,9 @@
                 return Status.OK_STATUS;
             } catch (CancellationException e) {
                 return Status.CANCEL_STATUS;
+            } catch (UnknownHostException e) {
+                Logs.debug("Failed to connect to server", e);
+                return Status.CANCEL_STATUS;
             } catch (Exception e) {
                 log(WARN_INDEX_UPDATE_FAILED, e);
                 return Status.OK_STATUS;
diff --git a/bundles/org.eclipse.epp.logging.aeri.ide/src/org/eclipse/epp/internal/logging/aeri/ide/utils/UploadReportsScheduler.java b/bundles/org.eclipse.epp.logging.aeri.ide/src/org/eclipse/epp/internal/logging/aeri/ide/utils/UploadReportsScheduler.java
index cb3397d..e871db7 100644
--- a/bundles/org.eclipse.epp.logging.aeri.ide/src/org/eclipse/epp/internal/logging/aeri/ide/utils/UploadReportsScheduler.java
+++ b/bundles/org.eclipse.epp.logging.aeri.ide/src/org/eclipse/epp/internal/logging/aeri/ide/utils/UploadReportsScheduler.java
@@ -11,6 +11,7 @@
 import static org.eclipse.epp.internal.logging.aeri.ide.l10n.LogMessages.WARN_RESPONSE_UPLOAD_REPORT_FAILED;
 import static org.eclipse.epp.internal.logging.aeri.ide.utils.Formats.format;
 
+import java.net.UnknownHostException;
 import java.util.concurrent.ConcurrentLinkedQueue;
 
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -52,6 +53,13 @@
             IProblemState response = cx.submit(event.getStatus(), event.getContext(), SubMonitor.convert(monitor, 1));
             checkNotNull(response, "Server returned null response"); //$NON-NLS-1$
             event.setResponse(response);
+        } catch (UnknownHostException e) {
+            Logs.debug("Failed to connect to server ''{0}''", e, server.getName());
+            IProblemState response = IModelFactory.eINSTANCE.createProblemState();
+            response.setStatus(ProblemStatus.FAILURE);
+            response.setMessage(
+                    format(Messages.RESPONSE_REPORT_UPLOAD_FAILED, server.getName(), "Unknown Host Exception: " + e.getMessage()));
+            event.setResponse(response);
         } catch (Exception e) {
             Logs.log(WARN_RESPONSE_UPLOAD_REPORT_FAILED, e, server.getName(), e.getMessage());
             IProblemState response = IModelFactory.eINSTANCE.createProblemState();
@@ -81,8 +89,7 @@
 
     public void schedule(ILogEventGroup group) {
         if (group == null) {
-            Logs.warn(
-                    "Got a NULL log event group. Please comment on bug 494165 if you know how to reproduce this error.");
+            Logs.warn("Got a NULL log event group. Please comment on bug 494165 if you know how to reproduce this error.");
             return;
         }
         uploadQueue.add(group);
