* Helpers
      */
     void print_type(t_type* ttype, string struct_field_ref);
-    void print_const_value(t_const_value* tvalue);
+    void print_const_value(t_type* type, t_const_value* tvalue);
 
   private:
     std::ofstream f_out_;
 
   f_out_ << escape_string(name);
   f_out_ << " = ";
-  print_const_value(tconst->get_value());
+  print_const_value( tconst->get_type(), tconst->get_value());
   f_out_ << " :: ";
   print_type(tconst->get_type(), "const_" + name);
 
 /**
  * Prints out an string representation of the provided constant value
  */
-void t_gv_generator::print_const_value(t_const_value* tvalue) {
+void t_gv_generator::print_const_value(t_type* type, t_const_value* tvalue) {
   bool first = true;
   switch (tvalue->get_type()) {
     case t_const_value::CV_INTEGER:
             f_out_ << ", ";
           }
           first = false;
-          print_const_value(map_iter->first);
+          print_const_value( ((t_map*)type)->get_key_type(), map_iter->first);
           f_out_ << " = ";
-          print_const_value(map_iter->second);
+          print_const_value( ((t_map*)type)->get_val_type(), map_iter->second);
         }
         f_out_ << " \\}";
       }
             f_out_ << ", ";
           }
           first = false;
-          print_const_value(*list_iter);
+          if (type->is_list()) {
+            print_const_value( ((t_list*)type)->get_elem_type(), *list_iter);
+          } else {
+            print_const_value( ((t_set*)type)->get_elem_type(), *list_iter);
+          } 
         }
         f_out_ << " \\}";
       }
       break;
+    case t_const_value::CV_IDENTIFIER:
+      f_out_ << escape_string(type->get_name()) << "." << escape_string(tvalue->get_identifier_name());
+      break;
     default:
       f_out_ << "UNKNOWN";
       break;
       f_out_ << (*arg_iter)->get_name();
       if ((*arg_iter)->get_value() != NULL) {
         f_out_ << " = ";
-        print_const_value((*arg_iter)->get_value());
+        print_const_value((*arg_iter)->get_type(), (*arg_iter)->get_value());
       }
       f_out_ << " :: ";
       print_type((*arg_iter)->get_type(),
 
 
   void print_doc        (t_doc* tdoc);
   int  print_type       (t_type* ttype);
-  void print_const_value(t_const_value* tvalue);
+  void print_const_value(t_type* type, t_const_value* tvalue);
   void print_fn_args_doc(t_function* tfunction);
 
  private:
 /**
  * Prints out an HTML representation of the provided constant value
  */
-void t_html_generator::print_const_value(t_const_value* tvalue) {
+void t_html_generator::print_const_value(t_type* type, t_const_value* tvalue) {
   bool first = true;
   switch (tvalue->get_type()) {
   case t_const_value::CV_INTEGER:
           f_out_ << ", ";
         }
         first = false;
-        print_const_value(map_iter->first);
+        print_const_value( ((t_map*)type)->get_key_type(), map_iter->first);
         f_out_ << " = ";
-        print_const_value(map_iter->second);
+        print_const_value( ((t_map*)type)->get_val_type(), map_iter->second);
       }
       f_out_ << " }";
     }
           f_out_ << ", ";
         }
         first = false;
-        print_const_value(*list_iter);
+        if (type->is_list()) {
+          print_const_value( ((t_list*)type)->get_elem_type(), *list_iter);
+        } else {
+          print_const_value( ((t_set*)type)->get_elem_type(), *list_iter);
+        } 
       }
       f_out_ << " }";
     }
     break;
+  case t_const_value::CV_IDENTIFIER:
+    f_out_ << escape_html(type->get_name()) << "." << escape_html(tvalue->get_identifier_name());
+    break;
   default:
     f_out_ << "UNKNOWN";
     break;
    << "</code></td><td>";
   print_type(tconst->get_type());
   f_out_ << "</td><td><code>";
-  print_const_value(tconst->get_value());
+  print_const_value(tconst->get_type(), tconst->get_value());
   f_out_ << "</code></td></tr>";
   if (tconst->has_doc()) {
     f_out_ << "<tr><td colspan=\"3\"><blockquote>";
     f_out_ << "</td><td>";
     t_const_value* default_val = (*mem_iter)->get_value();
     if (default_val != NULL) {
-      print_const_value(default_val);
+      print_const_value((*mem_iter)->get_type(), default_val);
     }
     f_out_ << "</td></tr>" << endl;
   }
       f_out_ << " " << (*arg_iter)->get_name();
       if ((*arg_iter)->get_value() != NULL) {
         f_out_ << " = ";
-        print_const_value((*arg_iter)->get_value());
+        print_const_value((*arg_iter)->get_type(), (*arg_iter)->get_value());
       }
     }
     f_out_ << ")" << endl;