Index: b/SoObjects/SOGo/SOGoSieveManager.m
===================================================================
--- a/SoObjects/SOGo/SOGoSieveManager.m	2012-11-28 01:01:52.000000000 +0100
+++ b/SoObjects/SOGo/SOGoSieveManager.m	2012-11-28 01:59:17.000000000 +0100
@@ -615,8 +615,8 @@
   SOGoUserDefaults *ud;
   SOGoDomainDefaults *dd;
   NGSieveClient *client;
-  NSString *filterScript, *v, *sieveServer;
-  NSURL *url;
+  NSString *filterScript, *v, *sieveServer, *sieveScheme, *sieveQuery, *imapServer;
+  NSURL *url, *cUrl;
   
   int sievePort;
   BOOL b, connected;
@@ -738,39 +738,22 @@
   //
   // We first try to get the user's preferred Sieve server
   sieveServer = [[[user mailAccounts] objectAtIndex: 0] objectForKey: @"sieveServerName"];
+  imapServer = [[[user mailAccounts] objectAtIndex: 0] objectForKey: @"serverName"];
 
-  if (!sieveServer)
-    sieveServer = [dd sieveServer];
-  
-  sievePort = 2000;
-  url = nil;
-      
-  if (!sieveServer)
-    {
-      NSString *s;
-      
-      s = [dd imapServer];
-      
-      if (s)
-	{
-	  NSURL *url;
-	  
-	  url = [NSURL URLWithString: s];
+  cUrl = [NSURL URLWithString: (sieveServer ? sieveServer : @"") ];
+  url = [NSURL URLWithString: [dd sieveServer] ];
 
-	  if ([url host])
-	    sieveServer = [url host];
-	  else
-	    sieveServer = s;
-	}
-      else
-	sieveServer = @"localhost";
-      
-      url = [NSURL URLWithString: [NSString stringWithFormat: @"%@:%d", sieveServer, sievePort]];
-    }
-  else
-    {
-      url = [NSURL URLWithString: sieveServer];
-    }
+  sieveServer = ( [cUrl host] ? [cUrl host] : ( sieveServer ? sieveServer :
+                  ( [url host] ? [url host] : ( [dd sieveServer] ? [dd sieveServer] :
+                    ( imapServer ? imapServer : @"localhost" )))));
+  sieveScheme = [cUrl scheme] ? [cUrl scheme] : ( [url scheme] ? [url scheme] : @"sieve" );
+  sievePort = [cUrl port] ? [[cUrl port] intValue] : ( [url port] ? [[url port] intValue] : 2000 );
+  sieveQuery = [cUrl query] ? [cUrl query] : ( [url query] ? [url query] : @"" );
+  if (sieveQuery)
+    sieveQuery = [NSString stringWithFormat: @"/?%@", sieveQuery];
+
+  url = [NSURL URLWithString: [NSString stringWithFormat: @"%@://%@:%d%@",
+                               sieveScheme, sieveServer, sievePort, sieveQuery]];
 
   client = [[NGSieveClient alloc] initWithURL: url];
   
