Merged adium-1.6 into default.
authorThijs Alkemade <me@thijsalkema.de>
Wed, 26 Jun 2013 12:23:10 +0200
changeset 5601 c9616aa9add5
parent 5600 04bacccdbf87 (current diff)
parent 5592 b21557d6db30 (diff)
child 5602 6b18329c0e60
Merged adium-1.6 into default.
Plists/Info.plist
Plugins/Purple Service/AIPurpleCertificateTrustWarningAlert.m
Plugins/Purple Service/CBPurpleAccount.m
Plugins/Purple Service/ESIRCAccount.m
Plugins/Purple Service/ESPurpleJabberAccount.m
Plugins/Purple Service/SLPurpleCocoaAdapter.m
Plugins/Purple Service/adiumPurpleCertificateTrustWarning.m
Plugins/Purple Service/libpurple_extensions/ssl-cdsa.c
Plugins/Twitter Plugin/AITwitterAccount.m
Release/Makefile
--- a/Frameworks/Adium Framework/Resources/TextAndButtonsWindow.xib	Wed Jun 26 12:13:40 2013 +0200
+++ b/Frameworks/Adium Framework/Resources/TextAndButtonsWindow.xib	Wed Jun 26 12:23:10 2013 +0200
@@ -2,25 +2,25 @@
 <archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
 	<data>
 		<int key="IBDocument.SystemTarget">1060</int>
-		<string key="IBDocument.SystemVersion">11D50b</string>
-		<string key="IBDocument.InterfaceBuilderVersion">2182</string>
-		<string key="IBDocument.AppKitVersion">1138.32</string>
-		<string key="IBDocument.HIToolboxVersion">568.00</string>
+		<string key="IBDocument.SystemVersion">12D78</string>
+		<string key="IBDocument.InterfaceBuilderVersion">3084</string>
+		<string key="IBDocument.AppKitVersion">1187.37</string>
+		<string key="IBDocument.HIToolboxVersion">626.00</string>
 		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
 			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
-			<string key="NS.object.0">2182</string>
+			<string key="NS.object.0">3084</string>
 		</object>
 		<array key="IBDocument.IntegratedClassDependencies">
-			<string>NSView</string>
-			<string>NSScroller</string>
-			<string>NSScrollView</string>
-			<string>NSWindowTemplate</string>
-			<string>NSTextView</string>
+			<string>NSButton</string>
 			<string>NSButtonCell</string>
+			<string>NSCustomObject</string>
 			<string>NSImageCell</string>
 			<string>NSImageView</string>
-			<string>NSButton</string>
-			<string>NSCustomObject</string>
+			<string>NSScrollView</string>
+			<string>NSScroller</string>
+			<string>NSTextView</string>
+			<string>NSView</string>
+			<string>NSWindowTemplate</string>
 		</array>
 		<array key="IBDocument.PluginDependencies">
 			<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -42,7 +42,7 @@
 			<object class="NSWindowTemplate" id="666209776">
 				<int key="NSWindowStyleMask">7</int>
 				<int key="NSWindowBacking">2</int>
-				<string key="NSWindowRect">{{12, 725}, {420, 131}}</string>
+				<string key="NSWindowRect">{{855, 483}, {420, 131}}</string>
 				<int key="NSWTFlags">1618477056</int>
 				<string key="NSWindowTitle"/>
 				<string key="NSWindowClass">NSWindow</string>
@@ -52,7 +52,7 @@
 				<nil key="NSUserInterfaceItemIdentifier"/>
 				<string key="NSWindowContentMinSize">{94, 7}</string>
 				<object class="NSView" key="NSWindowView" id="804687557">
-					<nil key="NSNextResponder"/>
+					<reference key="NSNextResponder"/>
 					<int key="NSvFlags">256</int>
 					<array class="NSMutableArray" key="NSSubviews">
 						<object class="NSButton" id="206213576">
@@ -60,9 +60,11 @@
 							<int key="NSvFlags">289</int>
 							<string key="NSFrame">{{224, 12}, {90, 32}}</string>
 							<reference key="NSSuperview" ref="804687557"/>
+							<reference key="NSWindow"/>
+							<reference key="NSNextKeyView" ref="67677223"/>
 							<bool key="NSEnabled">YES</bool>
 							<object class="NSButtonCell" key="NSCell" id="884421962">
-								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags">67108864</int>
 								<int key="NSCellFlags2">134217728</int>
 								<string key="NSContents">Cancel</string>
 								<object class="NSFont" key="NSSupport" id="619923228">
@@ -71,7 +73,7 @@
 									<int key="NSfFlags">1558</int>
 								</object>
 								<reference key="NSControlView" ref="206213576"/>
-								<int key="NSButtonFlags">-2038284033</int>
+								<int key="NSButtonFlags">-2038284288</int>
 								<int key="NSButtonFlags2">1</int>
 								<reference key="NSAlternateImage" ref="619923228"/>
 								<string key="NSAlternateContents"/>
@@ -79,20 +81,23 @@
 								<int key="NSPeriodicDelay">200</int>
 								<int key="NSPeriodicInterval">25</int>
 							</object>
+							<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
 						</object>
 						<object class="NSButton" id="724795384">
 							<reference key="NSNextResponder" ref="804687557"/>
 							<int key="NSvFlags">292</int>
 							<string key="NSFrame">{{98, 12}, {90, 32}}</string>
 							<reference key="NSSuperview" ref="804687557"/>
+							<reference key="NSWindow"/>
+							<reference key="NSNextKeyView" ref="206213576"/>
 							<bool key="NSEnabled">YES</bool>
 							<object class="NSButtonCell" key="NSCell" id="154746717">
-								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags">67108864</int>
 								<int key="NSCellFlags2">134217728</int>
 								<string key="NSContents">No</string>
 								<reference key="NSSupport" ref="619923228"/>
 								<reference key="NSControlView" ref="724795384"/>
-								<int key="NSButtonFlags">-2038284033</int>
+								<int key="NSButtonFlags">-2038284288</int>
 								<int key="NSButtonFlags2">1</int>
 								<reference key="NSAlternateImage" ref="619923228"/>
 								<string key="NSAlternateContents"/>
@@ -102,20 +107,23 @@
 								<int key="NSPeriodicDelay">200</int>
 								<int key="NSPeriodicInterval">25</int>
 							</object>
+							<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
 						</object>
 						<object class="NSButton" id="67677223">
 							<reference key="NSNextResponder" ref="804687557"/>
 							<int key="NSvFlags">289</int>
 							<string key="NSFrame">{{312, 12}, {90, 32}}</string>
 							<reference key="NSSuperview" ref="804687557"/>
+							<reference key="NSWindow"/>
+							<reference key="NSNextKeyView"/>
 							<bool key="NSEnabled">YES</bool>
 							<object class="NSButtonCell" key="NSCell" id="222422940">
-								<int key="NSCellFlags">67239424</int>
+								<int key="NSCellFlags">67108864</int>
 								<int key="NSCellFlags2">134217728</int>
 								<string key="NSContents">Yes</string>
 								<reference key="NSSupport" ref="619923228"/>
 								<reference key="NSControlView" ref="67677223"/>
-								<int key="NSButtonFlags">-2035924737</int>
+								<int key="NSButtonFlags">-2035924992</int>
 								<int key="NSButtonFlags2">1</int>
 								<reference key="NSAlternateImage" ref="619923228"/>
 								<string key="NSAlternateContents"/>
@@ -125,6 +133,7 @@
 								<int key="NSPeriodicDelay">200</int>
 								<int key="NSPeriodicInterval">25</int>
 							</object>
+							<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
 						</object>
 						<object class="NSImageView" id="664450443">
 							<reference key="NSNextResponder" ref="804687557"/>
@@ -144,9 +153,11 @@
 							</set>
 							<string key="NSFrame">{{24, 51}, {64, 64}}</string>
 							<reference key="NSSuperview" ref="804687557"/>
+							<reference key="NSWindow"/>
+							<reference key="NSNextKeyView" ref="473831366"/>
 							<bool key="NSEnabled">YES</bool>
 							<object class="NSImageCell" key="NSCell" id="46445738">
-								<int key="NSCellFlags">130560</int>
+								<int key="NSCellFlags">134217728</int>
 								<int key="NSCellFlags2">33554432</int>
 								<object class="NSCustomResource" key="NSContents">
 									<string key="NSClassName">NSImage</string>
@@ -157,6 +168,7 @@
 								<int key="NSStyle">0</int>
 								<bool key="NSAnimates">NO</bool>
 							</object>
+							<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
 							<bool key="NSEditable">NO</bool>
 						</object>
 						<object class="NSScrollView" id="469263123">
@@ -185,6 +197,8 @@
 											</set>
 											<string key="NSFrameSize">{296, 15}</string>
 											<reference key="NSSuperview" ref="635900321"/>
+											<reference key="NSWindow"/>
+											<reference key="NSNextKeyView" ref="837234664"/>
 											<object class="NSTextContainer" key="NSTextContainer" id="1062677528">
 												<object class="NSLayoutManager" key="NSLayoutManager">
 													<object class="NSTextStorage" key="NSTextStorage">
@@ -210,7 +224,7 @@
 													<array class="NSMutableArray" key="NSTextContainers">
 														<reference ref="1062677528"/>
 													</array>
-													<int key="NSLMFlags">6</int>
+													<int key="NSLMFlags">38</int>
 													<nil key="NSDelegate"/>
 												</object>
 												<reference key="NSTextView" ref="756387554"/>
@@ -218,7 +232,7 @@
 												<int key="NSTCFlags">1</int>
 											</object>
 											<object class="NSTextViewSharedData" key="NSSharedData">
-												<int key="NSFlags">100666337</int>
+												<int key="NSFlags">67111905</int>
 												<int key="NSTextCheckingTypes">0</int>
 												<nil key="NSMarkedAttributes"/>
 												<object class="NSColor" key="NSBackgroundColor" id="724447651">
@@ -268,6 +282,7 @@
 									</array>
 									<string key="NSFrameSize">{296, 15}</string>
 									<reference key="NSSuperview" ref="469263123"/>
+									<reference key="NSWindow"/>
 									<reference key="NSNextKeyView" ref="756387554"/>
 									<reference key="NSDocView" ref="756387554"/>
 									<reference key="NSBGColor" ref="724447651"/>
@@ -302,6 +317,9 @@
 									<int key="NSvFlags">-2147483392</int>
 									<string key="NSFrame">{{-100, -100}, {15, 40}}</string>
 									<reference key="NSSuperview" ref="469263123"/>
+									<reference key="NSWindow"/>
+									<reference key="NSNextKeyView" ref="972516650"/>
+									<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
 									<reference key="NSTarget" ref="469263123"/>
 									<string key="NSAction">_doScroller:</string>
 									<double key="NSCurValue">1</double>
@@ -311,6 +329,9 @@
 									<int key="NSvFlags">-2147483392</int>
 									<string key="NSFrame">{{-100, -100}, {87, 18}}</string>
 									<reference key="NSSuperview" ref="469263123"/>
