diff --git a/src/camel/imapx/camel-gwimap-provider.c b/src/camel/imapx/camel-gwimap-provider.c
new file mode 100644
index 0000000..0f1999a
--- /dev/null
+++ b/src/camel/imapx/camel-gwimap-provider.c
@@ -0,0 +1,212 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* camel-pop3-provider.c: pop3 provider registration code */
+/*
+ * Authors :
+ *   Dan Winship <danw@ximian.com>
+ *   Michael Zucchi <notzed@ximian.com>
+ *
+ * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU Lesser General Public
+ * License as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string.h>
+#include <camel/camel.h>
+#include <glib/gi18n-lib.h>
+
+#include <camel-gwimap-store.h>
+#include <camel-imapx-utils.h>
+
+static guint gwimap_url_hash (gconstpointer key);
+static gint  gwimap_url_equal (gconstpointer a, gconstpointer b);
+
+CamelProviderConfEntry gwimap_conf_entries[] = {
+	{ CAMEL_PROVIDER_CONF_SECTION_START, "mailcheck", NULL,
+	  N_("Checking for New Mail") },
+	{ CAMEL_PROVIDER_CONF_CHECKBOX, "check-all", NULL,
+	  N_("C_heck for new messages in all folders"), "1" },
+	{ CAMEL_PROVIDER_CONF_CHECKBOX, "check-subscribed", NULL,
+	  N_("Ch_eck for new messages in subscribed folders"), "0" },
+	{ CAMEL_PROVIDER_CONF_CHECKBOX, "use-qresync", NULL,
+	  N_("Use _Quick Resync if the server supports it"), "1" },
+	{ CAMEL_PROVIDER_CONF_CHECKBOX, "use-idle", NULL,
+	  N_("_Listen for server change notifications"), "1" },
+	{ CAMEL_PROVIDER_CONF_SECTION_END },
+#ifndef G_OS_WIN32
+	{ CAMEL_PROVIDER_CONF_SECTION_START, "cmdsection", NULL,
+	  N_("Connection to Server") },
+	{ CAMEL_PROVIDER_CONF_CHECKBOX, "use-shell-command", NULL,
+	  N_("_Use custom command to connect to server"), "0" },
+	{ CAMEL_PROVIDER_CONF_ENTRY, "shell-command", "use-shell-command",
+	  N_("Command:"), "ssh -C -l %u %h exec /usr/sbin/dovecot --exec-mail imap" },
+	{ CAMEL_PROVIDER_CONF_CHECKSPIN, "concurrent-connections", NULL,
+	  N_("Numbe_r of cached connections to use"), "y:1:5:7" },
+	{ CAMEL_PROVIDER_CONF_SECTION_END },
+#endif
+	{ CAMEL_PROVIDER_CONF_SECTION_START, "folders", NULL,
+	  N_("Folders") },
+	{ CAMEL_PROVIDER_CONF_CHECKBOX, "use-subscriptions", NULL,
+	  N_("_Show only subscribed folders"), "1" },
+#if 0
+	{ CAMEL_PROVIDER_CONF_CHECKBOX, "use-namespace", NULL,
+	  N_("O_verride server-supplied folder namespace"), "0" },
+	{ CAMEL_PROVIDER_CONF_ENTRY, "namespace", "use-namespace",
+	  N_("Namespace:") },
+#endif
+	{ CAMEL_PROVIDER_CONF_SECTION_END },
+	{ CAMEL_PROVIDER_CONF_SECTION_START, "general", NULL, N_("Options") },
+	{ CAMEL_PROVIDER_CONF_CHECKBOX, "filter-all", NULL,
+	  N_("Apply _filters to new messages in all folders"), "0" },
+	{ CAMEL_PROVIDER_CONF_CHECKBOX, "filter-inbox", "!filter-all",
+	  N_("_Apply filters to new messages in Inbox on this server"), "1" },
+	{ CAMEL_PROVIDER_CONF_CHECKBOX, "filter-junk", NULL,
+	  N_("Check new messages for _Junk contents"), "0" },
+	{ CAMEL_PROVIDER_CONF_CHECKBOX, "filter-junk-inbox", "filter-junk",
+	  N_("Only check for Junk messages in the IN_BOX folder"), "0" },
+	{ CAMEL_PROVIDER_CONF_CHECKBOX, "stay-synchronized", NULL,
+	  N_("Automatically synchroni_ze remote mail locally"), "0" },
+	{ CAMEL_PROVIDER_CONF_SECTION_END },
+
+	/* extra GroupWise  configuration settings */
+	{CAMEL_PROVIDER_CONF_SECTION_START, "soapport", NULL,
+	  N_("SOAP Settings") },
+
+	{ CAMEL_PROVIDER_CONF_ENTRY, "soap-port", NULL,
+	  N_("Post Office Agent SOAP _Port:"), "7191" },
+
+	{ CAMEL_PROVIDER_CONF_HIDDEN, "auth-domain", NULL,
+	  NULL, "Groupwise" },
+	{ CAMEL_PROVIDER_CONF_SECTION_END },
+
+	{ CAMEL_PROVIDER_CONF_END }
+};
+
+CamelProviderPortEntry gwimap_port_entries[] = {
+	{ 143, N_("Default IMAP port"), FALSE },
+	{ 993, N_("IMAP over SSL"), TRUE },
+	{ 0, NULL, 0 }
+};
+
+static CamelProvider gwimap_provider = {
+	"gwimap",
+
+	N_("GroupWise IMAP"),
+
+	N_("For Accessing Novell GroupWise Server using imap for mails and groupwise protocol for calendar and address-book"),
+
+	"mail",
+
+	CAMEL_PROVIDER_IS_REMOTE | CAMEL_PROVIDER_IS_SOURCE |
+	CAMEL_PROVIDER_IS_STORAGE | CAMEL_PROVIDER_SUPPORTS_SSL|
+	CAMEL_PROVIDER_SUPPORTS_MOBILE_DEVICES |
+	CAMEL_PROVIDER_SUPPORTS_BATCH_FETCH |
+	CAMEL_PROVIDER_SUPPORTS_PURGE_MESSAGE_CACHE,
+
+	CAMEL_URL_NEED_USER | CAMEL_URL_NEED_HOST | CAMEL_URL_ALLOW_AUTH,
+
+	gwimap_conf_entries,
+
+	gwimap_port_entries,
+
+	/* ... */
+};
+
+void camel_gwimap_module_init (void);
+
+CamelServiceAuthType camel_gwimap_password_authtype = {
+	N_("Password"),
+
+	N_("This option will connect to the IMAP server using a "
+	   "plaintext password."),
+
+	"",
+	TRUE
+};
+
+void
+camel_gwimap_module_init (void)
+{
+	gwimap_provider.object_types[CAMEL_PROVIDER_STORE] = camel_gwimap_store_get_type ();
+	gwimap_provider.url_hash = gwimap_url_hash;
+	gwimap_provider.url_equal = gwimap_url_equal;
+	gwimap_provider.authtypes = camel_sasl_authtype_list (FALSE);
+	gwimap_provider.authtypes = g_list_prepend (gwimap_provider.authtypes, &camel_gwimap_password_authtype);
+	gwimap_provider.translation_domain = GETTEXT_PACKAGE;
+
+	/* TEMPORARY */
+	imapx_utils_init ();
+
+	camel_provider_register (&gwimap_provider);
+}
+
+void
+camel_provider_module_init (void)
+{
+	camel_gwimap_module_init ();
+}
+
+static void
+gwimap_add_hash (guint *hash,
+                gchar *s)
+{
+	if (s)
+		*hash ^= g_str_hash(s);
+}
+
+static guint
+gwimap_url_hash (gconstpointer key)
+{
+	const CamelURL *u = (CamelURL *) key;
+	guint hash = 0;
+
+	gwimap_add_hash (&hash, u->user);
+	gwimap_add_hash (&hash, u->host);
+	hash ^= u->port;
+
+	return hash;
+}
+
+static gint
+gwimap_check_equal (gchar *s1,
+                   gchar *s2)
+{
+	if (s1 == NULL) {
+		if (s2 == NULL)
+			return TRUE;
+		else
+			return FALSE;
+	}
+
+	if (s2 == NULL)
+		return FALSE;
+
+	return strcmp (s1, s2) == 0;
+}
+
+static gint
+gwimap_url_equal (gconstpointer a,
+                 gconstpointer b)
+{
+	const CamelURL *u1 = a, *u2 = b;
+
+	return gwimap_check_equal (u1->protocol, u2->protocol)
+		&& gwimap_check_equal (u1->user, u2->user)
+		&& gwimap_check_equal (u1->host, u2->host)
+		&& u1->port == u2->port;
+}
diff --git a/src/camel/imapx/camel-gwimap-settings.c b/src/camel/imapx/camel-gwimap-settings.c
new file mode 100644
index 0000000..d981317
--- /dev/null
+++ b/src/camel/imapx/camel-gwimap-settings.c
@@ -0,0 +1,145 @@
+/*
+ * camel-gwimap-settings.c
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+#include "camel-gwimap-settings.h"
+
+#define CAMEL_GWIMAP_SETTINGS_GET_PRIVATE(obj) \
+	(G_TYPE_INSTANCE_GET_PRIVATE \
+	((obj), CAMEL_TYPE_GWIMAP_SETTINGS, CamelGwImapSettingsPrivate))
+
+struct _CamelGwImapSettingsPrivate {
+	gchar *soap_port;
+};
+
+enum {
+	PROP_0,
+	PROP_SOAP_PORT
+};
+
+G_DEFINE_TYPE_WITH_CODE (
+	CamelGwImapSettings,
+	camel_gwimap_settings,
+	CAMEL_TYPE_OFFLINE_SETTINGS,
+	G_IMPLEMENT_INTERFACE (
+		CAMEL_TYPE_NETWORK_SETTINGS, NULL))
+
+static void
+gwimap_settings_set_property (GObject *object,
+                                 guint property_id,
+                                 const GValue *value,
+                                 GParamSpec *pspec)
+{
+	switch (property_id) {
+		case PROP_SOAP_PORT:
+			camel_gwimap_settings_set_soap_port (
+				CAMEL_GWIMAP_SETTINGS (object),
+				g_value_get_string (value));
+			return;
+
+	}
+
+	G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+gwimap_settings_get_property (GObject *object,
+                                 guint property_id,
+                                 GValue *value,
+                                 GParamSpec *pspec)
+{
+	switch (property_id) {
+		case PROP_SOAP_PORT:
+			g_value_set_string (
+				value,
+				camel_gwimap_settings_get_soap_port (
+				CAMEL_GWIMAP_SETTINGS (object)));
+			return;
+	}
+
+	G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+gwimap_settings_finalize (GObject *object)
+{
+	CamelGwImapSettingsPrivate *priv;
+
+	priv = CAMEL_GWIMAP_SETTINGS_GET_PRIVATE (object);
+
+	g_free (priv->soap_port);
+
+	/* Chain up to parent's finalize() method. */
+	G_OBJECT_CLASS (camel_gwimap_settings_parent_class)->finalize (object);
+}
+
+static void
+camel_gwimap_settings_class_init (CamelGwImapSettingsClass *class)
+{
+	GObjectClass *object_class;
+
+	g_type_class_add_private (class, sizeof (CamelGwImapSettingsPrivate));
+
+	object_class = G_OBJECT_CLASS (class);
+	object_class->set_property = gwimap_settings_set_property;
+	object_class->get_property = gwimap_settings_get_property;
+	object_class->finalize = gwimap_settings_finalize;
+
+	g_object_class_install_property (
+		object_class,
+		PROP_SOAP_PORT,
+		g_param_spec_string (
+			"soap-port",
+			"SOAP Port",
+			"Post Office Agent SOAP Port",
+			"7191",
+			G_PARAM_READWRITE |
+			G_PARAM_CONSTRUCT |
+			G_PARAM_STATIC_STRINGS));
+}
+
+static void
+camel_gwimap_settings_init (CamelGwImapSettings *settings)
+{
+	settings->priv = CAMEL_GWIMAP_SETTINGS_GET_PRIVATE (settings);
+}
+
+const gchar *
+camel_gwimap_settings_get_soap_port (CamelGwImapSettings *settings)
+{
+	g_return_val_if_fail (CAMEL_IS_GWIMAP_SETTINGS (settings), "7191");
+
+	if (!settings->priv->soap_port)
+		return "7191";
+
+	return settings->priv->soap_port;
+}
+
+void
+camel_gwimap_settings_set_soap_port (CamelGwImapSettings *settings,
+                                        const gchar *soap_port)
+{
+	g_return_if_fail (CAMEL_IS_GWIMAP_SETTINGS (settings));
+
+	g_free (settings->priv->soap_port);
+	if (atoi (soap_port))
+		settings->priv->soap_port = g_strdup (soap_port);
+	else
+		settings->priv->soap_port = NULL;
+
+	g_object_notify (G_OBJECT (settings), "soap-port");
+}
diff --git a/src/camel/imapx/camel-gwimap-settings.h b/src/camel/imapx/camel-gwimap-settings.h
new file mode 100644
index 0000000..a6eb5e3
--- /dev/null
+++ b/src/camel/imapx/camel-gwimap-settings.h
@@ -0,0 +1,69 @@
+/*
+ * camel-groupwise-settings.h
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+#ifndef CAMEL_GWIMAP_SETTINGS_H
+#define CAMEL_GWIMAP_SETTINGS_H
+
+#include <camel/camel.h>
+#include <camel-imapx-settings.h>
+
+/* Standard GObject macros */
+#define CAMEL_TYPE_GWIMAP_SETTINGS \
+	(camel_gwimap_settings_get_type ())
+#define CAMEL_GWIMAP_SETTINGS(obj) \
+	(G_TYPE_CHECK_INSTANCE_CAST \
+	((obj), CAMEL_TYPE_GWIMAP_SETTINGS, CamelGwImapSettings))
+#define CAMEL_GWIMAP_SETTINGS_CLASS(cls) \
+	(G_TYPE_CHECK_CLASS_CAST \
+	((cls), CAMEL_TYPE_GWIMAP_SETTINGS, CamelGwImapSettingsClass))
+#define CAMEL_IS_GWIMAP_SETTINGS(obj) \
+	(G_TYPE_CHECK_INSTANCE_TYPE \
+	((obj), CAMEL_TYPE_GWIMAP_SETTINGS))
+#define CAMEL_IS_GWIMAP_SETTINGS_CLASS(cls) \
+	(G_TYPE_CHECK_CLASS_TYPE \
+	((cls), CAMEL_TYPE_GWIMAP_SETTINGS))
+#define CAMEL_GWIMAP_SETTINGS_GET_CLASS(obj) \
+	(G_TYPE_INSTANCE_GET_CLASS \
+	((obj), CAMEL_TYPE_GWIMAP_SETTINGS, CamelGwImapSettingsClass))
+
+G_BEGIN_DECLS
+
+typedef struct _CamelGwImapSettings CamelGwImapSettings;
+typedef struct _CamelGwImapSettingsClass CamelGwImapSettingsClass;
+typedef struct _CamelGwImapSettingsPrivate CamelGwImapSettingsPrivate;
+
+struct _CamelGwImapSettings {
+	CamelIMAPXSettings parent;
+	CamelGwImapSettingsPrivate *priv;
+};
+
+struct _CamelGwImapSettingsClass {
+	CamelIMAPXSettingsClass parent_class;
+};
+
+GType		camel_gwimap_settings_get_type
+					(void) G_GNUC_CONST;
+const gchar *	camel_gwimap_settings_get_soap_port
+					(CamelGwImapSettings *settings);
+void		camel_gwimap_settings_set_soap_port
+					(CamelGwImapSettings *settings,
+					 const gchar *soap_port);
+
+G_END_DECLS
+
+#endif /* CAMEL_GWIMAP_SETTINGS_H */
diff --git a/src/camel/imapx/camel-gwimap-store.c b/src/camel/imapx/camel-gwimap-store.c
new file mode 100644
index 0000000..82a33da
--- /dev/null
+++ b/src/camel/imapx/camel-gwimap-store.c
@@ -0,0 +1,49 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* camel-imap-store.c : class for a imap store */
+/*
+ * Authors: Michael Zucchi <notzed@ximian.com>
+ *
+ * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU Lesser General Public
+ * License as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "camel-gwimap-store.h"
+#include "camel-gwimap-settings.h"
+
+G_DEFINE_TYPE (
+	CamelGwImapStore,
+	camel_gwimap_store,
+	CAMEL_TYPE_IMAPX_STORE)
+
+
+static void
+camel_gwimap_store_class_init (CamelGwImapStoreClass *class)
+{
+	CamelServiceClass *service_class;
+
+	service_class = CAMEL_SERVICE_CLASS (class);
+	service_class->settings_type = CAMEL_TYPE_GWIMAP_SETTINGS;
+}
+
+static void
+camel_gwimap_store_init (CamelGwImapStore *gstore)
+{
+	
+}
diff --git a/src/camel/imapx/camel-gwimap-store.h b/src/camel/imapx/camel-gwimap-store.h
new file mode 100644
index 0000000..05389f5
--- /dev/null
+++ b/src/camel/imapx/camel-gwimap-store.h
@@ -0,0 +1,67 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* camel-imap-store.h : class for an imap store */
+
+/*
+ * Authors: Michael Zucchi <notzed@ximian.com>
+ *
+ * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU Lesser General Public
+ * License as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef CAMEL_GWIMAP_STORE_H
+#define CAMEL_GWIMAP_STORE_H
+
+#include <camel/camel.h>
+#include <camel-imapx-store.h>
+
+/* Standard GObject macros */
+#define CAMEL_TYPE_GWIMAP_STORE \
+	(camel_gwimap_store_get_type ())
+#define CAMEL_GWIMAP_STORE(obj) \
+	(G_TYPE_CHECK_INSTANCE_CAST \
+	((obj), CAMEL_TYPE_GWIMAP_STORE, CamelGwImapStore))
+#define CAMEL_GWIMAP_STORE_CLASS(cls) \
+	(G_TYPE_CHECK_CLASS_CAST \
+	((cls), CAMEL_TYPE_GWIMAP_STORE, CamelGwImapStoreClass))
+#define CAMEL_IS_GWIMAP_STORE(obj) \
+	(G_TYPE_CHECK_INSTANCE_TYPE \
+	((obj), CAMEL_TYPE_GWIMAP_STORE))
+#define CAMEL_IS_GWIMAP_STORE_CLASS(cls) \
+	(G_TYPE_CHECK_CLASS_TYPE \
+	((cls), CAMEL_TYPE_GWIMAP_STORE))
+#define CAMEL_GWIMAP_GET_CLASS(obj) \
+	(G_TYPE_INSTANCE_GET_CLASS \
+	((obj), CAMEL_TYPE_GWIMAP_STORE, CamelGwImapStoreClass))
+
+G_BEGIN_DECLS
+
+typedef struct _CamelGwImapStore CamelGwImapStore;
+typedef struct _CamelGwImapStoreClass CamelGwImapStoreClass;
+typedef struct _CamelGwImapStorePrivate CamelGwImapStorePrivate;
+
+struct _CamelGwImapStore {
+	CamelIMAPXStore parent;
+};
+
+struct _CamelGwImapStoreClass {
+	CamelIMAPXStoreClass parent_class;
+};
+
+GType		camel_gwimap_store_get_type	(void);
+
+G_END_DECLS
+
+#endif /* CAMEL_GWIMAP_STORE_H */
