diff -ur SOPE.orig/sope-mime/NGMime/NGMimeContentDispositionHeaderFieldGenerator.m SOPE/sope-mime/NGMime/NGMimeContentDispositionHeaderFieldGenerator.m
--- SOPE.orig/sope-mime/NGMime/NGMimeContentDispositionHeaderFieldGenerator.m	2015-09-16 22:26:50.000000000 +0400
+++ SOPE/sope-mime/NGMime/NGMimeContentDispositionHeaderFieldGenerator.m	2015-10-08 17:42:49.281850835 +0400
@@ -83,6 +83,9 @@
 	int    desLen;
 	char        *des;
 	
+	bytes = [[tmp stringByReplacingOccurrencesOfString:@"\\\"" withString:@"\""] cStringUsingEncoding: NSUTF8StringEncoding];
+	length = strlen(bytes);
+
 	desLen = length * 3 + 20;
 	
 	des = calloc(desLen + 2, sizeof(char));
diff -ur SOPE.orig/sope-mime/NGMime/NGMimeUtilities.h SOPE/sope-mime/NGMime/NGMimeUtilities.h
--- SOPE.orig/sope-mime/NGMime/NGMimeUtilities.h	2015-09-16 22:26:50.000000000 +0400
+++ SOPE/sope-mime/NGMime/NGMimeUtilities.h	2015-10-08 17:13:56.917917163 +0400
@@ -42,52 +42,52 @@
 // single chars
 NSDictionary *parseParameters(id self, NSString *_str, unichar *cstr);
 
-static inline BOOL isRfc822_CR(unsigned char _byte) {
+static inline BOOL isRfc822_CR(unichar _byte) {
   return (_byte == 13);
 }
-static inline BOOL isRfc822_LF(unsigned char _byte) {
+static inline BOOL isRfc822_LF(unichar _byte) {
   return (_byte == 10);
 }
-static inline BOOL isRfc822_HTAB(unsigned char _byte) {
+static inline BOOL isRfc822_HTAB(unichar _byte) {
   return (_byte == 9);
 }
-static inline BOOL isRfc822_SPACE(unsigned char _byte) {
+static inline BOOL isRfc822_SPACE(unichar _byte) {
   return (_byte == 32);
 }
-static inline BOOL isRfc822_QUOTE(unsigned char _byte) {
+static inline BOOL isRfc822_QUOTE(unichar _byte) {
   return (_byte == 34);
 }
 
 // ranges
 
-static inline BOOL isRfc822_CHAR(unsigned char _byte) {
+static inline BOOL isRfc822_CHAR(unichar _byte) {
   return (_byte < 128);
 }
 
-static inline BOOL isRfc822_CTL(unsigned char _byte) {
+static inline BOOL isRfc822_CTL(unichar _byte) {
   return (_byte < 32) || (_byte == 127);
 }
 
-static inline BOOL isRfc822_ALPHA(unsigned char _byte) {
+static inline BOOL isRfc822_ALPHA(unichar _byte) {
   return (((_byte >= 65) && (_byte <= 90)) ||
           ((_byte >= 97) && (_byte <= 122)));
 }
 
-static inline BOOL isRfc822_DIGIT(unsigned char _byte) {
+static inline BOOL isRfc822_DIGIT(unichar _byte) {
   return (_byte >= 48) && (_byte <= 57);
 }
 
-static inline BOOL isRfc822_LWSP(unsigned char _byte) {
+static inline BOOL isRfc822_LWSP(unichar _byte) {
   return (isRfc822_SPACE(_byte) || isRfc822_HTAB(_byte));
 }
 
 
-static inline BOOL isRfc822_FieldNameChar(unsigned char _byte) {
+static inline BOOL isRfc822_FieldNameChar(unichar _byte) {
   return (isRfc822_CHAR(_byte) &&
           !(isRfc822_CTL(_byte) || isRfc822_SPACE(_byte) || (_byte == ':')));
 }
 
-static inline BOOL isRfc822_AtomChar(unsigned char _byte) {
+static inline BOOL isRfc822_AtomChar(unichar _byte) {
   return (isRfc822_CHAR(_byte) &&
           !(isRfc822_SpecialByte(_byte) || isRfc822_SPACE(_byte) ||
             isRfc822_CTL(_byte)));
@@ -95,7 +95,7 @@
 
 // ******************** MIME ***********************
 
-static inline BOOL isMime_SpecialByte(unsigned char _byte) {
+static inline BOOL isMime_SpecialByte(unichar _byte) {
   switch (_byte) {
   case '(': case ')': case '<': case '>': case '@':
   case ',': case ';': case ':': case '"': case '\\':
@@ -106,21 +106,21 @@
   }
 }
 
-static inline BOOL isMime_TokenChar(unsigned char _byte) {
+static inline BOOL isMime_TokenChar(unichar _byte) {
   return (isRfc822_CHAR(_byte) &&
           !(isRfc822_CTL(_byte) || isRfc822_SPACE(_byte) ||
             isMime_SpecialByte(_byte)));
 }
 
-static inline BOOL isMime_SafeChar(unsigned char _byte) {
+static inline BOOL isMime_SafeChar(unichar _byte) {
   return ((_byte >= 33 && _byte <= 60) || (_byte >= 62 && _byte <= 126));
 }
 
-static inline BOOL isMime_ValidTypeXTokenChar(unsigned char _byte) {
+static inline BOOL isMime_ValidTypeXTokenChar(unichar _byte) {
   return !isRfc822_SPACE(_byte);
 }
 
-static inline BOOL isMime_ValidTypeAttributeChar(unsigned char _byte) {
+static inline BOOL isMime_ValidTypeAttributeChar(unichar _byte) {
   return isMime_TokenChar(_byte);
 }
 
diff -ur SOPE.orig/sope-mime/NGMime/NGMimeUtilities.m SOPE/sope-mime/NGMime/NGMimeUtilities.m
--- SOPE.orig/sope-mime/NGMime/NGMimeUtilities.m	2015-09-16 22:26:50.000000000 +0400
+++ SOPE/sope-mime/NGMime/NGMimeUtilities.m	2015-10-08 17:37:04.215299250 +0400
@@ -157,12 +157,14 @@
         cstr++;
         tmp = cstr;
         len = 0;
-        while (!isRfc822_QUOTE(*cstr) && (*cstr != '\0')) {
+        while ( (!(isRfc822_QUOTE(*cstr) && *(cstr - 1) != '\\')) && (*cstr != '\0')) {
           cstr++;
           len++;
         }
         attrValue = [[[NSString alloc] initWithCharacters:tmp length:len]
                                 autorelease];
+        /* webkit hack: "urldecode" quotes only. @seealso: https://bugs.webkit.org/show_bug.cgi?id=62107 https://www.w3.org/Bugs/Public/show_bug.cgi?id=16909 */
+        attrValue = [attrValue stringByReplacingOccurrencesOfString:@"%22" withString:@"\\\""];
           
         if (*cstr == '\0') { // quote was not closed
           if (MimeLogEnabled)  
