[evolution/wip/mcrha/eds-libical-glib] Changes for src/plugins/ and most of the src/modules/



commit ce3f023ffc29f1a3b291db5d6cb534811cc8322c
Author: Milan Crha <mcrha redhat com>
Date:   Thu Mar 28 18:27:22 2019 +0100

    Changes for src/plugins/ and most of the src/modules/

 src/calendar/gui/comp-util.c                       |   2 +-
 src/calendar/gui/e-cal-list-view.c                 |  10 +
 src/calendar/gui/e-cal-list-view.h                 |  10 +-
 src/e-util/test-source-selector.c                  |  32 +--
 src/modules/alarm-notify/alarm-notify.c            |  22 ++-
 src/modules/calendar/e-cal-attachment-handler.c    | 113 +++++------
 src/modules/calendar/e-cal-base-shell-backend.c    | 121 ++++--------
 src/modules/calendar/e-cal-base-shell-sidebar.c    |  25 +--
 src/modules/calendar/e-cal-shell-content.c         | 195 +++++++++---------
 src/modules/calendar/e-cal-shell-view-actions.c    | 219 +++++++++------------
 src/modules/calendar/e-cal-shell-view-memopad.c    |  20 +-
 src/modules/calendar/e-cal-shell-view-private.c    | 106 ++++++----
 src/modules/calendar/e-cal-shell-view-taskpad.c    |  24 +--
 src/modules/calendar/e-cal-shell-view.c            |  13 +-
 src/modules/calendar/e-calendar-preferences.c      |  34 ++--
 src/modules/calendar/e-memo-shell-content.c        |  25 ++-
 src/modules/calendar/e-memo-shell-view-actions.c   |  16 +-
 src/modules/calendar/e-task-shell-content.c        |  30 ++-
 src/modules/calendar/e-task-shell-view-actions.c   |  16 +-
 src/modules/calendar/e-task-shell-view.c           |   9 +-
 .../composer-to-meeting/e-composer-to-meeting.c    |  65 +++---
 .../composer-to-meeting/e-meeting-to-composer.c    |  64 +++---
 src/modules/settings/e-settings-cal-model.c        |   8 +-
 src/modules/settings/e-settings-client-cache.c     |   8 +-
 src/modules/settings/e-settings-meeting-store.c    |   8 +-
 src/plugins/mail-to-task/mail-to-task.c            | 134 +++++++------
 src/plugins/pst-import/pst-importer.c              | 183 +++++++++--------
 src/plugins/publish-calendar/publish-format-fb.c   |  26 +--
 src/plugins/publish-calendar/publish-format-ical.c |  32 +--
 src/plugins/save-calendar/CMakeLists.txt           |   1 +
 src/plugins/save-calendar/csv-format.c             | 118 +++++------
 src/plugins/save-calendar/format-handler.h         |   1 +
 src/plugins/save-calendar/ical-format.c            |  32 +--
 src/plugins/save-calendar/rdf-format.c             | 116 +++++------
 34 files changed, 890 insertions(+), 948 deletions(-)
