pl = MPLIST_NEXT (pl);
       definitions = mplist_add (definitions, name, pl);
       M17N_OBJECT_REF (pl);
+      mchar_define_charset (MSYMBOL_NAME (name), mplist__from_plist (pl));
       if ((pl = mplist_find_by_value (pl, Mdefine_coding))
          && (MSymbol) MPLIST_VAL (MPLIST_NEXT (pl)) == Mt)
        mconv__register_charset_coding (name);
 
   if (dst + len > dst_end)
     return 0;
 
+  mtext_put_prop (mt, pos, pos + 1, Mcoding, Mnil);
   format = (c < 0xD800 ? "<U+%04X>"
            : c < 0xE000 ? "<M+%04X>"
            : c < 0x10000 ? "<U+%04X>"
   converter->nchars = converter->nbytes = 0;
   converter->result = MCONVERSION_RESULT_SUCCESS;
 
+  mtext_put_prop (mt, from, to, Mcoding, internal->coding->name);
   if (internal->binding == BINDING_BUFFER)
     {
       (*internal->coding->encoder) (mt, from, to,