diff --git a/camel/camel-provider.c b/camel/camel-provider.c
index a444d69..3340474 100644
--- a/camel/camel-provider.c
+++ b/camel/camel-provider.c
@@ -64,6 +64,10 @@ static CamelProvider vee_provider = {
 	CAMEL_PROVIDER_IS_STORAGE,
 	CAMEL_URL_NEED_PATH | CAMEL_URL_PATH_IS_ABSOLUTE | CAMEL_URL_FRAGMENT_IS_PATH,
 
+	NULL,	/* extra conf */
+
+	NULL,   /* port providers */
+
 	/* ... */
 };
 
diff --git a/camel/camel-provider.h b/camel/camel-provider.h
index 330bd9b..e98dd8c 100644
--- a/camel/camel-provider.h
+++ b/camel/camel-provider.h
@@ -157,6 +157,12 @@ typedef struct {
 	const gchar *text, *value;
 } CamelProviderConfEntry;
 
+typedef struct {
+	gint port;
+	const gchar *desc;
+	gboolean is_ssl;
+} CamelProviderPortEntry;
+
 /* Some defaults */
 #define CAMEL_PROVIDER_CONF_DEFAULT_USERNAME \
 	{ CAMEL_PROVIDER_CONF_LABEL, "username", NULL, N_("User_name:"), NULL }
