Lisp_Object Q_component_of;
 Lisp_Object Q_same;
 Lisp_Object Q_same_of;
-Lisp_Object Q_vulgar;
-Lisp_Object Q_vulgar_of;
 Lisp_Object Qto_ucs;
 Lisp_Object Q_ucs_unified;
 Lisp_Object Qcompat;
            EQ (attribute, Q_component_of) ||
            EQ (attribute, Q_same) ||
            EQ (attribute, Q_same_of) ||
-           EQ (attribute, Q_vulgar) ||
-           EQ (attribute, Q_vulgar_of) ||
            !NILP (Fstring_match
-                  (build_string ("^<-\\(simplified"
-                                 "\\|wrong\\)[^*]*$"),
+                  (build_string ("^\\(<-\\|->\\)\\(simplified"
+                                 "\\|vulgar\\|wrong"
+                                 "\\)[^*]*$"),
                    Fsymbol_name (attribute),
                    Qnil, Qnil)) )
     {
        rev_feature = Q_same_of;
       else if (EQ (attribute, Q_same_of))
        rev_feature = Q_same;
-      else if (EQ (attribute, Q_vulgar))
-       rev_feature = Q_vulgar_of;
-      else if (EQ (attribute, Q_vulgar_of))
-       rev_feature = Q_vulgar;
       else
        {
          Lisp_String* name = symbol_name (XSYMBOL (attribute));
          Bufbyte *name_str = string_data (name);
 
-         if (name_str[0] == '<' && name_str[1] == '-')
+         if ( (name_str[0] == '<' && name_str[1] == '-') || 
+              (name_str[0] == '-' && name_str[1] == '>') )
            {
              Bytecount length = string_length (name);
              Bufbyte *rev_name_str = alloca (length + 1);
 
              memcpy (rev_name_str + 2, name_str + 2, length - 2);
-             rev_name_str[0] = '-';
-             rev_name_str[1] = '>';
+             if (name_str[0] == '<')
+               {
+                 rev_name_str[0] = '-';
+                 rev_name_str[1] = '>';
+               }
+             else
+               {
+                 rev_name_str[0] = '<';
+                 rev_name_str[1] = '-';
+               }
              rev_name_str[length] = 0;
              rev_feature = intern (rev_name_str);
            }
           || EQ (attribute, Q_same)
           || EQ (attribute, Q_same_of)
           || !NILP (Fstring_match
-                    (build_string ("^\\(<-\\|->\\)\\("
-                                   "simplified\\|wrong\\)[^*]*$"),
+                    (build_string ("^\\(<-\\|->\\)\\(simplified"
+                                   "\\|vulgar\\|wrong"
+                                   "\\)[^*]*$"),
                      Fsymbol_name (attribute),
                      Qnil, Qnil)) )
        filter = &Fchar_refs_simplify_char_specs;
   defsymbol (&Q_component_of,          "<-ideographic-component-forms");
   defsymbol (&Q_same,                  "->same");
   defsymbol (&Q_same_of,               "<-same");
-  defsymbol (&Q_vulgar,                        "->vulgar");
-  defsymbol (&Q_vulgar_of,             "<-vulgar");
   defsymbol (&Qcomposition,            "composition");
   defsymbol (&Q_decomposition,         "->decomposition");
   defsymbol (&Qcompat,                 "compat");