diff --git a/plugins/org.eclipse.oomph.setup.installer/src/org/eclipse/oomph/setup/internal/installer/SimpleVariablePage.java b/plugins/org.eclipse.oomph.setup.installer/src/org/eclipse/oomph/setup/internal/installer/SimpleVariablePage.java
index faae890..cf94b7f 100644
--- a/plugins/org.eclipse.oomph.setup.installer/src/org/eclipse/oomph/setup/internal/installer/SimpleVariablePage.java
+++ b/plugins/org.eclipse.oomph.setup.installer/src/org/eclipse/oomph/setup/internal/installer/SimpleVariablePage.java
@@ -849,18 +849,21 @@
     Installation installation = setupContext.getInstallation();
     final User user = setupContext.getUser();
 
-    UIUtil.syncExec(new Runnable()
+    if (UIUtil.isBrowserAvailable())
     {
-      public void run()
+      UIUtil.syncExec(new Runnable()
       {
-        EList<LicenseInfo> licenses = LicensePrePrompter.execute(getShell(), user);
-        if (licenses != null)
+        public void run()
         {
-          user.getAcceptedLicenses().addAll(licenses);
-          BaseUtil.saveEObject(user);
+          EList<LicenseInfo> licenses = LicensePrePrompter.execute(getShell(), user);
+          if (licenses != null)
+          {
+            user.getAcceptedLicenses().addAll(licenses);
+            BaseUtil.saveEObject(user);
+          }
         }
-      }
-    });
+      });
+    }
 
     UserAdjuster userAdjuster = new UserAdjuster();
     userAdjuster.adjust(user, installFolder);
diff --git a/plugins/org.eclipse.oomph.setup.ui/src/org/eclipse/oomph/setup/ui/wizards/ProgressPage.java b/plugins/org.eclipse.oomph.setup.ui/src/org/eclipse/oomph/setup/ui/wizards/ProgressPage.java
index 023d670..2a55d06 100644
--- a/plugins/org.eclipse.oomph.setup.ui/src/org/eclipse/oomph/setup/ui/wizards/ProgressPage.java
+++ b/plugins/org.eclipse.oomph.setup.ui/src/org/eclipse/oomph/setup/ui/wizards/ProgressPage.java
@@ -350,8 +350,8 @@
     }
     else
     {
-      launchButton = addCheckButton("Restart automatically if needed", "Restart the current product if the installation has been changed by setup tasks",
-          false, "restartIfNeeded");
+      launchButton = addCheckButton("Restart automatically if needed", "Restart the current product if the installation has been changed by setup tasks", false,
+          "restartIfNeeded");
     }
 
     launchAutomatically = launchButton.getSelection();
@@ -482,13 +482,16 @@
           }
         }
 
-        EList<LicenseInfo> licenses = LicensePrePrompter.execute(getShell(), performerUser);
-        if (licenses != null)
+        if (UIUtil.isBrowserAvailable())
         {
-          ResourceSet resourceSet = SetupCoreUtil.createResourceSet();
-          User user = SetupContext.createUserOnly(resourceSet).getUser();
-          user.getAcceptedLicenses().addAll(licenses);
-          BaseUtil.saveEObject(user);
+          EList<LicenseInfo> licenses = LicensePrePrompter.execute(getShell(), performerUser);
+          if (licenses != null)
+          {
+            ResourceSet resourceSet = SetupCoreUtil.createResourceSet();
+            User user = SetupContext.createUserOnly(resourceSet).getUser();
+            user.getAcceptedLicenses().addAll(licenses);
+            BaseUtil.saveEObject(user);
+          }
         }
       }
 
@@ -839,8 +842,7 @@
                     {
                       if (restart)
                       {
-                        setMessage(
-                            "Task execution has successfully completed but requires a restart.  Press Finish to restart now or Cancel to restart later.",
+                        setMessage("Task execution has successfully completed but requires a restart.  Press Finish to restart now or Cancel to restart later.",
                             IMessageProvider.WARNING);
                         setButtonState(IDialogConstants.CANCEL_ID, true);
 
@@ -855,8 +857,8 @@
                           setButtonState(IDialogConstants.CANCEL_ID, false);
                         }
 
-                        shell.setData(PROGRESS_STATUS, new Status(IStatus.OK, SetupEditPlugin.INSTANCE.getSymbolicName(),
-                            "Task execution has successfully completed"));
+                        shell.setData(PROGRESS_STATUS,
+                            new Status(IStatus.OK, SetupEditPlugin.INSTANCE.getSymbolicName(), "Task execution has successfully completed"));
                       }
                     }
                     else