@@ -198,6 +204,12 @@ typedef struct {
 	/* Extra configuration information */
 	CamelProviderConfEntry *extra_conf;
 
+	/* The list of CamelProviderPortEntry structs. Each struct contains 
+	 * port number and a short string description ("Default IMAP port"
+	 * or "POP3 over SSL" etc.
+	 */
+	CamelProviderPortEntry *port_entries;
+
 	/* auto-detection function */
 	CamelProviderAutoDetectFunc auto_detect;
 
diff --git a/camel/providers/groupwise/camel-groupwise-provider.c b/camel/providers/groupwise/camel-groupwise-provider.c
index bace758..681d348 100644
--- a/camel/providers/groupwise/camel-groupwise-provider.c
+++ b/camel/providers/groupwise/camel-groupwise-provider.c
@@ -76,6 +76,11 @@ static CamelProviderConfEntry groupwise_conf_entries[] = {
 	{ CAMEL_PROVIDER_CONF_END }
 };
 
+CamelProviderPortEntry groupwise_port_entries[] = {
+							{ 1677, N_("Default GroupWise port"), FALSE },
+							{ 0, NULL, 0 }
+						  };
+
 static CamelProvider groupwise_provider = {
 	"groupwise",
 	N_("Novell GroupWise"),
@@ -91,6 +96,8 @@ static CamelProvider groupwise_provider = {
 
 	groupwise_conf_entries,
 
+	groupwise_port_entries,
+
 	/* ... */
 };
 
diff --git a/camel/providers/imap/camel-imap-provider.c b/camel/providers/imap/camel-imap-provider.c
index ab14cb4..bc1d3f7 100644
--- a/camel/providers/imap/camel-imap-provider.c
+++ b/camel/providers/imap/camel-imap-provider.c
@@ -74,6 +74,12 @@ static CamelProviderConfEntry imap_conf_entries[] = {
 	{ CAMEL_PROVIDER_CONF_END }
 };
 
+CamelProviderPortEntry imap_port_entries[] = {
+				   		{ 143, N_("IMAP default port"), FALSE },
+						{ 993, N_("IMAP over SSL"), TRUE },
+						{ 0, NULL, 0 }
+			    		     };
+
 static CamelProvider imap_provider = {
 	"imap",
 	N_("IMAP"),
@@ -90,6 +96,8 @@ static CamelProvider imap_provider = {
 
 	imap_conf_entries,
 
+	imap_port_entries,
+
 	/* ... */
 };
 
@@ -100,6 +108,7 @@ CamelServiceAuthType camel_imap_password_authtype = {
 	   "plaintext password."),
 
 	"",
+
 	TRUE
 };
 
diff --git a/camel/providers/imapx/camel-imapx-provider.c b/camel/providers/imapx/camel-imapx-provider.c
index d2ec9b4..e0ded9f 100644
--- a/camel/providers/imapx/camel-imapx-provider.c
+++ b/camel/providers/imapx/camel-imapx-provider.c
@@ -82,12 +82,19 @@ CamelProviderConfEntry imapx_conf_entries[] = {
 	{ CAMEL_PROVIDER_CONF_END }
 };
 
+CamelProviderPortEntry imapx_port_entries[] = {
+						{ 143, N_("Defalut IMAP port"), FALSE },
+						{ 993, N_("IMAP over SSL"), TRUE },
+						{ 0, NULL, 0 }
+					      };
+
 static CamelProvider imapx_provider = {
 	"imapx",
 
 	N_("IMAP+"),
 
 	N_("For reading and storing mail on IMAP servers."),
+
 	"mail",
 
 	CAMEL_PROVIDER_IS_REMOTE | CAMEL_PROVIDER_IS_SOURCE |
@@ -97,6 +104,8 @@ static CamelProvider imapx_provider = {
 
 	imapx_conf_entries,
 
+	imapx_port_entries,
+
 	/* ... */
 };
 
diff --git a/camel/providers/local/camel-local-provider.c b/camel/providers/local/camel-local-provider.c
index bbaf97c..e452875 100644
--- a/camel/providers/local/camel-local-provider.c
+++ b/camel/providers/local/camel-local-provider.c
@@ -54,6 +54,7 @@ static CamelProvider mh_provider = {
 	CAMEL_PROVIDER_IS_SOURCE | CAMEL_PROVIDER_IS_STORAGE | CAMEL_PROVIDER_IS_LOCAL,
 	CAMEL_URL_NEED_PATH | CAMEL_URL_NEED_PATH_DIR | CAMEL_URL_PATH_IS_ABSOLUTE | CAMEL_URL_FRAGMENT_IS_PATH,
 	mh_conf_entries,
+	NULL,
 	/* ... */
 };
 
@@ -72,6 +73,7 @@ static CamelProvider mbox_provider = {
 	CAMEL_PROVIDER_IS_SOURCE | CAMEL_PROVIDER_IS_STORAGE | CAMEL_PROVIDER_IS_LOCAL,
 	CAMEL_URL_NEED_PATH | CAMEL_URL_PATH_IS_ABSOLUTE | CAMEL_URL_FRAGMENT_IS_PATH,
 	mbox_conf_entries,
+	NULL,
 	/* ... */
 };
 
@@ -94,6 +96,7 @@ static CamelProvider maildir_provider = {
 	CAMEL_PROVIDER_IS_SOURCE | CAMEL_PROVIDER_IS_STORAGE | CAMEL_PROVIDER_IS_LOCAL,
 	CAMEL_URL_NEED_PATH | CAMEL_URL_NEED_PATH_DIR | CAMEL_URL_PATH_IS_ABSOLUTE | CAMEL_URL_FRAGMENT_IS_PATH,
 	maildir_conf_entries,
+	NULL,
 	/* ... */
 };
 
@@ -114,6 +117,7 @@ static CamelProvider spool_file_provider = {
 	CAMEL_PROVIDER_IS_SOURCE | CAMEL_PROVIDER_IS_STORAGE,
 	CAMEL_URL_NEED_PATH | CAMEL_URL_PATH_IS_ABSOLUTE | CAMEL_URL_FRAGMENT_IS_PATH,
 	spool_conf_entries,
+	NULL,
 	/* ... */
 };
 
@@ -125,6 +129,7 @@ static CamelProvider spool_directory_provider = {
 	CAMEL_PROVIDER_IS_SOURCE | CAMEL_PROVIDER_IS_STORAGE,
 	CAMEL_URL_NEED_PATH | CAMEL_URL_NEED_PATH_DIR | CAMEL_URL_PATH_IS_ABSOLUTE | CAMEL_URL_FRAGMENT_IS_PATH,
 	spool_conf_entries,
+	NULL,
 	/* ... */
 };
 
diff --git a/camel/providers/nntp/camel-nntp-provider.c b/camel/providers/nntp/camel-nntp-provider.c
index 6c0acd1..88829f0 100644
--- a/camel/providers/nntp/camel-nntp-provider.c
+++ b/camel/providers/nntp/camel-nntp-provider.c
@@ -48,6 +48,12 @@ static CamelProviderConfEntry nntp_conf_entries[] = {
 	{ CAMEL_PROVIDER_CONF_END }
 };
 
+CamelProviderPortEntry nntp_port_entries[] = {
+						  { 119, N_("Default NNTP port"), FALSE },
+						  { 563, N_("NNTP over SSL"), TRUE },
+					    	  { 0, NULL, 0 }
+					     };
+
 static CamelProvider news_provider = {
 	"nntp",
 	N_("USENET news"),
@@ -63,7 +69,9 @@ static CamelProvider news_provider = {
 	CAMEL_URL_NEED_HOST | CAMEL_URL_ALLOW_USER |
 	CAMEL_URL_ALLOW_PASSWORD | CAMEL_URL_ALLOW_AUTH,
 
-	nntp_conf_entries
+	nntp_conf_entries,
+
+	nntp_port_entries,
 
 	/* ... */
 };
diff --git a/camel/providers/pop3/camel-pop3-provider.c b/camel/providers/pop3/camel-pop3-provider.c
index 0c8633a..1e68c80 100644
--- a/camel/providers/pop3/camel-pop3-provider.c
+++ b/camel/providers/pop3/camel-pop3-provider.c
@@ -50,6 +50,12 @@ static CamelProviderConfEntry pop3_conf_entries[] = {
 	{ CAMEL_PROVIDER_CONF_END }
 };
 
+CamelProviderPortEntry pop3_port_entries[] = {
+						  { 110, N_("Default POP3 port"), FALSE },
+						  { 995, N_("POP3 over SSL"), TRUE },
+						  { 0, NULL, 0 }
+					     };
+
 static CamelProvider pop3_provider = {
 	"pop",
 
@@ -66,6 +72,8 @@ static CamelProvider pop3_provider = {
 
 	pop3_conf_entries,
 
+	pop3_port_entries,
+
 	/* ... */
 };
 
diff --git a/camel/providers/sendmail/camel-sendmail-provider.c b/camel/providers/sendmail/camel-sendmail-provider.c
index 566ea63..4b45fd2 100644
--- a/camel/providers/sendmail/camel-sendmail-provider.c
+++ b/camel/providers/sendmail/camel-sendmail-provider.c
@@ -44,6 +44,8 @@ static CamelProvider sendmail_provider = {
 
 	0, /* url_flags */
 
+	NULL,  /* port entries */
+
 	/* ... */
 };
 
diff --git a/camel/providers/smtp/camel-smtp-provider.c b/camel/providers/smtp/camel-smtp-provider.c
index 08649db..1e03962 100644
--- a/camel/providers/smtp/camel-smtp-provider.c
+++ b/camel/providers/smtp/camel-smtp-provider.c
@@ -38,6 +38,12 @@
 static guint smtp_url_hash (gconstpointer key);
 static gint smtp_url_equal (gconstpointer a, gconstpointer b);
 
+CamelProviderPortEntry smtp_port_entries[] = {
+						  { 25, N_("Default SMTP port"), FALSE },
+						  { 465, N_("SMTP over SSL"), TRUE },
+						  { 0, NULL, 0 }
+					     };
+
 static CamelProvider smtp_provider = {
 	"smtp",
 	N_("SMTP"),
@@ -51,6 +57,10 @@ static CamelProvider smtp_provider = {
 
 	CAMEL_URL_NEED_HOST | CAMEL_URL_ALLOW_AUTH | CAMEL_URL_ALLOW_USER,
 
+	NULL,
+
+	smtp_port_entries,
+
 	/* ... */
 };
 
diff --git a/camel/camel-provider.c b/camel/camel-provider.c
index a444d69..3340474 100644
--- a/camel/camel-provider.c
+++ b/camel/camel-provider.c
@@ -64,6 +64,10 @@ static CamelProvider vee_provider = {
 	CAMEL_PROVIDER_IS_STORAGE,
 	CAMEL_URL_NEED_PATH | CAMEL_URL_PATH_IS_ABSOLUTE | CAMEL_URL_FRAGMENT_IS_PATH,
 
+	NULL,	/* extra conf */
+
+	NULL,   /* port providers */
+
 	/* ... */
 };
 
diff --git a/camel/camel-provider.h b/camel/camel-provider.h
index 330bd9b..e98dd8c 100644
--- a/camel/camel-provider.h
+++ b/camel/camel-provider.h
@@ -157,6 +157,12 @@ typedef struct {
 	const gchar *text, *value;
 } CamelProviderConfEntry;
 
+typedef struct {
+	gint port;
+	const gchar *desc;
+	gboolean is_ssl;
+} CamelProviderPortEntry;
+
 /* Some defaults */
 #define CAMEL_PROVIDER_CONF_DEFAULT_USERNAME \
 	{ CAMEL_PROVIDER_CONF_LABEL, "username", NULL, N_("User_name:"), NULL }
@@ -198,6 +204,12 @@ typedef struct {
 	/* Extra configuration information */
 	CamelProviderConfEntry *extra_conf;
 
+	/* The list of CamelProviderPortEntry structs. Each struct contains 
+	 * port number and a short string description ("Default IMAP port"
+	 * or "POP3 over SSL" etc.
+	 */
+	CamelProviderPortEntry *port_entries;
+
 	/* auto-detection function */
 	CamelProviderAutoDetectFunc auto_detect;
 
diff --git a/camel/providers/groupwise/camel-groupwise-provider.c b/camel/providers/groupwise/camel-groupwise-provider.c
index bace758..681d348 100644
--- a/camel/providers/groupwise/camel-groupwise-provider.c
+++ b/camel/providers/groupwise/camel-groupwise-provider.c
@@ -76,6 +76,11 @@ static CamelProviderConfEntry groupwise_conf_entries[] = {
 	{ CAMEL_PROVIDER_CONF_END }
 };
 
+CamelProviderPortEntry groupwise_port_entries[] = {
+							{ 1677, N_("Default GroupWise port"), FALSE },
+							{ 0, NULL, 0 }
+						  };
+
 static CamelProvider groupwise_provider = {
 	"groupwise",
 	N_("Novell GroupWise"),
@@ -91,6 +96,8 @@ static CamelProvider groupwise_provider = {
 
 	groupwise_conf_entries,
 
+	groupwise_port_entries,
+
 	/* ... */
 };
 
diff --git a/camel/providers/imap/camel-imap-provider.c b/camel/providers/imap/camel-imap-provider.c
index ab14cb4..bc1d3f7 100644
--- a/camel/providers/imap/camel-imap-provider.c
+++ b/camel/providers/imap/camel-imap-provider.c
@@ -74,6 +74,12 @@ static CamelProviderConfEntry imap_conf_entries[] = {
 	{ CAMEL_PROVIDER_CONF_END }
 };
 
+CamelProviderPortEntry imap_port_entries[] = {
+				   		{ 143, N_("IMAP default port"), FALSE },
+						{ 993, N_("IMAP over SSL"), TRUE },
+						{ 0, NULL, 0 }
+			    		     };
+
 static CamelProvider imap_provider = {
 	"imap",
 	N_("IMAP"),
@@ -90,6 +96,8 @@ static CamelProvider imap_provider = {
 
 	imap_conf_entries,
 
+	imap_port_entries,
+
 	/* ... */
 };
 
@@ -100,6 +108,7 @@ CamelServiceAuthType camel_imap_password_authtype = {
 	   "plaintext password."),
 
 	"",
+
 	TRUE
 };
 
diff --git a/camel/providers/imapx/camel-imapx-provider.c b/camel/providers/imapx/camel-imapx-provider.c
index d2ec9b4..e0ded9f 100644
--- a/camel/providers/imapx/camel-imapx-provider.c
+++ b/camel/providers/imapx/camel-imapx-provider.c
@@ -82,12 +82,19 @@ CamelProviderConfEntry imapx_conf_entries[] = {
 	{ CAMEL_PROVIDER_CONF_END }
 };
 
+CamelProviderPortEntry imapx_port_entries[] = {
+						{ 143, N_("Defalut IMAP port"), FALSE },
+						{ 993, N_("IMAP over SSL"), TRUE },
+						{ 0, NULL, 0 }
+					      };
+
 static CamelProvider imapx_provider = {
 	"imapx",
 
 	N_("IMAP+"),
 
 	N_("For reading and storing mail on IMAP servers."),
+
 	"mail",
 
 	CAMEL_PROVIDER_IS_REMOTE | CAMEL_PROVIDER_IS_SOURCE |
@@ -97,6 +104,8 @@ static CamelProvider imapx_provider = {
 
 	imapx_conf_entries,
 
+	imapx_port_entries,
+
 	/* ... */
 };
 
diff --git a/camel/providers/local/camel-local-provider.c b/camel/providers/local/camel-local-provider.c
index bbaf97c..e452875 100644
--- a/camel/providers/local/camel-local-provider.c
+++ b/camel/providers/local/camel-local-provider.c
@@ -54,6 +54,7 @@ static CamelProvider mh_provider = {
 	CAMEL_PROVIDER_IS_SOURCE | CAMEL_PROVIDER_IS_STORAGE | CAMEL_PROVIDER_IS_LOCAL,
 	CAMEL_URL_NEED_PATH | CAMEL_URL_NEED_PATH_DIR | CAMEL_URL_PATH_IS_ABSOLUTE | CAMEL_URL_FRAGMENT_IS_PATH,
 	mh_conf_entries,
+	NULL,
 	/* ... */
 };
 
@@ -72,6 +73,7 @@ static CamelProvider mbox_provider = {
 	CAMEL_PROVIDER_IS_SOURCE | CAMEL_PROVIDER_IS_STORAGE | CAMEL_PROVIDER_IS_LOCAL,
 	CAMEL_URL_NEED_PATH | CAMEL_URL_PATH_IS_ABSOLUTE | CAMEL_URL_FRAGMENT_IS_PATH,
 	mbox_conf_entries,
+	NULL,
 	/* ... */
 };
 
@@ -94,6 +96,7 @@ static CamelProvider maildir_provider = {
 	CAMEL_PROVIDER_IS_SOURCE | CAMEL_PROVIDER_IS_STORAGE | CAMEL_PROVIDER_IS_LOCAL,
 	CAMEL_URL_NEED_PATH | CAMEL_URL_NEED_PATH_DIR | CAMEL_URL_PATH_IS_ABSOLUTE | CAMEL_URL_FRAGMENT_IS_PATH,
 	maildir_conf_entries,
+	NULL,
 	/* ... */
 };
 
@@ -114,6 +117,7 @@ static CamelProvider spool_file_provider = {
 	CAMEL_PROVIDER_IS_SOURCE | CAMEL_PROVIDER_IS_STORAGE,
 	CAMEL_URL_NEED_PATH | CAMEL_URL_PATH_IS_ABSOLUTE | CAMEL_URL_FRAGMENT_IS_PATH,
 	spool_conf_entries,
+	NULL,
 	/* ... */
 };
 
@@ -125,6 +129,7 @@ static CamelProvider spool_directory_provider = {
 	CAMEL_PROVIDER_IS_SOURCE | CAMEL_PROVIDER_IS_STORAGE,
 	CAMEL_URL_NEED_PATH | CAMEL_URL_NEED_PATH_DIR | CAMEL_URL_PATH_IS_ABSOLUTE | CAMEL_URL_FRAGMENT_IS_PATH,
 	spool_conf_entries,
+	NULL,
 	/* ... */
 };
 
diff --git a/camel/providers/nntp/camel-nntp-provider.c b/camel/providers/nntp/camel-nntp-provider.c
index 6c0acd1..88829f0 100644
--- a/camel/providers/nntp/camel-nntp-provider.c
+++ b/camel/providers/nntp/camel-nntp-provider.c
@@ -48,6 +48,12 @@ static CamelProviderConfEntry nntp_conf_entries[] = {
 	{ CAMEL_PROVIDER_CONF_END }
 };
 
+CamelProviderPortEntry nntp_port_entries[] = {
+						  { 119, N_("Default NNTP port"), FALSE },
+						  { 563, N_("NNTP over SSL"), TRUE },
+					    	  { 0, NULL, 0 }
+					     };
+
 static CamelProvider news_provider = {
 	"nntp",
 	N_("USENET news"),
@@ -63,7 +69,9 @@ static CamelProvider news_provider = {
 	CAMEL_URL_NEED_HOST | CAMEL_URL_ALLOW_USER |
 	CAMEL_URL_ALLOW_PASSWORD | CAMEL_URL_ALLOW_AUTH,
 
-	nntp_conf_entries
+	nntp_conf_entries,
+
+	nntp_port_entries,
 
 	/* ... */
 };
diff --git a/camel/providers/pop3/camel-pop3-provider.c b/camel/providers/pop3/camel-pop3-provider.c
index 0c8633a..1e68c80 100644
--- a/camel/providers/pop3/camel-pop3-provider.c
+++ b/camel/providers/pop3/camel-pop3-provider.c
@@ -50,6 +50,12 @@ static CamelProviderConfEntry pop3_conf_entries[] = {
 	{ CAMEL_PROVIDER_CONF_END }
 };
 
+CamelProviderPortEntry pop3_port_entries[] = {
+						  { 110, N_("Default POP3 port"), FALSE },
+						  { 995, N_("POP3 over SSL"), TRUE },
+						  { 0, NULL, 0 }
+					     };
+
 static CamelProvider pop3_provider = {
 	"pop",
 
@@ -66,6 +72,8 @@ static CamelProvider pop3_provider = {
 
 	pop3_conf_entries,
 
+	pop3_port_entries,
+
 	/* ... */
 };
 
diff --git a/camel/providers/sendmail/camel-sendmail-provider.c b/camel/providers/sendmail/camel-sendmail-provider.c
index 566ea63..4b45fd2 100644
--- a/camel/providers/sendmail/camel-sendmail-provider.c
+++ b/camel/providers/sendmail/camel-sendmail-provider.c
@@ -44,6 +44,8 @@ static CamelProvider sendmail_provider = {
 
 	0, /* url_flags */
 
+	NULL,  /* port entries */
+
 	/* ... */
 };
 
diff --git a/camel/providers/smtp/camel-smtp-provider.c b/camel/providers/smtp/camel-smtp-provider.c
index 08649db..7a1df0b 100644
--- a/camel/providers/smtp/camel-smtp-provider.c
+++ b/camel/providers/smtp/camel-smtp-provider.c
@@ -38,6 +38,13 @@
 static guint smtp_url_hash (gconstpointer key);
 static gint smtp_url_equal (gconstpointer a, gconstpointer b);
 
+CamelProviderPortEntry smtp_port_entries[] = {
+						  { 25, N_("Default SMTP port"), FALSE },
+						  { 465, N_("SMTP over SSL"), TRUE },
+						  { 587, N_("Message submission port"), FALSE },
+						  { 0, NULL, 0 }
+					     };
+
 static CamelProvider smtp_provider = {
 	"smtp",
 	N_("SMTP"),
@@ -51,6 +58,10 @@ static CamelProvider smtp_provider = {
 
 	CAMEL_URL_NEED_HOST | CAMEL_URL_ALLOW_AUTH | CAMEL_URL_ALLOW_USER,
 
+	NULL,
+
+	smtp_port_entries,
+
 	/* ... */
 };
 
