diff --git a/guththila/include/guththila_xml_writer.h b/guththila/include/guththila_xml_writer.h
index f57d1be..5bf4c10 100644
--- a/guththila/include/guththila_xml_writer.h
+++ b/guththila/include/guththila_xml_writer.h
@@ -260,6 +260,19 @@
     const axutil_env_t * env);
 
 /*
+ * Write a buffer with special chars on it
+ * The special chars will be escaped
+ * @param wr pointer to the writer
+ * @param buff character string
+ * @param env pointer to the environment
+ */
+GUTHTHILA_EXPORT int GUTHTHILA_CALL guththila_write_escaped_buffer(
+    guththila_xml_writer_t * wr,
+    char *buff,
+    const axutil_env_t * env);
+
+
+/*
  * Start to write an empty element with the given name. 
  * @param wr pointer to the writer
  * @param name name of the element
diff --git a/guththila/src/guththila_xml_writer.c b/guththila/src/guththila_xml_writer.c
index 8e68f6a..d993a07 100644
--- a/guththila/src/guththila_xml_writer.c
+++ b/guththila/src/guththila_xml_writer.c
@@ -725,7 +725,7 @@
     guththila_char_t *buff,
     const axutil_env_t * env)
 {
-    size_t len = strlen(buff);
+
     if(wr->status == START)
     {
         wr->status = BEGINING;
@@ -741,39 +741,7 @@
     {
         return GUTHTHILA_FAILURE;
     }
-    while(len > 0)
-    {
-        size_t i = 0;
-        /* scan buffer until the next special character (&, <, >, ', ") these need to be escaped,
-         * otherwise XML will not be valid*/
-        guththila_char_t *pos = (guththila_char_t*)strpbrk(buff, "&<>'\"");
-        if(pos)
-        {
-            i = pos - buff;
-        }
-        else
-        {
-            i = len;
-        }
-
-        /* write everything until the special character */
-        if(i > 0)
-        {
-            guththila_write(wr, buff, i, env);
-            buff += i;
-            len -= i;
-        }
-        /* replace the character with the appropriate sequence */
-        if(len > 0)
-        {
-            if(AXIS2_SUCCESS != guththila_write_escape_character(wr, buff, env))
-                return GUTHTHILA_FAILURE;
-            /* skip the character */
-            buff++;
-            len--;
-        }
-    }
-    return GUTHTHILA_SUCCESS;
+    return guththila_write_escaped_buffer(wr,buff,env);
 }
 
 GUTHTHILA_EXPORT int GUTHTHILA_CALL
@@ -842,6 +810,50 @@
 }
 
 GUTHTHILA_EXPORT int GUTHTHILA_CALL
+guththila_write_escaped_buffer(
+    guththila_xml_writer_t * wr,
+    char *buff,
+    const axutil_env_t * env)
+{
+    size_t len = strlen(buff);
+
+    while(len > 0)
+    {
+        size_t i = 0;
+        /* scan buffer until the next special character (&, <, >, ', ") these need to be escaped,
+         * otherwise XML will not be valid*/
+        guththila_char_t *pos = (guththila_char_t*)strpbrk(buff, "&<>'\"");
+        if(pos)
+        {
+            i = pos - buff;
+        }
+        else
+        {
+            i = len;
+        }
+
+        /* write everything until the special character */
+        if(i > 0)
+        {
+            guththila_write(wr, buff, i, env);
+            buff += i;
+            len -= i;
+        }
+        /* replace the character with the appropriate sequence */
+        if(len > 0)
+        {
+            if(AXIS2_SUCCESS != guththila_write_escape_character(wr, buff, env))
+                return GUTHTHILA_FAILURE;
+            /* skip the character */
+            buff++;
+            len--;
+        }
+    }
+    return GUTHTHILA_SUCCESS;
+
+}
+
+GUTHTHILA_EXPORT int GUTHTHILA_CALL
 guththila_write_empty_element(
     guththila_xml_writer_t * wr,
     guththila_char_t *start_element,
@@ -1087,7 +1099,8 @@
         guththila_write(wr, " ", 1u, env);
         guththila_write(wr, localname, strlen(localname), env);
         guththila_write(wr, "=\"", 2u, env);
-        guththila_write(wr, value, strlen(value), env);
+        if(guththila_write_escaped_buffer(wr, value, env)!=GUTHTHILA_SUCCESS)
+        	return GUTHTHILA_FAILURE;
         guththila_write(wr, "\"", 1u, env);
         return GUTHTHILA_SUCCESS;
     }