+									<reference key="NSWindow"/>
+									<reference key="NSNextKeyView" ref="635900321"/>
+									<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
 									<int key="NSsFlags">1</int>
 									<reference key="NSTarget" ref="469263123"/>
 									<string key="NSAction">_doScroller:</string>
@@ -320,11 +341,15 @@
 							</array>
 							<string key="NSFrame">{{104, 76}, {296, 15}}</string>
 							<reference key="NSSuperview" ref="804687557"/>
-							<reference key="NSNextKeyView" ref="635900321"/>
+							<reference key="NSWindow"/>
+							<reference key="NSNextKeyView" ref="1014865810"/>
 							<int key="NSsFlags">133120</int>
 							<reference key="NSVScroller" ref="1014865810"/>
 							<reference key="NSHScroller" ref="972516650"/>
 							<reference key="NSContentView" ref="635900321"/>
+							<double key="NSMinMagnification">0.25</double>
+							<double key="NSMaxMagnification">4</double>
+							<double key="NSMagnification">1</double>
 						</object>
 						<object class="NSScrollView" id="473831366">
 							<reference key="NSNextResponder" ref="804687557"/>
@@ -352,6 +377,8 @@
 											</set>
 											<string key="NSFrameSize">{296, 16}</string>
 											<reference key="NSSuperview" ref="546717"/>
+											<reference key="NSWindow"/>
+											<reference key="NSNextKeyView" ref="469263123"/>
 											<object class="NSTextContainer" key="NSTextContainer" id="954916342">
 												<object class="NSLayoutManager" key="NSLayoutManager">
 													<object class="NSTextStorage" key="NSTextStorage">
@@ -375,7 +402,7 @@
 													<array class="NSMutableArray" key="NSTextContainers">
 														<reference ref="954916342"/>
 													</array>
-													<int key="NSLMFlags">6</int>
+													<int key="NSLMFlags">38</int>
 													<nil key="NSDelegate"/>
 												</object>
 												<reference key="NSTextView" ref="917237317"/>
@@ -383,7 +410,7 @@
 												<int key="NSTCFlags">1</int>
 											</object>
 											<object class="NSTextViewSharedData" key="NSSharedData">
-												<int key="NSFlags">100666336</int>
+												<int key="NSFlags">67111904</int>
 												<int key="NSTextCheckingTypes">0</int>
 												<nil key="NSMarkedAttributes"/>
 												<reference key="NSBackgroundColor" ref="724447651"/>
@@ -408,6 +435,7 @@
 									</array>
 									<string key="NSFrameSize">{296, 16}</string>
 									<reference key="NSSuperview" ref="473831366"/>
+									<reference key="NSWindow"/>
 									<reference key="NSNextKeyView" ref="917237317"/>
 									<reference key="NSDocView" ref="917237317"/>
 									<reference key="NSBGColor" ref="724447651"/>
@@ -422,6 +450,9 @@
 									<int key="NSvFlags">-2147483392</int>
 									<string key="NSFrame">{{-100, -100}, {15, 40}}</string>
 									<reference key="NSSuperview" ref="473831366"/>
+									<reference key="NSWindow"/>
+									<reference key="NSNextKeyView" ref="469258289"/>
+									<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
 									<reference key="NSTarget" ref="473831366"/>
 									<string key="NSAction">_doScroller:</string>
 									<double key="NSCurValue">1</double>
@@ -431,6 +462,9 @@
 									<int key="NSvFlags">-2147483392</int>
 									<string key="NSFrame">{{-100, -100}, {87, 18}}</string>
 									<reference key="NSSuperview" ref="473831366"/>
+									<reference key="NSWindow"/>
+									<reference key="NSNextKeyView" ref="546717"/>
+									<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
 									<int key="NSsFlags">1</int>
 									<reference key="NSTarget" ref="473831366"/>
 									<string key="NSAction">_doScroller:</string>
@@ -440,20 +474,26 @@
 							</array>
 							<string key="NSFrame">{{104, 99}, {296, 16}}</string>
 							<reference key="NSSuperview" ref="804687557"/>
-							<reference key="NSNextKeyView" ref="546717"/>
+							<reference key="NSWindow"/>
+							<reference key="NSNextKeyView" ref="337293416"/>
 							<int key="NSsFlags">133120</int>
 							<reference key="NSVScroller" ref="337293416"/>
 							<reference key="NSHScroller" ref="469258289"/>
 							<reference key="NSContentView" ref="546717"/>
+							<double key="NSMinMagnification">0.25</double>
+							<double key="NSMaxMagnification">4</double>
+							<double key="NSMagnification">1</double>
 						</object>
 						<object class="NSButton" id="837234664">
 							<reference key="NSNextResponder" ref="804687557"/>
 							<int key="NSvFlags">266</int>
 							<string key="NSFrame">{{107, 52}, {295, 18}}</string>
 							<reference key="NSSuperview" ref="804687557"/>
+							<reference key="NSWindow"/>
+							<reference key="NSNextKeyView" ref="724795384"/>
 							<bool key="NSEnabled">YES</bool>
 							<object class="NSButtonCell" key="NSCell" id="279941262">
-								<int key="NSCellFlags">-2080244224</int>
+								<int key="NSCellFlags">-2080374784</int>
 								<int key="NSCellFlags2">0</int>
 								<string key="NSContents">awefweff</string>
 								<object class="NSFont" key="NSSupport">
@@ -462,7 +502,7 @@
 									<int key="NSfFlags">1044</int>
 								</object>
 								<reference key="NSControlView" ref="837234664"/>
-								<int key="NSButtonFlags">1211912703</int>
+								<int key="NSButtonFlags">1211912448</int>
 								<int key="NSButtonFlags2">2</int>
 								<object class="NSCustomResource" key="NSNormalImage">
 									<string key="NSClassName">NSImage</string>
@@ -476,11 +516,15 @@
 								<int key="NSPeriodicDelay">200</int>
 								<int key="NSPeriodicInterval">25</int>
 							</object>
+							<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
 						</object>
 					</array>
 					<string key="NSFrameSize">{420, 131}</string>
+					<reference key="NSSuperview"/>
+					<reference key="NSWindow"/>
+					<reference key="NSNextKeyView" ref="664450443"/>
 				</object>
-				<string key="NSScreenRect">{{0, 0}, {1680, 1028}}</string>
+				<string key="NSScreenRect">{{0, 0}, {1920, 1058}}</string>
 				<string key="NSMinSize">{94, 29}</string>
 				<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
 				<bool key="NSWindowIsRestorable">YES</bool>
@@ -914,6 +958,8 @@
 				<string key="66.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<string key="67.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<string key="71.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+				<boolean value="YES" key="72.IBNSWindowAutoPositionCentersHorizontal"/>
+				<boolean value="YES" key="72.IBNSWindowAutoPositionCentersVertical"/>
 				<string key="72.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<string key="72.IBWindowTemplateEditedContentRect">{{198, 749}, {420, 131}}</string>
 				<string key="73.CustomClassName">AILocalizationButton</string>
@@ -1048,6 +1094,24 @@
 						<string key="minorKey">./Classes/ESTextAndButtonsWindowController.h</string>
 					</object>
 				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">NSObject</string>
+					<object class="NSMutableDictionary" key="actions">
+						<string key="NS.key.0">selectServiceType:</string>
+						<string key="NS.object.0">id</string>
+					</object>
+					<object class="NSMutableDictionary" key="actionInfosByName">
+						<string key="NS.key.0">selectServiceType:</string>
+						<object class="IBActionInfo" key="NS.object.0">
+							<string key="name">selectServiceType:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/NSObject.h</string>
+					</object>
+				</object>
 			</array>
 		</object>
 		<int key="IBDocument.localizationMode">0</int>
--- a/Plugins/Purple Service/AIPurpleCertificateTrustWarningAlert.m	Wed Jun 26 12:13:40 2013 +0200
+++ b/Plugins/Purple Service/AIPurpleCertificateTrustWarningAlert.m	Wed Jun 26 12:23:10 2013 +0200
@@ -20,8 +20,6 @@
 
 //#define ALWAYS_SHOW_TRUST_WARNING
 
-static NSMutableDictionary *acceptedCertificates = nil;
-
 @interface AIPurpleCertificateTrustWarningAlert ()
 - (id)initWithAccount:(AIAccount*)account
 			 hostname:(NSString*)hostname
@@ -33,10 +31,6 @@
 - (void)certificateTrustSheetDidEnd:(SFCertificateTrustPanel *)trustpanel returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo;
 @end
 
-@interface SFCertificateTrustPanel (SecretsIKnow)
-- (void)setInformativeText:(NSString *)inString;
-@end
-
 @implementation AIPurpleCertificateTrustWarningAlert
 
 + (void)displayTrustWarningAlertWithAccount:(AIAccount *)account
@@ -73,8 +67,6 @@
 			 userData:(void*)ud
 {
 	if((self = [super init])) {
-		if(!acceptedCertificates)
-			acceptedCertificates = [[NSMutableDictionary alloc] init];
 		query_cert_cb = _query_cert_cb;
 		
 		certificates = certs;
@@ -97,23 +89,6 @@
 	OSStatus err;
 	SecPolicyRef policyRef;
 	
-	CFDataRef data = SecCertificateCopyData((SecCertificateRef)CFArrayGetValueAtIndex(certificates, 0));
-	if (data) {
-		// Did we ask the user to confirm this certificate before?
-		// Note that this information is not stored on the disk, which is on purpose.
-		NSUInteger oldCertHash = [[acceptedCertificates objectForKey:hostname] unsignedIntegerValue];
-		if (oldCertHash) {
-			NSUInteger newCertHash = [(__bridge NSData *)data hash];
-			
-			if (oldCertHash == newCertHash) {
-				CFRelease(data);
-				query_cert_cb(true, userdata);
-				return;
-			}
-		}
-		CFRelease(data);
-	}
-	
 	NSAssert( UINT_MAX > [hostname length],
 					 @"More string data than libpurple can handle.  Abort." );
 	
@@ -196,17 +171,10 @@
 	//	CSSM_TP_APPLE_EVIDENCE_INFO *statusChain;
 	//	err = SecTrustGetResult(trustRef, &result, &certChain, &statusChain);
 	
-	NSString *title;
+	NSString *title = [NSString stringWithFormat:AILocalizedString(@"Adium can't verify the identity of \"%@\".", nil), hostname];
+	
 	NSString *informativeText = [NSString stringWithFormat:AILocalizedString(@"The certificate of the server %@ is not trusted, which means that the server's identity cannot be automatically verified. Do you want to continue connecting?\n\nFor more information, click \"Show Certificate\".",nil), hostname];
-	if ([trustPanel respondsToSelector:@selector(setInformativeText:)]) {
-		[trustPanel setInformativeText:informativeText];
-		title = [NSString stringWithFormat:AILocalizedString(@"Adium can't verify the identity of \"%@\".", nil), hostname];
-	} else {
-		/* We haven't seen a version of SFCertificateTrustPanel which doesn't respond to setInformativeText:, but we're using a private
-		 * call found via class-dump, so have a sane backup strategy in case it changes.
-		 */
-		title = informativeText;
-	}
+	[trustPanel setInformativeText:informativeText];
 
 	[trustPanel setAlternateButtonTitle:AILocalizedString(@"Cancel",nil)];
 	[trustPanel setShowsHelp:YES];
@@ -222,7 +190,7 @@
 					 didEndSelector:@selector(certificateTrustSheetDidEnd:returnCode:contextInfo:)
 						contextInfo:(__bridge void *)window
 							  trust:trustRef
-							message:title];	
+							message:title];
 }
 
 