---
diff --git a/src/calendar/gui/comp-util.c b/src/calendar/gui/comp-util.c
index 75676b929d..064e44aa71 100644
--- a/src/calendar/gui/comp-util.c
+++ b/src/calendar/gui/comp-util.c
@@ -272,7 +272,7 @@ cal_comp_is_on_server_sync (ECalComponent *comp,
 /**
  * cal_comp_is_icalcomp_on_server_sync:
  * The same as cal_comp_is_on_server_sync(), only the component parameter is
- * icalcomponent, not the ECalComponent.
+ * ICalComponent, not the ECalComponent.
  **/
 gboolean
 cal_comp_is_icalcomp_on_server_sync (ICalComponent *icomp,
diff --git a/src/calendar/gui/e-cal-list-view.c b/src/calendar/gui/e-cal-list-view.c
index 73d8b58a82..ee90c72ccc 100644
--- a/src/calendar/gui/e-cal-list-view.c
+++ b/src/calendar/gui/e-cal-list-view.c
@@ -648,6 +648,14 @@ e_cal_list_view_get_visible_time_range (ECalendarView *cal_view,
        return FALSE;
 }
 
+ETable *
+e_cal_list_view_get_table (ECalListView *cal_list_view)
+{
+       g_return_val_if_fail (E_IS_CAL_LIST_VIEW (cal_list_view), NULL);
+
+       return cal_list_view->priv->table;
+}
+
 gboolean
 e_cal_list_view_get_range_shown (ECalListView *cal_list_view,
                                  GDate *start_date,
@@ -656,6 +664,8 @@ e_cal_list_view_get_range_shown (ECalListView *cal_list_view,
        time_t  first, last;
        GDate   end_date;
 
+       g_return_val_if_fail (E_IS_CAL_LIST_VIEW (cal_list_view), FALSE);
+
        if (!e_cal_list_view_get_visible_time_range (E_CALENDAR_VIEW (cal_list_view), &first, &last))
                return FALSE;
 
diff --git a/src/calendar/gui/e-cal-list-view.h b/src/calendar/gui/e-cal-list-view.h
index 72973f7c99..985955d4a0 100644
--- a/src/calendar/gui/e-cal-list-view.h
+++ b/src/calendar/gui/e-cal-list-view.h
@@ -69,12 +69,12 @@ struct _ECalListViewClass {
        ECalendarViewClass parent_class;
 };
 
-GType             e_cal_list_view_get_type             (void);
-ECalendarView *e_cal_list_view_new                     (ECalModel *cal_model);
-
-gboolean   e_cal_list_view_get_range_shown      (ECalListView *cal_list_view, GDate *start_date,
+GType          e_cal_list_view_get_type        (void);
+ECalendarView *        e_cal_list_view_new             (ECalModel *cal_model);
+ETable *       e_cal_list_view_get_table       (ECalListView *cal_list_view);
+gboolean       e_cal_list_view_get_range_shown (ECalListView *cal_list_view,
+                                                GDate *start_date,
                                                 gint *days_shown);
-
 gboolean       e_cal_list_view_is_editing      (ECalListView *eclv);
 
 G_END_DECLS
diff --git a/src/e-util/test-source-selector.c b/src/e-util/test-source-selector.c
index f1bbb1197d..5677a1c9cf 100644
--- a/src/e-util/test-source-selector.c
+++ b/src/e-util/test-source-selector.c
@@ -270,12 +270,15 @@ cal_view_objects_added_cb (ECalClientView *client_view,
                g_slist_length ((GSList *) objects));
 
        for (link = (GSList *) objects; link; link = g_slist_next (link)) {
-               icalcomponent *icalcomp = link->data;
+               ICalComponent *icomp = link->data;
 
-               if (icalcomp)
-                       g_print ("%s\n    -----------------------------\n", icalcomponent_as_ical_string 
(icalcomp));
-               else
+               if (icomp) {
+                       gchar *str = i_cal_component_as_ical_string_r (icomp);
+                       g_print ("%s\n    -----------------------------\n", str);
+                       g_free (str);
+               } else {
                        g_print ("\tnull\n");
+               }
        }
 }
 
@@ -290,11 +293,13 @@ cal_view_objects_modified_cb (ECalClientView *client_view,
                g_slist_length ((GSList *) objects));
 
        for (link = (GSList *) objects; link; link = g_slist_next (link)) {
-               icalcomponent *icalcomp = link->data;
+               ICalComponent *icomp = link->data;
 
-               if (icalcomp)
-                       g_print ("%s\n    -----------------------------\n", icalcomponent_as_ical_string 
(icalcomp));
-               else
+               if (icomp) {
+                       gchar *str = i_cal_component_as_ical_string_r (icomp);
+                       g_print ("%s\n    -----------------------------\n", str);
+                       g_free (str);
+               } else
                        g_print ("\tnull\n");
        }
 }
@@ -458,18 +463,19 @@ create_view_clicked_cb (GtkWidget *button,
                gchar *expr = NULL;
 
                if (e_cal_client_get_source_type (E_CAL_CLIENT (client)) == E_CAL_CLIENT_SOURCE_TYPE_EVENTS) {
-                       struct icaltimetype tt;
+                       ICalTime *tt;
                        gchar *start, *end;
 
-                       tt = icaltime_today ();
-                       start = isodate_from_time_t (icaltime_as_timet (tt));
-                       icaltime_adjust (&tt, 14, 0, 0, 0);
-                       end = isodate_from_time_t (icaltime_as_timet (tt));
+                       tt = i_cal_time_today ();
+                       start = isodate_from_time_t (i_cal_time_as_timet (tt));
+                       i_cal_time_adjust (tt, 14, 0, 0, 0);
+                       end = isodate_from_time_t (i_cal_time_as_timet (tt));
 
                        expr = g_strdup_printf (
                                "(occur-in-time-range? (make-time \"%s\") (make-time \"%s\") \"UTC\")",
                                start, end);
 
+                       g_clear_object (&tt);
                        g_free (start);
                        g_free (end);
                }
diff --git a/src/modules/alarm-notify/alarm-notify.c b/src/modules/alarm-notify/alarm-notify.c
index e3cdaba2ba..7a374f66da 100644
--- a/src/modules/alarm-notify/alarm-notify.c
+++ b/src/modules/alarm-notify/alarm-notify.c
@@ -66,7 +66,7 @@ alarm_notify_module_map_string_to_icaltimezone (GValue *value,
 {
        GSettings *settings;
        const gchar *location = NULL;
-       icaltimezone *timezone = NULL;
+       ICalTimezone *timezone = NULL;
 
        settings = e_util_ref_settings ("org.gnome.evolution.calendar");
 
@@ -76,12 +76,12 @@ alarm_notify_module_map_string_to_icaltimezone (GValue *value,
                location = g_variant_get_string (variant, NULL);
 
        if (location && *location)
-               timezone = icaltimezone_get_builtin_timezone (location);
+               timezone = i_cal_timezone_get_builtin_timezone (location);
 
        if (!timezone)
-               timezone = icaltimezone_get_utc_timezone ();
+               timezone = i_cal_timezone_get_utc_timezone ();
 
-       g_value_set_boxed (value, timezone);
+       g_value_set_object (value, timezone);
 
        g_object_unref (settings);
 
@@ -91,7 +91,7 @@ alarm_notify_module_map_string_to_icaltimezone (GValue *value,
 static void
 alarm_notify_module_format_time_cb (EReminderWatcher *watcher,
                                    const EReminderData *rd,
-                                   struct icaltimetype *itt,
+                                   ICalTime *itt,
                                    gchar **inout_buffer,
                                    gint buffer_size)
 {
@@ -105,7 +105,7 @@ alarm_notify_module_format_time_cb (EReminderWatcher *watcher,
        g_return_if_fail (buffer_size > 0);
 
        tm = e_cal_util_icaltime_to_tm (itt);
-       text = e_datetime_format_format_tm ("calendar", "table", itt->is_date ? DTFormatKindDate : 
DTFormatKindDateTime, &tm);
+       text = e_datetime_format_format_tm ("calendar", "table", i_cal_time_is_date (itt) ? DTFormatKindDate 
: DTFormatKindDateTime, &tm);
 
        if (text) {
                g_snprintf (*inout_buffer, buffer_size, "%s", text);
@@ -118,15 +118,17 @@ alarm_notify_module_row_activated_cb (ERemindersWidget *reminders,
                                      const EReminderData *rd,
                                      gpointer user_data)
 {
+       ECalComponent *comp;
        const gchar *scheme = NULL;
        const gchar *comp_uid = NULL;
 
        g_return_val_if_fail (E_IS_REMINDERS_WIDGET (reminders), FALSE);
        g_return_val_if_fail (rd != NULL, FALSE);
 
-       e_cal_component_get_uid (rd->component, &comp_uid);
+       comp = e_reminder_data_get_component (rd);
+       comp_uid = e_cal_component_get_uid (comp);
 
-       switch (e_cal_component_get_vtype (rd->component)) {
+       switch (e_cal_component_get_vtype (comp)) {
                case E_CAL_COMPONENT_EVENT:
                        scheme = "calendar:";
                        break;
@@ -140,7 +142,7 @@ alarm_notify_module_row_activated_cb (ERemindersWidget *reminders,
                        break;
        }
 
-       if (scheme && comp_uid && rd->source_uid) {
+       if (scheme && comp_uid && e_reminder_data_get_source_uid (rd)) {
                GString *cmd;
                gchar *tmp;
                GError *error = NULL;
@@ -152,7 +154,7 @@ alarm_notify_module_row_activated_cb (ERemindersWidget *reminders,
                g_string_append (cmd, scheme);
                g_string_append (cmd, "///?");
 
-               tmp = g_uri_escape_string (rd->source_uid, NULL, TRUE);
+               tmp = g_uri_escape_string (e_reminder_data_get_source_uid (rd), NULL, TRUE);
                g_string_append (cmd, "source-uid=");
                g_string_append (cmd, tmp);
                g_free (tmp);
diff --git a/src/modules/calendar/e-cal-attachment-handler.c b/src/modules/calendar/e-cal-attachment-handler.c
index 62112e3258..b3e7e0faee 100644
--- a/src/modules/calendar/e-cal-attachment-handler.c
+++ b/src/modules/calendar/e-cal-attachment-handler.c
@@ -42,7 +42,7 @@ struct _ECalAttachmentHandlerPrivate {
 
 struct _ImportContext {
        ECalClient *client;
-       icalcomponent *component;
+       ICalComponent *component;
        ECalClientSourceType source_type;
 };
 
@@ -59,15 +59,15 @@ static const gchar *ui =
 "  </popup>"
 "</ui>";
 
-static icalcomponent *
+static ICalComponent *
 attachment_handler_get_component (EAttachment *attachment)
 {
        CamelDataWrapper *wrapper;
        CamelMimePart *mime_part;
        CamelStream *stream;
        GByteArray *buffer;
-       icalcomponent *component;
-       const gchar *key = "__icalcomponent__";
+       ICalComponent *component;
+       const gchar *key = "__ICalComponent__";
 
        component = g_object_get_data (G_OBJECT (attachment), key);
        if (component != NULL)
@@ -109,9 +109,7 @@ attachment_handler_get_component (EAttachment *attachment)
        if (component == NULL)
                return NULL;
 
-       g_object_set_data_full (
-               G_OBJECT (attachment), key, component,
-               (GDestroyNotify) icalcomponent_free);
+       g_object_set_data_full (G_OBJECT (attachment), key, component, g_object_unref);
 
        return component;
 }
@@ -119,7 +117,7 @@ attachment_handler_get_component (EAttachment *attachment)
 typedef struct {
        EShell *shell;
        ESource *source;
-       icalcomponent *icalcomp;
+       ICalComponent *icomp;
        const gchar *extension_name;
 } ImportComponentData;
 
@@ -131,8 +129,7 @@ import_component_data_free (gpointer ptr)
        if (icd) {
                g_clear_object (&icd->shell);
                g_clear_object (&icd->source);
-               if (icd->icalcomp)
-                       icalcomponent_free (icd->icalcomp);
+               g_clear_object (&icd->icomp);
                g_free (icd);
        }
 }
@@ -144,9 +141,9 @@ import_component_thread (EAlertSinkThreadJobData *job_data,
                         GError **error)
 {
        ImportComponentData *icd = user_data;
-       icalcomponent_kind need_kind = ICAL_ANY_COMPONENT;
-       icalcomponent *subcomp, *vcalendar;
-       icalcompiter iter;
+       ICalComponentKind need_kind = I_CAL_ANY_COMPONENT;
+       ICalComponent *subcomp, *vcalendar;
+       ICalCompIter *iter;
        EClient *e_client;
        ECalClient *client = NULL;
 
@@ -160,60 +157,62 @@ import_component_thread (EAlertSinkThreadJobData *job_data,
                return;
 
        if (g_str_equal (icd->extension_name, E_SOURCE_EXTENSION_CALENDAR))
-               need_kind = ICAL_VEVENT_COMPONENT;
+               need_kind = I_CAL_VEVENT_COMPONENT;
        else if (g_str_equal (icd->extension_name, E_SOURCE_EXTENSION_MEMO_LIST))
-               need_kind = ICAL_VJOURNAL_COMPONENT;
+               need_kind = I_CAL_VJOURNAL_COMPONENT;
        else if (g_str_equal (icd->extension_name, E_SOURCE_EXTENSION_TASK_LIST))
-               need_kind = ICAL_VTODO_COMPONENT;
+               need_kind = I_CAL_VTODO_COMPONENT;
 
-       if (need_kind == ICAL_ANY_COMPONENT) {
+       if (need_kind == I_CAL_ANY_COMPONENT) {
                g_warn_if_reached ();
                goto out;
        }
 
-       iter = icalcomponent_begin_component (icd->icalcomp, ICAL_ANY_COMPONENT);
+       iter = i_cal_component_begin_component (icd->icomp, I_CAL_ANY_COMPONENT);
+       subcomp = i_cal_comp_iter_deref (iter);
+       while (subcomp) {
+               ICalComponent *next_subcomp;
+               ICalComponentKind kind;
 
-       while ((subcomp = icalcompiter_deref (&iter)) != NULL) {
-               icalcomponent_kind kind;
+               next_subcomp = i_cal_comp_iter_next (iter);
 
-               kind = icalcomponent_isa (subcomp);
-               icalcompiter_next (&iter);
-
-               if (kind == need_kind)
-                       continue;
-
-               if (kind == ICAL_VTIMEZONE_COMPONENT)
-                       continue;
+               kind = i_cal_component_isa (subcomp);
+               if (kind != need_kind &&
+                   kind != I_CAL_VTIMEZONE_COMPONENT) {
+                       i_cal_component_remove_component (icd->icomp, subcomp);
+               }
 
-               icalcomponent_remove_component (icd->icalcomp, subcomp);
-               icalcomponent_free (subcomp);
+               g_object_unref (subcomp);
+               subcomp = next_subcomp;
        }
 
-       switch (icalcomponent_isa (icd->icalcomp)) {
-               case ICAL_VEVENT_COMPONENT:
-               case ICAL_VJOURNAL_COMPONENT:
-               case ICAL_VTODO_COMPONENT:
+       g_clear_object (&iter);
+
+       switch (i_cal_component_isa (icd->icomp)) {
+               case I_CAL_VEVENT_COMPONENT:
+               case I_CAL_VJOURNAL_COMPONENT:
+               case I_CAL_VTODO_COMPONENT:
                        vcalendar = e_cal_util_new_top_level ();
-                       if (icalcomponent_get_method (icd->icalcomp) == ICAL_METHOD_CANCEL)
-                               icalcomponent_set_method (vcalendar, ICAL_METHOD_CANCEL);
+                       if (i_cal_component_get_method (icd->icomp) == I_CAL_METHOD_CANCEL)
+                               i_cal_component_set_method (vcalendar, I_CAL_METHOD_CANCEL);
                        else
-                               icalcomponent_set_method (vcalendar, ICAL_METHOD_PUBLISH);
-                       icalcomponent_add_component (vcalendar, icalcomponent_new_clone (icd->icalcomp));
+                               i_cal_component_set_method (vcalendar, I_CAL_METHOD_PUBLISH);
+                       i_cal_component_take_component (vcalendar, i_cal_component_new_clone (icd->icomp));
                        break;
 
-               case ICAL_VCALENDAR_COMPONENT:
-                       vcalendar = icalcomponent_new_clone (icd->icalcomp);
-                       if (!icalcomponent_get_first_property (vcalendar, ICAL_METHOD_PROPERTY))
-                               icalcomponent_set_method (vcalendar, ICAL_METHOD_PUBLISH);
+               case I_CAL_VCALENDAR_COMPONENT:
+                       vcalendar = i_cal_component_new_clone (icd->icomp);
+                       if (!e_cal_util_component_has_property (vcalendar, I_CAL_METHOD_PROPERTY))
+                               i_cal_component_set_method (vcalendar, I_CAL_METHOD_PUBLISH);
                        break;
 
                default:
                        goto out;
        }
 
-       e_cal_client_receive_objects_sync (client, vcalendar, cancellable, error);
+       e_cal_client_receive_objects_sync (client, vcalendar, E_CAL_OPERATION_FLAG_NONE, cancellable, error);
 
-       icalcomponent_free (vcalendar);
+       g_object_unref (vcalendar);
  out:
        g_clear_object (&client);
 }
@@ -239,7 +238,7 @@ attachment_handler_run_dialog (GtkWindow *parent,
        ESourceSelector *selector;
        ESource *source;
        const gchar *extension_name;
-       icalcomponent *component;
+       ICalComponent *component;
 
        switch (source_type) {
                case E_CAL_CLIENT_SOURCE_TYPE_EVENTS:
@@ -322,12 +321,12 @@ attachment_handler_run_dialog (GtkWindow *parent,
        if (source != NULL) {
                EShellView *shell_view;
                EActivity *activity;
-               icalcomponent *icalcomp;
+               ICalComponent *icomp;
                ImportComponentData *icd;
                const gchar *description;
                const gchar *alert_ident;
 
-               icalcomp = attachment_handler_get_component (attachment);
+               icomp = attachment_handler_get_component (attachment);
 
                switch (source_type) {
                        case E_CAL_CLIENT_SOURCE_TYPE_EVENTS:
@@ -353,7 +352,7 @@ attachment_handler_run_dialog (GtkWindow *parent,
                icd = g_new0 (ImportComponentData, 1);
                icd->shell = g_object_ref (shell);
                icd->source = g_object_ref (source);
-               icd->icalcomp = icalcomponent_new_clone (icalcomp);
+               icd->icomp = i_cal_component_new_clone (icomp);
                icd->extension_name = extension_name;
 
                activity = e_shell_view_submit_thread_job (shell_view, description, alert_ident,
@@ -444,9 +443,9 @@ cal_attachment_handler_update_actions (EAttachmentView *view)
        EAttachment *attachment;
        GtkAction *action;
        GList *selected;
-       icalcomponent *component;
-       icalcomponent *subcomponent;
-       icalcomponent_kind kind;
+       ICalComponent *component;
+       ICalComponent *subcomponent;
+       ICalComponentKind kind;
        gboolean is_vevent = FALSE;
        gboolean is_vjournal = FALSE;
        gboolean is_vtodo = FALSE;
@@ -462,15 +461,17 @@ cal_attachment_handler_update_actions (EAttachmentView *view)
        if (component == NULL)
                goto exit;
 
-       subcomponent = icalcomponent_get_inner (component);
+       subcomponent = i_cal_component_get_inner (component);
 
        if (subcomponent == NULL)
                goto exit;
 
-       kind = icalcomponent_isa (subcomponent);
-       is_vevent = (kind == ICAL_VEVENT_COMPONENT);
-       is_vjournal = (kind == ICAL_VJOURNAL_COMPONENT);
-       is_vtodo = (kind == ICAL_VTODO_COMPONENT);
+       kind = i_cal_component_isa (subcomponent);
+       is_vevent = (kind == I_CAL_VEVENT_COMPONENT);
+       is_vjournal = (kind == I_CAL_VJOURNAL_COMPONENT);
+       is_vtodo = (kind == I_CAL_VTODO_COMPONENT);
+
+       g_object_unref (subcomponent);
 
 exit:
        action = e_attachment_view_get_action (view, "import-to-calendar");
diff --git a/src/modules/calendar/e-cal-base-shell-backend.c b/src/modules/calendar/e-cal-base-shell-backend.c
index ba3b673203..bdc0c2468f 100644
--- a/src/modules/calendar/e-cal-base-shell-backend.c
+++ b/src/modules/calendar/e-cal-base-shell-backend.c
@@ -33,26 +33,6 @@
 #include "e-cal-base-shell-view.h"
 #include "e-cal-base-shell-backend.h"
 
-/*
- * FIXME: Remove this when there's a build time dependency on libical
- * 3.0.4 (where this is fixed). See
- * https://github.com/libical/libical/pull/335 and the implementation in
- * https://github.com/libical/libical/blob/master/src/libical/icalversion.h.cmake.
- */
-#if defined(ICAL_CHECK_VERSION) && defined(ICAL_MAJOR_VERSION) && defined(ICAL_MINOR_VERSION) && 
defined(ICAL_MICRO_VERSION)
-#undef ICAL_CHECK_VERSION
-#define ICAL_CHECK_VERSION(major,minor,micro)                          \
-    (ICAL_MAJOR_VERSION > (major) ||                                   \
-    (ICAL_MAJOR_VERSION == (major) && ICAL_MINOR_VERSION > (minor)) || \
-    (ICAL_MAJOR_VERSION == (major) && ICAL_MINOR_VERSION == (minor) && \
-    ICAL_MICRO_VERSION >= (micro)))
-#else
-#if defined(ICAL_CHECK_VERSION)
-#undef ICAL_CHECK_VERSION
-#endif
-#define ICAL_CHECK_VERSION(major,minor,micro) (0)
-#endif
-
 #define E_CAL_BASE_SHELL_BACKEND_GET_PRIVATE(obj) \
        (G_TYPE_INSTANCE_GET_PRIVATE \
        ((obj), E_TYPE_CAL_BASE_SHELL_BACKEND, ECalBaseShellBackendPrivate))
@@ -264,42 +244,7 @@ e_cal_base_shell_backend_class_init (ECalBaseShellBackendClass *class)
 static void
 e_cal_base_shell_backend_init (ECalBaseShellBackend *cal_base_shell_backend)
 {
-#if !ICAL_CHECK_VERSION(3, 0, 2)
-       icalarray *builtin_timezones;
-       gint ii;
-#endif
-
        cal_base_shell_backend->priv = E_CAL_BASE_SHELL_BACKEND_GET_PRIVATE (cal_base_shell_backend);
-
-#if !ICAL_CHECK_VERSION(3, 0, 2)
-       /* XXX Pre-load all built-in timezones in libical.
-        *
-        *     Built-in time zones in libical 0.43 are loaded on demand,
-        *     but not in a thread-safe manner, resulting in a race when
-        *     multiple threads call icaltimezone_load_builtin_timezone()
-        *     on the same time zone.  Until built-in time zone loading
-        *     in libical is made thread-safe, work around the issue by
-        *     loading all built-in time zones now, so libical's internal
-        *     time zone array will be fully populated before any threads
-        *     are spawned.
-        *
-        *     This is apparently fixed with additional locking in
-        *     libical 3.0.1 and 3.0.2:
-        *     https://github.com/libical/libical/releases/tag/v3.0.1
-        *     https://github.com/libical/libical/releases/tag/v3.0.2
-        */
-       builtin_timezones = icaltimezone_get_builtin_timezones ();
-       for (ii = 0; ii < builtin_timezones->num_elements; ii++) {
-               icaltimezone *zone;
-
-               zone = icalarray_element_at (builtin_timezones, ii);
-
-               /* We don't care about the component right now,
-                * we just need some function that will trigger
-                * icaltimezone_load_builtin_timezone(). */
-               icaltimezone_get_component (zone);
-       }
-#endif
 }
 
 void
@@ -363,7 +308,7 @@ typedef struct {
        gchar *comp_rid;
 
        ECalClient *cal_client;
-       icalcomponent *existing_icalcomp;
+       ICalComponent *existing_icomp;
 } HandleUriData;
 
 static void
@@ -380,15 +325,13 @@ handle_uri_data_free (gpointer ptr)
                comp_editor = e_comp_editor_open_for_component (NULL,
                        e_shell_backend_get_shell (hud->shell_backend),
                        e_client_get_source (E_CLIENT (hud->cal_client)),
-                       hud->existing_icalcomp, 0);
+                       hud->existing_icomp, 0);
 
                if (comp_editor)
                        gtk_window_present (GTK_WINDOW (comp_editor));
        }
 
-       if (hud->existing_icalcomp)
-               icalcomponent_free (hud->existing_icalcomp);
-
+       g_clear_object (&hud->existing_icomp);
        g_clear_object (&hud->cal_client);
        g_clear_object (&hud->shell_backend);
        g_free (hud->source_uid);
@@ -444,7 +387,7 @@ cal_base_shell_backend_handle_uri_thread (EAlertSinkThreadJobData *job_data,
                        hud->cal_client = E_CAL_CLIENT (client);
 
                        if (!e_cal_client_get_object_sync (hud->cal_client, hud->comp_uid,
-                               hud->comp_rid, &hud->existing_icalcomp, cancellable, &local_error))
+                               hud->comp_rid, &hud->existing_icomp, cancellable, &local_error))
                                g_clear_object (&hud->cal_client);
                }
        }
@@ -457,27 +400,28 @@ cal_base_shell_backend_handle_uri_thread (EAlertSinkThreadJobData *job_data,
 static void
 populate_g_date (GDate *date,
                  time_t utc_time,
-                 icaltimezone *zone)
+                 ICalTimezone *zone)
 {
-       struct icaltimetype icaltm;
+       ICalTime *itt;
 
        g_return_if_fail (date != NULL);
 
        if ((gint) utc_time == -1)
                return;
 
-       icaltm = icaltime_from_timet_with_zone (utc_time, FALSE, zone);
+       itt = i_cal_time_from_timet_with_zone (utc_time, FALSE, zone);
 
-       if (icaltime_is_null_time (icaltm) ||
-           !icaltime_is_valid_time (icaltm))
-               return;
+       if (itt && !i_cal_time_is_null_time (itt) &&
+           i_cal_time_is_valid_time (itt)) {
+               g_date_set_dmy (date, i_cal_time_get_day (itt), i_cal_time_get_month (itt), 
i_cal_time_get_year (itt));
+       }
 
-       g_date_set_dmy (date, icaltm.day, icaltm.month, icaltm.year);
+       g_clear_object (&itt);
 }
 
 static time_t
 convert_time_from_isodate (const gchar *text,
-                          icaltimezone *use_date_zone)
+                          ICalTimezone *use_date_zone)
 {
        time_t res;
 
@@ -487,10 +431,11 @@ convert_time_from_isodate (const gchar *text,
 
        /* Is it date only? Then use the date zone to match the right day */
        if (use_date_zone && strlen (text) == 8) {
-               struct icaltimetype itt;
+               ICalTime *itt;
 
-               itt = icaltime_from_timet_with_zone (res, TRUE, NULL);
-               res = icaltime_as_timet_with_zone (itt, use_date_zone);
+               itt = i_cal_time_from_timet_with_zone (res, TRUE, NULL);
+               res = i_cal_time_as_timet_with_zone (itt, use_date_zone);
+               g_clear_object (&itt);
        }
 
        return res;
@@ -516,7 +461,7 @@ e_cal_base_shell_backend_util_handle_uri (EShellBackend *shell_backend,
        GList *windows, *link;
        GDate start_date;
        GDate end_date;
-       icaltimezone *zone = NULL;
+       ICalTimezone *zone = NULL;
        const gchar *extension_name;
 
        g_return_val_if_fail (E_IS_CAL_BASE_SHELL_BACKEND (shell_backend), FALSE);
@@ -557,13 +502,13 @@ e_cal_base_shell_backend_util_handle_uri (EShellBackend *shell_backend,
                location = g_settings_get_string (settings, "timezone");
 
                if (location != NULL) {
-                       zone = icaltimezone_get_builtin_timezone (location);
+                       zone = i_cal_timezone_get_builtin_timezone (location);
                        g_free (location);
                }
        }
 
        if (zone == NULL)
-               zone = icaltimezone_get_utc_timezone ();
+               zone = i_cal_timezone_get_utc_timezone ();
 
        g_object_unref (settings);
 
@@ -645,7 +590,7 @@ e_cal_base_shell_backend_util_handle_uri (EShellBackend *shell_backend,
 
        if (new_ics) {
                gchar *content = NULL;
-               icalcomponent *icalcomp;
+               ICalComponent *icomp;
                GError *error = NULL;
 
                if (!g_file_get_contents (new_ics, &content, NULL, &error)) {
@@ -657,26 +602,26 @@ e_cal_base_shell_backend_util_handle_uri (EShellBackend *shell_backend,
                        goto exit;
                }
 
-               icalcomp = content ? icalcomponent_new_from_string (content) : NULL;
-               if (!icalcomp) {
+               icomp = content ? i_cal_component_new_from_string (content) : NULL;
+               if (!icomp) {
                        g_warning ("Cannot create new ics: File '%s' doesn't contain valid iCalendar 
component", new_ics);
                        g_free (content);
                        goto exit;
                }
 
-               if (icalcomponent_isa (icalcomp) == ICAL_VEVENT_COMPONENT &&
+               if (i_cal_component_isa (icomp) == I_CAL_VEVENT_COMPONENT &&
                    source_type != E_CAL_CLIENT_SOURCE_TYPE_EVENTS) {
                        g_warning ("Cannot create new ics: Expected %s, but got VEVENT", source_type == 
E_CAL_CLIENT_SOURCE_TYPE_TASKS ? "VTODO" : "VJOURNAL");
-               } else if (icalcomponent_isa (icalcomp) == ICAL_VJOURNAL_COMPONENT &&
+               } else if (i_cal_component_isa (icomp) == I_CAL_VJOURNAL_COMPONENT &&
                           source_type != E_CAL_CLIENT_SOURCE_TYPE_MEMOS) {
                        g_warning ("Cannot create new ics: Expected %s, but got VJOURNAL", source_type == 
E_CAL_CLIENT_SOURCE_TYPE_TASKS ? "VTODO" : "VEVENT");
-               } else if (icalcomponent_isa (icalcomp) == ICAL_VTODO_COMPONENT &&
+               } else if (i_cal_component_isa (icomp) == I_CAL_VTODO_COMPONENT &&
                           source_type != E_CAL_CLIENT_SOURCE_TYPE_TASKS) {
                        g_warning ("Cannot create new ics: Expected %s, but got VTODO", source_type == 
E_CAL_CLIENT_SOURCE_TYPE_MEMOS ? "VJOURNAL" : "VEVENT");
-               } else if (icalcomponent_isa (icalcomp) != ICAL_VEVENT_COMPONENT &&
-                          icalcomponent_isa (icalcomp) != ICAL_VJOURNAL_COMPONENT &&
-                          icalcomponent_isa (icalcomp) != ICAL_VTODO_COMPONENT) {
-                       g_warning ("Cannot create new ics: Received unexpected component type '%s'", 
icalcomponent_kind_to_string (icalcomponent_isa (icalcomp)));
+               } else if (i_cal_component_isa (icomp) != I_CAL_VEVENT_COMPONENT &&
+                          i_cal_component_isa (icomp) != I_CAL_VJOURNAL_COMPONENT &&
+                          i_cal_component_isa (icomp) != I_CAL_VTODO_COMPONENT) {
+                       g_warning ("Cannot create new ics: Received unexpected component type '%s'", 
i_cal_component_kind_to_string (i_cal_component_isa (icomp)));
                } else {
                        ECompEditor *comp_editor;
                        ESource *source = NULL;
@@ -692,7 +637,7 @@ e_cal_base_shell_backend_util_handle_uri (EShellBackend *shell_backend,
                        flags = E_COMP_EDITOR_FLAG_IS_NEW | E_COMP_EDITOR_FLAG_ORGANIZER_IS_USER |
                                (attendees ? E_COMP_EDITOR_FLAG_WITH_ATTENDEES : 0);
 
-                       comp_editor = e_comp_editor_open_for_component (NULL, shell, source, icalcomp, flags);
+                       comp_editor = e_comp_editor_open_for_component (NULL, shell, source, icomp, flags);
 
                        if (comp_editor)
                                gtk_window_present (GTK_WINDOW (comp_editor));
@@ -700,7 +645,7 @@ e_cal_base_shell_backend_util_handle_uri (EShellBackend *shell_backend,
                        g_clear_object (&source);
                }
 
-               icalcomponent_free (icalcomp);
+               g_object_unref (icomp);
                g_free (content);
        } else if (shell_window) {
                HandleUriData *hud;
@@ -718,7 +663,7 @@ e_cal_base_shell_backend_util_handle_uri (EShellBackend *shell_backend,
                hud->comp_uid = g_strdup (comp_uid);
                hud->comp_rid = g_strdup (comp_rid);
                hud->cal_client = NULL;
-               hud->existing_icalcomp = NULL;
+               hud->existing_icomp = NULL;
 
                registry = e_shell_get_registry (shell);
                source = e_source_registry_ref_source (registry, source_uid);
diff --git a/src/modules/calendar/e-cal-base-shell-sidebar.c b/src/modules/calendar/e-cal-base-shell-sidebar.c
index a0aabc40ac..64d541081d 100644
--- a/src/modules/calendar/e-cal-base-shell-sidebar.c
+++ b/src/modules/calendar/e-cal-base-shell-sidebar.c
@@ -460,7 +460,7 @@ typedef struct {
        ESource *source;
        ESource *destination;
        gboolean do_copy;
-       icalcomponent *icalcomp;
+       ICalComponent *icomp;
        EClientSelector *selector;
 } TransferItemToData;
 
@@ -473,10 +473,7 @@ transfer_item_to_data_free (gpointer ptr)
                g_clear_object (&titd->source);
                g_clear_object (&titd->destination);
                g_clear_object (&titd->selector);
-
-               if (titd->icalcomp)
-                       icalcomponent_free (titd->icalcomp);
-
+               g_clear_object (&titd->icomp);
                g_free (titd);
        }
 }
@@ -494,7 +491,7 @@ cal_base_shell_sidebar_transfer_thread (EAlertSinkThreadJobData *job_data,
        g_return_if_fail (E_IS_SOURCE (titd->source));
        g_return_if_fail (E_IS_SOURCE (titd->destination));
        g_return_if_fail (E_IS_CLIENT_SELECTOR (titd->selector));
-       g_return_if_fail (titd->icalcomp != NULL);
+       g_return_if_fail (titd->icomp != NULL);
 
        source_client = e_client_selector_get_client_sync (
                titd->selector, titd->source, FALSE, 30, cancellable, error);
@@ -509,7 +506,7 @@ cal_base_shell_sidebar_transfer_thread (EAlertSinkThreadJobData *job_data,
        }
 
        cal_comp_transfer_item_to_sync (E_CAL_CLIENT (source_client), E_CAL_CLIENT (destination_client),
-               titd->icalcomp, titd->do_copy, cancellable, error);
+               titd->icomp, titd->do_copy, cancellable, error);
 
        g_clear_object (&source_client);
        g_clear_object (&destination_client);
@@ -523,7 +520,7 @@ e_cal_base_shell_sidebar_selector_data_dropped (ESourceSelector *selector,
                                                guint info,
                                                ECalBaseShellSidebar *sidebar)
 {
-       icalcomponent *icalcomp = NULL;
+       ICalComponent *icomp = NULL;
        EActivity *activity;
        EShellView *shell_view;
        ESource *source = NULL;
@@ -549,9 +546,9 @@ e_cal_base_shell_sidebar_selector_data_dropped (ESourceSelector *selector,
                goto exit;
 
        source_uid = g_strdup (segments[0]);
-       icalcomp = icalparser_parse_string (segments[1]);
+       icomp = i_cal_parser_parse_string (segments[1]);
 
-       if (!icalcomp)
+       if (!icomp)
                goto exit;
 
        registry = e_source_selector_get_registry (selector);
@@ -591,10 +588,10 @@ e_cal_base_shell_sidebar_selector_data_dropped (ESourceSelector *selector,
        titd->source = g_object_ref (source);
        titd->destination = g_object_ref (destination);
        titd->do_copy = do_copy;
-       titd->icalcomp = icalcomp;
+       titd->icomp = icomp;
        titd->selector = g_object_ref (selector);
 
-       icalcomp = NULL;
+       icomp = NULL;
 
        activity = e_shell_view_submit_thread_job (shell_view, message,
                alert_ident, display_name, cal_base_shell_sidebar_transfer_thread,
@@ -603,9 +600,7 @@ e_cal_base_shell_sidebar_selector_data_dropped (ESourceSelector *selector,
        g_clear_object (&activity);
 
  exit:
-       if (icalcomp)
-               icalcomponent_free (icalcomp);
-
+       g_clear_object (&icomp);
        g_clear_object (&source);
        g_free (message);
        g_free (source_uid);
diff --git a/src/modules/calendar/e-cal-shell-content.c b/src/modules/calendar/e-cal-shell-content.c
index cf0f397054..fa9c1ffc08 100644
--- a/src/modules/calendar/e-cal-shell-content.c
+++ b/src/modules/calendar/e-cal-shell-content.c
@@ -93,12 +93,16 @@ G_DEFINE_DYNAMIC_TYPE (ECalShellContent, e_cal_shell_content, E_TYPE_CAL_BASE_SH
 
 static time_t
 convert_to_local_zone (time_t tm,
-                      icaltimezone *from_zone)
+                      ICalTimezone *from_zone)
 {
-       struct icaltimetype tt;
+       ICalTime *itt;
+       time_t tt;
 
-       tt = icaltime_from_timet_with_zone (tm, FALSE, from_zone);
-       return icaltime_as_timet (tt);
+       itt = i_cal_time_from_timet_with_zone (tm, FALSE, from_zone);
+       tt = i_cal_time_as_timet (itt);
+       g_clear_object (&itt);
+
+       return tt;
 }
 
 static void
@@ -118,7 +122,7 @@ cal_shell_content_update_model_and_current_view_times (ECalShellContent *cal_she
        gint syy, smm, sdd, eyy, emm, edd;
        time_t visible_range_start, visible_range_end;
        gboolean filters_updated = FALSE;
-       icaltimezone *zone;
+       ICalTimezone *zone;
        gchar *cal_filter;
 
        g_return_if_fail (E_IS_CAL_SHELL_CONTENT (cal_shell_content));
@@ -229,7 +233,7 @@ e_cal_shell_content_change_view (ECalShellContent *cal_shell_content,
        EShellView *shell_view;
        ECalendar *calendar;
        ECalModel *model;
-       icaltimezone *zone;
+       ICalTimezone *zone;
        time_t view_start_tt, view_end_tt;
        gboolean view_changed = FALSE;
        gint selected_days;
@@ -374,7 +378,7 @@ static void
 cal_shell_content_change_selection_in_current_view (ECalShellContent *cal_shell_content,
                                                    time_t sel_start_tt,
                                                    time_t sel_end_tt,
-                                                   icaltimezone *zone)
+                                                   ICalTimezone *zone)
 {
        g_return_if_fail (E_IS_CAL_SHELL_CONTENT (cal_shell_content));
 
@@ -390,8 +394,15 @@ cal_shell_content_change_selection_in_current_view (ECalShellContent *cal_shell_
                        time_t current_sel_start = (time_t) -1, current_sel_end = (time_t) -1;
 
                        if (e_calendar_view_get_selected_time_range (view, &current_sel_start, 
&current_sel_end)) {
-                               current_sel_start = icaltime_as_timet_with_zone 
(icaltime_from_timet_with_zone (current_sel_start, 0, zone), NULL);
-                               current_sel_end = icaltime_as_timet_with_zone (icaltime_from_timet_with_zone 
(current_sel_end, 0, zone), NULL);
+                               ICalTime *itt;
+
+                               itt = i_cal_time_from_timet_with_zone (current_sel_start, 0, zone);
+                               current_sel_start = i_cal_time_as_timet_with_zone (itt, NULL);
+                               g_clear_object (&itt);
+
+                               itt = i_cal_time_from_timet_with_zone (current_sel_end, 0, zone);
+                               current_sel_end = i_cal_time_as_timet_with_zone (itt, NULL);
+                               g_clear_object (&itt);
 
                                sel_start_tt += current_sel_start % (24 * 60 * 60);
                                sel_end_tt += current_sel_end % (24 * 60 * 60);
@@ -408,7 +419,7 @@ cal_shell_content_datepicker_selection_changed_cb (ECalendarItem *calitem,
 {
        GDate sel_start, sel_end;
        guint32 selected_days, start_julian, end_julian;
-       icaltimezone *zone;
+       ICalTimezone *zone;
        time_t sel_start_tt, sel_end_tt;
 
        g_return_if_fail (E_IS_CAL_SHELL_CONTENT (cal_shell_content));
@@ -636,7 +647,7 @@ cal_shell_content_current_view_id_changed_cb (ECalShellContent *cal_shell_conten
 
        if (cal_shell_content->priv->previous_selected_start_time != -1 &&
            cal_shell_content->priv->previous_selected_end_time != -1) {
-               icaltimezone *zone;
+               ICalTimezone *zone;
 
                zone = e_cal_model_get_timezone (model);
                time_to_gdate_with_zone (&sel_start, cal_shell_content->priv->previous_selected_start_time, 
zone);
@@ -722,7 +733,7 @@ cal_shell_content_display_view_cb (ECalShellContent *cal_shell_content,
                calendar_view = cal_shell_content->priv->views[view_kind];
                gal_view_etable_attach_table (
                        GAL_VIEW_ETABLE (gal_view),
-                       E_CAL_LIST_VIEW (calendar_view)->table);
+                       e_cal_list_view_get_table (E_CAL_LIST_VIEW (calendar_view)));
 
        } else if (gal_view_type == GAL_TYPE_VIEW_CALENDAR_DAY) {
                view_kind = E_CAL_VIEW_KIND_DAY;
@@ -852,75 +863,79 @@ cal_shell_content_load_table_state (EShellContent *shell_content,
        g_free (filename);
 }
 
-static icalproperty *
-cal_shell_content_get_attendee_prop (icalcomponent *icalcomp,
+static ICalProperty *
+cal_shell_content_get_attendee_prop (ICalComponent *icomp,
                                      const gchar *address)
 {
-       icalproperty *prop;
+       ICalProperty *prop;
 
        if (address == NULL || *address == '\0')
                return NULL;
 
-       prop = icalcomponent_get_first_property (
-               icalcomp, ICAL_ATTENDEE_PROPERTY);
-
-       while (prop != NULL) {
+       for (prop = i_cal_component_get_first_property (icomp, I_CAL_ATTENDEE_PROPERTY);
+            prop;
+            g_object_unref (prop), prop = i_cal_component_get_next_property (icomp, 
I_CAL_ATTENDEE_PROPERTY)) {
                const gchar *attendee;
 
-               attendee = icalproperty_get_attendee (prop);
+               attendee = itip_strip_mailto (i_cal_property_get_attendee (prop));
 
-               if (g_str_equal (itip_strip_mailto (attendee), address))
+               if (attendee && g_ascii_strcasecmp (attendee, address) == 0)
                        return prop;
-
-               prop = icalcomponent_get_next_property (
-                       icalcomp, ICAL_ATTENDEE_PROPERTY);
        }
 
        return NULL;
 }
 
 static gboolean
-cal_shell_content_icalcomp_is_delegated (icalcomponent *icalcomp,
-                                         const gchar *user_email)
+cal_shell_content_icomp_is_delegated (ICalComponent *icomp,
+                                     const gchar *user_email)
 {
-       icalproperty *prop;
-       icalparameter *param;
-       const gchar *delto = NULL;
+       ICalProperty *prop;
+       ICalParameter *param;
+       gchar *delto = NULL;
        gboolean is_delegated = FALSE;
 
-       prop = cal_shell_content_get_attendee_prop (icalcomp, user_email);
+       prop = cal_shell_content_get_attendee_prop (icomp, user_email);
 
-       if (prop != NULL) {
-               param = icalproperty_get_first_parameter (
-                       prop, ICAL_DELEGATEDTO_PARAMETER);
-               if (param != NULL) {
-                       delto = icalparameter_get_delegatedto (param);
-                       delto = itip_strip_mailto (delto);
+       if (prop) {
+               param = i_cal_property_get_first_parameter (prop, I_CAL_DELEGATEDTO_PARAMETER);
+               if (param) {
+                       delto = g_strdup (itip_strip_mailto (i_cal_parameter_get_delegatedto (param)));
+                       g_object_unref (param);
                }
+
+               g_object_unref (prop);
        } else
                return FALSE;
 
-       prop = cal_shell_content_get_attendee_prop (icalcomp, delto);
+       prop = cal_shell_content_get_attendee_prop (icomp, delto);
 
-       if (prop != NULL) {
-               const gchar *delfrom = NULL;
-               icalparameter_partstat status = ICAL_PARTSTAT_NONE;
+       if (prop) {
+               gchar *delfrom = NULL;
+               ICalParameterPartstat partstat = I_CAL_PARTSTAT_NONE;
 
-               param = icalproperty_get_first_parameter (
-                       prop, ICAL_DELEGATEDFROM_PARAMETER);
-               if (param != NULL) {
-                       delfrom = icalparameter_get_delegatedfrom (param);
-                       delfrom = itip_strip_mailto (delfrom);
+               param = i_cal_property_get_first_parameter (prop, I_CAL_DELEGATEDFROM_PARAMETER);
+               if (param) {
+                       delfrom = g_strdup (itip_strip_mailto (i_cal_parameter_get_delegatedfrom (param)));
+                       g_object_unref (param);
                }
-               param = icalproperty_get_first_parameter (
-                       prop, ICAL_PARTSTAT_PARAMETER);
-               if (param != NULL)
-                       status = icalparameter_get_partstat (param);
-               is_delegated =
-                       (status != ICAL_PARTSTAT_DECLINED) &&
-                       (g_strcmp0 (delfrom, user_email) == 0);
+
+               param = i_cal_property_get_first_parameter (prop, I_CAL_PARTSTAT_PARAMETER);
+               if (param) {
+                       partstat = i_cal_parameter_get_partstat (param);
+                       g_object_unref (param);
+               }
+
+               is_delegated = delfrom && user_email &&
+                       partstat != I_CAL_PARTSTAT_DECLINED &&
+                       g_ascii_strcasecmp (delfrom, user_email) == 0;
+
+               g_object_unref (prop);
+               g_free (delfrom);
        }
 
+       g_free (delto);
+
        return is_delegated;
 }
 
@@ -966,32 +981,32 @@ cal_shell_content_check_state (EShellContent *shell_content)
                ECalClient *client;
                ECalComponent *comp;
                gchar *user_email;
-               icalcomponent *icalcomp;
+               ICalComponent *icomp;
                const gchar *capability;
                gboolean cap_delegate_supported;
                gboolean cap_delegate_to_many;
-               gboolean icalcomp_is_delegated;
+               gboolean icomp_is_delegated;
                gboolean read_only;
 
                if (!is_comp_data_valid (event))
                        continue;
 
                client = event->comp_data->client;
-               icalcomp = event->comp_data->icalcomp;
+               icomp = event->comp_data->icalcomp;
 
                read_only = e_client_is_readonly (E_CLIENT (client));
                selection_is_editable &= !read_only;
 
                selection_is_instance |=
-                       e_cal_util_component_is_instance (icalcomp);
+                       e_cal_util_component_is_instance (icomp);
 
                selection_is_meeting =
                        (n_selected == 1) &&
-                       e_cal_util_component_has_attendee (icalcomp);
+                       e_cal_util_component_has_attendee (icomp);
 
                selection_is_recurring |=
-                       e_cal_util_component_is_instance (icalcomp) ||
-                       e_cal_util_component_has_recurrences (icalcomp);
+                       e_cal_util_component_is_instance (icomp) ||
+                       e_cal_util_component_has_recurrences (icomp);
 
                /* XXX The rest of this is rather expensive and
                 *     only applies if a single event is selected,
@@ -1002,14 +1017,11 @@ cal_shell_content_check_state (EShellContent *shell_content)
 
                /* XXX This probably belongs in comp-util.c. */
 
-               comp = e_cal_component_new ();
-               e_cal_component_set_icalcomponent (
-                       comp, icalcomponent_new_clone (icalcomp));
-               user_email = itip_get_comp_attendee (
-                       registry, comp, client);
+               comp = e_cal_component_new_from_icalcomponent (i_cal_component_new_clone (icomp));
+               user_email = itip_get_comp_attendee (registry, comp, client);
 
                selection_is_organizer =
-                       e_cal_util_component_has_organizer (icalcomp) &&
+                       e_cal_util_component_has_organizer (icomp) &&
                        itip_organizer_is_user (registry, comp, client);
 
                capability = E_CAL_STATIC_CAPABILITY_DELEGATE_SUPPORTED;
@@ -1022,16 +1034,14 @@ cal_shell_content_check_state (EShellContent *shell_content)
                        e_client_check_capability (
                        E_CLIENT (client), capability);
 
-               icalcomp_is_delegated =
-                       (user_email != NULL) &&
-                       cal_shell_content_icalcomp_is_delegated (
-                       icalcomp, user_email);
+               icomp_is_delegated = user_email != NULL &&
+                       cal_shell_content_icomp_is_delegated (icomp, user_email);
 
                selection_can_delegate =
                        cap_delegate_supported &&
                        (cap_delegate_to_many ||
                        (!selection_is_organizer &&
-                        !icalcomp_is_delegated));
+                        !icomp_is_delegated));
 
                g_free (user_email);
                g_object_unref (comp);
@@ -1074,7 +1084,9 @@ cal_shell_content_get_default_time (ECalModel *model,
                                    gpointer user_data)
 {
        ECalShellContent *cal_shell_content = user_data;
-       icaltimezone *zone;
+       ICalTimezone *zone;
+       ICalTime *itt;
+       time_t tt;
 
        g_return_val_if_fail (model != NULL, 0);
        g_return_val_if_fail (E_IS_CAL_SHELL_CONTENT (cal_shell_content), 0);
@@ -1090,8 +1102,11 @@ cal_shell_content_get_default_time (ECalModel *model,
        }
 
        zone = e_cal_model_get_timezone (model);
+       itt = i_cal_time_current_time_with_zone (zone);
+       tt = i_cal_time_as_timet_with_zone (itt, zone);
+       g_clear_object (&itt);
 
-       return icaltime_as_timet_with_zone (icaltime_current_time_with_zone (zone), zone);
+       return tt;
 }
 
 static void
@@ -1104,10 +1119,10 @@ update_adjustment (ECalShellContent *cal_shell_content,
        GDate first_day_shown;
        ECalModel *model;
        gint week_offset;
-       struct icaltimetype start_tt = icaltime_null_time ();
+       ICalTime *start_tt = NULL;
+       ICalTimezone *timezone;
        time_t lower;
        guint32 old_first_day_julian, new_first_day_julian;
-       icaltimezone *timezone;
        gdouble value;
 
        e_week_view_get_first_day_shown (week_view, &first_day_shown);
@@ -1136,13 +1151,16 @@ update_adjustment (ECalShellContent *cal_shell_content,
                return;
 
        /* Convert it to a time_t. */
-       start_tt.year = g_date_get_year (&start_date);
-       start_tt.month = g_date_get_month (&start_date);
-       start_tt.day = g_date_get_day (&start_date);
+       start_tt = i_cal_time_null_time ();
+       i_cal_time_set_date (start_tt,
+               g_date_get_year (&start_date),
+               g_date_get_month (&start_date),
+               g_date_get_day (&start_date));
 
        model = e_cal_base_shell_content_get_model (E_CAL_BASE_SHELL_CONTENT (cal_shell_content));
        timezone = e_cal_model_get_timezone (model);
-       lower = icaltime_as_timet_with_zone (start_tt, timezone);
+       lower = i_cal_time_as_timet_with_zone (start_tt, timezone);
+       g_clear_object (&start_tt);
 
        end_date = start_date;
        if (move_by_week) {
@@ -1975,8 +1993,8 @@ cal_shell_content_resubscribe (ECalendarView *cal_view,
 
        data_model = e_cal_model_get_data_model (model);
        subscriber = E_CAL_DATA_MODEL_SUBSCRIBER (model);
-       is_tasks_or_memos = e_cal_model_get_component_kind (model) == ICAL_VJOURNAL_COMPONENT ||
-               e_cal_model_get_component_kind (model) == ICAL_VTODO_COMPONENT;
+       is_tasks_or_memos = e_cal_model_get_component_kind (model) == I_CAL_VJOURNAL_COMPONENT ||
+               e_cal_model_get_component_kind (model) == I_CAL_VTODO_COMPONENT;
 
        if ((!is_tasks_or_memos && e_calendar_view_get_visible_time_range (cal_view, &range_start, 
&range_end)) ||
            e_cal_data_model_get_subscriber_range (data_model, subscriber, &range_start, &range_end)) {
@@ -2117,7 +2135,7 @@ e_cal_shell_content_get_current_range (ECalShellContent *cal_shell_content,
                                       time_t *range_start,
                                       time_t *range_end)
 {
-       icaltimezone *zone;
+       ICalTimezone *zone;
 
        g_return_if_fail (E_IS_CAL_SHELL_CONTENT (cal_shell_content));
        g_return_if_fail (range_start != NULL);
@@ -2205,8 +2223,8 @@ e_cal_shell_content_move_view_range (ECalShellContent *cal_shell_content,
        ECalDataModel *data_model;
        EShellSidebar *shell_sidebar;
        EShellView *shell_view;
-       struct icaltimetype tt;
-       icaltimezone *zone;
+       ICalTime *tt;
+       ICalTimezone *zone;
        GDate date;
 
        g_return_if_fail (E_IS_CAL_SHELL_CONTENT (cal_shell_content));
@@ -2230,8 +2248,9 @@ e_cal_shell_content_move_view_range (ECalShellContent *cal_shell_content,
                        cal_shell_content_move_view_range_relative (cal_shell_content, +1);
                        break;
                case E_CALENDAR_VIEW_MOVE_TO_TODAY:
-                       tt = icaltime_current_time_with_zone (zone);
-                       g_date_set_dmy (&date, tt.day, tt.month, tt.year);
+                       tt = i_cal_time_current_time_with_zone (zone);
+                       g_date_set_dmy (&date, i_cal_time_get_day (tt), i_cal_time_get_month (tt), 
i_cal_time_get_year (tt));
+                       g_clear_object (&tt);
                        /* one-day selection takes care of the view range move with left view kind */
                        e_calendar_item_set_selection (e_calendar_get_item (calendar), &date, &date);
                        break;
@@ -2356,7 +2375,7 @@ e_cal_shell_content_update_filters (ECalShellContent *cal_shell_content,
                data_model = e_cal_model_get_data_model (model);
 
                if (start_range != 0 && end_range != 0) {
-                       icaltimezone *zone;
+                       ICalTimezone *zone;
                        const gchar *default_tzloc = NULL;
                        time_t end = end_range;
                        gchar *filter;
@@ -2364,8 +2383,8 @@ e_cal_shell_content_update_filters (ECalShellContent *cal_shell_content,
                        gchar *iso_end;
 
                        zone = e_cal_data_model_get_timezone (data_model);
-                       if (zone && zone != icaltimezone_get_utc_timezone ())
-                               default_tzloc = icaltimezone_get_location (zone);
+                       if (zone && zone != i_cal_timezone_get_utc_timezone ())
+                               default_tzloc = i_cal_timezone_get_location (zone);
                        if (!default_tzloc)
                                default_tzloc = "";
 
diff --git a/src/modules/calendar/e-cal-shell-view-actions.c b/src/modules/calendar/e-cal-shell-view-actions.c
index 453aee2743..a225892b1c 100644
--- a/src/modules/calendar/e-cal-shell-view-actions.c
+++ b/src/modules/calendar/e-cal-shell-view-actions.c
@@ -195,7 +195,7 @@ cal_shell_view_actions_print_or_preview (ECalShellView *cal_shell_view,
        if (E_IS_CAL_LIST_VIEW (cal_view)) {
                ETable *table;
 
-               table = E_CAL_LIST_VIEW (cal_view)->table;
+               table = e_cal_list_view_get_table (E_CAL_LIST_VIEW (cal_view));
                print_table (table, _("Print"), _("Calendar"), print_action);
        } else {
                EPrintView print_view_type;
@@ -540,7 +540,7 @@ cal_shell_view_transfer_selected (ECalShellView *cal_shell_view,
        ESource *destination_source = NULL;
        ESourceRegistry *registry;
        GList *selected, *link;
-       GHashTable *by_source; /* ESource ~> GSList{icalcomponent} */
+       GHashTable *by_source; /* ESource ~> GSList{ICalComponent} */
        GHashTableIter iter;
        gpointer key, value;
 
@@ -576,7 +576,7 @@ cal_shell_view_transfer_selected (ECalShellView *cal_shell_view,
        for (link = selected; link != NULL; link = g_list_next (link)) {
                ECalendarViewEvent *event = link->data;
                ESource *source;
-               GSList *icalcomps;
+               GSList *icomps;
 
                if (!event || !event->comp_data)
                        continue;
@@ -585,9 +585,9 @@ cal_shell_view_transfer_selected (ECalShellView *cal_shell_view,
                if (!source)
                        continue;
 
-               icalcomps = g_hash_table_lookup (by_source, source);
-               icalcomps = g_slist_prepend (icalcomps, event->comp_data->icalcomp);
-               g_hash_table_insert (by_source, source, icalcomps);
+               icomps = g_hash_table_lookup (by_source, source);
+               icomps = g_slist_prepend (icomps, event->comp_data->icalcomp);
+               g_hash_table_insert (by_source, source, icomps);
        }
 
        e_cal_ops_transfer_components (shell_view, e_calendar_view_get_model (calendar_view),
@@ -595,9 +595,9 @@ cal_shell_view_transfer_selected (ECalShellView *cal_shell_view,
 
        g_hash_table_iter_init (&iter, by_source);
        while (g_hash_table_iter_next (&iter, &key, &value)) {
-               GSList *icalcomps = value;
+               GSList *icomps = value;
 
-               g_slist_free (icalcomps);
+               g_slist_free (icomps);
        }
 
        g_hash_table_destroy (by_source);
@@ -631,8 +631,8 @@ action_event_delegate_cb (GtkAction *action,
        ECalClient *client;
        ECalModel *model;
        GList *selected;
-       icalcomponent *clone;
-       icalproperty *property;
+       ICalComponent *clone;
+       ICalProperty *prop;
        gboolean found = FALSE;
        gchar *attendee;
 
@@ -651,63 +651,59 @@ action_event_delegate_cb (GtkAction *action,
                return;
 
        client = event->comp_data->client;
-       clone = icalcomponent_new_clone (event->comp_data->icalcomp);
+       clone = i_cal_component_new_clone (event->comp_data->icalcomp);
 
        /* Set the attendee status for the delegate. */
 
-       component = e_cal_component_new ();
-       e_cal_component_set_icalcomponent (
-               component, icalcomponent_new_clone (clone));
+       component = e_cal_component_new_from_icalcomponent (i_cal_component_new_clone (clone));
 
-       attendee = itip_get_comp_attendee (
-               registry, component, client);
-       property = icalcomponent_get_first_property (
-               clone, ICAL_ATTENDEE_PROPERTY);
+       attendee = itip_get_comp_attendee (registry, component, client);
 
-       while (property != NULL) {
+       for (prop = i_cal_component_get_first_property (clone, I_CAL_ATTENDEE_PROPERTY);
+            prop;
+            g_object_unref (prop), prop = i_cal_component_get_next_property (clone, 
I_CAL_ATTENDEE_PROPERTY)) {
                const gchar *candidate;
 
-               candidate = icalproperty_get_attendee (property);
+               candidate = i_cal_property_get_attendee (prop);
                candidate = itip_strip_mailto (candidate);
 
-               if (g_ascii_strcasecmp (candidate, attendee) == 0) {
-                       icalparameter *parameter;
+               if (candidate && g_ascii_strcasecmp (candidate, attendee) == 0) {
+                       ICalParameter *param;
 
-                       parameter = icalparameter_new_role (
-                               ICAL_ROLE_NONPARTICIPANT);
-                       icalproperty_set_parameter (property, parameter);
+                       param = i_cal_parameter_new_role (I_CAL_ROLE_NONPARTICIPANT);
+                       i_cal_property_set_parameter (prop, param);
+                       g_clear_object (&param);
 
-                       parameter = icalparameter_new_partstat (
-                               ICAL_PARTSTAT_DELEGATED);
-                       icalproperty_set_parameter (property, parameter);
+                       param = i_cal_parameter_new_partstat (I_CAL_PARTSTAT_DELEGATED);
+                       i_cal_property_set_parameter (prop, param);
+                       g_clear_object (&param);
 
                        found = TRUE;
                        break;
                }
-
-               property = icalcomponent_get_next_property (
-                       clone, ICAL_ATTENDEE_PROPERTY);
        }
 
+       g_clear_object (&prop);
+
        /* If the attendee is not already in the component, add it. */
        if (!found) {
-               icalparameter *parameter;
+               ICalParameter *param;
                gchar *address;
 
                address = g_strdup_printf ("MAILTO:%s", attendee);
 
-               property = icalproperty_new_attendee (address);
-               icalcomponent_add_property (clone, property);
+               prop = i_cal_property_new_attendee (address);
 
-               parameter = icalparameter_new_role (ICAL_ROLE_NONPARTICIPANT);
-               icalproperty_add_parameter (property, parameter);
+               param = i_cal_parameter_new_role (I_CAL_ROLE_NONPARTICIPANT);
+               i_cal_property_take_parameter (prop, param);
 
-               parameter = icalparameter_new_cutype (ICAL_CUTYPE_INDIVIDUAL);
-               icalproperty_add_parameter (property, parameter);
+               param = i_cal_parameter_new_cutype (I_CAL_CUTYPE_INDIVIDUAL);
+               i_cal_property_take_parameter (prop, param);
 
-               parameter = icalparameter_new_rsvp (ICAL_RSVP_TRUE);
-               icalproperty_add_parameter (property, parameter);
+               param = i_cal_parameter_new_rsvp (I_CAL_RSVP_TRUE);
+               i_cal_property_take_parameter (prop, param);
 
+               i_cal_component_take_property (clone, prop);
                g_free (address);
        }
 
@@ -718,7 +714,7 @@ action_event_delegate_cb (GtkAction *action,
                calendar_view, event->comp_data->client, clone,
                E_COMP_EDITOR_FLAG_WITH_ATTENDEES | E_COMP_EDITOR_FLAG_DELEGATE);
 
-       icalcomponent_free (clone);
+       g_object_unref (clone);
        g_list_free (selected);
 }
 
@@ -757,7 +753,7 @@ action_event_forward_cb (GtkAction *action,
        ECalendarViewEvent *event;
        ECalComponent *component;
        ECalClient *client;
-       icalcomponent *icalcomp;
+       ICalComponent *icomp;
        GList *selected;
 
        cal_shell_content = cal_shell_view->priv->cal_shell_content;
@@ -772,9 +768,9 @@ action_event_forward_cb (GtkAction *action,
                return;
 
        client = event->comp_data->client;
-       icalcomp = event->comp_data->icalcomp;
+       icomp = event->comp_data->icalcomp;
 
-       component = e_cal_component_new_from_icalcomponent (icalcomponent_new_clone (icalcomp));
+       component = e_cal_component_new_from_icalcomponent (i_cal_component_new_clone (icomp));
        g_return_if_fail (component != NULL);
 
        itip_send_component_with_model (e_calendar_view_get_model (calendar_view),
@@ -782,7 +778,6 @@ action_event_forward_cb (GtkAction *action,
                NULL, NULL, NULL, TRUE, FALSE, TRUE);
 
        g_object_unref (component);
-
        g_list_free (selected);
 }
 
@@ -818,12 +813,11 @@ action_event_new_cb (GtkAction *action,
        e_calendar_view_new_appointment (calendar_view);
 }
 
-typedef struct
-{
+typedef struct {
        ECalClient *client;
        gchar *remove_uid;
        gchar *remove_rid;
-       icalcomponent *create_icalcomp;
+       ICalComponent *create_icomp;
 } MakeMovableData;
 
 static void
@@ -835,7 +829,7 @@ make_movable_data_free (gpointer ptr)
                g_clear_object (&mmd->client);
                g_free (mmd->remove_uid);
                g_free (mmd->remove_rid);
-               icalcomponent_free (mmd->create_icalcomp);
+               g_clear_object (&mmd->create_icomp);
                g_free (mmd);
        }
 }
@@ -850,10 +844,10 @@ make_movable_thread (EAlertSinkThreadJobData *job_data,
 
        g_return_if_fail (mmd != NULL);
 
-       if (!e_cal_client_remove_object_sync (mmd->client, mmd->remove_uid, mmd->remove_rid, 
E_CAL_OBJ_MOD_THIS, cancellable, error))
+       if (!e_cal_client_remove_object_sync (mmd->client, mmd->remove_uid, mmd->remove_rid, 
E_CAL_OBJ_MOD_THIS, E_CAL_OPERATION_FLAG_NONE, cancellable, error))
                return;
 
-       e_cal_client_create_object_sync (mmd->client, mmd->create_icalcomp, NULL, cancellable, error);
+       e_cal_client_create_object_sync (mmd->client, mmd->create_icomp, E_CAL_OPERATION_FLAG_NONE, NULL, 
cancellable, error);
 }
 
 static void
@@ -866,12 +860,11 @@ action_event_occurrence_movable_cb (GtkAction *action,
        ECalendarViewEvent *event;
        ECalComponent *exception_component;
        ECalComponent *recurring_component;
-       ECalComponentDateTime date;
+       ECalComponentDateTime *date;
        ECalComponentId *id;
        ECalClient *client;
-       icalcomponent *icalcomp;
-       icaltimetype itt;
-       icaltimezone *timezone;
+       ICalComponent *icomp;
+       ICalTimezone *timezone;
        GList *selected;
        gchar *uid;
        EActivity *activity;
@@ -892,56 +885,51 @@ action_event_occurrence_movable_cb (GtkAction *action,
                return;
 
        client = event->comp_data->client;
-       icalcomp = event->comp_data->icalcomp;
+       icomp = event->comp_data->icalcomp;
 
        /* For the recurring object, we add an exception
         * to get rid of the instance. */
 
-       recurring_component = e_cal_component_new ();
-       e_cal_component_set_icalcomponent (
-               recurring_component, icalcomponent_new_clone (icalcomp));
+       recurring_component = e_cal_component_new_from_icalcomponent (i_cal_component_new_clone (icomp));
        id = e_cal_component_get_id (recurring_component);
 
        /* For the unrecurred instance, we duplicate the original object,
         * create a new UID for it, get rid of the recurrence rules, and
         * set the start and end times to the instance times. */
 
-       exception_component = e_cal_component_new ();
-       e_cal_component_set_icalcomponent (
-               exception_component, icalcomponent_new_clone (icalcomp));
+       exception_component = e_cal_component_new_from_icalcomponent (i_cal_component_new_clone (icomp));
 
        uid = e_util_generate_uid ();
        e_cal_component_set_uid (exception_component, uid);
        g_free (uid);
 
        e_cal_component_set_recurid (exception_component, NULL);
-       e_cal_component_set_rdate_list (exception_component, NULL);
-       e_cal_component_set_rrule_list (exception_component, NULL);
-       e_cal_component_set_exdate_list (exception_component, NULL);
-       e_cal_component_set_exrule_list (exception_component, NULL);
-
-       date.value = &itt;
-       date.tzid = icaltimezone_get_tzid (timezone);
-       *date.value = icaltime_from_timet_with_zone (
-               event->comp_data->instance_start, FALSE, timezone);
-       cal_comp_set_dtstart_with_oldzone (client, exception_component, &date);
-       *date.value = icaltime_from_timet_with_zone (
-               event->comp_data->instance_end, FALSE, timezone);
-       cal_comp_set_dtend_with_oldzone (client, exception_component, &date);
+       e_cal_component_set_rdates (exception_component, NULL);
+       e_cal_component_set_rrules (exception_component, NULL);
+       e_cal_component_set_exdates (exception_component, NULL);
+       e_cal_component_set_exrules (exception_component, NULL);
+
+       date = e_cal_component_datetime_new_take (i_cal_time_from_timet_with_zone 
(event->comp_data->instance_start, FALSE, timezone),
+               timezone ? g_strdup (i_cal_timezone_get_tzid (timezone)) : NULL);
+       cal_comp_set_dtstart_with_oldzone (client, exception_component, date);
+       e_cal_component_datetime_take_value (date, i_cal_time_from_timet_with_zone 
(event->comp_data->instance_end, FALSE, timezone));
+       cal_comp_set_dtend_with_oldzone (client, exception_component, date);
+       e_cal_component_datetime_free (date);
+
        e_cal_component_commit_sequence (exception_component);
 
        mmd = g_new0 (MakeMovableData, 1);
        mmd->client = g_object_ref (client);
-       mmd->remove_uid = g_strdup (id->uid);
-       mmd->remove_rid = g_strdup (id->rid);
-       mmd->create_icalcomp = icalcomponent_new_clone (e_cal_component_get_icalcomponent 
(exception_component));
+       mmd->remove_uid = g_strdup (e_cal_component_id_get_uid (id));
+       mmd->remove_rid = g_strdup (e_cal_component_id_get_rid (id));
+       mmd->create_icomp = i_cal_component_new_clone (e_cal_component_get_icalcomponent 
(exception_component));
 
        activity = e_shell_view_submit_thread_job (E_SHELL_VIEW (cal_shell_view),
                _("Making an occurrence movable"), "calendar:failed-make-movable",
                NULL, make_movable_thread, mmd, make_movable_data_free);
 
        g_clear_object (&activity);
-       e_cal_component_free_id (id);
+       e_cal_component_id_free (id);
        g_object_unref (recurring_component);
        g_object_unref (exception_component);
        g_list_free (selected);
@@ -968,7 +956,7 @@ action_event_edit_as_new_cb (GtkAction *action,
        ECalendarView *calendar_view;
        ECalendarViewEvent *event;
        GList *selected;
-       icalcomponent *clone;
+       ICalComponent *clone;
        gchar *uid;
 
        cal_shell_content = cal_shell_view->priv->cal_shell_content;
@@ -985,18 +973,17 @@ action_event_edit_as_new_cb (GtkAction *action,
                return;
        }
 
-       clone = icalcomponent_new_clone (event->comp_data->icalcomp);
+       clone = i_cal_component_new_clone (event->comp_data->icalcomp);
 
        uid = e_util_generate_uid ();
-       icalcomponent_set_uid (clone, uid);
-
+       i_cal_component_set_uid (clone, uid);
        g_free (uid);
 
        e_calendar_view_open_event_with_flags (
                calendar_view, event->comp_data->client, clone,
                E_COMP_EDITOR_FLAG_IS_NEW);
 
-       icalcomponent_free (clone);
+       g_clear_object (&clone);
        g_list_free (selected);
 }
 
@@ -1010,7 +997,7 @@ action_event_print_cb (GtkAction *action,
        ECalComponent *component;
        ECalModel *model;
        ECalClient *client;
-       icalcomponent *icalcomp;
+       ICalComponent *icomp;
        GList *selected;
 
        cal_shell_content = cal_shell_view->priv->cal_shell_content;
@@ -1026,12 +1013,10 @@ action_event_print_cb (GtkAction *action,
                return;
 
        client = event->comp_data->client;
-       icalcomp = event->comp_data->icalcomp;
+       icomp = event->comp_data->icalcomp;
 
-       component = e_cal_component_new ();
+       component = e_cal_component_new_from_icalcomponent (i_cal_component_new_clone (icomp));
 
-       e_cal_component_set_icalcomponent (
-               component, icalcomponent_new_clone (icalcomp));
        print_comp (
                component, client,
                e_cal_model_get_timezone (model),
@@ -1039,7 +1024,6 @@ action_event_print_cb (GtkAction *action,
                GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG);
 
        g_object_unref (component);
-
        g_list_free (selected);
 }
 
@@ -1053,7 +1037,7 @@ cal_shell_view_actions_reply (ECalShellView *cal_shell_view,
        ECalComponent *component;
        ECalClient *client;
        ESourceRegistry *registry;
-       icalcomponent *icalcomp;
+       ICalComponent *icomp;
        GList *selected;
 
        cal_shell_content = cal_shell_view->priv->cal_shell_content;
@@ -1069,18 +1053,15 @@ cal_shell_view_actions_reply (ECalShellView *cal_shell_view,
                return;
 
        client = event->comp_data->client;
-       icalcomp = event->comp_data->icalcomp;
+       icomp = event->comp_data->icalcomp;
 
-       component = e_cal_component_new ();
+       component = e_cal_component_new_from_icalcomponent (i_cal_component_new_clone (icomp));
 
-       e_cal_component_set_icalcomponent (
-               component, icalcomponent_new_clone (icalcomp));
        reply_to_calendar_comp (
                registry, E_CAL_COMPONENT_METHOD_REPLY,
                component, client, reply_all, NULL, NULL);
 
        g_object_unref (component);
-
        g_list_free (selected);
 }
 
@@ -1110,7 +1091,7 @@ action_event_save_as_cb (GtkAction *action,
        ECalendarView *calendar_view;
        ECalendarViewEvent *event;
        ECalClient *client;
-       icalcomponent *icalcomp;
+       ICalComponent *icomp;
        EActivity *activity;
        GList *selected;
        GFile *file;
@@ -1133,11 +1114,11 @@ action_event_save_as_cb (GtkAction *action,
                return;
 
        client = event->comp_data->client;
-       icalcomp = event->comp_data->icalcomp;
+       icomp = event->comp_data->icalcomp;
 
        /* Translators: Default filename part saving an event to a file when
         * no summary is filed, the '.ics' extension is concatenated to it. */
-       string = comp_util_suggest_filename (icalcomp, _("event"));
+       string = comp_util_suggest_filename (icomp, _("event"));
        file = e_shell_run_save_dialog (
                shell, _("Save as iCalendar"), string,
                "*.ics:text/calendar", NULL, NULL);
@@ -1145,7 +1126,7 @@ action_event_save_as_cb (GtkAction *action,
        if (file == NULL)
                return;
 
-       string = e_cal_client_get_component_as_string (client, icalcomp);
+       string = e_cal_client_get_component_as_string (client, icomp);
        if (string == NULL) {
                g_warning ("Could not convert item to a string");
                goto exit;
@@ -1165,7 +1146,6 @@ action_event_save_as_cb (GtkAction *action,
 
 exit:
        g_object_unref (file);
-
        g_list_free (selected);
 }
 
@@ -1177,7 +1157,7 @@ edit_event_as (ECalShellView *cal_shell_view,
        ECalendarView *calendar_view;
        ECalendarViewEvent *event;
        ECalClient *client;
-       icalcomponent *icalcomp;
+       ICalComponent *icomp;
        GList *selected;
 
        cal_shell_content = cal_shell_view->priv->cal_shell_content;
@@ -1192,42 +1172,23 @@ edit_event_as (ECalShellView *cal_shell_view,
                return;
 
        client = event->comp_data->client;
-       icalcomp = event->comp_data->icalcomp;
+       icomp = event->comp_data->icalcomp;
 
-       if (!as_meeting && icalcomp) {
+       if (!as_meeting && icomp) {
                /* remove organizer and all attendees */
-               icalproperty *prop;
-
                /* do it on a copy, as user can cancel changes */
-               icalcomp = icalcomponent_new_clone (icalcomp);
+               icomp = i_cal_component_new_clone (icomp);
 
-               prop = icalcomponent_get_first_property (
-                       icalcomp, ICAL_ATTENDEE_PROPERTY);
-               while (prop != NULL) {
-                       icalcomponent_remove_property (icalcomp, prop);
-                       icalproperty_free (prop);
-
-                       prop = icalcomponent_get_first_property (
-                               icalcomp, ICAL_ATTENDEE_PROPERTY);
-               }
-
-               prop = icalcomponent_get_first_property (
-                       icalcomp, ICAL_ORGANIZER_PROPERTY);
-               while (prop != NULL) {
-                       icalcomponent_remove_property (icalcomp, prop);
-                       icalproperty_free (prop);
-
-                       prop = icalcomponent_get_first_property (
-                               icalcomp, ICAL_ORGANIZER_PROPERTY);
-               }
+               e_cal_util_component_remove_property_by_kind (icomp, I_CAL_ATTENDEE_PROPERTY, TRUE);
+               e_cal_util_component_remove_property_by_kind (icomp, I_CAL_ORGANIZER_PROPERTY, TRUE);
        }
 
        e_calendar_view_edit_appointment (
-               calendar_view, client, icalcomp, as_meeting ?
+               calendar_view, client, icomp, as_meeting ?
                EDIT_EVENT_FORCE_MEETING : EDIT_EVENT_FORCE_APPOINTMENT);
 
-       if (!as_meeting && icalcomp) {
-               icalcomponent_free (icalcomp);
+       if (!as_meeting && icomp) {
+               g_object_unref (icomp);
        }
 
        g_list_free (selected);
diff --git a/src/modules/calendar/e-cal-shell-view-memopad.c b/src/modules/calendar/e-cal-shell-view-memopad.c
index c74fe5fc86..74820efea5 100644
--- a/src/modules/calendar/e-cal-shell-view-memopad.c
+++ b/src/modules/calendar/e-cal-shell-view-memopad.c
@@ -46,7 +46,7 @@ action_calendar_memopad_forward_cb (GtkAction *action,
        g_slist_free (list);
 
        /* XXX We only forward the first selected memo. */
-       comp = e_cal_component_new_from_icalcomponent (icalcomponent_new_clone (comp_data->icalcomp));
+       comp = e_cal_component_new_from_icalcomponent (i_cal_component_new_clone (comp_data->icalcomp));
        g_return_if_fail (comp != NULL);
 
        itip_send_component_with_model (e_memo_table_get_model (memo_table),
@@ -112,7 +112,7 @@ action_calendar_memopad_open_url_cb (GtkAction *action,
        ECalShellContent *cal_shell_content;
        EMemoTable *memo_table;
        ECalModelComponent *comp_data;
-       icalproperty *prop;
+       ICalProperty *prop;
        const gchar *uri;
        GSList *list;
 
@@ -128,12 +128,12 @@ action_calendar_memopad_open_url_cb (GtkAction *action,
        g_slist_free (list);
 
        /* XXX We only open the URI of the first selected memo. */
-       prop = icalcomponent_get_first_property (
-               comp_data->icalcomp, ICAL_URL_PROPERTY);
+       prop = i_cal_component_get_first_property (comp_data->icalcomp, I_CAL_URL_PROPERTY);
        g_return_if_fail (prop != NULL);
 
-       uri = icalproperty_get_url (prop);
+       uri = i_cal_property_get_url (prop);
        e_show_uri (GTK_WINDOW (shell_window), uri);
+       g_object_unref (prop);
 }
 
 static void
@@ -145,7 +145,6 @@ action_calendar_memopad_print_cb (GtkAction *action,
        ECalModelComponent *comp_data;
        ECalComponent *comp;
        ECalModel *model;
-       icalcomponent *clone;
        GSList *list;
 
        cal_shell_content = cal_shell_view->priv->cal_shell_content;
@@ -158,9 +157,7 @@ action_calendar_memopad_print_cb (GtkAction *action,
        g_slist_free (list);
 
        /* XXX We only print the first selected memo. */
-       comp = e_cal_component_new ();
-       clone = icalcomponent_new_clone (comp_data->icalcomp);
-       e_cal_component_set_icalcomponent (comp, clone);
+       comp = e_cal_component_new_from_icalcomponent (i_cal_component_new_clone (comp_data->icalcomp));
 
        print_comp (
                comp, comp_data->client,
@@ -339,15 +336,12 @@ e_cal_shell_view_memopad_actions_update (ECalShellView *cal_shell_view)
        list = e_memo_table_get_selected (memo_table);
        for (iter = list; iter != NULL; iter = iter->next) {
                ECalModelComponent *comp_data = iter->data;
-               icalproperty *prop;
                gboolean read_only;
 
                read_only = e_client_is_readonly (E_CLIENT (comp_data->client));
                editable &= !read_only;
 
-               prop = icalcomponent_get_first_property (
-                       comp_data->icalcomp, ICAL_URL_PROPERTY);
-               has_url |= (prop != NULL);
+               has_url |= e_cal_util_component_has_property (comp_data->icalcomp, I_CAL_URL_PROPERTY);
        }
        g_slist_free (list);
 
diff --git a/src/modules/calendar/e-cal-shell-view-private.c b/src/modules/calendar/e-cal-shell-view-private.c
index 06c5a2c47a..fcec8ac770 100644
--- a/src/modules/calendar/e-cal-shell-view-private.c
+++ b/src/modules/calendar/e-cal-shell-view-private.c
@@ -50,17 +50,20 @@ cal_shell_view_get_current_time (ECalendarItem *calitem,
                                  ECalShellView *cal_shell_view)
 {
        ECalShellContent *cal_shell_content;
-       struct icaltimetype tt;
-       icaltimezone *timezone;
+       ICalTime *tt;
+       ICalTimezone *timezone;
        ECalModel *model;
+       struct tm tm;
 
        cal_shell_content = cal_shell_view->priv->cal_shell_content;
        model = e_cal_base_shell_content_get_model (E_CAL_BASE_SHELL_CONTENT (cal_shell_content));
        timezone = e_cal_model_get_timezone (model);
 
-       tt = icaltime_from_timet_with_zone (time (NULL), FALSE, timezone);
+       tt = i_cal_time_from_timet_with_zone (time (NULL), FALSE, timezone);
+       tm = e_cal_util_icaltime_to_tm (tt);
+       g_clear_object (&tt);
 
-       return e_cal_util_icaltime_to_tm (&tt);
+       return tm;
 }
 
 static void
@@ -612,44 +615,65 @@ cal_searching_instances_done_cb (gpointer user_data)
 }
 
 static gboolean
-cal_searching_got_instance_cb (ECalComponent *comp,
-                               time_t instance_start,
-                               time_t instance_end,
-                               gpointer user_data)
+cal_searching_got_instance_cb (ICalComponent *icomp,
+                              ICalTime *instance_start,
+                              ICalTime *instance_end,
+                              gpointer user_data,
+                              GCancellable *cancellable,
+                              GError **error)
 {
        struct GenerateInstancesData *gid = user_data;
        ECalShellViewPrivate *priv;
-       ECalComponentDateTime dt;
-       time_t *value;
+       ICalTime *dtstart = NULL;
+       ICalProperty *prop;
+       time_t *value, start = (time_t) 0;
 
        g_return_val_if_fail (gid != NULL, FALSE);
 
-       if (g_cancellable_is_cancelled (gid->cancellable))
+       if (g_cancellable_is_cancelled (cancellable))
                return FALSE;
 
        g_return_val_if_fail (gid->cal_shell_view != NULL, FALSE);
        g_return_val_if_fail (gid->cal_shell_view->priv != NULL, FALSE);
 
-       e_cal_component_get_dtstart (comp, &dt);
+       prop = i_cal_component_get_first_property (icomp, I_CAL_DTSTART_PROPERTY);
+       dtstart = i_cal_component_get_dtstart (icomp);
+
+       if (dtstart && prop) {
+               ICalParameter *param;
+               const gchar *tzid = NULL;
 
-       if (dt.tzid && dt.value) {
-               icaltimezone *zone = NULL;
+               param = i_cal_property_get_first_parameter (prop, I_CAL_TZID_PARAMETER);
+               if (param)
+                       tzid = i_cal_parameter_get_tzid (param);
 
-               e_cal_client_get_timezone_sync (
-                       gid->client, dt.tzid, &zone, gid->cancellable, NULL);
+               if (tzid && *tzid) {
+                       ICalTimezone *zone = NULL;
 
-               if (g_cancellable_is_cancelled (gid->cancellable))
-                       return FALSE;
+                       if (!e_cal_client_get_timezone_sync (gid->client, tzid, &zone, cancellable, NULL))
+                               zone = NULL;
 
-               if (zone)
-                       instance_start = icaltime_as_timet_with_zone (*dt.value, zone);
+                       if (g_cancellable_is_cancelled (cancellable)) {
+                               g_object_unref (dtstart);
+                               g_clear_object (&param);
+                               return FALSE;
+                       }
+
+                       if (zone)
+                               start = i_cal_time_as_timet_with_zone (dtstart, zone);
+               }
+
+               g_clear_object (&param);
        }
 
-       e_cal_component_free_datetime (&dt);
+       g_clear_object (&dtstart);
+
+       if (!start)
+               start = i_cal_time_as_timet (instance_start);
 
        priv = gid->cal_shell_view->priv;
        value = g_new (time_t, 1);
-       *value = instance_start;
+       *value = start;
        if (!g_slist_find_custom (priv->search_hit_cache, value, cal_time_t_ptr_compare))
                priv->search_hit_cache = g_slist_append (priv->search_hit_cache, value);
        else
@@ -665,7 +689,7 @@ cal_search_get_object_list_cb (GObject *source,
 {
        ECalClient *client = E_CAL_CLIENT (source);
        ECalShellView *cal_shell_view = user_data;
-       GSList *icalcomps = NULL;
+       GSList *icomps = NULL;
        GError *error = NULL;
 
        g_return_if_fail (client != NULL);
@@ -673,14 +697,14 @@ cal_search_get_object_list_cb (GObject *source,
        g_return_if_fail (cal_shell_view != NULL);
 
        e_cal_client_get_object_list_finish (
-               client, result, &icalcomps, &error);
+               client, result, &icomps, &error);
 
        if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
-               g_warn_if_fail (icalcomps == NULL);
+               g_warn_if_fail (icomps == NULL);
                g_error_free (error);
 
-       } else if (error != NULL || !icalcomps) {
-               g_warn_if_fail (icalcomps == NULL);
+       } else if (error != NULL || !icomps) {
+               g_warn_if_fail (icomps == NULL);
                g_clear_error (&error);
 
                cal_shell_view->priv->search_pending_count--;
@@ -702,8 +726,8 @@ cal_search_get_object_list_cb (GObject *source,
                        end = tmp;
                }
 
-               for (iter = icalcomps; iter; iter = iter->next) {
-                       icalcomponent *icalcomp = iter->data;
+               for (iter = icomps; iter; iter = iter->next) {
+                       ICalComponent *icomp = iter->data;
                        struct GenerateInstancesData *gid;
 
                        gid = g_new0 (struct GenerateInstancesData, 1);
@@ -712,14 +736,14 @@ cal_search_get_object_list_cb (GObject *source,
                        gid->cancellable = g_object_ref (cancellable);
 
                        e_cal_client_generate_instances_for_object (
-                               client, icalcomp, start, end, cancellable,
+                               client, icomp, start, end, cancellable,
                                cal_searching_got_instance_cb, gid,
                                cal_searching_instances_done_cb);
                }
 
-               e_util_free_nullable_object_slist (icalcomps);
+               e_util_free_nullable_object_slist (icomps);
        } else {
-               e_util_free_nullable_object_slist (icalcomps);
+               e_util_free_nullable_object_slist (icomps);
        }
 }
 
@@ -765,8 +789,8 @@ cal_searching_check_candidates (ECalShellView *cal_shell_view)
        }
 
        if (candidate > 0) {
-               struct icaltimetype tt;
-               icaltimezone *zone;
+               ICalTime *tt;
+               ICalTimezone *zone;
                ECalDataModel *data_model;
                ECalendar *calendar;
 
@@ -774,13 +798,13 @@ cal_searching_check_candidates (ECalShellView *cal_shell_view)
                data_model = e_cal_base_shell_content_get_data_model (E_CAL_BASE_SHELL_CONTENT 
(cal_shell_view->priv->cal_shell_content));
                zone = e_cal_data_model_get_timezone (data_model);
 
-               tt = icaltime_from_timet_with_zone (candidate, FALSE, zone);
+               tt = i_cal_time_from_timet_with_zone (candidate, FALSE, zone);
 
-               if (icaltime_is_valid_time (tt) && !icaltime_is_null_time (tt)) {
+               if (tt && i_cal_time_is_valid_time (tt) && !i_cal_time_is_null_time (tt)) {
                        ECalendarView *cal_view;
                        GDate *dt;
 
-                       dt = g_date_new_dmy (tt.day, tt.month, tt.year);
+                       dt = g_date_new_dmy (i_cal_time_get_day (tt), i_cal_time_get_month (tt), 
i_cal_time_get_year (tt));
                        e_calendar_item_set_selection (e_calendar_get_item (calendar), dt, dt);
                        g_signal_emit_by_name (e_calendar_get_item (calendar), "selection-changed", 0);
                        g_date_free (dt);
@@ -789,6 +813,8 @@ cal_searching_check_candidates (ECalShellView *cal_shell_view)
                        e_calendar_view_set_selected_time_range (cal_view, candidate, candidate);
                }
 
+               g_clear_object (&tt);
+
                return TRUE;
        }
 
@@ -839,7 +865,7 @@ cal_iterate_searching (ECalShellView *cal_shell_view)
        GList *list, *link;
        ECalDataModel *data_model;
        time_t new_time, range1, range2;
-       icaltimezone *timezone;
+       ICalTimezone *timezone;
        const gchar *default_tzloc = NULL;
        GCancellable *cancellable;
        gchar *sexp, *start, *end, *data_filter;
@@ -949,8 +975,8 @@ cal_iterate_searching (ECalShellView *cal_shell_view)
                end = isodate_from_time_t (time_day_end (range1));
        }
 
-       if (timezone && timezone != icaltimezone_get_utc_timezone ())
-               default_tzloc = icaltimezone_get_location (timezone);
+       if (timezone && timezone != i_cal_timezone_get_utc_timezone ())
+               default_tzloc = i_cal_timezone_get_location (timezone);
        if (!default_tzloc)
                default_tzloc = "";
 
diff --git a/src/modules/calendar/e-cal-shell-view-taskpad.c b/src/modules/calendar/e-cal-shell-view-taskpad.c
index 8deada2f36..27445f6edf 100644
--- a/src/modules/calendar/e-cal-shell-view-taskpad.c
+++ b/src/modules/calendar/e-cal-shell-view-taskpad.c
@@ -69,7 +69,7 @@ action_calendar_taskpad_forward_cb (GtkAction *action,
        g_slist_free (list);
 
        /* XXX We only forward the first selected task. */
-       comp = e_cal_component_new_from_icalcomponent (icalcomponent_new_clone (comp_data->icalcomp));
+       comp = e_cal_component_new_from_icalcomponent (i_cal_component_new_clone (comp_data->icalcomp));
        g_return_if_fail (comp != NULL);
 
        itip_send_component_with_model (e_task_table_get_model (task_table),
@@ -181,7 +181,7 @@ action_calendar_taskpad_open_url_cb (GtkAction *action,
        ECalShellContent *cal_shell_content;
        ECalModelComponent *comp_data;
        ETaskTable *task_table;
-       icalproperty *prop;
+       ICalProperty *prop;
        const gchar *uri;
        GSList *list;
 
@@ -196,12 +196,12 @@ action_calendar_taskpad_open_url_cb (GtkAction *action,
        comp_data = list->data;
 
        /* XXX We only open the URI of the first selected task. */
-       prop = icalcomponent_get_first_property (
-               comp_data->icalcomp, ICAL_URL_PROPERTY);
+       prop = i_cal_component_get_first_property (comp_data->icalcomp, I_CAL_URL_PROPERTY);
        g_return_if_fail (prop != NULL);
 
-       uri = icalproperty_get_url (prop);
+       uri = i_cal_property_get_url (prop);
        e_show_uri (GTK_WINDOW (shell_window), uri);
+       g_object_unref (prop);
 }
 
 static void
@@ -213,7 +213,6 @@ action_calendar_taskpad_print_cb (GtkAction *action,
        ETaskTable *task_table;
        ECalComponent *comp;
        ECalModel *model;
-       icalcomponent *clone;
        GSList *list;
 
        cal_shell_content = cal_shell_view->priv->cal_shell_content;
@@ -226,9 +225,7 @@ action_calendar_taskpad_print_cb (GtkAction *action,
        g_slist_free (list);
 
        /* XXX We only print the first selected task. */
-       comp = e_cal_component_new ();
-       clone = icalcomponent_new_clone (comp_data->icalcomp);
-       e_cal_component_set_icalcomponent (comp, clone);
+       comp = e_cal_component_new_from_icalcomponent (i_cal_component_new_clone (comp_data->icalcomp));
 
        print_comp (
                comp, comp_data->client,
@@ -430,7 +427,6 @@ e_cal_shell_view_taskpad_actions_update (ECalShellView *cal_shell_view)
        list = e_task_table_get_selected (task_table);
        for (iter = list; iter != NULL; iter = iter->next) {
                ECalModelComponent *comp_data = iter->data;
-               icalproperty *prop;
                const gchar *cap;
                gboolean read_only;
 
@@ -445,13 +441,9 @@ e_cal_shell_view_taskpad_actions_update (ECalShellView *cal_shell_view)
                if (e_client_check_capability (E_CLIENT (comp_data->client), cap))
                        assignable = FALSE;
 
-               prop = icalcomponent_get_first_property (
-                       comp_data->icalcomp, ICAL_URL_PROPERTY);
-               has_url |= (prop != NULL);
+               has_url |= e_cal_util_component_has_property (comp_data->icalcomp, I_CAL_URL_PROPERTY);
 
-               prop = icalcomponent_get_first_property (
-                       comp_data->icalcomp, ICAL_COMPLETED_PROPERTY);
-               if (prop != NULL)
+               if (e_cal_util_component_has_property (comp_data->icalcomp, I_CAL_COMPLETED_PROPERTY))
                        n_complete++;
                else
                        n_incomplete++;
diff --git a/src/modules/calendar/e-cal-shell-view.c b/src/modules/calendar/e-cal-shell-view.c
index 4400ae753e..f80a711e6b 100644
--- a/src/modules/calendar/e-cal-shell-view.c
+++ b/src/modules/calendar/e-cal-shell-view.c
@@ -89,9 +89,9 @@ cal_shell_view_execute_search (EShellView *shell_view)
        ECalendar *calendar;
        ECalDataModel *data_model;
        GtkRadioAction *action;
-       icaltimezone *timezone;
+       ICalTimezone *timezone;
        const gchar *default_tzloc = NULL;
-       struct icaltimetype current_time;
+       ICalTime *current_time;
        time_t start_range;
        time_t end_range;
        time_t now_time;
@@ -113,11 +113,12 @@ cal_shell_view_execute_search (EShellView *shell_view)
 
        data_model = e_cal_base_shell_content_get_data_model (E_CAL_BASE_SHELL_CONTENT (cal_shell_content));
        timezone = e_cal_data_model_get_timezone (data_model);
-       current_time = icaltime_current_time_with_zone (timezone);
-       now_time = time_day_begin (icaltime_as_timet (current_time));
+       current_time = i_cal_time_current_time_with_zone (timezone);
+       now_time = time_day_begin (i_cal_time_as_timet (current_time));
+       g_clear_object (&current_time);
 
-       if (timezone && timezone != icaltimezone_get_utc_timezone ())
-               default_tzloc = icaltimezone_get_location (timezone);
+       if (timezone && timezone != i_cal_timezone_get_utc_timezone ())
+               default_tzloc = i_cal_timezone_get_location (timezone);
        if (!default_tzloc)
                default_tzloc = "";
 
diff --git a/src/modules/calendar/e-calendar-preferences.c b/src/modules/calendar/e-calendar-preferences.c
index ea3a99825c..e0254445b1 100644
--- a/src/modules/calendar/e-calendar-preferences.c
+++ b/src/modules/calendar/e-calendar-preferences.c
@@ -99,7 +99,7 @@ calendar_preferences_map_string_to_icaltimezone (GValue *value,
 {
        GSettings *settings;
        const gchar *location = NULL;
-       icaltimezone *timezone = NULL;
+       ICalTimezone *timezone = NULL;
 
        settings = e_util_ref_settings ("org.gnome.evolution.calendar");
 
@@ -109,12 +109,12 @@ calendar_preferences_map_string_to_icaltimezone (GValue *value,
                location = g_variant_get_string (variant, NULL);
 
        if (location != NULL && *location != '\0')
-               timezone = icaltimezone_get_builtin_timezone (location);
+               timezone = i_cal_timezone_get_builtin_timezone (location);
 
        if (timezone == NULL)
-               timezone = icaltimezone_get_utc_timezone ();
+               timezone = i_cal_timezone_get_utc_timezone ();
 
-       g_value_set_pointer (value, timezone);
+       g_value_set_object (value, timezone);
 
        g_object_unref (settings);
 
@@ -130,7 +130,7 @@ calendar_preferences_map_icaltimezone_to_string (const GValue *value,
        GSettings *settings;
        const gchar *location = NULL;
        gchar *location_str = NULL;
-       icaltimezone *timezone;
+       ICalTimezone *timezone;
 
        settings = e_util_ref_settings ("org.gnome.evolution.calendar");
 
@@ -138,10 +138,10 @@ calendar_preferences_map_icaltimezone_to_string (const GValue *value,
                location_str = g_settings_get_string (settings, "timezone");
                location = location_str;
        } else {
-               timezone = g_value_get_pointer (value);
+               timezone = g_value_get_object (value);
 
                if (timezone != NULL)
-                       location = icaltimezone_get_location (timezone);
+                       location = i_cal_timezone_get_location (timezone);
        }
 
        if (location == NULL)
@@ -303,7 +303,7 @@ update_day_second_zone_caption (ECalendarPreferences *prefs)
 {
        gchar *location;
        const gchar *caption;
-       icaltimezone *zone;
+       ICalTimezone *zone;
 
        g_return_if_fail (prefs != NULL);
 
@@ -312,9 +312,9 @@ update_day_second_zone_caption (ECalendarPreferences *prefs)
 
        location = calendar_config_get_day_second_zone ();
        if (location && *location) {
-               zone = icaltimezone_get_builtin_timezone (location);
-               if (zone && icaltimezone_get_display_name (zone)) {
-                       caption = icaltimezone_get_display_name (zone);
+               zone = i_cal_timezone_get_builtin_timezone (location);
+               if (zone && i_cal_timezone_get_display_name (zone)) {
+                       caption = i_cal_timezone_get_display_name (zone);
                }
        }
        g_free (location);
@@ -350,13 +350,13 @@ day_second_zone_clicked (GtkWidget *widget,
        GtkWidget *menu, *item;
        GSList *group = NULL, *recent_zones, *s;
        gchar *location;
-       icaltimezone *zone, *second_zone = NULL;
+       ICalTimezone *zone, *second_zone = NULL;
 
        menu = gtk_menu_new ();
 
        location = calendar_config_get_day_second_zone ();
        if (location && *location)
-               second_zone = icaltimezone_get_builtin_timezone (location);
+               second_zone = i_cal_timezone_get_builtin_timezone (location);
        g_free (location);
 
        group = NULL;
@@ -371,11 +371,11 @@ day_second_zone_clicked (GtkWidget *widget,
 
        recent_zones = calendar_config_get_day_second_zones ();
        for (s = recent_zones; s != NULL; s = s->next) {
-               zone = icaltimezone_get_builtin_timezone (s->data);
+               zone = i_cal_timezone_get_builtin_timezone (s->data);
                if (!zone)
                        continue;
 
-               item = gtk_radio_menu_item_new_with_label (group, icaltimezone_get_display_name (zone));
+               item = gtk_radio_menu_item_new_with_label (group, i_cal_timezone_get_display_name (zone));
                group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (item));
                /* both comes from builtin, thus no problem to compare pointers */
                if (zone == second_zone)
@@ -477,7 +477,7 @@ update_system_tz_widgets (GtkCheckButton *button,
                           ECalendarPreferences *prefs)
 {
        GtkWidget *widget;
-       icaltimezone *zone;
+       ICalTimezone *zone;
        const gchar *display_name;
        gchar *text;
 
@@ -486,7 +486,7 @@ update_system_tz_widgets (GtkCheckButton *button,
 
        zone = e_cal_util_get_system_timezone ();
        if (zone != NULL)
-               display_name = gettext (icaltimezone_get_display_name (zone));
+               display_name = gettext (i_cal_timezone_get_display_name (zone));
        else
                display_name = "UTC";
 
diff --git a/src/modules/calendar/e-memo-shell-content.c b/src/modules/calendar/e-memo-shell-content.c
index 49c1ffc348..ea3a36c3f8 100644
--- a/src/modules/calendar/e-memo-shell-content.c
+++ b/src/modules/calendar/e-memo-shell-content.c
@@ -73,8 +73,8 @@ memo_shell_content_table_foreach_cb (gint model_row,
                                      gpointer user_data)
 {
        ECalModelComponent *comp_data;
-       icalcomponent *clone;
-       icalcomponent *vcal;
+       ICalComponent *clone;
+       ICalComponent *vcal;
        gchar *string;
 
        struct {
@@ -86,12 +86,11 @@ memo_shell_content_table_foreach_cb (gint model_row,
                foreach_data->model, model_row);
 
        vcal = e_cal_util_new_top_level ();
-       clone = icalcomponent_new_clone (comp_data->icalcomp);
+       clone = i_cal_component_new_clone (comp_data->icalcomp);
        e_cal_util_add_timezones_from_component (vcal, comp_data->icalcomp);
-       icalcomponent_add_component (vcal, clone);
+       i_cal_component_take_component (vcal, clone);
 
-       /* String is owned by libical; do not free. */
-       string = icalcomponent_as_ical_string (vcal);
+       string = i_cal_component_as_ical_string_r (vcal);
        if (string != NULL) {
                ESource *source;
                const gchar *source_uid;
@@ -102,9 +101,11 @@ memo_shell_content_table_foreach_cb (gint model_row,
                foreach_data->list = g_slist_prepend (
                        foreach_data->list,
                        g_strdup_printf ("%s\n%s", source_uid, string));
+
+               g_free (string);
        }
 
-       icalcomponent_free (vcal);
+       g_object_unref (vcal);
 }
 
 static void
@@ -190,7 +191,7 @@ memo_shell_content_cursor_change_cb (EMemoShellContent *memo_shell_content,
                ECalComponent *comp;
 
                comp = e_cal_component_new_from_icalcomponent (
-                       icalcomponent_new_clone (comp_data->icalcomp));
+                       i_cal_component_new_clone (comp_data->icalcomp));
 
                e_cal_component_preview_display (
                        memo_preview, comp_data->client, comp,
@@ -200,7 +201,7 @@ memo_shell_content_cursor_change_cb (EMemoShellContent *memo_shell_content,
                g_object_unref (comp);
        }
 
-       uid = icalcomponent_get_uid (comp_data->icalcomp);
+       uid = i_cal_component_get_uid (comp_data->icalcomp);
        g_free (memo_shell_content->priv->current_uid);
        memo_shell_content->priv->current_uid = g_strdup (uid);
 }
@@ -242,7 +243,7 @@ memo_shell_content_model_row_changed_cb (EMemoShellContent *memo_shell_content,
        if (comp_data == NULL)
                return;
 
-       uid = icalcomponent_get_uid (comp_data->icalcomp);
+       uid = i_cal_component_get_uid (comp_data->icalcomp);
        if (g_strcmp0 (uid, current_uid) != 0)
                return;
 
@@ -281,7 +282,6 @@ memo_shell_content_check_state (EShellContent *shell_content)
        list = e_memo_table_get_selected (memo_table);
        for (iter = list; iter != NULL; iter = iter->next) {
                ECalModelComponent *comp_data = iter->data;
-               icalproperty *prop;
                gboolean read_only;
 
                if (!comp_data)
@@ -290,8 +290,7 @@ memo_shell_content_check_state (EShellContent *shell_content)
                read_only = e_client_is_readonly (E_CLIENT (comp_data->client));
                editable &= !read_only;
 
-               prop = icalcomponent_get_first_property (comp_data->icalcomp, ICAL_URL_PROPERTY);
-               has_url |= (prop != NULL);
+               has_url |= e_cal_util_component_has_property (comp_data->icalcomp, I_CAL_URL_PROPERTY);
        }
        g_slist_free (list);
 
diff --git a/src/modules/calendar/e-memo-shell-view-actions.c 
b/src/modules/calendar/e-memo-shell-view-actions.c
index 93170d6cfb..ab8bab8e98 100644
--- a/src/modules/calendar/e-memo-shell-view-actions.c
+++ b/src/modules/calendar/e-memo-shell-view-actions.c
@@ -72,7 +72,7 @@ action_memo_forward_cb (GtkAction *action,
        g_slist_free (list);
 
        /* XXX We only forward the first selected memo. */
-       comp = e_cal_component_new_from_icalcomponent (icalcomponent_new_clone (comp_data->icalcomp));
+       comp = e_cal_component_new_from_icalcomponent (i_cal_component_new_clone (comp_data->icalcomp));
        g_return_if_fail (comp != NULL);
 
        itip_send_component_with_model (e_memo_table_get_model (memo_table),
@@ -405,7 +405,7 @@ action_memo_open_url_cb (GtkAction *action,
        EMemoShellContent *memo_shell_content;
        EMemoTable *memo_table;
        ECalModelComponent *comp_data;
-       icalproperty *prop;
+       ICalProperty *prop;
        const gchar *uri;
        GSList *list;
 
@@ -421,12 +421,13 @@ action_memo_open_url_cb (GtkAction *action,
        g_slist_free (list);
 
        /* XXX We only open the URI of the first selected memo. */
-       prop = icalcomponent_get_first_property (
-               comp_data->icalcomp, ICAL_URL_PROPERTY);
+       prop = i_cal_component_get_first_property (comp_data->icalcomp, I_CAL_URL_PROPERTY);
        g_return_if_fail (prop != NULL);
 
-       uri = icalproperty_get_url (prop);
+       uri = i_cal_property_get_url (prop);
        e_show_uri (GTK_WINDOW (shell_window), uri);
+
+       g_object_unref (prop);
 }
 
 static void
@@ -450,7 +451,6 @@ action_memo_print_cb (GtkAction *action,
        ECalModelComponent *comp_data;
        ECalComponent *comp;
        ECalModel *model;
-       icalcomponent *clone;
        GSList *list;
 
        memo_shell_content = memo_shell_view->priv->memo_shell_content;
@@ -463,9 +463,7 @@ action_memo_print_cb (GtkAction *action,
        g_slist_free (list);
 
        /* XXX We only print the first selected memo. */
-       comp = e_cal_component_new ();
-       clone = icalcomponent_new_clone (comp_data->icalcomp);
-       e_cal_component_set_icalcomponent (comp, clone);
+       comp = e_cal_component_new_from_icalcomponent (i_cal_component_new_clone (comp_data->icalcomp));
 
        print_comp (
                comp, comp_data->client,
diff --git a/src/modules/calendar/e-task-shell-content.c b/src/modules/calendar/e-task-shell-content.c
index 88d403c4c9..50a974a6d7 100644
--- a/src/modules/calendar/e-task-shell-content.c
+++ b/src/modules/calendar/e-task-shell-content.c
@@ -72,8 +72,8 @@ task_shell_content_table_foreach_cb (gint model_row,
                                      gpointer user_data)
 {
        ECalModelComponent *comp_data;
-       icalcomponent *clone;
-       icalcomponent *vcal;
+       ICalComponent *clone;
+       ICalComponent *vcal;
        gchar *string;
 
        struct {
@@ -85,12 +85,11 @@ task_shell_content_table_foreach_cb (gint model_row,
                foreach_data->model, model_row);
 
        vcal = e_cal_util_new_top_level ();
-       clone = icalcomponent_new_clone (comp_data->icalcomp);
+       clone = i_cal_component_new_clone (comp_data->icalcomp);
        e_cal_util_add_timezones_from_component (vcal, comp_data->icalcomp);
-       icalcomponent_add_component (vcal, clone);
+       i_cal_component_take_component (vcal, clone);
 
-       /* String is owned by libical; do not free. */
-       string = icalcomponent_as_ical_string (vcal);
+       string = i_cal_component_as_ical_string_r (vcal);
        if (string != NULL) {
                ESource *source;
                const gchar *source_uid;
@@ -101,9 +100,11 @@ task_shell_content_table_foreach_cb (gint model_row,
                foreach_data->list = g_slist_prepend (
                        foreach_data->list,
                        g_strdup_printf ("%s\n%s", source_uid, string));
+
+               g_free (string);
        }
 
-       icalcomponent_free (vcal);
+       g_object_unref (vcal);
 }
 
 static void
@@ -189,7 +190,7 @@ task_shell_content_cursor_change_cb (ETaskShellContent *task_shell_content,
                ECalComponent *comp;
 
                comp = e_cal_component_new_from_icalcomponent (
-                               icalcomponent_new_clone (comp_data->icalcomp));
+                       i_cal_component_new_clone (comp_data->icalcomp));
 
                e_cal_component_preview_display (
                        task_preview, comp_data->client, comp,
@@ -199,7 +200,7 @@ task_shell_content_cursor_change_cb (ETaskShellContent *task_shell_content,
                g_object_unref (comp);
        }
 
-       uid = icalcomponent_get_uid (comp_data->icalcomp);
+       uid = i_cal_component_get_uid (comp_data->icalcomp);
        g_free (task_shell_content->priv->current_uid);
        task_shell_content->priv->current_uid = g_strdup (uid);
 }
@@ -239,7 +240,7 @@ task_shell_content_model_row_changed_cb (ETaskShellContent *task_shell_content,
        if (comp_data == NULL)
                return;
 
-       uid = icalcomponent_get_uid (comp_data->icalcomp);
+       uid = i_cal_component_get_uid (comp_data->icalcomp);
        if (g_strcmp0 (uid, current_uid) != 0)
                return;
 
@@ -281,7 +282,6 @@ task_shell_content_check_state (EShellContent *shell_content)
        list = e_task_table_get_selected (task_table);
        for (iter = list; iter != NULL; iter = iter->next) {
                ECalModelComponent *comp_data = iter->data;
-               icalproperty *prop;
                const gchar *cap;
                gboolean read_only;
 
@@ -299,13 +299,9 @@ task_shell_content_check_state (EShellContent *shell_content)
                if (e_client_check_capability (E_CLIENT (comp_data->client), cap))
                        assignable = FALSE;
 
-               prop = icalcomponent_get_first_property (
-                       comp_data->icalcomp, ICAL_URL_PROPERTY);
-               has_url |= (prop != NULL);
+               has_url |= e_cal_util_component_has_property (comp_data->icalcomp, I_CAL_URL_PROPERTY);
 
-               prop = icalcomponent_get_first_property (
-                       comp_data->icalcomp, ICAL_COMPLETED_PROPERTY);
-               if (prop != NULL)
+               if (e_cal_util_component_has_property (comp_data->icalcomp, I_CAL_COMPLETED_PROPERTY))
                        n_complete++;
                else
                        n_incomplete++;
diff --git a/src/modules/calendar/e-task-shell-view-actions.c 
b/src/modules/calendar/e-task-shell-view-actions.c
index 8713e74dbc..48da46078e 100644
--- a/src/modules/calendar/e-task-shell-view-actions.c
+++ b/src/modules/calendar/e-task-shell-view-actions.c
@@ -95,7 +95,7 @@ action_task_forward_cb (GtkAction *action,
        g_slist_free (list);
 
        /* XXX We only forward the first selected task. */
-       comp = e_cal_component_new_from_icalcomponent (icalcomponent_new_clone (comp_data->icalcomp));
+       comp = e_cal_component_new_from_icalcomponent (i_cal_component_new_clone (comp_data->icalcomp));
        g_return_if_fail (comp != NULL);
 
        itip_send_component_with_model (e_task_table_get_model (task_table),
@@ -475,7 +475,7 @@ action_task_open_url_cb (GtkAction *action,
        ETaskShellContent *task_shell_content;
        ECalModelComponent *comp_data;
        ETaskTable *task_table;
-       icalproperty *prop;
+       ICalProperty *prop;
        const gchar *uri;
        GSList *list;
 
@@ -490,12 +490,13 @@ action_task_open_url_cb (GtkAction *action,
        comp_data = list->data;
 
        /* XXX We only open the URI of the first selected task. */
-       prop = icalcomponent_get_first_property (
-               comp_data->icalcomp, ICAL_URL_PROPERTY);
+       prop = i_cal_component_get_first_property (comp_data->icalcomp, I_CAL_URL_PROPERTY);
        g_return_if_fail (prop != NULL);
 
-       uri = icalproperty_get_url (prop);
+       uri = i_cal_property_get_url (prop);
        e_show_uri (GTK_WINDOW (shell_window), uri);
+
+       g_object_unref (prop);
 }
 
 static void
@@ -519,7 +520,6 @@ action_task_print_cb (GtkAction *action,
        ECalComponent *comp;
        ECalModel *model;
        ETaskTable *task_table;
-       icalcomponent *clone;
        GSList *list;
 
        task_shell_content = task_shell_view->priv->task_shell_content;
@@ -532,9 +532,7 @@ action_task_print_cb (GtkAction *action,
        g_slist_free (list);
 
        /* XXX We only print the first selected task. */
-       comp = e_cal_component_new ();
-       clone = icalcomponent_new_clone (comp_data->icalcomp);
-       e_cal_component_set_icalcomponent (comp, clone);
+       comp = e_cal_component_new_from_icalcomponent (i_cal_component_new_clone (comp_data->icalcomp));
 
        print_comp (
                comp, comp_data->client,
diff --git a/src/modules/calendar/e-task-shell-view.c b/src/modules/calendar/e-task-shell-view.c
index 88668585d6..5db889ae28 100644
--- a/src/modules/calendar/e-task-shell-view.c
+++ b/src/modules/calendar/e-task-shell-view.c
@@ -51,8 +51,8 @@ task_shell_view_execute_search (EShellView *shell_view)
        EWebView *web_view;
        ECalModel *model;
        ECalDataModel *data_model;
-       icaltimezone *timezone;
-       struct icaltimetype current_time;
+       ICalTimezone *timezone;
+       ICalTime *current_time;
        time_t start_range;
        time_t end_range;
        time_t now_time;
@@ -72,8 +72,9 @@ task_shell_view_execute_search (EShellView *shell_view)
        model = e_task_table_get_model (task_table);
        data_model = e_cal_model_get_data_model (model);
        timezone = e_cal_model_get_timezone (model);
-       current_time = icaltime_current_time_with_zone (timezone);
-       now_time = time_day_begin (icaltime_as_timet (current_time));
+       current_time = i_cal_time_current_time_with_zone (timezone);
+       now_time = time_day_begin (i_cal_time_as_timet (current_time));
+       g_clear_object (&current_time);
 
        action = GTK_RADIO_ACTION (ACTION (TASK_SEARCH_ANY_FIELD_CONTAINS));
        value = gtk_radio_action_get_current_value (action);
diff --git a/src/modules/composer-to-meeting/e-composer-to-meeting.c 
b/src/modules/composer-to-meeting/e-composer-to-meeting.c
index 5f4c131ac4..8bc2b52bfc 100644
--- a/src/modules/composer-to-meeting/e-composer-to-meeting.c
+++ b/src/modules/composer-to-meeting/e-composer-to-meeting.c
@@ -63,18 +63,6 @@ GType e_composer_to_meeting_get_type (void) G_GNUC_CONST;
 
 G_DEFINE_DYNAMIC_TYPE (EComposerToMeeting, e_composer_to_meeting, E_TYPE_EXTENSION)
 
-static void
-composer_to_meeting_attendees_free (gpointer ptr)
-{
-       ECalComponentAttendee *attendee = ptr;
-
-       if (attendee) {
-               g_free ((gpointer) attendee->value);
-               g_free ((gpointer) attendee->cn);
-               g_free (attendee);
-       }
-}
-
 static ECalComponent *
 composer_to_meeting_component (EMsgComposer *composer)
 {
@@ -91,7 +79,7 @@ composer_to_meeting_component (EMsgComposer *composer)
 
        g_return_val_if_fail (E_IS_MSG_COMPOSER (composer), NULL);
 
-       comp = e_cal_component_new_from_icalcomponent (e_cal_util_new_component (ICAL_VEVENT_COMPONENT));
+       comp = e_cal_component_new_from_icalcomponent (e_cal_util_new_component (I_CAL_VEVENT_COMPONENT));
        g_return_val_if_fail (comp != NULL, NULL);
 
        header_table = e_msg_composer_get_header_table (composer);
@@ -99,12 +87,12 @@ composer_to_meeting_component (EMsgComposer *composer)
        /* Summary */
        subject = e_composer_header_table_get_subject (header_table);
        if (subject && *subject) {
-               ECalComponentText summary;
+               ECalComponentText *summary;
 
-               summary.value = subject;
-               summary.altrep = NULL;
+               summary = e_cal_component_text_new (subject, NULL);
 
-               e_cal_component_set_summary (comp, &summary);
+               e_cal_component_set_summary (comp, summary);
+               e_cal_component_text_free (summary);
        }
 
        /* Organizer */
@@ -148,15 +136,18 @@ composer_to_meeting_component (EMsgComposer *composer)
                }
 
                if (address && *address) {
-                       ECalComponentOrganizer organizer = {NULL, NULL, NULL, NULL};
+                       ECalComponentOrganizer *organizer;
                        gchar *mailto;
 
                        mailto = g_strconcat ("mailto:";, address, NULL);
-                       organizer.value = mailto;
-                       organizer.cn = name;
 
-                       e_cal_component_set_organizer (comp, &organizer);
+                       organizer = e_cal_component_organizer_new ();
+                       e_cal_component_organizer_set_value (organizer, mailto);
+                       e_cal_component_organizer_set_cn (organizer, name);
+
+                       e_cal_component_set_organizer (comp, organizer);
 
+                       e_cal_component_organizer_free (organizer);
                        g_free (mailto);
                }
 
@@ -190,15 +181,19 @@ composer_to_meeting_component (EMsgComposer *composer)
 
                                if (camel_internet_address_get (address, jj, &name, &mail)) {
                                        ECalComponentAttendee *attendee;
+                                       gchar *mailto;
 
-                                       attendee = g_new0 (ECalComponentAttendee, 1);
-                                       attendee->value = g_strconcat ("mailto:";, mail, NULL);
-                                       attendee->cn = g_strdup (name);
-                                       attendee->cutype = ICAL_CUTYPE_INDIVIDUAL;
-                                       attendee->status = ICAL_PARTSTAT_NEEDSACTION;
-                                       attendee->role = ii == 0 ? ICAL_ROLE_REQPARTICIPANT : 
ICAL_ROLE_OPTPARTICIPANT;
+                                       mailto = g_strconcat ("mailto:";, mail, NULL);
+                                       attendee = e_cal_component_attendee_new ();
+                                       e_cal_component_attendee_set_value (attendee, mailto);
+                                       e_cal_component_attendee_set_cn (attendee,name);
+                                       e_cal_component_attendee_set_cutype (attendee, 
I_CAL_CUTYPE_INDIVIDUAL);
+                                       e_cal_component_attendee_set_partstat (attendee, 
I_CAL_PARTSTAT_NEEDSACTION);
+                                       e_cal_component_attendee_set_role (attendee, ii == 0 ? 
I_CAL_ROLE_REQPARTICIPANT : I_CAL_ROLE_OPTPARTICIPANT);
 
-                                       attendees = g_slist_append (attendees, attendee);
+                                       attendees = g_slist_prepend (attendees, attendee);
+
+                                       g_free (mailto);
                                }
                        }
                }
@@ -208,9 +203,11 @@ composer_to_meeting_component (EMsgComposer *composer)
                e_destination_freev (destinations);
        }
 
-       e_cal_component_set_attendee_list (comp, attendees);
+       attendees = g_slist_reverse (attendees);
+
+       e_cal_component_set_attendees (comp, attendees);
 
-       g_slist_free_full (attendees, composer_to_meeting_attendees_free);
+       g_slist_free_full (attendees, e_cal_component_attendee_free);
 
        /* Description */
        html_editor = e_msg_composer_get_editor (composer);
@@ -227,15 +224,13 @@ composer_to_meeting_component (EMsgComposer *composer)
                        g_free (tmp);
                }
 
-               description = g_new0 (ECalComponentText, 1);
-               description->value = text;
-               description->altrep = NULL;
+               description = e_cal_component_text_new (text, NULL);
 
                descr_list = g_slist_append (descr_list, description);
 
-               e_cal_component_set_description_list (comp, descr_list);
+               e_cal_component_set_descriptions (comp, descr_list);
 
-               g_slist_free_full (descr_list, g_free);
+               g_slist_free_full (descr_list, e_cal_component_text_free);
        }
        g_free (text);
 
diff --git a/src/modules/composer-to-meeting/e-meeting-to-composer.c 
b/src/modules/composer-to-meeting/e-meeting-to-composer.c
index f0fec00778..0e79d1b1a9 100644
--- a/src/modules/composer-to-meeting/e-meeting-to-composer.c
+++ b/src/modules/composer-to-meeting/e-meeting-to-composer.c
@@ -153,8 +153,8 @@ meeting_to_composer_composer_created_cb (GObject *source_object,
        EMsgComposer *composer;
        EComposerHeaderTable *header_table;
        gboolean did_updating;
-       icalcomponent *icalcomp;
-       icalproperty *prop;
+       ICalComponent *icomp;
+       ICalProperty *prop;
        const gchar *text;
        GPtrArray *to_recips, *cc_recips;
        GError *error = NULL;
@@ -173,24 +173,24 @@ meeting_to_composer_composer_created_cb (GObject *source_object,
        /* Just a trick to not show validation errors when getting the component */
        e_comp_editor_set_updating (comp_editor, TRUE);
 
-       icalcomp = icalcomponent_new_clone (e_comp_editor_get_component (comp_editor));
-       e_comp_editor_fill_component (comp_editor, icalcomp);
+       icomp = i_cal_component_new_clone (e_comp_editor_get_component (comp_editor));
+       e_comp_editor_fill_component (comp_editor, icomp);
 
        e_comp_editor_set_updating (comp_editor, did_updating);
 
        /* Subject */
-       text = icalcomponent_get_summary (icalcomp);
+       text = i_cal_component_get_summary (icomp);
        if (text && *text)
                e_composer_header_table_set_subject (header_table, text);
 
        /* From */
-       prop = icalcomponent_get_first_property (icalcomp, ICAL_ORGANIZER_PROPERTY);
+       prop = i_cal_component_get_first_property (icomp, I_CAL_ORGANIZER_PROPERTY);
        if (prop) {
                EComposerHeader *from_header;
                const gchar *organizer;
 
                from_header = e_composer_header_table_get_header (header_table, E_COMPOSER_HEADER_FROM);
-               organizer = itip_strip_mailto (icalproperty_get_organizer (prop));
+               organizer = itip_strip_mailto (i_cal_property_get_organizer (prop));
 
                if (organizer && *organizer && from_header) {
                        GtkComboBox *identities_combo;
@@ -227,34 +227,38 @@ meeting_to_composer_composer_created_cb (GObject *source_object,
                                } while (gtk_tree_model_iter_next (model, &iter));
                        }
                }
+
+               g_clear_object (&prop);
        }
 
        /* Recipients */
        to_recips = g_ptr_array_new_with_free_func (meeting_to_composer_unref_nonull_object);
        cc_recips = g_ptr_array_new_with_free_func (meeting_to_composer_unref_nonull_object);
 
-       for (prop = icalcomponent_get_first_property (icalcomp, ICAL_ATTENDEE_PROPERTY);
+       for (prop = i_cal_component_get_first_property (icomp, I_CAL_ATTENDEE_PROPERTY);
             prop;
-            prop = icalcomponent_get_next_property (icalcomp, ICAL_ATTENDEE_PROPERTY)) {
-               icalparameter *param;
-               icalparameter_role role = ICAL_ROLE_REQPARTICIPANT;
+            g_object_unref (prop), prop = i_cal_component_get_next_property (icomp, 
I_CAL_ATTENDEE_PROPERTY)) {
+               ICalParameter *param;
+               ICalParameterRole role = I_CAL_ROLE_REQPARTICIPANT;
                const gchar *name = NULL, *address;
                EDestination *dest;
 
-               address = itip_strip_mailto (icalproperty_get_attendee (prop));
+               address = itip_strip_mailto (i_cal_property_get_attendee (prop));
                if (!address || !*address)
                        continue;
 
-               param = icalproperty_get_first_parameter (prop, ICAL_ROLE_PARAMETER);
-               if (param)
-                       role = icalparameter_get_role (param);
+               param = i_cal_property_get_first_parameter (prop, I_CAL_ROLE_PARAMETER);
+               if (param) {
+                       role = i_cal_parameter_get_role (param);
+                       g_object_unref (param);
+               }
 
-               if (role == ICAL_ROLE_NONPARTICIPANT || role == ICAL_ROLE_NONE)
+               if (role == I_CAL_ROLE_NONPARTICIPANT || role == I_CAL_ROLE_NONE)
                        continue;
 
-               param = icalproperty_get_first_parameter (prop, ICAL_CN_PARAMETER);
+               param = i_cal_property_get_first_parameter (prop, I_CAL_CN_PARAMETER);
                if (param)
-                       name = icalparameter_get_cn (param);
+                       name = i_cal_parameter_get_cn (param);
 
                if (name && !*name)
                        name = NULL;
@@ -263,10 +267,12 @@ meeting_to_composer_composer_created_cb (GObject *source_object,
                e_destination_set_name (dest, name);
                e_destination_set_email (dest, address);
 
-               if (role == ICAL_ROLE_REQPARTICIPANT)
+               if (role == I_CAL_ROLE_REQPARTICIPANT)
                        g_ptr_array_add (to_recips, dest);
                else
                        g_ptr_array_add (cc_recips, dest);
+
+               g_clear_object (&param);
        }
 
        if (to_recips->len > 0) {
@@ -285,9 +291,9 @@ meeting_to_composer_composer_created_cb (GObject *source_object,
        g_ptr_array_free (cc_recips, TRUE);
 
        /* Body */
-       prop = icalcomponent_get_first_property (icalcomp, ICAL_DESCRIPTION_PROPERTY);
+       prop = i_cal_component_get_first_property (icomp, I_CAL_DESCRIPTION_PROPERTY);
        if (prop) {
-               text = icalproperty_get_description (prop);
+               text = i_cal_property_get_description (prop);
 
                if (text && *text) {
                        EHTMLEditor *html_editor;
@@ -299,6 +305,8 @@ meeting_to_composer_composer_created_cb (GObject *source_object,
                        e_content_editor_set_html_mode (cnt_editor, FALSE);
                        e_content_editor_insert_content (cnt_editor, text, 
E_CONTENT_EDITOR_INSERT_REPLACE_ALL | E_CONTENT_EDITOR_INSERT_TEXT_PLAIN);
                }
+
+               g_object_unref (prop);
        }
 
        /* Attachments */
@@ -307,25 +315,25 @@ meeting_to_composer_composer_created_cb (GObject *source_object,
        gtk_window_present (GTK_WINDOW (composer));
 
        gtk_widget_destroy (GTK_WIDGET (comp_editor));
-       icalcomponent_free (icalcomp);
+       g_object_unref (icomp);
 }
 
 static void
 action_meeting_to_composer_cb (GtkAction *action,
                               ECompEditor *comp_editor)
 {
-       icalcomponent *icalcomp;
-       icalcomponent_kind kind;
+       ICalComponent *icomp;
+       ICalComponentKind kind;
        const gchar *prompt_key;
 
        g_return_if_fail (E_IS_COMP_EDITOR (comp_editor));
 
-       icalcomp = e_comp_editor_get_component (comp_editor);
-       kind = icalcomp ? icalcomponent_isa (icalcomp) : ICAL_VEVENT_COMPONENT;
+       icomp = e_comp_editor_get_component (comp_editor);
+       kind = icomp ? i_cal_component_isa (icomp) : I_CAL_VEVENT_COMPONENT;
 
-       if (kind == ICAL_VTODO_COMPONENT)
+       if (kind == I_CAL_VTODO_COMPONENT)
                prompt_key = "mail-composer:prompt-task-to-composer";
-       else if (kind == ICAL_VJOURNAL_COMPONENT)
+       else if (kind == I_CAL_VJOURNAL_COMPONENT)
                prompt_key = "mail-composer:prompt-memo-to-composer";
        else
                prompt_key = "mail-composer:prompt-event-to-composer";
diff --git a/src/modules/settings/e-settings-cal-model.c b/src/modules/settings/e-settings-cal-model.c
index a6f10c8107..4891ae3582 100644
--- a/src/modules/settings/e-settings-cal-model.c
+++ b/src/modules/settings/e-settings-cal-model.c
@@ -42,7 +42,7 @@ settings_map_string_to_icaltimezone (GValue *value,
 {
        GSettings *settings;
        const gchar *location = NULL;
-       icaltimezone *timezone = NULL;
+       ICalTimezone *timezone = NULL;
 
        settings = e_util_ref_settings ("org.gnome.evolution.calendar");
 
@@ -52,12 +52,12 @@ settings_map_string_to_icaltimezone (GValue *value,
                location = g_variant_get_string (variant, NULL);
 
        if (location != NULL && *location != '\0')
-               timezone = icaltimezone_get_builtin_timezone (location);
+               timezone = i_cal_timezone_get_builtin_timezone (location);
 
        if (timezone == NULL)
-               timezone = icaltimezone_get_utc_timezone ();
+               timezone = i_cal_timezone_get_utc_timezone ();
 
-       g_value_set_pointer (value, timezone);
+       g_value_set_object (value, timezone);
 
        g_object_unref (settings);
 
diff --git a/src/modules/settings/e-settings-client-cache.c b/src/modules/settings/e-settings-client-cache.c
index e99440467b..b29c66d4e5 100644
--- a/src/modules/settings/e-settings-client-cache.c
+++ b/src/modules/settings/e-settings-client-cache.c
@@ -41,7 +41,7 @@ settings_map_string_to_icaltimezone (GValue *value,
 {
        GSettings *settings;
        const gchar *location = NULL;
-       icaltimezone *timezone = NULL;
+       ICalTimezone *timezone = NULL;
 
        settings = e_util_ref_settings ("org.gnome.evolution.calendar");
 
@@ -51,12 +51,12 @@ settings_map_string_to_icaltimezone (GValue *value,
                location = g_variant_get_string (variant, NULL);
 
        if (location != NULL && *location != '\0')
-               timezone = icaltimezone_get_builtin_timezone (location);
+               timezone = i_cal_timezone_get_builtin_timezone (location);
 
        if (timezone == NULL)
-               timezone = icaltimezone_get_utc_timezone ();
+               timezone = i_cal_timezone_get_utc_timezone ();
 
-       g_value_set_pointer (value, timezone);
+       g_value_set_object (value, timezone);
 
        g_object_unref (settings);
 
diff --git a/src/modules/settings/e-settings-meeting-store.c b/src/modules/settings/e-settings-meeting-store.c
index dc9a6a44bb..2c47eadd5d 100644
--- a/src/modules/settings/e-settings-meeting-store.c
+++ b/src/modules/settings/e-settings-meeting-store.c
@@ -41,7 +41,7 @@ settings_map_string_to_icaltimezone (GValue *value,
 {
        GSettings *settings;
        const gchar *location = NULL;
-       icaltimezone *timezone = NULL;
+       ICalTimezone *timezone = NULL;
 
        settings = e_util_ref_settings ("org.gnome.evolution.calendar");
 
@@ -51,12 +51,12 @@ settings_map_string_to_icaltimezone (GValue *value,
                location = g_variant_get_string (variant, NULL);
 
        if (location != NULL && *location != '\0')
-               timezone = icaltimezone_get_builtin_timezone (location);
+               timezone = i_cal_timezone_get_builtin_timezone (location);
 
        if (timezone == NULL)
-               timezone = icaltimezone_get_utc_timezone ();
+               timezone = i_cal_timezone_get_utc_timezone ();
 
-       g_value_set_pointer (value, timezone);
+       g_value_set_object (value, timezone);
 
        g_object_unref (settings);
 
diff --git a/src/plugins/mail-to-task/mail-to-task.c b/src/plugins/mail-to-task/mail-to-task.c
index c6285176f8..806cc6f825 100644
--- a/src/plugins/mail-to-task/mail-to-task.c
+++ b/src/plugins/mail-to-task/mail-to-task.c
@@ -106,7 +106,7 @@ set_attendees (ECalComponent *comp,
                CamelMimeMessage *message,
                const gchar *organizer)
 {
-       GSList *attendees = NULL, *to_free = NULL;
+       GSList *attendees = NULL;
        ECalComponentAttendee *ca;
        CamelInternetAddress *from, *to, *cc, *bcc, *arr[4];
        gint len, i, j;
@@ -139,37 +139,35 @@ set_attendees (ECalComponent *comp,
                                        continue;
                                }
 
-                               ca = g_new0 (ECalComponentAttendee, 1);
+                               ca = e_cal_component_attendee_new ();
 
-                               ca->value = temp;
-                               ca->cn = name;
-                               ca->cutype = ICAL_CUTYPE_INDIVIDUAL;
-                               ca->status = ICAL_PARTSTAT_NEEDSACTION;
+                               e_cal_component_attendee_set_value (ca, temp);
+                               e_cal_component_attendee_set_cn (ca, name);
+                               e_cal_component_attendee_set_cutype (ca, I_CAL_CUTYPE_INDIVIDUAL);
+                               e_cal_component_attendee_set_partstat (ca, I_CAL_PARTSTAT_NEEDSACTION);
                                if (j == 0) {
                                        /* From */
-                                       ca->role = ICAL_ROLE_CHAIR;
+                                       e_cal_component_attendee_set_role (ca, I_CAL_ROLE_CHAIR);
                                } else if (j == 2) {
                                        /* BCC  */
-                                       ca->role = ICAL_ROLE_OPTPARTICIPANT;
+                                       e_cal_component_attendee_set_role (ca, I_CAL_ROLE_OPTPARTICIPANT);
                                } else {
                                        /* all other */
-                                       ca->role = ICAL_ROLE_REQPARTICIPANT;
+                                       e_cal_component_attendee_set_role (ca, I_CAL_ROLE_REQPARTICIPANT);
                                }
 
-                               to_free = g_slist_prepend (to_free, temp);
+                               attendees = g_slist_prepend (attendees, ca);
 
-                               attendees = g_slist_append (attendees, ca);
+                               g_free (temp);
                        }
                }
        }
 
-       e_cal_component_set_attendee_list (comp, attendees);
+       attendees = g_slist_reverse (attendees);
 
-       g_slist_foreach (attendees, (GFunc) g_free, NULL);
-       g_slist_foreach (to_free, (GFunc) g_free, NULL);
+       e_cal_component_set_attendees (comp, attendees);
 
-       g_slist_free (to_free);
-       g_slist_free (attendees);
+       g_slist_free_full (attendees, e_cal_component_attendee_free);
 }
 
 static const gchar *
@@ -283,20 +281,18 @@ set_description (ECalComponent *comp,
        if (!convert_str && str)
                convert_str = e_util_utf8_make_valid (str);
 
-       text = g_new0 (ECalComponentText, 1);
        if (convert_str)
-               text->value = prepend_from (message, &convert_str);
+               text = e_cal_component_text_new (prepend_from (message, &convert_str), NULL);
        else
-               text->value = prepend_from (message, &str);
-       text->altrep = NULL;
+               text = e_cal_component_text_new (prepend_from (message, &str), NULL);
        sl = g_slist_append (sl, text);
 
-       e_cal_component_set_description_list (comp, sl);
+       e_cal_component_set_descriptions (comp, sl);
 
        g_free (str);
        if (convert_str)
                g_free (convert_str);
-       e_cal_component_free_text_list (sl);
+       g_slist_free_full (sl, e_cal_component_text_free);
 }
 
 static gchar *
@@ -311,7 +307,6 @@ set_organizer (ECalComponent *comp,
        ESourceMailIdentity *extension;
        const gchar *extension_name;
        const gchar *address, *name;
-       ECalComponentOrganizer organizer = {NULL, NULL, NULL, NULL};
        gchar *mailto = NULL;
        gchar *identity_name = NULL, *identity_address = NULL;
 
@@ -347,10 +342,15 @@ set_organizer (ECalComponent *comp,
        }
 
        if (address && *address) {
+               ECalComponentOrganizer *organizer;
+
                mailto = g_strconcat ("mailto:";, address, NULL);
-               organizer.value = mailto;
-               organizer.cn = name;
-               e_cal_component_set_organizer (comp, &organizer);
+
+               organizer = e_cal_component_organizer_new ();
+               e_cal_component_organizer_set_value (organizer, mailto);
+               e_cal_component_organizer_set_cn (organizer, name);
+               e_cal_component_set_organizer (comp, organizer);
+               e_cal_component_organizer_free (organizer);
        }
 
        g_object_unref (source);
@@ -430,7 +430,7 @@ set_attachments (ECalClient *client,
        if (n_parts < 1)
                return;
 
-       e_cal_component_get_uid (comp, &comp_uid);
+       comp_uid = e_cal_component_get_uid (comp);
        g_return_if_fail (comp_uid != NULL);
 
        tmp = g_strdup (comp_uid);
@@ -492,16 +492,15 @@ set_attachments (ECalClient *client,
 
        /* Transfer the URI strings to the GSList. */
        for (ii = 0; cb_data.uris[ii] != NULL; ii++) {
-               uri_list = g_slist_prepend (uri_list, cb_data.uris[ii]);
-               cb_data.uris[ii] = NULL;
+               uri_list = g_slist_prepend (uri_list, i_cal_attach_new_from_url (cb_data.uris[ii]));
        }
 
        e_flag_free (cb_data.flag);
-       g_free (cb_data.uris);
+       g_strfreev (cb_data.uris);
 
-       /* XXX Does this take ownership of the list? */
-       e_cal_component_set_attachment_list (comp, uri_list);
+       e_cal_component_set_attachments (comp, uri_list);
 
+       g_slist_free_full (uri_list, g_object_unref);
        e_attachment_store_remove_all (store);
        g_object_unref (destination);
        g_object_unref (store);
@@ -517,11 +516,8 @@ set_priority (ECalComponent *comp,
        g_return_if_fail (part != NULL);
 
        prio = camel_medium_get_header (CAMEL_MEDIUM (part), "X-Priority");
-       if (prio && atoi (prio) > 0) {
-               gint priority = 1;
-
-               e_cal_component_set_priority (comp, &priority);
-       }
+       if (prio && atoi (prio) > 0)
+               e_cal_component_set_priority (comp, 1);
 }
 
 struct _report_error
@@ -560,7 +556,7 @@ struct _manage_comp
 {
        ECalClient *client;
        ECalComponent *comp;
-       icalcomponent *stored_comp; /* the one in client already */
+       ICalComponent *stored_comp; /* the one in client already */
        GCond cond;
        GMutex mutex;
        gint mails_count;
@@ -576,8 +572,7 @@ free_manage_comp_struct (struct _manage_comp *mc)
 
        g_object_unref (mc->comp);
        g_object_unref (mc->client);
-       if (mc->stored_comp)
-               icalcomponent_free (mc->stored_comp);
+       g_clear_object (&mc->stored_comp);
        g_mutex_clear (&mc->mutex);
        g_cond_clear (&mc->cond);
        if (mc->editor_title)
@@ -761,14 +756,14 @@ do_manage_comp_idle (struct _manage_comp *mc)
                const gchar *ask = get_question_edit_old (source_type);
 
                if (ask) {
-                       gchar *msg = g_strdup_printf (ask, icalcomponent_get_summary (mc->stored_comp) ? 
icalcomponent_get_summary (mc->stored_comp) : _("[No Summary]"));
+                       gchar *msg = g_strdup_printf (ask, i_cal_component_get_summary (mc->stored_comp) ? 
i_cal_component_get_summary (mc->stored_comp) : _("[No Summary]"));
                        gint chosen;
 
                        chosen = do_ask (msg, TRUE);
 
                        if (chosen == GTK_RESPONSE_YES) {
                                edit_comp = e_cal_component_new ();
-                               if (!e_cal_component_set_icalcomponent (edit_comp, icalcomponent_new_clone 
(mc->stored_comp))) {
+                               if (!e_cal_component_set_icalcomponent (edit_comp, i_cal_component_new_clone 
(mc->stored_comp))) {
                                        g_object_unref (edit_comp);
                                        edit_comp = NULL;
                                        error = g_error_new (
@@ -884,8 +879,8 @@ do_mail_to_event (AsyncData *data)
                }
        } else {
                gint i;
-               ECalComponentDateTime dt, dt2;
-               struct icaltimetype tt, tt2;
+               ECalComponentDateTime *dt, *dt2;
+               ICalTime *tt, *tt2;
                struct _manage_comp *oldmc = NULL;
 
                #define cache_backend_prop(prop) { \
@@ -903,21 +898,19 @@ do_mail_to_event (AsyncData *data)
                #undef cache_backend_prop
 
                /* set start day of the event as today, without time - easier than looking for a calendar's 
time zone */
-               tt = icaltime_today ();
-               dt.value = &tt;
-               dt.tzid = NULL;
+               tt = i_cal_time_today ();
+               tt2 = i_cal_time_new_clone (tt);
+               i_cal_time_adjust (tt2, 1, 0, 0, 0);
 
-               tt2 = tt;
-               icaltime_adjust (&tt2, 1, 0, 0, 0);
-               dt2.value = &tt2;
-               dt2.tzid = NULL;
+               dt = e_cal_component_datetime_new_take (tt, NULL);
+               dt2 = e_cal_component_datetime_new_take (tt2, NULL);
 
                for (i = 0; i < (uids ? uids->len : 0); i++) {
                        CamelMimeMessage *message;
                        ECalComponent *comp;
-                       ECalComponentText text;
-                       icalproperty *icalprop;
-                       icalcomponent *icalcomp;
+                       ECalComponentText *text;
+                       ICalProperty *prop;
+                       ICalComponent *icomp;
                        struct _manage_comp *mc;
                        const gchar *message_uid = g_ptr_array_index (uids, i);
 
@@ -946,28 +939,30 @@ do_mail_to_event (AsyncData *data)
                        }
 
                        e_cal_component_set_uid (comp, camel_mime_message_get_message_id (message));
-                       e_cal_component_set_dtstart (comp, &dt);
+                       e_cal_component_set_dtstart (comp, dt);
 
                        if (data->source_type == E_CAL_CLIENT_SOURCE_TYPE_EVENTS) {
                                /* make it an all-day event */
-                               e_cal_component_set_dtend (comp, &dt2);
+                               e_cal_component_set_dtend (comp, dt2);
                        }
 
                        /* set the summary */
-                       text.value = camel_mime_message_get_subject (message);
-                       text.altrep = NULL;
-                       e_cal_component_set_summary (comp, &text);
+                       text = e_cal_component_text_new (camel_mime_message_get_subject (message), NULL);
+                       e_cal_component_set_summary (comp, text);
+                       e_cal_component_text_free (text);
 
                        /* set all fields */
                        if (data->selected_text) {
                                GSList sl;
 
-                               text.value = data->selected_text;
-                               text.altrep = NULL;
+                               text = e_cal_component_text_new (data->selected_text, NULL);
+
                                sl.next = NULL;
-                               sl.data = &text;
+                               sl.data = text;
+
+                               e_cal_component_set_descriptions (comp, &sl);
 
-                               e_cal_component_set_description_list (comp, &sl);
+                               e_cal_component_text_free (text);
                        } else
                                set_description (comp, message, data->default_charset, data->forced_charset);
 
@@ -989,11 +984,11 @@ do_mail_to_event (AsyncData *data)
                        /* no need to increment a sequence number, this is a new component */
                        e_cal_component_abort_sequence (comp);
 
-                       icalcomp = e_cal_component_get_icalcomponent (comp);
+                       icomp = e_cal_component_get_icalcomponent (comp);
 
-                       icalprop = icalproperty_new_x ("1");
-                       icalproperty_set_x_name (icalprop, "X-EVOLUTION-MOVE-CALENDAR");
-                       icalcomponent_add_property (icalcomp, icalprop);
+                       prop = i_cal_property_new_x ("1");
+                       i_cal_property_set_x_name (prop, "X-EVOLUTION-MOVE-CALENDAR");
+                       i_cal_component_take_property (icomp, prop);
 
                        mc = g_new0 (struct _manage_comp, 1);
                        mc->client = g_object_ref (client);
@@ -1022,7 +1017,7 @@ do_mail_to_event (AsyncData *data)
 
                        e_cal_client_get_object_sync (
                                E_CAL_CLIENT (client),
-                               icalcomponent_get_uid (icalcomp),
+                               i_cal_component_get_uid (icomp),
                                NULL, &mc->stored_comp, NULL, NULL);
 
                        /* Prioritize ahead of GTK+ redraws. */
@@ -1044,6 +1039,9 @@ do_mail_to_event (AsyncData *data)
                        g_mutex_unlock (&oldmc->mutex);
                        free_manage_comp_struct (oldmc);
                }
+
+               e_cal_component_datetime_free (dt);
+               e_cal_component_datetime_free (dt2);
        }
 
        /* free memory */
diff --git a/src/plugins/pst-import/pst-importer.c b/src/plugins/pst-import/pst-importer.c
index ed58ec6159..8b029647d4 100644
--- a/src/plugins/pst-import/pst-importer.c
+++ b/src/plugins/pst-import/pst-importer.c
@@ -75,7 +75,7 @@ gchar *foldername_to_utf8 (const gchar *pstname);
 gchar *string_to_utf8 (const gchar *string);
 void contact_set_date (EContact *contact, EContactField id, FILETIME *date);
 static void fill_calcomponent (PstImporter *m, pst_item *item, ECalComponent *ec, const gchar *type);
-struct icaltimetype get_ical_date (FILETIME *date, gboolean is_date);
+ICalTime *get_ical_date (FILETIME *date, gboolean is_date);
 gchar *rfc2445_datetime_format (FILETIME *ft);
 
 gboolean org_credativ_evolution_readpst_supported (EPlugin *epl, EImportTarget *target);
@@ -1205,10 +1205,8 @@ pst_process_email (PstImporter *m,
 
        if (item->type == PST_TYPE_SCHEDULE && item->appointment) {
                ECalComponent *comp;
-               icalcomponent *vcal;
-               icalproperty *prop;
-               icalvalue *value;
-               icalproperty_method method;
+               ICalComponent *vcal;
+               ICalPropertyMethod method;
 
                comp = e_cal_component_new ();
                e_cal_component_set_new_vtype (comp, E_CAL_COMPONENT_EVENT);
@@ -1216,26 +1214,23 @@ pst_process_email (PstImporter *m,
 
                vcal = e_cal_util_new_top_level ();
 
-               method = ICAL_METHOD_PUBLISH;
+               method = I_CAL_METHOD_PUBLISH;
                if (item->ascii_type) {
                        if (g_str_has_prefix (item->ascii_type, "IPM.Schedule.Meeting.Request"))
-                               method = ICAL_METHOD_REQUEST;
+                               method = I_CAL_METHOD_REQUEST;
                        else if (g_str_has_prefix (item->ascii_type, "IPM.Schedule.Meeting.Canceled"))
-                               method = ICAL_METHOD_CANCEL;
+                               method = I_CAL_METHOD_CANCEL;
                        else if (g_str_has_prefix (item->ascii_type, "IPM.Schedule.Meeting.Resp."))
-                               method = ICAL_METHOD_REPLY;
+                               method = I_CAL_METHOD_REPLY;
                }
 
-               prop = icalproperty_new (ICAL_METHOD_PROPERTY);
-               value = icalvalue_new_method (method);
-               icalproperty_set_value (prop, value);
-               icalcomponent_add_property (vcal, prop);
+               i_cal_component_set_method (vcal, method);
 
-               icalcomponent_add_component (vcal, icalcomponent_new_clone (e_cal_component_get_icalcomponent 
(comp)));
+               i_cal_component_take_component (vcal, i_cal_component_new_clone 
(e_cal_component_get_icalcomponent (comp)));
 
-               comp_str = icalcomponent_as_ical_string_r (vcal);
+               comp_str = i_cal_component_as_ical_string_r (vcal);
 
-               icalcomponent_free (vcal);
+               g_object_unref (vcal);
                g_object_unref (comp);
 
                if (comp_str && !*comp_str) {
@@ -1666,11 +1661,11 @@ pst_process_contact (PstImporter *m,
  * @date: time value from libpst
  * @is_date: treat as date only (all day event)?
  *
- * Convert pst time to icaltimetype
+ * Convert pst time to ICalTime
  *
  * Returns: converted date
  */
-struct icaltimetype
+ICalTime *
 get_ical_date (FILETIME *date,
                gboolean is_date)
 {
@@ -1678,9 +1673,9 @@ get_ical_date (FILETIME *date,
                time_t t;
 
                t = pst_fileTimeToUnixTime (date);
-               return icaltime_from_timet_with_zone (t, is_date, NULL);
+               return i_cal_time_from_timet_with_zone (t, is_date, NULL);
        } else {
-               return icaltime_null_date ();
+               return NULL;
        }
 }
 
@@ -1698,7 +1693,7 @@ set_cal_attachments (ECalClient *cal,
                return;
        }
 
-       e_cal_component_get_uid (ec, &uid);
+       uid = e_cal_component_get_uid (ec);
        store_dir = g_filename_from_uri (e_cal_client_get_local_attachment_store (cal), NULL, NULL);
 
        while (attach != NULL) {
@@ -1769,7 +1764,7 @@ set_cal_attachments (ECalClient *cal,
                g_object_unref (stream);
 
                uri = g_filename_to_uri (path, NULL, NULL);
-               list = g_slist_append (list, g_strdup (uri));
+               list = g_slist_append (list, i_cal_attach_new_from_url (uri));
                g_free (uri);
 
                g_object_unref (part);
@@ -1781,7 +1776,8 @@ set_cal_attachments (ECalClient *cal,
 
        g_free (store_dir);
 
-       e_cal_component_set_attachment_list (ec, list);
+       e_cal_component_set_attachments (ec, list);
+       g_slist_free_full (list, g_object_unref);
 }
 
 static void
@@ -1792,10 +1788,7 @@ fill_calcomponent (PstImporter *m,
 {
        pst_item_appointment *a;
        pst_item_email *e;
-
-       ECalComponentText text;
-       struct icaltimetype tt_start, tt_end;
-       ECalComponentDateTime dt_start, dt_end;
+       ECalComponentText *text;
 
        a = item->appointment;
        e = item->email;
@@ -1803,34 +1796,37 @@ fill_calcomponent (PstImporter *m,
        g_return_if_fail (item->appointment != NULL);
 
        if (item->create_date) {
-               struct icaltimetype tt;
+               ICalTime *tt;
                tt = get_ical_date (item->create_date, FALSE);
-               e_cal_component_set_created (ec, &tt);
+               e_cal_component_set_created (ec, tt);
+               g_clear_object (&tt);
        }
        if (item->modify_date) {
-               struct icaltimetype tt;
+               ICalTime *tt;
                tt = get_ical_date (item->modify_date, FALSE);
-               e_cal_component_set_last_modified (ec, &tt);
+               e_cal_component_set_last_modified (ec, tt);
+               g_clear_object (&tt);
        }
 
        if (e) {
                if (item->subject.str || e->processed_subject.str) {
+                       text = NULL;
                        if (item->subject.str) {
-                               text.value = item->subject.str;
+                               text = e_cal_component_text_new (item->subject.str, NULL);
                        } else if (e->processed_subject.str) {
-                               text.value = e->processed_subject.str;
+                               text = e_cal_component_text_new (e->processed_subject.str, NULL);
                        }
 
-                       text.altrep = NULL; /* email->proc_subject? */
-                       e_cal_component_set_summary (ec, &text);
+                       e_cal_component_set_summary (ec, text);
+                       e_cal_component_text_free (text);
                }
                if (item->body.str) {
                        GSList l;
-                       text.value = item->body.str;
-                       text.altrep = NULL;
-                       l.data = &text;
+                       text = e_cal_component_text_new (item->body.str, NULL);
+                       l.data = text;
                        l.next = NULL;
-                       e_cal_component_set_description_list (ec, &l);
+                       e_cal_component_set_descriptions (ec, &l);
+                       e_cal_component_text_free (text);
                }
        } else {
                g_warning ("%s without subject / body!", type);
@@ -1841,31 +1837,37 @@ fill_calcomponent (PstImporter *m,
        }
 
        if (a->start) {
-               tt_start = get_ical_date (a->start, a->all_day);
-               dt_start.value = &tt_start;
-               dt_start.tzid = a->timezonestring.str;
-               e_cal_component_set_dtstart (ec, &dt_start);
+               ECalComponentDateTime *dtstart;
+
+               dtstart = e_cal_component_datetime_new_take (
+                       get_ical_date (a->start, a->all_day),
+                       g_strdup (a->timezonestring.str));
+               e_cal_component_set_dtstart (ec, dtstart);
+               e_cal_component_datetime_free (dtstart);
        }
 
        if (a->end) {
-               tt_end = get_ical_date (a->end, a->all_day);
-               dt_end.value = &tt_end;
-               dt_end.tzid = a->timezonestring.str;
-               e_cal_component_set_dtend (ec, &dt_end);
+               ECalComponentDateTime *dtend;
+
+               dtend = e_cal_component_datetime_new_take (
+                       get_ical_date (a->end, a->all_day),
+                       g_strdup (a->timezonestring.str));
+               e_cal_component_set_dtend (ec, dtend);
+               e_cal_component_datetime_free (dtend);
        }
 
        switch (a->showas) {
                case PST_FREEBUSY_TENTATIVE:
-                       e_cal_component_set_status (ec, ICAL_STATUS_TENTATIVE);
+                       e_cal_component_set_status (ec, I_CAL_STATUS_TENTATIVE);
                        break;
                case PST_FREEBUSY_FREE:
                        /* mark as transparent and as confirmed */
                        e_cal_component_set_transparency (ec, E_CAL_COMPONENT_TRANSP_TRANSPARENT);
-                       e_cal_component_set_status (ec, ICAL_STATUS_CONFIRMED);
+                       e_cal_component_set_status (ec, I_CAL_STATUS_CONFIRMED);
                        break;
                case PST_FREEBUSY_BUSY:
                case PST_FREEBUSY_OUT_OF_OFFICE:
-                       e_cal_component_set_status (ec, ICAL_STATUS_CONFIRMED);
+                       e_cal_component_set_status (ec, I_CAL_STATUS_CONFIRMED);
                        break;
        }
        switch (a->label) {
@@ -1895,14 +1897,17 @@ fill_calcomponent (PstImporter *m,
 
        if (a->alarm || a->alarm_minutes) {
                ECalComponentAlarm *alarm;
-               ECalComponentAlarmTrigger trigger;
 
                alarm = e_cal_component_alarm_new ();
 
                if (a->alarm_minutes) {
-                       trigger.type = E_CAL_COMPONENT_ALARM_TRIGGER_RELATIVE_START;
-                       trigger.u.rel_duration = icaldurationtype_from_int (- (a->alarm_minutes) * 60);
-                       e_cal_component_alarm_set_trigger (alarm, trigger);
+                       ECalComponentAlarmTrigger *trigger = NULL;
+                       ICalDuration *duration;
+
+                       duration = i_cal_duration_from_int (- (a->alarm_minutes) * 60);
+                       trigger = e_cal_component_alarm_trigger_new_relative 
(E_CAL_COMPONENT_ALARM_TRIGGER_RELATIVE_START, duration);
+                       e_cal_component_alarm_take_trigger (alarm, trigger);
+                       g_object_unref (duration);
                }
 
                if (a->alarm) {
@@ -1919,31 +1924,44 @@ fill_calcomponent (PstImporter *m,
        }
 
        if (a->recurrence_description.str != PST_APP_RECUR_NONE) {
-               struct icalrecurrencetype  r;
+               ICalRecurrence *recr;
                GSList recur_list;
 
-               icalrecurrencetype_clear (&r);
-               r.interval = 1; /* Interval not implemented in libpst */
+               recr = i_cal_recurrence_new ();
+
+               i_cal_recurrence_set_interval (recr, 1); /* Interval not implemented in libpst */
                if (a->recurrence_end) {
-                       r.until = get_ical_date (a->recurrence_end, FALSE);
+                       ICalTime *tt;
+
+                       tt = get_ical_date (a->recurrence_end, FALSE);
+                       if (tt) {
+                               i_cal_recurrence_set_until (recr, tt);
+                               g_object_unref (tt);
+                       }
                }
 
                switch (a->recurrence_type) {
                        case PST_APP_RECUR_DAILY:
-                               r.freq = ICAL_DAILY_RECURRENCE; break;
+                               i_cal_recurrence_set_freq (recr, I_CAL_DAILY_RECURRENCE);
+                               break;
                        case PST_APP_RECUR_WEEKLY:
-                               r.freq = ICAL_WEEKLY_RECURRENCE; break;
+                               i_cal_recurrence_set_freq (recr, I_CAL_WEEKLY_RECURRENCE);
+                               break;
                        case PST_APP_RECUR_MONTHLY:
-                               r.freq = ICAL_MONTHLY_RECURRENCE; break;
+                               i_cal_recurrence_set_freq (recr, I_CAL_MONTHLY_RECURRENCE);
+                               break;
                        case PST_APP_RECUR_YEARLY:
-                               r.freq = ICAL_YEARLY_RECURRENCE; break;
+                               i_cal_recurrence_set_freq (recr, I_CAL_YEARLY_RECURRENCE);
+                               break;
                        default:
-                               r.freq = ICAL_NO_RECURRENCE;
+                               i_cal_recurrence_set_freq (recr, I_CAL_NO_RECURRENCE);
+                               break;
                }
 
-               recur_list.data = &r;
+               recur_list.data = recr;
                recur_list.next = NULL;
-               e_cal_component_set_rrule_list (ec, &recur_list);
+               e_cal_component_set_rrules (ec, &recur_list);
+               g_object_unref (recr);
        }
 
        if (item->type == PST_TYPE_SCHEDULE && item->email && item->ascii_type) {
@@ -1962,28 +1980,31 @@ fill_calcomponent (PstImporter *m,
                }
 
                if (organizer || organizer_addr) {
-                       ECalComponentOrganizer org = { 0 };
+                       ECalComponentOrganizer *org;
 
-                       org.value = organizer_addr;
-                       org.cn = organizer;
+                       org = e_cal_component_organizer_new ();
+                       e_cal_component_organizer_set_value (org, organizer_addr);
+                       e_cal_component_organizer_set_cn (org, organizer);
 
-                       e_cal_component_set_organizer (ec, &org);
+                       e_cal_component_set_organizer (ec, org);
+                       e_cal_component_organizer_free (org);
                }
 
                if (attendee || attendee_addr) {
-                       ECalComponentAttendee att = { 0 };
+                       ECalComponentAttendee *att;
                        GSList *attendees;
 
-                       att.value = attendee_addr;
-                       att.cn = attendee;
-                       att.cutype = ICAL_CUTYPE_INDIVIDUAL;
-                       att.status = ICAL_PARTSTAT_NEEDSACTION;
-                       att.role = ICAL_ROLE_REQPARTICIPANT;
-                       att.rsvp = TRUE;
-
-                       attendees = g_slist_append (NULL, &att);
-                       e_cal_component_set_attendee_list (ec, attendees);
-                       g_slist_free (attendees);
+                       att = e_cal_component_attendee_new ();
+                       e_cal_component_attendee_set_value (att, attendee_addr);
+                       e_cal_component_attendee_set_cn (att, attendee);
+                       e_cal_component_attendee_set_cutype (att, I_CAL_CUTYPE_INDIVIDUAL);
+                       e_cal_component_attendee_set_partstat (att, I_CAL_PARTSTAT_NEEDSACTION);
+                       e_cal_component_attendee_set_role (att, I_CAL_ROLE_REQPARTICIPANT);
+                       e_cal_component_attendee_set_rsvp (att, TRUE);
+
+                       attendees = g_slist_append (NULL, att);
+                       e_cal_component_set_attendees (ec, attendees);
+                       g_slist_free_full (attendees, e_cal_component_attendee_free);
                }
        }
 
@@ -2010,7 +2031,7 @@ pst_process_component (PstImporter *m,
 
        e_cal_client_create_object_sync (
                cal, e_cal_component_get_icalcomponent (ec),
-               NULL, NULL, &error);
+               E_CAL_OPERATION_FLAG_NONE, NULL, NULL, &error);
 
        if (error != NULL) {
                g_warning (
diff --git a/src/plugins/publish-calendar/publish-format-fb.c 
b/src/plugins/publish-calendar/publish-format-fb.c
index 7d6c264b6b..3e37bf1a3e 100644
--- a/src/plugins/publish-calendar/publish-format-fb.c
+++ b/src/plugins/publish-calendar/publish-format-fb.c
@@ -42,14 +42,14 @@ write_calendar (const gchar *uid,
        ESourceRegistry *registry;
        EClient *client = NULL;
        GSList *objects = NULL;
-       icaltimezone *utc;
+       ICalTimezone *utc;
        time_t start = time (NULL), end;
-       icalcomponent *top_level;
+       ICalComponent *top_level;
        gchar *email = NULL;
        GSList *users = NULL;
        gboolean success = FALSE;
 
-       utc = icaltimezone_get_utc_timezone ();
+       utc = i_cal_timezone_get_utc_timezone ();
        start = time_day_begin_with_zone (start, utc);
 
        switch (dur_type) {
@@ -102,26 +102,26 @@ write_calendar (const gchar *uid,
 
                for (iter = objects; iter; iter = iter->next) {
                        ECalComponent *comp = iter->data;
-                       icalcomponent *icalcomp = icalcomponent_new_clone (e_cal_component_get_icalcomponent 
(comp));
+                       ICalComponent *icomp = i_cal_component_new_clone (e_cal_component_get_icalcomponent 
(comp));
 
-                       if (!icalcomp)
+                       if (!icomp)
                                continue;
 
                        if (!with_details) {
-                               icalproperty *prop;
+                               ICalProperty *prop;
 
-                               for (prop = icalcomponent_get_first_property (icalcomp, 
ICAL_FREEBUSY_PROPERTY);
+                               for (prop = i_cal_component_get_first_property (icomp, 
I_CAL_FREEBUSY_PROPERTY);
                                     prop;
-                                    prop = icalcomponent_get_next_property (icalcomp, 
ICAL_FREEBUSY_PROPERTY)) {
-                                       icalproperty_remove_parameter_by_name (prop, "X-SUMMARY");
-                                       icalproperty_remove_parameter_by_name (prop, "X-LOCATION");
+                                    g_object_unref (prop), prop = i_cal_component_get_next_property (icomp, 
I_CAL_FREEBUSY_PROPERTY)) {
+                                       i_cal_property_remove_parameter_by_name (prop, "X-SUMMARY");
+                                       i_cal_property_remove_parameter_by_name (prop, "X-LOCATION");
                                }
                        }
 
-                       icalcomponent_add_component (top_level, icalcomp);
+                       i_cal_component_take_component (top_level, icomp);
                }
 
-               ical_string = icalcomponent_as_ical_string_r (top_level);
+               ical_string = i_cal_component_as_ical_string_r (top_level);
 
                success = g_output_stream_write_all (
                        stream, ical_string,
@@ -137,7 +137,7 @@ write_calendar (const gchar *uid,
 
        g_free (email);
        g_object_unref (client);
-       icalcomponent_free (top_level);
+       g_object_unref (top_level);
 
        return success;
 }
diff --git a/src/plugins/publish-calendar/publish-format-ical.c 
b/src/plugins/publish-calendar/publish-format-ical.c
index ccaf374f3d..72602f264d 100644
--- a/src/plugins/publish-calendar/publish-format-ical.c
+++ b/src/plugins/publish-calendar/publish-format-ical.c
@@ -34,22 +34,22 @@ typedef struct {
 } CompTzData;
 
  static void
-insert_tz_comps (icalparameter *param,
+insert_tz_comps (ICalParameter *param,
                  gpointer cb_data)
 {
        const gchar *tzid;
        CompTzData *tdata = cb_data;
-       icaltimezone *zone = NULL;
-       icalcomponent *tzcomp;
+       ICalTimezone *zone = NULL;
+       ICalComponent *tzcomp;
        GError *error = NULL;
 
-       tzid = icalparameter_get_tzid (param);
+       tzid = i_cal_parameter_get_tzid (param);
 
        if (g_hash_table_lookup (tdata->zones, tzid))
                return;
 
-       e_cal_client_get_timezone_sync (
-               tdata->client, tzid, &zone, NULL, &error);
+       if (!e_cal_client_get_timezone_sync (tdata->client, tzid, &zone, NULL, &error))
+               zone = NULL;
 
        if (error != NULL) {
                g_warning (
@@ -59,16 +59,16 @@ insert_tz_comps (icalparameter *param,
                return;
        }
 
-       tzcomp = icalcomponent_new_clone (icaltimezone_get_component (zone));
+       tzcomp = i_cal_component_new_clone (i_cal_timezone_get_component (zone));
        g_hash_table_insert (tdata->zones, (gpointer) tzid, (gpointer) tzcomp);
 }
 
 static void
 append_tz_to_comp (gpointer key,
-                   gpointer value,
-                   icalcomponent *toplevel)
+                  gpointer value,
+                  ICalComponent *toplevel)
 {
-       icalcomponent_add_component (toplevel, (icalcomponent *) value);
+       i_cal_component_take_component (toplevel, (ICalComponent *) value);
 }
 
 static gboolean
@@ -81,7 +81,7 @@ write_calendar (const gchar *uid,
        ESourceRegistry *registry;
        EClient *client = NULL;
        GSList *objects = NULL;
-       icalcomponent *top_level;
+       ICalComponent *top_level;
        gboolean res = FALSE;
 
        shell = e_shell_get_default ();
@@ -119,9 +119,9 @@ write_calendar (const gchar *uid,
                tdata.client = E_CAL_CLIENT (client);
 
                for (iter = objects; iter; iter = iter->next) {
-                       icalcomponent *icalcomp = icalcomponent_new_clone (iter->data);
-                       icalcomponent_foreach_tzid (icalcomp, insert_tz_comps, &tdata);
-                       icalcomponent_add_component (top_level, icalcomp);
+                       ICalComponent *icomp = i_cal_component_new_clone (iter->data);
+                       i_cal_component_foreach_tzid (icomp, insert_tz_comps, &tdata);
+                       i_cal_component_take_component (top_level, icomp);
                }
 
                g_hash_table_foreach (tdata.zones, (GHFunc) append_tz_to_comp, top_level);
@@ -129,14 +129,14 @@ write_calendar (const gchar *uid,
                g_hash_table_destroy (tdata.zones);
                tdata.zones = NULL;
 
-               ical_string = icalcomponent_as_ical_string_r (top_level);
+               ical_string = i_cal_component_as_ical_string_r (top_level);
                res = g_output_stream_write_all (stream, ical_string, strlen (ical_string), NULL, NULL, 
error);
                g_free (ical_string);
                e_util_free_nullable_object_slist (objects);
        }
 
        g_object_unref (client);
-       icalcomponent_free (top_level);
+       g_object_unref (top_level);
 
        return res;
 }
diff --git a/src/plugins/save-calendar/CMakeLists.txt b/src/plugins/save-calendar/CMakeLists.txt
index 6dd30c6e62..da4e6d99d1 100644
--- a/src/plugins/save-calendar/CMakeLists.txt
+++ b/src/plugins/save-calendar/CMakeLists.txt
@@ -1,6 +1,7 @@
 add_eplug_file(save-calendar org-gnome-save-calendar.eplug)
 
 set(DEPENDENCIES
+       evolution-calendar
        evolution-shell
        evolution-util
 )
diff --git a/src/plugins/save-calendar/csv-format.c b/src/plugins/save-calendar/csv-format.c
index 57b2013c63..f779ac8231 100644
--- a/src/plugins/save-calendar/csv-format.c
+++ b/src/plugins/save-calendar/csv-format.c
@@ -90,10 +90,10 @@ add_list_to_csv (GString *line,
                                needquotes = TRUE;
                        switch (type) {
                        case ECALCOMPONENTATTENDEE:
-                               str = ((ECalComponentAttendee *) list->data)->value;
+                               str = itip_strip_mailto (e_cal_component_attendee_get_value 
(((ECalComponentAttendee *) list->data)));
                                break;
                        case ECALCOMPONENTTEXT:
-                               str = ((ECalComponentText *) list->data)->value;
+                               str = e_cal_component_text_get_value (((ECalComponentText *) list->data));
                                break;
                        case CONSTCHAR:
                        default:
@@ -123,7 +123,7 @@ add_list_to_csv (GString *line,
 
 static GString *
 add_nummeric_to_csv (GString *line,
-                     gint *nummeric,
+                     gint nummeric,
                      CsvConfig *config)
 {
 
@@ -132,18 +132,15 @@ add_nummeric_to_csv (GString *line,
         * it prepends a 0 if it's < 10 and > -1
         */
 
-       if (nummeric)
-               g_string_append_printf (
-                       line, "%s%d",
-                       (*nummeric < 10 && *nummeric > -1) ? "0" : "",
-                       *nummeric);
+       if (nummeric >= 0)
+               g_string_append_printf (line, "%02d", nummeric);
 
        return g_string_append (line, config->delimiter);
 }
 
 static GString *
 add_time_to_csv (GString *line,
-                 icaltimetype *time,
+                 ICalTime *time,
                  CsvConfig *config)
 {
 
@@ -407,121 +404,108 @@ do_save_calendar_csv (FormatHandler *handler,
                        ECalComponent *comp = iter->data;
                        gchar *delimiter_temp = NULL;
                        const gchar *temp_constchar;
+                       gchar *temp_char;
                        GSList *temp_list;
-                       ECalComponentDateTime temp_dt;
-                       struct icaltimetype *temp_time;
-                       gint *temp_int;
-                       ECalComponentText temp_comptext;
+                       ECalComponentDateTime* temp_dt;
+                       ICalTime *temp_time;
+                       gint temp_int;
+                       ECalComponentText* temp_comptext;
 
                        line = g_string_new ("");
 
                        /* Getting the stuff */
-                       e_cal_component_get_uid (comp, &temp_constchar);
+                       temp_constchar = e_cal_component_get_uid (comp);
                        line = add_string_to_csv (line, temp_constchar, config);
 
-                       e_cal_component_get_summary (comp, &temp_comptext);
+                       temp_comptext = e_cal_component_get_summary (comp);
                        line = add_string_to_csv (
-                               line, temp_comptext.value, config);
+                               line, temp_comptext ? e_cal_component_text_get_value (temp_comptext) : NULL, 
config);
+                       e_cal_component_text_free (temp_comptext);
 
-                       e_cal_component_get_description_list (comp, &temp_list);
+                       temp_list = e_cal_component_get_descriptions (comp);
                        line = add_list_to_csv (
                                line, temp_list, config, ECALCOMPONENTTEXT);
-                       if (temp_list)
-                               e_cal_component_free_text_list (temp_list);
+                       g_slist_free_full (temp_list, e_cal_component_text_free);
 
-                       e_cal_component_get_categories_list (comp, &temp_list);
+                       temp_list = e_cal_component_get_categories_list (comp);
                        line = add_list_to_csv (
                                line, temp_list, config, CONSTCHAR);
-                       if (temp_list)
-                               e_cal_component_free_categories_list (temp_list);
+                       g_slist_free_full (temp_list, g_free);
 
-                       e_cal_component_get_comment_list (comp, &temp_list);
+                       temp_list = e_cal_component_get_comments (comp);
                        line = add_list_to_csv (
                                line, temp_list, config, ECALCOMPONENTTEXT);
-                       if (temp_list)
-                               e_cal_component_free_text_list (temp_list);
+                       g_slist_free_full (temp_list, e_cal_component_text_free);
 
-                       e_cal_component_get_completed (comp, &temp_time);
+                       temp_time = e_cal_component_get_completed (comp);
                        line = add_time_to_csv (line, temp_time, config);
-                       if (temp_time)
-                               e_cal_component_free_icaltimetype (temp_time);
+                       g_clear_object (&temp_time);
 
-                       e_cal_component_get_created (comp, &temp_time);
+                       temp_time = e_cal_component_get_created (comp);
                        line = add_time_to_csv (line, temp_time, config);
-                       if (temp_time)
-                               e_cal_component_free_icaltimetype (temp_time);
+                       g_clear_object (&temp_time);
 
-                       e_cal_component_get_contact_list (comp, &temp_list);
+                       temp_list = e_cal_component_get_contacts (comp);
                        line = add_list_to_csv (
                                line, temp_list, config, ECALCOMPONENTTEXT);
-                       if (temp_list)
-                               e_cal_component_free_text_list (temp_list);
+                       g_slist_free_full (temp_list, e_cal_component_text_free);
 
-                       e_cal_component_get_dtstart (comp, &temp_dt);
+                       temp_dt = e_cal_component_get_dtstart (comp);
                        line = add_time_to_csv (
-                               line, temp_dt.value ?
-                               temp_dt.value : NULL, config);
-                       e_cal_component_free_datetime (&temp_dt);
+                               line, temp_dt && e_cal_component_datetime_get_value (temp_dt) ?
+                               e_cal_component_datetime_get_value (temp_dt) : NULL, config);
+                       e_cal_component_datetime_free (temp_dt);
 
-                       e_cal_component_get_dtend (comp, &temp_dt);
+                       temp_dt = e_cal_component_get_dtend (comp);
                        line = add_time_to_csv (
-                               line, temp_dt.value ?
-                               temp_dt.value : NULL, config);
-                       e_cal_component_free_datetime (&temp_dt);
+                               line, temp_dt && e_cal_component_datetime_get_value (temp_dt) ?
+                               e_cal_component_datetime_get_value (temp_dt) : NULL, config);
+                       e_cal_component_datetime_free (temp_dt);
 
-                       e_cal_component_get_due (comp, &temp_dt);
+                       temp_dt = e_cal_component_get_due (comp);
                        line = add_time_to_csv (
-                               line, temp_dt.value ?
-                               temp_dt.value : NULL, config);
-                       e_cal_component_free_datetime (&temp_dt);
+                               line, temp_dt && e_cal_component_datetime_get_value (temp_dt) ?
+                               e_cal_component_datetime_get_value (temp_dt) : NULL, config);
+                       e_cal_component_datetime_free (temp_dt);
 
-                       e_cal_component_get_percent (comp, &temp_int);
+                       temp_int = e_cal_component_get_percent_complete (comp);
                        line = add_nummeric_to_csv (line, temp_int, config);
 
-                       e_cal_component_get_priority (comp, &temp_int);
+                       temp_int = e_cal_component_get_priority (comp);
                        line = add_nummeric_to_csv (line, temp_int, config);
 
-                       e_cal_component_get_url (comp, &temp_constchar);
-                       line = add_string_to_csv (line, temp_constchar, config);
+                       temp_char = e_cal_component_get_url (comp);
+                       line = add_string_to_csv (line, temp_char, config);
+                       g_free (temp_char);
 
                        if (e_cal_component_has_attendees (comp)) {
-                               e_cal_component_get_attendee_list (comp, &temp_list);
+                               temp_list = e_cal_component_get_attendees (comp);
                                line = add_list_to_csv (
                                        line, temp_list, config,
                                        ECALCOMPONENTATTENDEE);
-                               if (temp_list)
-                                       e_cal_component_free_attendee_list (temp_list);
+                               g_slist_free_full (temp_list, e_cal_component_attendee_free);
                        } else {
                                line = add_list_to_csv (
                                        line, NULL, config,
                                        ECALCOMPONENTATTENDEE);
                        }
 
-                       e_cal_component_get_location (comp, &temp_constchar);
-                       line = add_string_to_csv (line, temp_constchar, config);
+                       temp_char = e_cal_component_get_location (comp);
+                       line = add_string_to_csv (line, temp_char, config);
+                       g_free (temp_char);
 
-                       e_cal_component_get_last_modified (comp, &temp_time);
+                       temp_time = e_cal_component_get_last_modified (comp);
 
                        /* Append a newline (record delimiter) */
                        delimiter_temp = config->delimiter;
                        config->delimiter = config->newline;
 
                        line = add_time_to_csv (line, temp_time, config);
+                       g_clear_object (&temp_time);
 
                        /* And restore for the next record */
                        config->delimiter = delimiter_temp;
 
-                       /* Important note!
-                        * The documentation is not requiring this!
-                        *
-                        * if (temp_time)
-                        *     e_cal_component_free_icaltimetype (temp_time);
-                        *
-                        * Please uncomment and fix documentation if untrue
-                        * http://www.gnome.org/projects/evolution/
-                        *      developer-doc/libecal/ECalComponent.html
-                        *      #e-cal-component-get-last-modified
-                        */
                        g_output_stream_write_all (
                                stream, line->str, line->len,
                                NULL, NULL, &error);
diff --git a/src/plugins/save-calendar/format-handler.h b/src/plugins/save-calendar/format-handler.h
index dd5ec64d1d..61665e41fb 100644
--- a/src/plugins/save-calendar/format-handler.h
+++ b/src/plugins/save-calendar/format-handler.h
@@ -23,6 +23,7 @@
 #include <libecal/libecal.h>
 
 #include <e-util/e-util.h>
+#include <calendar/gui/itip-utils.h>
 
 typedef struct _FormatHandler FormatHandler;
 
diff --git a/src/plugins/save-calendar/ical-format.c b/src/plugins/save-calendar/ical-format.c
index 43171faf39..3f87255d27 100644
--- a/src/plugins/save-calendar/ical-format.c
+++ b/src/plugins/save-calendar/ical-format.c
@@ -47,22 +47,22 @@ typedef struct {
 } CompTzData;
 
 static void
-insert_tz_comps (icalparameter *param,
+insert_tz_comps (ICalParameter *param,
                  gpointer cb_data)
 {
        const gchar *tzid;
        CompTzData *tdata = cb_data;
-       icaltimezone *zone = NULL;
-       icalcomponent *tzcomp;
+       ICalTimezone *zone = NULL;
+       ICalComponent *tzcomp;
        GError *error = NULL;
 
-       tzid = icalparameter_get_tzid (param);
+       tzid = i_cal_parameter_get_tzid (param);
 
        if (g_hash_table_lookup (tdata->zones, tzid))
                return;
 
-       e_cal_client_get_timezone_sync (
-               tdata->client, tzid, &zone, NULL, &error);
+       if (!e_cal_client_get_timezone_sync (tdata->client, tzid, &zone, NULL, &error))
+               zone = NULL;
 
        if (error != NULL) {
                g_warning (
@@ -72,16 +72,16 @@ insert_tz_comps (icalparameter *param,
                return;
        }
 
-       tzcomp = icalcomponent_new_clone (icaltimezone_get_component (zone));
+       tzcomp = i_cal_component_new_clone (i_cal_timezone_get_component (zone));
        g_hash_table_insert (tdata->zones, (gpointer) tzid, (gpointer) tzcomp);
 }
 
 static void
 append_tz_to_comp (gpointer key,
-                   gpointer value,
-                   icalcomponent *toplevel)
+                  gpointer value,
+                  ICalComponent *toplevel)
 {
-       icalcomponent_add_component (toplevel, (icalcomponent *) value);
+       i_cal_component_add_component (toplevel, (ICalComponent *) value);
 }
 
 static void
@@ -94,7 +94,7 @@ do_save_calendar_ical (FormatHandler *handler,
        EClient *source_client;
        GError *error = NULL;
        GSList *objects = NULL;
-       icalcomponent *top_level = NULL;
+       ICalComponent *top_level = NULL;
 
        if (!dest_uri)
                return;
@@ -133,10 +133,10 @@ do_save_calendar_ical (FormatHandler *handler,
                tdata.client = E_CAL_CLIENT (source_client);
 
                for (iter = objects; iter; iter = iter->next) {
-                       icalcomponent *icalcomp = icalcomponent_new_clone (iter->data);
+                       ICalComponent *icomp = i_cal_component_new_clone (iter->data);
 
-                       icalcomponent_foreach_tzid (icalcomp, insert_tz_comps, &tdata);
-                       icalcomponent_add_component (top_level, icalcomp);
+                       i_cal_component_foreach_tzid (icomp, insert_tz_comps, &tdata);
+                       i_cal_component_take_component (top_level, icomp);
                }
 
                g_hash_table_foreach (tdata.zones, (GHFunc) append_tz_to_comp, top_level);
@@ -148,7 +148,7 @@ do_save_calendar_ical (FormatHandler *handler,
                stream = open_for_writing (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (selector))), 
dest_uri, &error);
 
                if (stream) {
-                       gchar *ical_str = icalcomponent_as_ical_string_r (top_level);
+                       gchar *ical_str = i_cal_component_as_ical_string_r (top_level);
 
                        g_output_stream_write_all (stream, ical_str, strlen (ical_str), NULL, NULL, &error);
                        g_output_stream_close (stream, NULL, NULL);
@@ -169,7 +169,7 @@ do_save_calendar_ical (FormatHandler *handler,
 
        /* terminate */
        g_object_unref (source_client);
-       icalcomponent_free (top_level);
+       g_object_unref (top_level);
 }
 
 FormatHandler *
diff --git a/src/plugins/save-calendar/rdf-format.c b/src/plugins/save-calendar/rdf-format.c
index 3be32efe6e..2c7079e12a 100644
--- a/src/plugins/save-calendar/rdf-format.c
+++ b/src/plugins/save-calendar/rdf-format.c
@@ -95,10 +95,10 @@ add_list_to_rdf (xmlNodePtr node,
 
                        switch (type) {
                        case ECALCOMPONENTATTENDEE:
-                               str = ((ECalComponentAttendee *) list->data)->value;
+                               str = itip_strip_mailto (e_cal_component_attendee_get_value 
((ECalComponentAttendee *) list->data));
                                break;
                        case ECALCOMPONENTTEXT:
-                               str = ((ECalComponentText *) list->data)->value;
+                               str = e_cal_component_text_get_value ((ECalComponentText *) list->data);
                                break;
                        case CONSTCHAR:
                        default:
@@ -116,10 +116,10 @@ add_list_to_rdf (xmlNodePtr node,
 static void
 add_nummeric_to_rdf (xmlNodePtr node,
                      const gchar *tag,
-                     gint *nummeric)
+                     gint nummeric)
 {
-       if (nummeric) {
-               gchar *value = g_strdup_printf ("%d", *nummeric);
+       if (nummeric >= 0) {
+               gchar *value = g_strdup_printf ("%d", nummeric);
                xmlNodePtr cur_node = xmlNewChild (node, NULL, (guchar *) tag, (guchar *) value);
                xmlSetProp (cur_node, (const guchar *)"rdf:datatype", (const guchar 
*)"http://www.w3.org/2001/XMLSchema#integer";);
                g_free (value);
@@ -129,7 +129,7 @@ add_nummeric_to_rdf (xmlNodePtr node,
 static void
 add_time_to_rdf (xmlNodePtr node,
                  const gchar *tag,
-                 icaltimetype *time)
+                 ICalTime *time)
 {
        if (time) {
                xmlNodePtr cur_node = NULL;
@@ -254,99 +254,89 @@ do_save_calendar_rdf (FormatHandler *handler,
                for (iter = objects; iter; iter = iter->next) {
                        ECalComponent *comp = iter->data;
                        const gchar *temp_constchar;
-                       gchar *tmp_str = NULL;
+                       gchar *tmp_str;
                        GSList *temp_list;
-                       ECalComponentDateTime temp_dt;
-                       struct icaltimetype *temp_time;
-                       gint *temp_int;
-                       ECalComponentText temp_comptext;
+                       ECalComponentDateTime *temp_dt;
+                       ICalTime *temp_time;
+                       gint temp_int;
+                       ECalComponentText *temp_comptext;
                        xmlNodePtr c_node = xmlNewChild (fnode, NULL, (const guchar *)"component", NULL);
                        xmlNodePtr node = xmlNewChild (c_node, NULL, (const guchar *)"Vevent", NULL);
 
                        /* Getting the stuff */
-                       e_cal_component_get_uid (comp, &temp_constchar);
+                       temp_constchar = e_cal_component_get_uid (comp);
                        tmp_str = g_strdup_printf ("#%s", temp_constchar);
                        xmlSetProp (node, (const guchar *)"about", (guchar *) tmp_str);
                        g_free (tmp_str);
-                       add_string_to_rdf (node, "uid",temp_constchar);
+                       add_string_to_rdf (node, "uid", temp_constchar);
 
-                       e_cal_component_get_summary (comp, &temp_comptext);
-                       add_string_to_rdf (node, "summary", temp_comptext.value);
+                       temp_comptext = e_cal_component_get_summary (comp);
+                       if (temp_comptext)
+                               add_string_to_rdf (node, "summary", e_cal_component_text_get_value 
(temp_comptext));
+                       e_cal_component_text_free (temp_comptext);
 
-                       e_cal_component_get_description_list (comp, &temp_list);
+                       temp_list = e_cal_component_get_descriptions (comp);
                        add_list_to_rdf (node, "description", temp_list, ECALCOMPONENTTEXT);
-                       if (temp_list)
-                               e_cal_component_free_text_list (temp_list);
+                       g_slist_free_full (temp_list, e_cal_component_text_free);
 
-                       e_cal_component_get_categories_list (comp, &temp_list);
+                       temp_list = e_cal_component_get_categories_list (comp);
                        add_list_to_rdf (node, "categories", temp_list, CONSTCHAR);
-                       if (temp_list)
-                               e_cal_component_free_categories_list (temp_list);
+                       g_slist_free_full (temp_list, g_free);
 
-                       e_cal_component_get_comment_list (comp, &temp_list);
+                       temp_list = e_cal_component_get_comments (comp);
                        add_list_to_rdf (node, "comment", temp_list, ECALCOMPONENTTEXT);
+                       g_slist_free_full (temp_list, e_cal_component_text_free);
 
-                       if (temp_list)
-                               e_cal_component_free_text_list (temp_list);
-
-                       e_cal_component_get_completed (comp, &temp_time);
+                       temp_time = e_cal_component_get_completed (comp);
                        add_time_to_rdf (node, "completed", temp_time);
-                       if (temp_time)
-                               e_cal_component_free_icaltimetype (temp_time);
+                       g_clear_object (&temp_time);
 
-                       e_cal_component_get_created (comp, &temp_time);
+                       temp_time = e_cal_component_get_created (comp);
                        add_time_to_rdf (node, "created", temp_time);
-                       if (temp_time)
-                               e_cal_component_free_icaltimetype (temp_time);
+                       g_clear_object (&temp_time);
 
-                       e_cal_component_get_contact_list (comp, &temp_list);
+                       temp_list = e_cal_component_get_contacts (comp);
                        add_list_to_rdf (node, "contact", temp_list, ECALCOMPONENTTEXT);
-                       if (temp_list)
-                               e_cal_component_free_text_list (temp_list);
+                       g_slist_free_full (temp_list, e_cal_component_text_free);
 
-                       e_cal_component_get_dtstart (comp, &temp_dt);
-                       add_time_to_rdf (node, "dtstart", temp_dt.value ? temp_dt.value : NULL);
-                       e_cal_component_free_datetime (&temp_dt);
+                       temp_dt = e_cal_component_get_dtstart (comp);
+                       add_time_to_rdf (node, "dtstart", temp_dt && e_cal_component_datetime_get_value 
(temp_dt) ?
+                               e_cal_component_datetime_get_value (temp_dt) : NULL);
+                       e_cal_component_datetime_free (temp_dt);
 
-                       e_cal_component_get_dtend (comp, &temp_dt);
-                       add_time_to_rdf (node, "dtend", temp_dt.value ? temp_dt.value : NULL);
-                       e_cal_component_free_datetime (&temp_dt);
+                       temp_dt = e_cal_component_get_dtend (comp);
+                       add_time_to_rdf (node, "dtend", temp_dt && e_cal_component_datetime_get_value 
(temp_dt) ?
+                               e_cal_component_datetime_get_value (temp_dt) : NULL);
+                       e_cal_component_datetime_free (temp_dt);
 
-                       e_cal_component_get_due (comp, &temp_dt);
-                       add_time_to_rdf (node, "due", temp_dt.value ? temp_dt.value : NULL);
-                       e_cal_component_free_datetime (&temp_dt);
+                       temp_dt = e_cal_component_get_due (comp);
+                       add_time_to_rdf (node, "due", temp_dt && e_cal_component_datetime_get_value (temp_dt) 
?
+                               e_cal_component_datetime_get_value (temp_dt) : NULL);
+                       e_cal_component_datetime_free (temp_dt);
 
-                       e_cal_component_get_percent (comp, &temp_int);
+                       temp_int = e_cal_component_get_percent_complete (comp);
                        add_nummeric_to_rdf (node, "percentComplete", temp_int);
 
-                       e_cal_component_get_priority (comp, &temp_int);
+                       temp_int = e_cal_component_get_priority (comp);
                        add_nummeric_to_rdf (node, "priority", temp_int);
 
-                       e_cal_component_get_url (comp, &temp_constchar);
-                       add_string_to_rdf (node, "URL", temp_constchar);
+                       tmp_str = e_cal_component_get_url (comp);
+                       add_string_to_rdf (node, "URL", tmp_str);
+                       g_free (tmp_str);
 
                        if (e_cal_component_has_attendees (comp)) {
-                               e_cal_component_get_attendee_list (comp, &temp_list);
+                               temp_list = e_cal_component_get_attendees (comp);
                                add_list_to_rdf (node, "attendee", temp_list, ECALCOMPONENTATTENDEE);
-                               if (temp_list)
-                                       e_cal_component_free_attendee_list (temp_list);
+                               g_slist_free_full (temp_list, e_cal_component_attendee_free);
                        }
 
-                       e_cal_component_get_location (comp, &temp_constchar);
-                       add_string_to_rdf (node, "location", temp_constchar);
+                       tmp_str = e_cal_component_get_location (comp);
+                       add_string_to_rdf (node, "location", tmp_str);
+                       g_free (tmp_str);
 
-                       e_cal_component_get_last_modified (comp, &temp_time);
+                       temp_time = e_cal_component_get_last_modified (comp);
                        add_time_to_rdf (node, "lastModified",temp_time);
-
-                       /* Important note!
-                        * The documentation is not requiring this!
-                        *
-                        * if (temp_time) e_cal_component_free_icaltimetype (temp_time);
-                        *
-                        * Please uncomment and fix documentation if untrue
-                        * http://www.gnome.org/projects/evolution/developer-doc/libecal/ECalComponent.html
-                        *      #e-cal-component-get-last-modified
-                        */
+                       g_clear_object (&temp_time);
                }
 
                /* I used a buffer rather than xmlDocDump: I want gio support */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]