@@ -1147,7 +1160,8 @@
                     guththila_write(wr, ":", 1u, env);
                     guththila_write(wr, localname, strlen(localname), env);
                     guththila_write(wr, "=\"", 2u, env);
-                    guththila_write(wr, value, strlen(value), env);
+                    if(guththila_write_escaped_buffer(wr, value, env)!=GUTHTHILA_SUCCESS)
+                    	return GUTHTHILA_FAILURE;
                     guththila_write(wr, "\"", 1u, env);
                     return GUTHTHILA_SUCCESS;
                 }
@@ -1194,7 +1208,8 @@
                     guththila_write(wr, ":", 1u, env);
                     guththila_write(wr, loc_name, strlen(loc_name), env);
                     guththila_write(wr, "=\"", 2u, env);
-                    guththila_write(wr, value, strlen(value), env);
+                    if(guththila_write_escaped_buffer(wr, value, env)!=GUTHTHILA_SUCCESS)
+                    	return GUTHTHILA_FAILURE;
                     guththila_write(wr, "\"", 1u, env);
                     return GUTHTHILA_SUCCESS;
                 }
diff --git a/guththila/tests/Makefile.am b/guththila/tests/Makefile.am
index 959bf9b..857d5b8 100644
--- a/guththila/tests/Makefile.am
+++ b/guththila/tests/Makefile.am
@@ -20,7 +20,8 @@
 test_guththila_SOURCES = test_guththila.cc
 
 AM_CPPFLAGS = -I$(top_builddir)/include \
-				-I ../../util/include
+				-I ../../util/include \
+				-I ../../axiom/include
 
 test_guththila_LDADD = \
 				 $(top_builddir)/src/libguththila.la \
@@ -33,5 +34,6 @@
 test_attribute_LDADD = \
 				 $(top_builddir)/src/libguththila.la \
 				 ../../util/src/libaxutil.la \
+				 ../../axiom/src/om/libaxis2_axiom.la \
 				 $(top_builddir)/$(GTEST)/libgtest.a \
 				 $(top_builddir)/$(GTEST)/libgtest_main.a
diff --git a/guththila/tests/test_attribute.cc b/guththila/tests/test_attribute.cc
index 1670298..eeea707 100644
--- a/guththila/tests/test_attribute.cc
+++ b/guththila/tests/test_attribute.cc
@@ -18,6 +18,7 @@
 #include <gtest/gtest.h>
 
 #include <guththila.h>
+#include <axiom.h>
 
 
 #define BUF_SIZE 256
@@ -43,15 +44,11 @@
         void TearDown()
         {
 
-            guththila_reader_free(m_reader, m_env);
-            m_reader = nullptr;
-            guththila_un_init(m_parser, m_env);
-            m_parser = nullptr;
             axutil_env_free(m_env);
 
         }
 
-        guththila_reader_t *m_reader;
+        guththila_reader_t *m_reader = nullptr;
         axutil_allocator_t *m_allocator;
         axutil_env_t *m_env;
         guththila_t *m_parser;
@@ -85,6 +82,11 @@
     ASSERT_STREQ(guththila_get_attribute_name(m_parser, att, m_env), "color");
     ASSERT_STREQ(guththila_get_attribute_value(m_parser, att, m_env), "brown");
 
+    guththila_reader_free(m_reader, m_env);
+    m_reader = nullptr;
+    guththila_un_init(m_parser, m_env);
+    m_parser = nullptr;
+
 }
 
 
@@ -129,4 +131,26 @@
     ASSERT_STREQ(guththila_get_attribute_name(m_parser, att, m_env), "mustUnderstand");
     ASSERT_STREQ(guththila_get_attribute_value(m_parser, att, m_env), "0");
 
+    guththila_reader_free(m_reader, m_env);
+    m_reader = nullptr;
+    guththila_un_init(m_parser, m_env);
+    m_parser = nullptr;
+
+}
+
+/* AXIS2C-1627 */
+TEST_F(TestAttribute, test_special_char_serialization)
+{
+     axiom_namespace_t * ns = axiom_namespace_create(m_env, "namespace", "ns");
+
+     axiom_node_t * node;
+     axiom_element_t * element = axiom_element_create(m_env, NULL, "el", ns, &node);
+
+     axiom_element_set_text(element, m_env, "T1 & T2", node);
+     axiom_element_add_attribute(element, m_env, axiom_attribute_create(m_env, "name", "A1 & A2", NULL), node);
+
+     axis2_char_t * xml = axiom_node_to_string(node, m_env);
+
+     ASSERT_STREQ(xml, "<ns:el xmlns:ns=\"namespace\" name=\"A1 &amp; A2\">T1 &amp; T2</ns:el>");
+
 }