@@ -236,18 +204,7 @@
 	NSWindow *parentWindow = (__bridge NSWindow *)contextInfo;
 
 	query_cert_cb(didTrustCerficate, userdata);
-	/* If the user confirmed this cert, we store this information until the app is closed so the user doesn't have to re-confirm it every time
-	 * (doing otherwise might be particularily annoying on auto-reconnect)
-	 */
-	if (didTrustCerficate) {
-		CFDataRef data = SecCertificateCopyData((SecCertificateRef)CFArrayGetValueAtIndex(certificates, 0));
-		if(data) {
-			[acceptedCertificates setObject:[NSNumber numberWithUnsignedInteger:[(__bridge NSData *)data hash]]
-									 forKey:hostname];
-			CFRelease(data);
-		}
-	}
-	
+
 	[parentWindow performClose:nil];
 }
 
--- a/Plugins/Purple Service/CBPurpleAccount.m	Wed Jun 26 12:13:40 2013 +0200
+++ b/Plugins/Purple Service/CBPurpleAccount.m	Wed Jun 26 12:23:10 2013 +0200
@@ -33,6 +33,7 @@
 #import <Adium/AIContactControllerProtocol.h>
 #import <Adium/AIContentControllerProtocol.h>
 #import <Adium/AIStatusControllerProtocol.h>
+#import <Adium/ESTextAndButtonsWindowController.h>
 #import <AIUtilities/AIAttributedStringAdditions.h>
 #import <AIUtilities/AIDictionaryAdditions.h>
 #import <AIUtilities/AIMenuAdditions.h>
@@ -2847,7 +2848,7 @@
 			[menuItemArray addObject:[NSMenuItem separatorItem]];
 		}
 		
-		NSMenuItem *showCertificateMenuItem = [[NSMenuItem alloc] initWithTitle:AILocalizedString(@"Show Server Certificate",nil)
+		NSMenuItem *showCertificateMenuItem = [[NSMenuItem alloc] initWithTitle:AILocalizedString(@"Show Encryption Details",nil)
 																		 target:self
 																		 action:@selector(showServerCertificate) 
 																  keyEquivalent:@""];
@@ -2867,10 +2868,69 @@
 {
 	CFArrayRef certificates = [[self purpleAdapter] copyServerCertificates:[self secureConnection]];
 	
-	[AIPurpleCertificateViewer displayCertificateChain:certificates forAccount:self];
+	SecCertificateRef root = NULL;
+	
+	if (CFArrayGetCount(certificates) > 0) {
+		root = (SecCertificateRef)CFArrayGetValueAtIndex(certificates, CFArrayGetCount(certificates) - 1);
+	}
+	
+	NSMutableAttributedString *details = [[NSMutableAttributedString alloc] init];
+	
+	if (root) {
+		CFStringRef issuer;
+		
+		SecCertificateCopyCommonName(root, &issuer);
+		
+		if (CFArrayGetCount(certificates) == 1) {
+			[details appendString:[NSString stringWithFormat:AILocalizedString(@"The server uses a self-signed cetificate for %@.\n\n", nil),
+								   (__bridge NSString *)issuer] withAttributes:@{}];
+		} else {
+			[details appendString:[NSString stringWithFormat:AILocalizedString(@"The server uses a cetificate issued by %@.\n\n", nil),
+								   (__bridge NSString *)issuer] withAttributes:@{}];
+		}
+		
+		CFRelease(issuer);
+	}
+	
+	NSDictionary *cipherDetails = [[self purpleAdapter] getCipherDetails:[self secureConnection]];
+	
+	if (cipherDetails) {
+		[details appendString:[NSString stringWithFormat:AILocalizedString(@"The connection is using %@ with %@ encryption, using %@ for message authentication and %@ key exchange.", nil),
+							   [cipherDetails objectForKey:@"SSL Version"],
+							   [cipherDetails objectForKey:@"Cipher Name"],
+							   [cipherDetails objectForKey:@"MAC"],
+							   [cipherDetails objectForKey:@"Key Exchange"]] withAttributes:@{}];
+	}
+	
+	ESTextAndButtonsWindowController *detailsController = [[ESTextAndButtonsWindowController alloc] initWithTitle:AILocalizedString(@"Encryption Details", nil)
+																									defaultButton:AILocalizedString(@"OK", nil)
+																								  alternateButton:AILocalizedString(@"Show Certificate", nil)
+																									  otherButton:nil
+																									  suppression:nil
+																								withMessageHeader:[NSString stringWithFormat:AILocalizedString(@"Connection details for %@", nil), self.formattedUID]
+																									   andMessage:details
+																											image:nil
+																										   target:self
+																										 userInfo:nil];
+	[detailsController showOnWindow:nil];
 	
 	CFRelease(certificates);
 }
+
+- (BOOL)textAndButtonsWindowDidEnd:(NSWindow *)window returnCode:(AITextAndButtonsReturnCode)returnCode suppression:(BOOL)suppression userInfo:(id)userInfo
+{
+	if (returnCode == AITextAndButtonsAlternateReturn) {
+		CFArrayRef certificates = [[self purpleAdapter] copyServerCertificates:[self secureConnection]];
+		
+		[AIPurpleCertificateViewer displayCertificateChain:certificates
+												forAccount:self];
+		
+		CFRelease(certificates);
+	}
+	
+	return TRUE;
+}
+
 #endif
 
 //Action of a dynamically-generated contact menu item
--- a/Plugins/Purple Service/ESIRCAccount.m	Wed Jun 26 12:13:40 2013 +0200
+++ b/Plugins/Purple Service/ESIRCAccount.m	Wed Jun 26 12:23:10 2013 +0200
@@ -371,6 +371,18 @@
 	return NO;
 }
 
