diff --git a/mysql-test/r/partition.result b/mysql-test/r/partition.result
index 970e5234ca860c762392154f15971e7786c32739..2e293df50e2e21ab7234a5aa5de6a097d81ef953 100644
--- a/mysql-test/r/partition.result
+++ b/mysql-test/r/partition.result
@@ -718,6 +718,16 @@ CALL test.p1(13);
 Warnings:
 Warning	1196	Some non-transactional changed tables couldn't be rolled back
 drop table t1;
+CREATE TABLE t1 (a int not null)
+partition by key(a)
+(partition p0 COMMENT='first partition');
+drop table t1;
+CREATE TABLE t1 (`a b` int not null)
+partition by key(`a b`);
+drop table t1;
+CREATE TABLE t1 (`a b` int not null)
+partition by hash(`a b`);
+drop table t1;
 create table t1 (f1 integer) partition by range(f1)
 (partition p1 values less than (0), partition p2 values less than (10));
 insert into t1 set f1 = null;
diff --git a/mysql-test/t/partition.test b/mysql-test/t/partition.test
index b3a6319643d3f37659ac5a6c1bea42458ab5b6ee..a3aa3f6f02542e016f6b7b25372922c45f9e1567 100644
--- a/mysql-test/t/partition.test
+++ b/mysql-test/t/partition.test
@@ -849,6 +849,25 @@ CALL test.p1(12);
 CALL test.p1(13);
 drop table t1;
 
+#
+# Bug 13520: Problem with delimiters in COMMENT DATA DIRECTORY ..
+#
+CREATE TABLE t1 (a int not null)
+partition by key(a)
+(partition p0 COMMENT='first partition');
+drop table t1;
+
+#
+# Bug 13433: Problem with delimited identifiers
+#
+CREATE TABLE t1 (`a b` int not null)
+partition by key(`a b`);
+drop table t1;
+
+CREATE TABLE t1 (`a b` int not null)
+partition by hash(`a b`);
+drop table t1;
+
 #
 # Bug#18053 Partitions: crash if null
 # Bug#18070 Partitions: wrong result on WHERE ... IS NULL
diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc
index 1186afc425d26a2127416c2ad4c2dd32363a7f5e..c13c8c9010375762ea0809d35ba58d49209d72e2 100644
--- a/sql/sql_partition.cc
+++ b/sql/sql_partition.cc
@@ -1508,6 +1508,11 @@ static int add_write(File fptr, const char *buf, uint len)
     return 1;
 }
 
+static int add_string_object(File fptr, String *string)
+{
+  return add_write(fptr, string->ptr(), string->length());
+}
+
 static int add_string(File fptr, const char *string)
 {
   return add_write(fptr, string, strlen(string));
@@ -1594,7 +1599,14 @@ static int add_key_partition(File fptr, List<char> field_list)
   while (i < no_fields)
   {
     const char *field_str= part_it++;
-    err+= add_string(fptr, field_str);
+    String field_string("", 0, system_charset_info);
+    THD *thd= current_thd;
+    ulonglong save_options= thd->options;
+    thd->options= 0;
+    append_identifier(thd, &field_string, field_str,
+                      strlen(field_str));
+    thd->options= save_options;
+    err+= add_string_object(fptr, &field_string);
     if (i != (no_fields-1))
       err+= add_comma(fptr);
     i++;
@@ -1664,7 +1676,7 @@ static int add_partition_options(File fptr, partition_element *p_elem)
     err+= add_keyword_string(fptr, "INDEX DIRECTORY", TRUE, 
                              p_elem->index_file_name);
   if (p_elem->part_comment)
-    err+= add_keyword_string(fptr, "COMMENT", FALSE, p_elem->part_comment);
+    err+= add_keyword_string(fptr, "COMMENT", TRUE, p_elem->part_comment);
   return err + add_engine(fptr,p_elem->engine_type);
 }