diff --git a/relaxed.module b/relaxed.module
index f57e62f..05cf43f 100644
--- a/relaxed.module
+++ b/relaxed.module
@@ -6,6 +6,7 @@ use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\Core\Field\FieldDefinitionInterface;
 use Drupal\Core\Field\FieldItemListInterface;
+use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\relaxed\Entity\Remote;
 use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
@@ -205,3 +206,22 @@ function relaxed_entity_type_alter(array &$entity_types) {
     $entity_types['rest_resource_config']->setClass('Drupal\relaxed\Entity\RestResourceConfig');
   }
 }
+
+/**
+ * Implements hook_form_FORM_ID_alter().
+ */
+function relaxed_form_workspace_basic_edit_form_alter(&$form, FormStateInterface $form_state, $form_id) {
+  foreach ($form['upstream']['widget']['#options'] as $option) {
+    if (is_string($option) && substr($option, -1) == '*') {
+      $form['upstream']['widget']['#suffix'] = '<div class="description">* ' .
+        t('One or more options for selecting the target ' .
+          'workspace is/are disabled because the remote workspace could not ' .
+          'be accessed during the last availability check, this can happen ' .
+          'because of different reasons, for example network connection ' .
+          'issues. The availability of the remote workspace is checked on ' .
+          'every cron run and if it becomes available, the option to select ' .
+          'the workspace is activated again.') . '</div>';
+      return;
+    }
+  }
+}
diff --git a/src/CouchdbReplicator.php b/src/CouchdbReplicator.php
index a494dc9..f6a16f5 100644
--- a/src/CouchdbReplicator.php
+++ b/src/CouchdbReplicator.php
@@ -17,6 +17,7 @@ use Drupal\replication\ReplicationTask\ReplicationTaskInterface;
 use Drupal\workspace\ReplicatorInterface;
 use Drupal\workspace\WorkspacePointerInterface;
 use GuzzleHttp\Psr7\Uri;
+use Relaxed\Replicator\Exception\PeerNotReachableException;
 use Relaxed\Replicator\ReplicationTask as RelaxedReplicationTask;
 use Relaxed\Replicator\Replicator;
 use Symfony\Component\Validator\Exception\UnexpectedTypeException;
@@ -116,6 +117,9 @@ class CouchdbReplicator implements ReplicatorInterface{
       $this->dispatchReplicationFinishedEvent($source, $target, $log);
       return $log;
     }
+    catch (PeerNotReachableException $e) {
+      throw $e;
+    }
     catch (\Exception $e) {
       watchdog_exception('Relaxed', $e);
       $log = $this->errorReplicationLog($source, $target, $task);
diff --git a/src/RemotePointer.php b/src/RemotePointer.php
index 2e10bc1..5025f6c 100644
--- a/src/RemotePointer.php
+++ b/src/RemotePointer.php
@@ -97,32 +97,41 @@ class RemotePointer implements RemotePointerInterface {
       ->getStorage('workspace_pointer')
       ->loadByProperties(['remote_pointer' => $remote->id()]);
 
-    /** @var WorkspacePointerInterface $pointer */
-    foreach ($pointers as $pointer) {
-      // Loop over all the pointers for our given remote and compare the
-      // remote_database name with the ones we received from our remote.
-      $database_name = $pointer->get('remote_database')->value;
-      if (!empty($database_name) && !in_array($database_name, $databases)) {
-        $deployments = $this->entityTypeManager
-          ->getStorage('replication')
-          ->loadByProperties(['source' => $pointer->id()]);
-        $deployments += $this->entityTypeManager
-          ->getStorage('replication')
-          ->loadByProperties(['target' => $pointer->id()]);
-        /** @var Replication $deployment */
-        foreach ($deployments as $deployment) {
-          $replication_status = $deployment->get('replication_status')->value;
-          if (!in_array($replication_status, [Replication::QUEUED, Replication::REPLICATING])) {
-            continue;
+    if (empty($databases)) {
+      /** @var WorkspacePointerInterface $pointer */
+      foreach ($pointers as $pointer) {
+        // Set all remote workspaces as not available, maybe there is a
+        // connection problem and the remote is not available for the moment.
+        $pointer->setWorkspaceAvailable(FALSE)->save();
+      }
+    }
+    else {
+      /** @var WorkspacePointerInterface $pointer */
+      foreach ($pointers as $pointer) {
+        // Loop over all the pointers for our given remote and compare the
+        // remote_database name with the ones we received from our remote.
+        $database_name = $pointer->get('remote_database')->value;
+        if (!empty($database_name) && !in_array($database_name, $databases)) {
+          $deployments = $this->entityTypeManager
+            ->getStorage('replication')
+            ->loadByProperties(['source' => $pointer->id()]);
+          $deployments += $this->entityTypeManager
+            ->getStorage('replication')
+            ->loadByProperties(['target' => $pointer->id()]);
+          /** @var Replication $deployment */
+          foreach ($deployments as $deployment) {
+            $replication_status = $deployment->get('replication_status')->value;
+            if (!in_array($replication_status, [Replication::QUEUED, Replication::REPLICATING])) {
+              continue;
+            }
+            $deployment->set('fail_info', t('The workspace pointer does not exist, this could be caused by the missing source or target workspace.'));
+            $deployment->setReplicationStatusFailed()->save();
           }
-          $deployment->set('fail_info', t('The workspace pointer ' .
-            'does not exist, this could be cause by the missing source or ' .
-            'target workspace.'));
-          $deployment
-            ->setReplicationStatusFailed()
-            ->save();
+          $pointer->delete();
+        }
+        elseif (!$pointer->getWorkspaceAvailable()) {
+          $pointer->setWorkspaceAvailable()->save();
         }
-        $pointer->delete();
       }
     }
   }
