diff --git a/providers/iCloud/32.svg b/providers/iCloud/32.svg
new file mode 100644
index 00000000..da43ef58
--- /dev/null
+++ b/providers/iCloud/32.svg
@@ -0,0 +1,325 @@
+
+
diff --git a/providers/iCloud/48.svg b/providers/iCloud/48.svg
new file mode 100644
index 00000000..87c2d12b
--- /dev/null
+++ b/providers/iCloud/48.svg
@@ -0,0 +1,293 @@
+
+
diff --git a/providers/iCloud/com.icloud.calendar.service b/providers/iCloud/com.icloud.calendar.service
new file mode 100644
index 00000000..e69de29b
diff --git a/providers/iCloud/com.icloud.contacts.service b/providers/iCloud/com.icloud.contacts.service
new file mode 100644
index 00000000..e69de29b
diff --git a/providers/iCloud/com.icloud.mail.service b/providers/iCloud/com.icloud.mail.service
new file mode 100644
index 00000000..e69de29b
diff --git a/providers/iCloud/com.icloud.provider b/providers/iCloud/com.icloud.provider
new file mode 100644
index 00000000..4d0f5014
--- /dev/null
+++ b/providers/iCloud/com.icloud.provider
@@ -0,0 +1,15 @@
+
+
+ iCloud
+ Mail, Contacts, Calendars, and Tasks
+ io.elementary.online-accounts.icloud
+ online-accounts-plug
+ icloud
+
+
+
+ icloud
+ icloud
+
+
+
diff --git a/providers/iCloud/com.icloud.tasks.service b/providers/iCloud/com.icloud.tasks.service
new file mode 100644
index 00000000..e69de29b
diff --git a/providers/iCloud/icloud.svg b/providers/iCloud/icloud.svg
deleted file mode 100644
index 9d7b65e7..00000000
--- a/providers/iCloud/icloud.svg
+++ /dev/null
@@ -1,270 +0,0 @@
-
-
-
-
diff --git a/providers/iCloud/meson.build b/providers/iCloud/meson.build
new file mode 100644
index 00000000..93d9c63a
--- /dev/null
+++ b/providers/iCloud/meson.build
@@ -0,0 +1,30 @@
+provider_rdnn = 'io.elementary.online-accounts.icloud'
+
+install_data(
+ 'com.icloud.provider',
+ install_dir: providers_dir
+)
+
+install_data(
+ 'com.icloud.calendar.service',
+ 'com.icloud.contacts.service',
+ 'com.icloud.mail.service',
+ 'com.icloud.tasks.service',
+ install_dir: services_dir,
+)
+
+icon_sizes = ['32', '48']
+
+foreach i : icon_sizes
+ install_data(
+ i + '.svg',
+ install_dir: join_paths(hicolor_dir, i + 'x' + i, 'apps'),
+ rename: provider_rdnn + '.svg'
+ )
+ install_data(
+ i + '.svg',
+ install_dir: join_paths(hicolor_dir, i + 'x' + i + '@2', 'apps'),
+ rename: provider_rdnn + '.svg'
+
+ )
+endforeach
diff --git a/providers/meson.build b/providers/meson.build
index 9567d726..74f46eb5 100644
--- a/providers/meson.build
+++ b/providers/meson.build
@@ -4,6 +4,7 @@ services_dir = libaccounts_dep.get_pkgconfig_variable('servicefilesdir')
subdir('Facebook')
subdir('FastMail')
subdir('Google')
+subdir('iCloud')
subdir('LastFM')
subdir('Mail')
subdir('Microsoft')
diff --git a/src/Authentification/iCloudDialog.vala b/src/Authentification/iCloudDialog.vala
new file mode 100644
index 00000000..b2aa45b8
--- /dev/null
+++ b/src/Authentification/iCloudDialog.vala
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2013-2019 elementary, Inc. (https://elementary.io)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ */
+
+public class OnlineAccounts.iCloudDialog : OnlineAccounts.Dialog {
+ public iCloudDialog (GLib.HashTable params) {
+ base (params);
+
+ var info_label = new Gtk.Label (_("Loading…"));
+
+ var spinner = new Gtk.Spinner ();
+ spinner.start ();
+
+ var back_button = new Gtk.Button.with_label (_("Back"));
+ back_button.halign = Gtk.Align.START;
+ back_button.margin = 6;
+ back_button.get_style_context ().add_class (Granite.STYLE_CLASS_BACK_BUTTON);
+
+ var container_grid = new Gtk.Grid ();
+ container_grid.column_spacing = 6;
+ container_grid.valign = Gtk.Align.CENTER;
+ container_grid.add (info_label);
+ container_grid.add (spinner);
+
+ var header_box = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 6);
+ header_box.hexpand = true;
+ header_box.add (back_button);
+ header_box.set_center_widget (container_grid);
+
+
+ attach (header_box, 0, 0);
+ attach (new Gtk.Separator (Gtk.Orientation.HORIZONTAL), 0, 1);
+ show_all ();
+
+ back_button.clicked.connect (() => {
+ error_code = OnlineAccounts.SignonUIError.CANCELED;
+ finished ();
+ });
+ }
+
+ public override bool refresh_captcha (string uri) {
+ return true;
+ }
+}
diff --git a/src/meson.build b/src/meson.build
index f3ecdb97..21581893 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -4,6 +4,7 @@ plug_files = files(
'Plug.vala',
'Authentification/DialogService.vala',
'Authentification/Dialog.vala',
+ 'Authentification/iCloudDialog.vala',
'Authentification/Key.vala',
'Authentification/MailDialog.vala',
'Authentification/PasswordDialog.vala',