+- (PurpleSslConnection *)secureConnection {
+	// this is really ugly
+	PurpleConnection *gc = purple_account_get_connection(self.purpleAccount);
+
+	return ((gc && gc->proto_data) ? ((struct irc_conn*)purple_account_get_connection(self.purpleAccount)->proto_data)->gsc : NULL);
+}
+
+- (BOOL)encrypted
+{
+	return (self.online && [self secureConnection]);
+}
+
 #pragma mark Server contacts (NickServ, ChanServ)
 /*!
  * @brief Sends a raw command to identify for the nickname
--- a/Plugins/Purple Service/ESPurpleJabberAccount.h	Wed Jun 26 12:13:40 2013 +0200
+++ b/Plugins/Purple Service/ESPurpleJabberAccount.h	Wed Jun 26 12:23:10 2013 +0200
@@ -47,7 +47,5 @@
 - (NSString *)serverSuffix;
 - (NSString *)resourceName;
 - (AMPurpleJabberAdHocServer*)adhocServer;
-- (void)setShouldVerifyCertificates:(BOOL)yesOrNo;
-- (BOOL)shouldVerifyCertificates;
 
 @end
--- a/Plugins/Purple Service/ESPurpleJabberAccount.m	Wed Jun 26 12:13:40 2013 +0200
+++ b/Plugins/Purple Service/ESPurpleJabberAccount.m	Wed Jun 26 12:23:10 2013 +0200
@@ -445,8 +445,7 @@
 {
 	AIReconnectDelayType shouldAttemptReconnect = [super shouldAttemptReconnectAfterDisconnectionError:disconnectionError];
 
-	if (([self lastDisconnectionReason] == PURPLE_CONNECTION_ERROR_CERT_OTHER_ERROR) &&
-		([self shouldVerifyCertificates])) {
+	if (([self lastDisconnectionReason] == PURPLE_CONNECTION_ERROR_CERT_OTHER_ERROR)) {
 		shouldAttemptReconnect = AIReconnectNever;
 	} else if (!finishedConnectProcess && ![password length] &&
 			   (disconnectionError &&
@@ -850,14 +849,6 @@
 	return ((gc && gc->proto_data) ? ((JabberStream*)purple_account_get_connection(self.purpleAccount)->proto_data)->gsc : NULL);
 }
 
-- (void)setShouldVerifyCertificates:(BOOL)yesOrNo {
-	[self setPreference:[NSNumber numberWithBool:yesOrNo] forKey:KEY_JABBER_VERIFY_CERTS group:GROUP_ACCOUNT_STATUS];
-}
-
-- (BOOL)shouldVerifyCertificates {
-	return [[self preferenceForKey:KEY_JABBER_VERIFY_CERTS group:GROUP_ACCOUNT_STATUS] boolValue];
-}
-
 - (NSArray *)accountActionMenuItems {
 	AILog(@"Getting accountActionMenuItems for %@",self);
 	NSMutableArray *menu = [[NSMutableArray alloc] init];
--- a/Plugins/Purple Service/Resources/en.lproj/ESPurpleJabberAccountView.xib	Wed Jun 26 12:13:40 2013 +0200
+++ b/Plugins/Purple Service/Resources/en.lproj/ESPurpleJabberAccountView.xib	Wed Jun 26 12:23:10 2013 +0200
@@ -2,10 +2,10 @@
 <archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
 	<data>
 		<int key="IBDocument.SystemTarget">1060</int>
-		<string key="IBDocument.SystemVersion">12C60</string>
+		<string key="IBDocument.SystemVersion">12D78</string>
 		<string key="IBDocument.InterfaceBuilderVersion">3084</string>
-		<string key="IBDocument.AppKitVersion">1187.34</string>
-		<string key="IBDocument.HIToolboxVersion">625.00</string>
+		<string key="IBDocument.AppKitVersion">1187.37</string>
+		<string key="IBDocument.HIToolboxVersion">626.00</string>
 		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
 			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
 			<string key="NS.object.0">3084</string>
@@ -229,14 +229,15 @@
 				<string key="NSExtension">NSResponder</string>
 			</object>
 			<object class="NSCustomView" id="881248978">
-				<nil key="NSNextResponder"/>
+				<reference key="NSNextResponder"/>
 				<int key="NSvFlags">256</int>
 				<array class="NSMutableArray" key="NSSubviews">
 					<object class="NSButton" id="611926856">
 						<reference key="NSNextResponder" ref="881248978"/>
 						<int key="NSvFlags">264</int>
-						<string key="NSFrame">{{160, 113}, {212, 18}}</string>
+						<string key="NSFrame">{{160, 97}, {212, 18}}</string>
 						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
 						<bool key="NSEnabled">YES</bool>
 						<object class="NSButtonCell" key="NSCell" id="685121442">
 							<int key="NSCellFlags">67108864</int>
@@ -258,8 +259,9 @@
 					<object class="NSButton" id="1069823102">
 						<reference key="NSNextResponder" ref="881248978"/>
 						<int key="NSvFlags">264</int>
-						<string key="NSFrame">{{160, 93}, {143, 18}}</string>
+						<string key="NSFrame">{{160, 77}, {143, 18}}</string>
 						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
 						<bool key="NSEnabled">YES</bool>
 						<object class="NSButtonCell" key="NSCell" id="866512058">
 							<int key="NSCellFlags">67108864</int>
@@ -281,8 +283,9 @@
 					<object class="NSButton" id="767871570">
 						<reference key="NSNextResponder" ref="881248978"/>
 						<int key="NSvFlags">264</int>
-						<string key="NSFrame">{{160, 160}, {211, 18}}</string>
+						<string key="NSFrame">{{160, 144}, {211, 18}}</string>
 						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
 						<bool key="NSEnabled">YES</bool>
 						<object class="NSButtonCell" key="NSCell" id="355466928">
 							<int key="NSCellFlags">67108864</int>
@@ -304,8 +307,9 @@
 					<object class="NSTextField" id="23953802">
 						<reference key="NSNextResponder" ref="881248978"/>
 						<int key="NSvFlags">264</int>
-						<string key="NSFrame">{{162, 283}, {240, 22}}</string>
+						<string key="NSFrame">{{162, 267}, {240, 22}}</string>
 						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
 						<bool key="NSEnabled">YES</bool>
 						<object class="NSTextFieldCell" key="NSCell" id="557983517">
 							<int key="NSCellFlags">-1804599231</int>
@@ -322,8 +326,9 @@
 					<object class="NSTextField" id="795157005">
 						<reference key="NSNextResponder" ref="881248978"/>
 						<int key="NSvFlags">264</int>
-						<string key="NSFrame">{{17, 285}, {140, 17}}</string>
+						<string key="NSFrame">{{17, 269}, {140, 17}}</string>
 						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
 						<bool key="NSEnabled">YES</bool>
 						<object class="NSTextFieldCell" key="NSCell" id="1046731873">
 							<int key="NSCellFlags">67108864</int>
@@ -339,8 +344,9 @@
 					<object class="NSTextField" id="993950755">
 						<reference key="NSNextResponder" ref="881248978"/>
 						<int key="NSvFlags">264</int>
-						<string key="NSFrame">{{162, 311}, {240, 22}}</string>
+						<string key="NSFrame">{{162, 295}, {240, 22}}</string>
 						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
 						<bool key="NSEnabled">YES</bool>
 						<object class="NSTextFieldCell" key="NSCell" id="897297612">
 							<int key="NSCellFlags">-1804599231</int>
@@ -357,8 +363,9 @@
 					<object class="NSTextField" id="416544706">
 						<reference key="NSNextResponder" ref="881248978"/>
 						<int key="NSvFlags">264</int>
-						<string key="NSFrame">{{17, 313}, {140, 17}}</string>
+						<string key="NSFrame">{{17, 297}, {140, 17}}</string>
 						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
 						<bool key="NSEnabled">YES</bool>
 						<object class="NSTextFieldCell" key="NSCell" id="675922156">
 							<int key="NSCellFlags">67108864</int>
@@ -374,8 +381,9 @@
 					<object class="NSTextField" id="223022732">
 						<reference key="NSNextResponder" ref="881248978"/>
 						<int key="NSvFlags">264</int>
-						<string key="NSFrame">{{162, 253}, {240, 22}}</string>
+						<string key="NSFrame">{{162, 237}, {240, 22}}</string>
 						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
 						<bool key="NSEnabled">YES</bool>
 						<object class="NSTextFieldCell" key="NSCell" id="483716033">
 							<int key="NSCellFlags">-1804599231</int>
@@ -392,8 +400,9 @@
 					<object class="NSTextField" id="1071692987">
 						<reference key="NSNextResponder" ref="881248978"/>
 						<int key="NSvFlags">264</int>
-						<string key="NSFrame">{{17, 255}, {140, 17}}</string>
+						<string key="NSFrame">{{17, 239}, {140, 17}}</string>
 						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
 						<bool key="NSEnabled">YES</bool>
 						<object class="NSTextFieldCell" key="NSCell" id="275398507">
 							<int key="NSCellFlags">67108864</int>
@@ -409,8 +418,9 @@
 					<object class="NSTextField" id="979941359">
 						<reference key="NSNextResponder" ref="881248978"/>
 						<int key="NSvFlags">264</int>
-						<string key="NSFrame">{{329, 223}, {73, 22}}</string>
+						<string key="NSFrame">{{329, 207}, {73, 22}}</string>
 						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
 						<bool key="NSEnabled">YES</bool>
 						<object class="NSTextFieldCell" key="NSCell" id="474262400">
 							<int key="NSCellFlags">-1804599231</int>
@@ -427,8 +437,9 @@
 					<object class="NSTextField" id="198507305">
 						<reference key="NSNextResponder" ref="881248978"/>
 						<int key="NSvFlags">264</int>
-						<string key="NSFrame">{{286, 225}, {38, 17}}</string>
+						<string key="NSFrame">{{286, 209}, {38, 17}}</string>
 						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
 						<bool key="NSEnabled">YES</bool>
 						<object class="NSTextFieldCell" key="NSCell" id="937801845">
 							<int key="NSCellFlags">67108864</int>
@@ -444,8 +455,9 @@
 					<object class="NSTextField" id="56382938">
 						<reference key="NSNextResponder" ref="881248978"/>
 						<int key="NSvFlags">264</int>
-						<string key="NSFrame">{{162, 223}, {119, 22}}</string>
+						<string key="NSFrame">{{162, 207}, {119, 22}}</string>
 						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
 						<bool key="NSEnabled">YES</bool>
 						<object class="NSTextFieldCell" key="NSCell" id="27008867">
 							<int key="NSCellFlags">-1804599231</int>
@@ -462,8 +474,9 @@
 					<object class="NSTextField" id="164156726">
 						<reference key="NSNextResponder" ref="881248978"/>
 						<int key="NSvFlags">264</int>
-						<string key="NSFrame">{{17, 225}, {140, 17}}</string>
+						<string key="NSFrame">{{17, 209}, {140, 17}}</string>
 						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
 						<bool key="NSEnabled">YES</bool>
 						<object class="NSTextFieldCell" key="NSCell" id="820922822">
 							<int key="NSCellFlags">67108864</int>
@@ -479,8 +492,9 @@
 					<object class="NSTextField" id="1036357624">
 						<reference key="NSNextResponder" ref="881248978"/>
 						<int key="NSvFlags">264</int>
-						<string key="NSFrame">{{17, 161}, {140, 17}}</string>
+						<string key="NSFrame">{{17, 145}, {140, 17}}</string>
 						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
 						<bool key="NSEnabled">YES</bool>
 						<object class="NSTextFieldCell" key="NSCell" id="260175574">
 							<int key="NSCellFlags">67108864</int>
@@ -496,8 +510,9 @@
 					<object class="NSTextField" id="835653998">
 						<reference key="NSNextResponder" ref="881248978"/>
 						<int key="NSvFlags">264</int>
-						<string key="NSFrame">{{17, 114}, {140, 17}}</string>
+						<string key="NSFrame">{{17, 98}, {140, 17}}</string>
 						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
 						<bool key="NSEnabled">YES</bool>
 						<object class="NSTextFieldCell" key="NSCell" id="230227050">
 							<int key="NSCellFlags">67108864</int>
@@ -513,8 +528,9 @@
 					<object class="NSTextField" id="909698960">
 						<reference key="NSNextResponder" ref="881248978"/>
 						<int key="NSvFlags">256</int>
-						<string key="NSFrame">{{43, 192}, {114, 17}}</string>
+						<string key="NSFrame">{{43, 176}, {114, 17}}</string>
 						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
 						<bool key="NSEnabled">YES</bool>
 						<object class="NSTextFieldCell" key="NSCell" id="1007024952">
 							<int key="NSCellFlags">67108864</int>
@@ -530,8 +546,9 @@
 					<object class="NSTextField" id="348268130">
 						<reference key="NSNextResponder" ref="881248978"/>
 						<int key="NSvFlags">256</int>
-						<string key="NSFrame">{{162, 189}, {61, 23}}</string>
+						<string key="NSFrame">{{162, 173}, {61, 23}}</string>
 						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
 						<bool key="NSEnabled">YES</bool>
 						<object class="NSTextFieldCell" key="NSCell" id="1041524998">
 							<int key="NSCellFlags">-1804599231</int>
@@ -548,8 +565,9 @@
 					<object class="NSTextField" id="463018609">
 						<reference key="NSNextResponder" ref="881248978"/>
 						<int key="NSvFlags">256</int>
-						<string key="NSFrame">{{233, 192}, {91, 17}}</string>
+						<string key="NSFrame">{{233, 176}, {91, 17}}</string>
 						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
 						<bool key="NSEnabled">YES</bool>
 						<object class="NSTextFieldCell" key="NSCell" id="277652672">
 							<int key="NSCellFlags">67108864</int>
@@ -565,8 +583,9 @@
 					<object class="NSTextField" id="400793057">
 						<reference key="NSNextResponder" ref="881248978"/>
 						<int key="NSvFlags">256</int>
-						<string key="NSFrame">{{329, 188}, {73, 24}}</string>
+						<string key="NSFrame">{{329, 172}, {73, 24}}</string>
 						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
 						<bool key="NSEnabled">YES</bool>
 						<object class="NSTextFieldCell" key="NSCell" id="481365549">
 							<int key="NSCellFlags">-1804599231</int>
@@ -583,8 +602,9 @@
 					<object class="NSPopUpButton" id="86797681">
 						<reference key="NSNextResponder" ref="881248978"/>
 						<int key="NSvFlags">268</int>
-						<string key="NSFrame">{{159, 23}, {198, 26}}</string>
+						<string key="NSFrame">{{159, 27}, {198, 26}}</string>
 						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
 						<bool key="NSEnabled">YES</bool>
 						<object class="NSPopUpButtonCell" key="NSCell" id="686819324">
 							<int key="NSCellFlags">-2080374720</int>
@@ -673,8 +693,9 @@
 					<object class="NSTextField" id="129057903">
 						<reference key="NSNextResponder" ref="881248978"/>
 						<int key="NSvFlags">256</int>
-						<string key="NSFrame">{{1, 29}, {156, 17}}</string>
+						<string key="NSFrame">{{1, 33}, {156, 17}}</string>
 						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
 						<bool key="NSEnabled">YES</bool>
 						<object class="NSTextFieldCell" key="NSCell" id="21353665">
 							<int key="NSCellFlags">67108864</int>
@@ -690,8 +711,9 @@
 					<object class="NSTextField" id="520236742">
 						<reference key="NSNextResponder" ref="881248978"/>
 						<int key="NSvFlags">268</int>
-						<string key="NSFrame">{{68, 2}, {142, 17}}</string>
+						<string key="NSFrame">{{68, 6}, {142, 17}}</string>
 						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
 						<bool key="NSEnabled">YES</bool>
 						<object class="NSTextFieldCell" key="NSCell" id="414517125">
 							<int key="NSCellFlags">67108864</int>
@@ -707,8 +729,9 @@
 					<object class="NSComboBox" id="71054177">
 						<reference key="NSNextResponder" ref="881248978"/>
 						<int key="NSvFlags">266</int>
-						<string key="NSFrame">{{215, -3}, {190, 26}}</string>
+						<string key="NSFrame">{{215, 1}, {190, 26}}</string>
 						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
 						<bool key="NSEnabled">YES</bool>
 						<object class="NSComboBoxCell" key="NSCell" id="863874436">
 							<int key="NSCellFlags">342884416</int>
@@ -806,8 +829,9 @@
 					<object class="NSButton" id="755212957">
 						<reference key="NSNextResponder" ref="881248978"/>
 						<int key="NSvFlags">264</int>
-						<string key="NSFrame">{{160, 73}, {143, 18}}</string>
+						<string key="NSFrame">{{160, 57}, {143, 18}}</string>
 						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
 						<bool key="NSEnabled">YES</bool>
 						<object class="NSButtonCell" key="NSCell" id="927025696">
 							<int key="NSCellFlags">67108864</int>
@@ -826,34 +850,12 @@
 						</object>
 						<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
 					</object>
-					<object class="NSButton" id="1011876758">
-						<reference key="NSNextResponder" ref="881248978"/>
-						<int key="NSvFlags">264</int>
-						<string key="NSFrame">{{160, 53}, {244, 18}}</string>
-						<reference key="NSSuperview" ref="881248978"/>
-						<bool key="NSEnabled">YES</bool>
-						<object class="NSButtonCell" key="NSCell" id="883625994">
-							<int key="NSCellFlags">67108864</int>
-							<int key="NSCellFlags2">0</int>
-							<string key="NSContents">Do strict certificate checks</string>
-							<reference key="NSSupport" ref="745543233"/>
-							<reference key="NSControlView" ref="1011876758"/>
-							<int key="NSButtonFlags">1211912448</int>
-							<int key="NSButtonFlags2">2</int>
-							<reference key="NSNormalImage" ref="948923301"/>
-							<reference key="NSAlternateImage" ref="10299655"/>
-							<string key="NSAlternateContents"/>
-							<string key="NSKeyEquivalent"/>
-							<int key="NSPeriodicDelay">200</int>
-							<int key="NSPeriodicInterval">25</int>
-						</object>
-						<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
-					</object>
 					<object class="NSTextField" id="13153345">
 						<reference key="NSNextResponder" ref="881248978"/>
 						<int key="NSvFlags">268</int>
-						<string key="NSFrame">{{83, 138}, {74, 17}}</string>
+						<string key="NSFrame">{{83, 122}, {74, 17}}</string>
 						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
 						<bool key="NSEnabled">YES</bool>
 						<object class="NSTextFieldCell" key="NSCell" id="499131302">
 							<int key="NSCellFlags">68157504</int>
@@ -869,8 +871,9 @@
 					<object class="NSButton" id="753162121">
 						<reference key="NSNextResponder" ref="881248978"/>
 						<int key="NSvFlags">268</int>
-						<string key="NSFrame">{{160, 137}, {188, 18}}</string>
+						<string key="NSFrame">{{160, 121}, {188, 18}}</string>
 						<reference key="NSSuperview" ref="881248978"/>
+						<reference key="NSWindow"/>
 						<bool key="NSEnabled">YES</bool>
 						<object class="NSButtonCell" key="NSCell" id="246744812">
 							<int key="NSCellFlags">67108864</int>
@@ -890,7 +893,9 @@
 						<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
 					</object>
 				</array>
-				<string key="NSFrameSize">{424, 333}</string>
+				<string key="NSFrameSize">{424, 317}</string>
+				<reference key="NSSuperview"/>
+				<reference key="NSWindow"/>
 				<string key="NSClassName">NSView</string>
 				<string key="NSExtension">NSResponder</string>
 			</object>
@@ -1646,14 +1651,6 @@
 					<int key="connectionID">286</int>
 				</object>
 				<object class="IBConnectionRecord">
-					<object class="IBOutletConnection" key="connection">
-						<string key="label">checkBox_checkCertificates</string>
-						<reference key="source" ref="393462939"/>
-						<reference key="destination" ref="1011876758"/>
-					</object>
-					<int key="connectionID">330</int>
-				</object>
-				<object class="IBConnectionRecord">
 					<object class="IBActionConnection" key="connection">
 						<string key="label">changedPreference:</string>
 						<reference key="source" ref="393462939"/>
@@ -2093,7 +2090,6 @@
 							<reference ref="520236742"/>
 							<reference ref="71054177"/>
 							<reference ref="755212957"/>
-							<reference ref="1011876758"/>
 							<reference ref="13153345"/>
 							<reference ref="753162121"/>
 							<reference ref="223022732"/>
@@ -2258,14 +2254,6 @@
 						<reference key="parent" ref="881248978"/>
 					</object>
 					<object class="IBObjectRecord">
-						<int key="objectID">328</int>
-						<reference key="object" ref="1011876758"/>
-						<array class="NSMutableArray" key="children">
-							<reference ref="883625994"/>
-						</array>
-						<reference key="parent" ref="881248978"/>
-					</object>
-					<object class="IBObjectRecord">
 						<int key="objectID">527</int>
 						<reference key="object" ref="13153345"/>
 						<array class="NSMutableArray" key="children">
@@ -2578,11 +2566,6 @@
 						<reference key="parent" ref="755212957"/>
 					</object>
 					<object class="IBObjectRecord">
-						<int key="objectID">616</int>
-						<reference key="object" ref="883625994"/>
-						<reference key="parent" ref="1011876758"/>
-					</object>
-					<object class="IBObjectRecord">
 						<int key="objectID">617</int>
 						<reference key="object" ref="499131302"/>
 						<reference key="parent" ref="13153345"/>
@@ -2808,7 +2791,6 @@
 				<string key="279.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<string key="280.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<string key="285.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="328.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<string key="332.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<string key="333.CustomClassName">AILocalizationButton</string>
 				<string key="333.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -2871,7 +2853,6 @@
 				<string key="613.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<string key="614.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<string key="615.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="616.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<string key="617.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<string key="618.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
 				<string key="619.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -2939,14 +2920,12 @@
 						<string key="label_server">NSTextField</string>
 						<string key="label_typing">NSTextField</string>
 						<string key="popUp_encryption">NSPopUpButton</string>
-						<string key="progressIndicator_registering">NSProgressIndicator</string>
 						<string key="textField_accountUID">NSTextField</string>
 						<string key="textField_accountUIDLabel">NSTextField</string>
 						<string key="textField_alias">NSTextField</string>
 						<string key="textField_connectHost">NSTextField</string>
 						<string key="textField_connectPort">NSTextField</string>
 						<string key="textField_password">NSTextField</string>
-						<string key="textField_registering">NSTextField</string>
 						<string key="view_auxiliaryTabView">NSTabView</string>
 						<string key="view_options">NSView</string>
 						<string key="view_privacy">NSView</string>
@@ -2994,10 +2973,6 @@
 							<string key="name">popUp_encryption</string>
 							<string key="candidateClassName">NSPopUpButton</string>
 						</object>
-						<object class="IBToOneOutletInfo" key="progressIndicator_registering">
-							<string key="name">progressIndicator_registering</string>
-							<string key="candidateClassName">NSProgressIndicator</string>
-						</object>
 						<object class="IBToOneOutletInfo" key="textField_accountUID">
 							<string key="name">textField_accountUID</string>
 							<string key="candidateClassName">NSTextField</string>
@@ -3022,10 +2997,6 @@
 							<string key="name">textField_password</string>
 							<string key="candidateClassName">NSTextField</string>
 						</object>
-						<object class="IBToOneOutletInfo" key="textField_registering">
-							<string key="name">textField_registering</string>
-							<string key="candidateClassName">NSTextField</string>
-						</object>
 						<object class="IBToOneOutletInfo" key="view_auxiliaryTabView">
 							<string key="name">view_auxiliaryTabView</string>
 							<string key="candidateClassName">NSTabView</string>
--- a/Plugins/Purple Service/SLPurpleCocoaAdapter.h	Wed Jun 26 12:13:40 2013 +0200
+++ b/Plugins/Purple Service/SLPurpleCocoaAdapter.h	Wed Jun 26 12:23:10 2013 +0200
@@ -99,6 +99,7 @@
 
 #ifdef HAVE_CDSA
 - (CFArrayRef)copyServerCertificates:(PurpleSslConnection*)gsc;
+- (NSDictionary *)getCipherDetails:(PurpleSslConnection*)gsc;
 #endif
 @end
 
--- a/Plugins/Purple Service/SLPurpleCocoaAdapter.m	Wed Jun 26 12:13:40 2013 +0200
+++ b/Plugins/Purple Service/SLPurpleCocoaAdapter.m	Wed Jun 26 12:23:10 2013 +0200
@@ -1627,6 +1627,24 @@
 	
 	return result;
 }
+- (NSDictionary *)getCipherDetails:(PurpleSslConnection*)gsc {
+	PurplePlugin *cdsa_plugin = purple_plugins_find_with_name("CDSA");
+	if(!cdsa_plugin)
+		return nil;
+	const char *ssl_info;
+	const char *name;
+	const char *mac;
+	const char *key_exchange;
+	gboolean ok = NO;
+	purple_plugin_ipc_call(cdsa_plugin, "get_cipher_details", &ok, gsc, &ssl_info, &name, &mac, &key_exchange);
+	
+	if (!ok) return nil;
+	
+	return @{ @"SSL Version": [NSString stringWithUTF8String:ssl_info],
+		   @"Cipher Name": [NSString stringWithUTF8String:name],
+		   @"MAC": [NSString stringWithUTF8String:mac],
+		   @"Key Exchange": [NSString stringWithUTF8String:key_exchange] };
+}
 #endif
 
 @end
--- a/Plugins/Purple Service/adiumPurpleCertificateTrustWarning.m	Wed Jun 26 12:13:40 2013 +0200
+++ b/Plugins/Purple Service/adiumPurpleCertificateTrustWarning.m	Wed Jun 26 12:23:10 2013 +0200
@@ -22,23 +22,21 @@
 
 void adium_query_cert_chain(PurpleSslConnection *gsc, const char *hostname, CFArrayRef certs, void (*query_cert_cb)(gboolean trusted, void *userdata), void *userdata) {
 	@autoreleasepool {
-		
-		// only the jabber service supports this right now
-		for (ESPurpleJabberAccount *account in [adium.accountController accountsCompatibleWithService:[adium.accountController firstServiceWithServiceID:@"Jabber"]]) {
-			if([account secureConnection] == gsc) {
-				if([account shouldVerifyCertificates])
+	
+		for (CBPurpleAccount *account in [adium.accountController accounts]) {
+			if([account respondsToSelector:@selector(secureConnection)]) {
+				if ([account secureConnection] == gsc) {
 					[AIPurpleCertificateTrustWarningAlert displayTrustWarningAlertWithAccount:account
 																					 hostname:[NSString stringWithUTF8String:hostname]
 																				 certificates:certs
 																			   resultCallback:query_cert_cb
 																					 userData:userdata];
-				else
-					query_cert_cb(true, userdata);
-				return;
+					return;
+				}
 			}
+			// default fallback
+			query_cert_cb(true, userdata);
+			
 		}
-		// default fallback
-		query_cert_cb(true, userdata);
-		
 	}
 }
--- a/Plugins/Purple Service/libpurple_extensions/ssl-cdsa.c	Wed Jun 26 12:13:40 2013 +0200
+++ b/Plugins/Purple Service/libpurple_extensions/ssl-cdsa.c	Wed Jun 26 12:23:10 2013 +0200
@@ -45,6 +45,11 @@
 
 static GList *connections = NULL;
 
+static const char* SSLVersionToString(SSLProtocol protocol);
+static const char* SSLKeyExchangeName(SSLCipherSuite suite);
+static const char* SSLCipherName(SSLCipherSuite suite);
+static const char* SSLMACName(SSLCipherSuite suite);
+
 #define PURPLE_SSL_CDSA_DATA(gsc) ((PurpleSslCDSAData *)gsc->private_data)
 #define PURPLE_SSL_CONNECTION_IS_VALID(gsc) (g_list_find(connections, (gsc)) != NULL)
 
@@ -168,7 +173,23 @@
 		purple_ssl_close(gsc);
 		return;
 	}
+	
+	SSLCipherSuite cipher;
+	SSLProtocol protocol;
+	
+	err = SSLGetNegotiatedCipher(cdsa_data->ssl_ctx, &cipher);
+	
+	if (err == noErr) {
+		err = SSLGetNegotiatedProtocolVersion(cdsa_data->ssl_ctx, &protocol);
 		
+		purple_debug_info("cdsa", "Your connection is using %s with %s encryption, using %s for message authentication and %s key exchange (%X).\n",
+						  SSLVersionToString(protocol),
+						  SSLCipherName(cipher),
+						  SSLMACName(cipher),
+						  SSLKeyExchangeName(cipher),
+						  cipher);
+	}
+	
 	purple_input_remove(cdsa_data->handshake_handler);
 	cdsa_data->handshake_handler = 0;
 	
@@ -545,12 +566,29 @@
 
 static gboolean copy_certificate_chain(PurpleSslConnection *gsc /* IN */, CFArrayRef *result /* OUT */) {
 	PurpleSslCDSAData *cdsa_data = PURPLE_SSL_CDSA_DATA(gsc);
-#if MAC_OS_X_VERSION_10_5 > MAC_OS_X_VERSION_MAX_ALLOWED
-	// this function was declared deprecated in 10.5
-	return SSLGetPeerCertificates(cdsa_data->ssl_ctx, result) == noErr;
-#else
 	return SSLCopyPeerCertificates(cdsa_data->ssl_ctx, result) == noErr;
-#endif
+}
+
+static gboolean get_cipher_details(PurpleSslConnection *gsc /* IN */, const char **ssl_info /* OUT */, const char **name /* OUT */, const char **mac /* OUT */, const char **key_exchange /* OUT */) {
+	PurpleSslCDSAData *cdsa_data = PURPLE_SSL_CDSA_DATA(gsc);
+	OSStatus err;
+	SSLCipherSuite cipher;
+	SSLProtocol protocol;
+	
+	err = SSLGetNegotiatedCipher(cdsa_data->ssl_ctx, &cipher);
+	
+	if (err != noErr) return FALSE;
+	
+	err = SSLGetNegotiatedProtocolVersion(cdsa_data->ssl_ctx, &protocol);
+	
+	if (err != noErr) return FALSE;
+	
+	*ssl_info = SSLVersionToString(protocol);
+	*name = SSLCipherName(cipher);
+	*mac = SSLMACName(cipher);
+	*key_exchange = SSLKeyExchangeName(cipher);
+	
+	return TRUE;
 }
 
 static PurpleSslOps ssl_ops = {
@@ -589,6 +627,14 @@
 							   purple_value_new(PURPLE_TYPE_BOOLEAN),
 							   2, purple_value_new(PURPLE_TYPE_POINTER), purple_value_new(PURPLE_TYPE_POINTER));
 	
+	purple_plugin_ipc_register(plugin,
+							   "get_cipher_details",
+							   PURPLE_CALLBACK(get_cipher_details),
+							   purple_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_POINTER,
+							   purple_value_new(PURPLE_TYPE_BOOLEAN),
+							   5, purple_value_new(PURPLE_TYPE_POINTER), purple_value_new(PURPLE_TYPE_POINTER),
+							   purple_value_new(PURPLE_TYPE_POINTER), purple_value_new(PURPLE_TYPE_POINTER), purple_value_new(PURPLE_TYPE_POINTER));
+	
 	return (TRUE);
 #else
 	return (FALSE);
@@ -646,156 +692,316 @@
 
 PURPLE_INIT_PLUGIN(ssl_cdsa, init_plugin, info)
 
-
 #pragma mark -
 
-/*
- Method: ssl_cdsa_set_enabled_ciphers
- Source: SSLExample/sslViewer.cpp
- Contains:   SSL viewer tool, SecureTransport / OS X version.
- 
- Copyright:  © Copyright 2002 Apple Computer, Inc. All rights reserved.
- 
- Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple Computer, Inc.
- ("Apple") in consideration of your agreement to the following terms, and your
- use, installation, modification or redistribution of this Apple software
- constitutes acceptance of these terms.  If you do not agree with these terms,
- please do not use, install, modify or redistribute this Apple software.
- 
- In consideration of your agreement to abide by the following terms, and subject
- to these terms, Apple grants you a personal, non-exclusive license, under AppleÕs
- copyrights in this original Apple software (the "Apple Software"), to use,
- reproduce, modify and redistribute the Apple Software, with or without
- modifications, in source and/or binary forms; provided that if you redistribute
- the Apple Software in its entirety and without modifications, you must retain
- this notice and the following text and disclaimers in all such redistributions of
- the Apple Software.  Neither the name, trademarks, service marks or logos of
- Apple Computer, Inc. may be used to endorse or promote products derived from the
- Apple Software without specific prior written permission from Apple.  Except as
- expressly stated in this notice, no other rights or licenses, express or implied,
- are granted by Apple herein, including but not limited to any patent rights that
- may be infringed by your derivative works or by other works in which the Apple
- Software may be incorporated.
- 
- The Apple Software is provided by Apple on an "AS IS" basis.  APPLE MAKES NO
- WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
- WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN
- COMBINATION WITH YOUR PRODUCTS.
- 
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR
- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION
- OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT
- (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN
- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
+// The following code is (loosely) based on code taken from Chromium.
+// https://code.google.com/p/chromium/codesearch#chromium/src/net/ssl/ssl_cipher_suite_names.cc&sq=package:chromium
 
-/*
- * Return string representation of SecureTransport-related OSStatus.
- */
-static const char *ssl_cdsa_sslGetSSLErrString(OSStatus err)
-{
-	static char noErrStr[20];
-    
-	switch(err) {
-		case noErr:                         return "noErr";
-            /*
-		case memFullErr:                    return "memFullErr";
-		case paramErr:                      return "paramErr";
-		case unimpErr:                      return "unimpErr";
-		case ioErr:                         return "ioErr";
-		case badReqErr:                     return "badReqErr";
-             */
-            /* SSL errors */
-		case errSSLProtocol:                return "errSSLProtocol";
-		case errSSLNegotiation:             return "errSSLNegotiation";
-		case errSSLFatalAlert:              return "errSSLFatalAlert";
-		case errSSLWouldBlock:              return "errSSLWouldBlock";
-		case errSSLSessionNotFound:         return "errSSLSessionNotFound";
-		case errSSLClosedGraceful:          return "errSSLClosedGraceful";
-		case errSSLClosedAbort:             return "errSSLClosedAbort";
-		case errSSLXCertChainInvalid:       return "errSSLXCertChainInvalid";
-		case errSSLBadCert:                 return "errSSLBadCert";
-		case errSSLCrypto:                  return "errSSLCrypto";
-		case errSSLInternal:                return "errSSLInternal";
-		case errSSLModuleAttach:            return "errSSLModuleAttach";
-		case errSSLUnknownRootCert:         return "errSSLUnknownRootCert";
-		case errSSLNoRootCert:              return "errSSLNoRootCert";
-		case errSSLCertExpired:             return "errSSLCertExpired";
-		case errSSLCertNotYetValid:         return "errSSLCertNotYetValid";
-		case errSSLClosedNoNotify:          return "errSSLClosedNoNotify";
-		case errSSLBufferOverflow:          return "errSSLBufferOverflow";
-		case errSSLBadCipherSuite:          return "errSSLBadCipherSuite";
-            /* TLS/Panther addenda */
-		case errSSLPeerUnexpectedMsg:       return "errSSLPeerUnexpectedMsg";
-		case errSSLPeerBadRecordMac:        return "errSSLPeerBadRecordMac";
-		case errSSLPeerDecryptionFail:      return "errSSLPeerDecryptionFail";
-		case errSSLPeerRecordOverflow:      return "errSSLPeerRecordOverflow";
-		case errSSLPeerDecompressFail:      return "errSSLPeerDecompressFail";
-		case errSSLPeerHandshakeFail:       return "errSSLPeerHandshakeFail";
-		case errSSLPeerBadCert:             return "errSSLPeerBadCert";
-		case errSSLPeerUnsupportedCert:     return "errSSLPeerUnsupportedCert";
-		case errSSLPeerCertRevoked:         return "errSSLPeerCertRevoked";
-		case errSSLPeerCertExpired:         return "errSSLPeerCertExpired";
-		case errSSLPeerCertUnknown:         return "errSSLPeerCertUnknown";
-		case errSSLIllegalParam:            return "errSSLIllegalParam";
-		case errSSLPeerUnknownCA:           return "errSSLPeerUnknownCA";
-		case errSSLPeerAccessDenied:        return "errSSLPeerAccessDenied";
-		case errSSLPeerDecodeError:         return "errSSLPeerDecodeError";
-		case errSSLPeerDecryptError:        return "errSSLPeerDecryptError";
-		case errSSLPeerExportRestriction:   return "errSSLPeerExportRestriction";
-		case errSSLPeerProtocolVersion:     return "errSSLPeerProtocolVersion";
-		case errSSLPeerInsufficientSecurity:return "errSSLPeerInsufficientSecurity";
-		case errSSLPeerInternalError:       return "errSSLPeerInternalError";
-		case errSSLPeerUserCancelled:       return "errSSLPeerUserCancelled";
-		case errSSLPeerNoRenegotiation:     return "errSSLPeerNoRenegotiation";
-		case errSSLHostNameMismatch:        return "errSSLHostNameMismatch";
-		case errSSLConnectionRefused:       return "errSSLConnectionRefused";
-		case errSSLDecryptionFail:          return "errSSLDecryptionFail";
-		case errSSLBadRecordMac:            return "errSSLBadRecordMac";
-		case errSSLRecordOverflow:          return "errSSLRecordOverflow";
-		case errSSLBadConfiguration:        return "errSSLBadConfiguration";
-            
-            /* some from the Sec layer */
-		case errSecNotAvailable:            return "errSecNotAvailable";
-		case errSecDuplicateItem:           return "errSecDuplicateItem";
-		case errSecItemNotFound:            return "errSecItemNotFound";
-#if TARGET_OS_MAC
-		case errSecReadOnly:                return "errSecReadOnly";
-		case errSecAuthFailed:              return "errSecAuthFailed";
-		case errSecNoSuchKeychain:          return "errSecNoSuchKeychain";
-		case errSecInvalidKeychain:         return "errSecInvalidKeychain";
-		case errSecNoSuchAttr:              return "errSecNoSuchAttr";
-		case errSecInvalidItemRef:          return "errSecInvalidItemRef";
-		case errSecInvalidSearchRef:        return "errSecInvalidSearchRef";
-		case errSecNoSuchClass:             return "errSecNoSuchClass";
-		case errSecNoDefaultKeychain:       return "errSecNoDefaultKeychain";
-		case errSecWrongSecVersion:         return "errSecWrongSecVersion";
-		case errSecInvalidTrustSettings:    return "errSecInvalidTrustSettings";
-		case errSecNoTrustSettings:         return "errSecNoTrustSettings";
-#endif
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//    * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//    * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//    * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+static const char* SSLVersionToString(SSLProtocol protocol) {
+	switch (protocol) {
+		case kSSLProtocol2:
+			return "SSL 2.0";
+		case kSSLProtocol3:
+			return "SSL 3.0";
+		case kTLSProtocol1:
+			return "TLS 1.0";
+		case kTLSProtocol11:
+			return "TLS 1.1";
+		case kTLSProtocol12:
+			return "TLS 1.2";
+		case kDTLSProtocol1:
+			return "DTLS 1.0";
 		default:
-#if 0
-			if (err < (CSSM_BASE_ERROR +
-                       (CSSM_ERRORCODE_MODULE_EXTENT * 8)))
-			{
-				/* assume CSSM error */
-				return cssmErrToStr(err);
-			}
-			else
-#endif
-			{
-				sprintf(noErrStr, "Unknown (%d)", (unsigned)err);
-				return noErrStr;
-			}
+			return "???";
 	}
 }
 
-static void ssl_cdsa_printSslErrStr(
-                    const char 	*op,
-                    OSStatus 	err)
-{
-	purple_debug_error("cdsa", "%s: %s\n", op, ssl_cdsa_sslGetSSLErrString(err));
+typedef struct {
+	uint16 cipher_suite, encoded;
+} CipherSuite;
+
+static const CipherSuite kCipherSuites[] = {
+	{0x0, 0x0},  // TLS_NULL_WITH_NULL_NULL
+	{0x1, 0x101},  // TLS_RSA_WITH_NULL_MD5
+	{0x2, 0x102},  // TLS_RSA_WITH_NULL_SHA
+	{0x3, 0x209},  // TLS_RSA_EXPORT_WITH_RC4_40_MD5
+	{0x4, 0x111},  // TLS_RSA_WITH_RC4_128_MD5
+	{0x5, 0x112},  // TLS_RSA_WITH_RC4_128_SHA
+	{0x6, 0x219},  // TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5
+	{0x7, 0x122},  // TLS_RSA_WITH_IDEA_CBC_SHA
+	{0x8, 0x22a},  // TLS_RSA_EXPORT_WITH_DES40_CBC_SHA
+	{0x9, 0x132},  // TLS_RSA_WITH_DES_CBC_SHA
+	{0xa, 0x13a},  // TLS_RSA_WITH_3DES_EDE_CBC_SHA
+	{0xb, 0x32a},  // TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA
+	{0xc, 0x432},  // TLS_DH_DSS_WITH_DES_CBC_SHA
+	{0xd, 0x43a},  // TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA
+	{0xe, 0x52a},  // TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA
+	{0xf, 0x632},  // TLS_DH_RSA_WITH_DES_CBC_SHA
+	{0x10, 0x63a},  // TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA
+	{0x11, 0x72a},  // TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA
+	{0x12, 0x832},  // TLS_DHE_DSS_WITH_DES_CBC_SHA
+	{0x13, 0x83a},  // TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA
+	{0x14, 0x92a},  // TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA
+	{0x15, 0xa32},  // TLS_DHE_RSA_WITH_DES_CBC_SHA
+	{0x16, 0xa3a},  // TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA
+	{0x17, 0xb09},  // TLS_DH_anon_EXPORT_WITH_RC4_40_MD5
+	{0x18, 0xc11},  // TLS_DH_anon_WITH_RC4_128_MD5
+	{0x19, 0xb2a},  // TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA
+	{0x1a, 0xc32},  // TLS_DH_anon_WITH_DES_CBC_SHA
+	{0x1b, 0xc3a},  // TLS_DH_anon_WITH_3DES_EDE_CBC_SHA
+	{0x2f, 0x142},  // TLS_RSA_WITH_AES_128_CBC_SHA
+	{0x30, 0x442},  // TLS_DH_DSS_WITH_AES_128_CBC_SHA
+	{0x31, 0x642},  // TLS_DH_RSA_WITH_AES_128_CBC_SHA
+	{0x32, 0x842},  // TLS_DHE_DSS_WITH_AES_128_CBC_SHA
+	{0x33, 0xa42},  // TLS_DHE_RSA_WITH_AES_128_CBC_SHA
+	{0x34, 0xc42},  // TLS_DH_anon_WITH_AES_128_CBC_SHA
+	{0x35, 0x14a},  // TLS_RSA_WITH_AES_256_CBC_SHA
+	{0x36, 0x44a},  // TLS_DH_DSS_WITH_AES_256_CBC_SHA
+	{0x37, 0x64a},  // TLS_DH_RSA_WITH_AES_256_CBC_SHA
+	{0x38, 0x84a},  // TLS_DHE_DSS_WITH_AES_256_CBC_SHA
+	{0x39, 0xa4a},  // TLS_DHE_RSA_WITH_AES_256_CBC_SHA
+	{0x3a, 0xc4a},  // TLS_DH_anon_WITH_AES_256_CBC_SHA
+	{0x3b, 0x103},  // TLS_RSA_WITH_NULL_SHA256
+	{0x3c, 0x143},  // TLS_RSA_WITH_AES_128_CBC_SHA256
+	{0x3d, 0x14b},  // TLS_RSA_WITH_AES_256_CBC_SHA256
+	{0x3e, 0x443},  // TLS_DH_DSS_WITH_AES_128_CBC_SHA256
+	{0x3f, 0x643},  // TLS_DH_RSA_WITH_AES_128_CBC_SHA256
+	{0x40, 0x843},  // TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
+	{0x41, 0x152},  // TLS_RSA_WITH_CAMELLIA_128_CBC_SHA
+	{0x42, 0x452},  // TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA
+	{0x43, 0x652},  // TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA
+	{0x44, 0x852},  // TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA
+	{0x45, 0xa52},  // TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA
+	{0x46, 0xc52},  // TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA
+	{0x67, 0xa43},  // TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
+	{0x68, 0x44b},  // TLS_DH_DSS_WITH_AES_256_CBC_SHA256
+	{0x69, 0x64b},  // TLS_DH_RSA_WITH_AES_256_CBC_SHA256
+	{0x6a, 0x84b},  // TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
+	{0x6b, 0xa4b},  // TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
+	{0x6c, 0xc43},  // TLS_DH_anon_WITH_AES_128_CBC_SHA256
+	{0x6d, 0xc4b},  // TLS_DH_anon_WITH_AES_256_CBC_SHA256
+	{0x84, 0x15a},  // TLS_RSA_WITH_CAMELLIA_256_CBC_SHA
+	{0x85, 0x45a},  // TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA
+	{0x86, 0x65a},  // TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA
+	{0x87, 0x85a},  // TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA
+	{0x88, 0xa5a},  // TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA
+	{0x89, 0xc5a},  // TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA
+	{0x96, 0x162},  // TLS_RSA_WITH_SEED_CBC_SHA
+	{0x97, 0x462},  // TLS_DH_DSS_WITH_SEED_CBC_SHA
+	{0x98, 0x662},  // TLS_DH_RSA_WITH_SEED_CBC_SHA
+	{0x99, 0x862},  // TLS_DHE_DSS_WITH_SEED_CBC_SHA
+	{0x9a, 0xa62},  // TLS_DHE_RSA_WITH_SEED_CBC_SHA
+	{0x9b, 0xc62},  // TLS_DH_anon_WITH_SEED_CBC_SHA
+	{0x9c, 0x16f},  // TLS_RSA_WITH_AES_128_GCM_SHA256
+	{0x9d, 0x177},  // TLS_RSA_WITH_AES_256_GCM_SHA384
+	{0x9e, 0xa6f},  // TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
+	{0x9f, 0xa77},  // TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
+	{0xa0, 0x66f},  // TLS_DH_RSA_WITH_AES_128_GCM_SHA256
+	{0xa1, 0x677},  // TLS_DH_RSA_WITH_AES_256_GCM_SHA384
+	{0xa2, 0x86f},  // TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
+	{0xa3, 0x877},  // TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
+	{0xa4, 0x46f},  // TLS_DH_DSS_WITH_AES_128_GCM_SHA256
+	{0xa5, 0x477},  // TLS_DH_DSS_WITH_AES_256_GCM_SHA384
+	{0xa6, 0xc6f},  // TLS_DH_anon_WITH_AES_128_GCM_SHA256
+	{0xa7, 0xc77},  // TLS_DH_anon_WITH_AES_256_GCM_SHA384
+	{0xba, 0x153},  // TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256
+	{0xbb, 0x453},  // TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256
+	{0xbc, 0x653},  // TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256
+	{0xbd, 0x853},  // TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256
+	{0xbe, 0xa53},  // TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256
+	{0xbf, 0xc53},  // TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256
+	{0xc0, 0x15b},  // TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256
+	{0xc1, 0x45b},  // TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256
+	{0xc2, 0x65b},  // TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256
+	{0xc3, 0x85b},  // TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256
+	{0xc4, 0xa5b},  // TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256
+	{0xc5, 0xc5b},  // TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256
+	{0xc001, 0xd02},  // TLS_ECDH_ECDSA_WITH_NULL_SHA
+	{0xc002, 0xd12},  // TLS_ECDH_ECDSA_WITH_RC4_128_SHA
+	{0xc003, 0xd3a},  // TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA
+	{0xc004, 0xd42},  // TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
+	{0xc005, 0xd4a},  // TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA
+	{0xc006, 0xe02},  // TLS_ECDHE_ECDSA_WITH_NULL_SHA
+	{0xc007, 0xe12},  // TLS_ECDHE_ECDSA_WITH_RC4_128_SHA
+	{0xc008, 0xe3a},  // TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
+	{0xc009, 0xe42},  // TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
+	{0xc00a, 0xe4a},  // TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
+	{0xc00b, 0xf02},  // TLS_ECDH_RSA_WITH_NULL_SHA
+	{0xc00c, 0xf12},  // TLS_ECDH_RSA_WITH_RC4_128_SHA
+	{0xc00d, 0xf3a},  // TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA
+	{0xc00e, 0xf42},  // TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
+	{0xc00f, 0xf4a},  // TLS_ECDH_RSA_WITH_AES_256_CBC_SHA
+	{0xc010, 0x1002},  // TLS_ECDHE_RSA_WITH_NULL_SHA
+	{0xc011, 0x1012},  // TLS_ECDHE_RSA_WITH_RC4_128_SHA
+	{0xc012, 0x103a},  // TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
+	{0xc013, 0x1042},  // TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
+	{0xc014, 0x104a},  // TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
+	{0xc015, 0x1102},  // TLS_ECDH_anon_WITH_NULL_SHA
+	{0xc016, 0x1112},  // TLS_ECDH_anon_WITH_RC4_128_SHA
+	{0xc017, 0x113a},  // TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA
+	{0xc018, 0x1142},  // TLS_ECDH_anon_WITH_AES_128_CBC_SHA
+	{0xc019, 0x114a},  // TLS_ECDH_anon_WITH_AES_256_CBC_SHA
+	{0xc023, 0xe43},  // TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
+	{0xc024, 0xe4c},  // TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
+	{0xc025, 0xd43},  // TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256
+	{0xc026, 0xd4c},  // TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384
+	{0xc027, 0x1043},  // TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
+	{0xc028, 0x104c},  // TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
+	{0xc029, 0xf43},  // TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256
+	{0xc02a, 0xf4c},  // TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384
+	{0xc02b, 0xe6f},  // TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
+	{0xc02c, 0xe77},  // TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
+	{0xc02d, 0xd6f},  // TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256
+	{0xc02e, 0xd77},  // TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384
+	{0xc02f, 0x106f},  // TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
+	{0xc030, 0x1077},  // TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
+	{0xc031, 0xf6f},  // TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256
+	{0xc032, 0xf77},  // TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384
+	{0xc072, 0xe53},  // TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256
+	{0xc073, 0xe5c},  // TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384
+	{0xc074, 0xd53},  // TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256
+	{0xc075, 0xd5c},  // TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384
+	{0xc076, 0x1053},  // TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256
+	{0xc077, 0x105c},  // TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384
+	{0xc078, 0xf53},  // TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256
+	{0xc079, 0xf5c},  // TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384
+	{0xc07a, 0x17f},  // TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256
+	{0xc07b, 0x187},  // TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384
+	{0xc07c, 0xa7f},  // TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256
+	{0xc07d, 0xa87},  // TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384
+	{0xc07e, 0x67f},  // TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256
+	{0xc07f, 0x687},  // TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384
+	{0xc080, 0x87f},  // TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256
+	{0xc081, 0x887},  // TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384
+	{0xc082, 0x47f},  // TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256
+	{0xc083, 0x487},  // TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384
+	{0xc084, 0xc7f},  // TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256
+	{0xc085, 0xc87},  // TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384
+	{0xc086, 0xe7f},  // TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256
+	{0xc087, 0xe87},  // TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384
+	{0xc088, 0xd7f},  // TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256
+	{0xc089, 0xd87},  // TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384
+	{0xc08a, 0x107f},  // TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256
+	{0xc08b, 0x1087},  // TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384
+	{0xc08c, 0xf7f},  // TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256
+	{0xc08d, 0xf87},  // TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384
+};
+
+static const char *kKeyExchangeNames[] = {
+	"NULL",
+	"RSA",
+	"RSA_EXPORT",
+	"DH_DSS_EXPORT",
+	"DH_DSS",
+	"DH_RSA_EXPORT",
+	"DH_RSA",
+	"DHE_DSS_EXPORT",
+	"DHE_DSS",
+	"DHE_RSA_EXPORT",
+	"DHE_RSA",
+	"DH_anon_EXPORT",
+	"DH_anon",
+	"ECDH_ECDSA",
+	"ECDHE_ECDSA",
+	"ECDH_RSA",
+	"ECDHE_RSA",
+	"ECDH_anon",
+};
+
+static const char *kCipherNames[] = {
+	"NULL",
+	"RC4_40",
+	"RC4_128",
+	"RC2_CBC_40",
+	"IDEA_CBC",
+	"DES40_CBC",
+	"DES_CBC",
+	"3DES_EDE_CBC",
+	"AES_128_CBC",
+	"AES_256_CBC",
+	"CAMELLIA_128_CBC",
+	"CAMELLIA_256_CBC",
+	"SEED_CBC",
+	"AES_128_GCM",
+	"AES_256_GCM",
+	"CAMELLIA_128_GCM",
+	"CAMELLIA_256_GCM",
+};
+
+static const char *kMacNames[] = {
+	"NULL",
+	"MD5",
+	"SHA1",
+	"SHA256",
+	"SHA384",
+};
+
+static const char* SSLKeyExchangeName(SSLCipherSuite suite) {
+	int i;
+	
+	for (i = 0; i < sizeof(kCipherSuites) / sizeof(CipherSuite); i++) {
+		if (kCipherSuites[i].cipher_suite == suite) {
+			int key_exchange = kCipherSuites[i].encoded >> 8;
+			
+			return kKeyExchangeNames[key_exchange];
+		}
+	}
+	
+	return "???";
 }
+
+static const char* SSLCipherName(SSLCipherSuite suite) {
+	int i;
+	
+	for (i = 0; i < sizeof(kCipherSuites) / sizeof(CipherSuite); i++) {
+		if (kCipherSuites[i].cipher_suite == suite) {
+			int cipher = (kCipherSuites[i].encoded >> 3) & 0x1f;
+			
+			return kCipherNames[cipher];
+		}
+	}
+	
+	return "???";
+}
+
+static const char* SSLMACName(SSLCipherSuite suite) {
+	int i;
+	
+	for (i = 0; i < sizeof(kCipherSuites) / sizeof(CipherSuite); i++) {
+		if (kCipherSuites[i].cipher_suite == suite) {
+			int mac = kCipherSuites[i].encoded & 0x07;
+			
+			return kMacNames[mac];
+		}
+	}
+	
+	return "???";
+}
--- a/Plugins/Twitter Plugin/AITwitterAccount.m	Wed Jun 26 12:13:40 2013 +0200
+++ b/Plugins/Twitter Plugin/AITwitterAccount.m	Wed Jun 26 12:23:10 2013 +0200
@@ -1026,37 +1026,45 @@
 		[listContact setValue:[NSNumber numberWithBool:YES] forProperty:TWITTER_PROPERTY_REQUESTED_USER_ICON notify:NotifyNever];
 		
 		static dispatch_semaphore_t imageDownloadSemaphore;
+		static dispatch_queue_t imageDownloadScheduleQueue;
 		static dispatch_once_t onceToken;
 		dispatch_once(&onceToken, ^{
 			imageDownloadSemaphore = dispatch_semaphore_create(16);
+			imageDownloadScheduleQueue = dispatch_queue_create("im.adium.AITwitterAccount.imageDownloadScheduleQueue", NULL);
+			dispatch_set_target_queue(imageDownloadScheduleQueue, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0));
 		});
 		
-		// Grab the user icon and set it as their serverside icon.
-		dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
-			NSString *imageURL = [url stringByReplacingOccurrencesOfString:@"_normal." withString:@"_bigger."];
-			NSURLRequest *imageRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:imageURL]];
-			NSError *error = nil;
+		dispatch_async(imageDownloadScheduleQueue, ^{
 			
 			dispatch_semaphore_wait(imageDownloadSemaphore, DISPATCH_TIME_FOREVER);
-			NSData *data = [NSURLConnection sendSynchronousRequest:imageRequest returningResponse:nil error:&error];
-			dispatch_semaphore_signal(imageDownloadSemaphore);
-			
-			NSImage *image = [[NSImage alloc] initWithData:data];
 			
-			if (image) {
-				dispatch_async(dispatch_get_main_queue(), ^{
-					AILogWithSignature(@"%@ Updated user icon for %@", self, listContact);
-					[listContact setServersideIconData:[image TIFFRepresentation]
-												notify:NotifyLater];
-					
-					[listContact setValue:nil forProperty:TWITTER_PROPERTY_REQUESTED_USER_ICON notify:NotifyNever];
-					[listContact setValue:url forProperty:TWITTER_PROPERTY_USER_ICON_URL afterDelay:NotifyNever];
-				});
-			} else {
-				dispatch_async(dispatch_get_main_queue(), ^{
-					[self requestFailed:AITwitterUserIconPull withError:error userInfo:@{ @"ListContact" : listContact }];
-				});
-			}
+			// Grab the user icon and set it as their serverside icon.
+			dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
+				NSString *imageURL = [url stringByReplacingOccurrencesOfString:@"_normal." withString:@"_bigger."];
+				NSURLRequest *imageRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:imageURL]];
+				NSError *error = nil;
+				
+				NSData *data = [NSURLConnection sendSynchronousRequest:imageRequest returningResponse:nil error:&error];
+				
+				NSImage *image = [[NSImage alloc] initWithData:data];
+				
+				if (image) {
+					dispatch_async(dispatch_get_main_queue(), ^{
+						AILogWithSignature(@"%@ Updated user icon for %@", self, listContact);
+						[listContact setServersideIconData:[image TIFFRepresentation]
+													notify:NotifyLater];
+						
+						[listContact setValue:nil forProperty:TWITTER_PROPERTY_REQUESTED_USER_ICON notify:NotifyNever];
+						[listContact setValue:url forProperty:TWITTER_PROPERTY_USER_ICON_URL afterDelay:NotifyNever];
+					});
+				} else {
+					dispatch_async(dispatch_get_main_queue(), ^{
+						[self requestFailed:AITwitterUserIconPull withError:error userInfo:@{ @"ListContact" : listContact }];
+					});
+				}
+				
+				dispatch_semaphore_signal(imageDownloadSemaphore);
+			});
 		});
 	}
 }