 .../tools/doxygen_xml2qbk/doxygen_elements.hpp     |  2 +-
 .../tools/doxygen_xml2qbk/doxygen_xml_parser.hpp   | 43 +++++++++++++++++++---
 .../tools/doxygen_xml2qbk/quickbook_output.hpp     | 29 +++++++++++++--
 3 files changed, 64 insertions(+), 10 deletions(-)

diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_elements.hpp b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_elements.hpp
index 04d50dc..43fc98b 100644
--- a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_elements.hpp
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_elements.hpp
@@ -164,7 +164,7 @@ struct class_or_struct : public element
     std::vector<function> functions;
 
     std::vector<base_element> typedefs;
-    std::vector<base_element> variables;
+    std::vector<parameter> variables;
 
     std::vector<base_class> base_classes;
 };
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml_parser.hpp b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml_parser.hpp
index 0a98f42..119a573 100644
--- a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml_parser.hpp
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/doxygen_xml_parser.hpp
@@ -691,13 +691,44 @@ static void parse(rapidxml::xml_node<>* node, configuration const& config, docum
             }
             else if (kind == "variable")
             {
-                if (boost::equals(get_attribute(node, "static"), "yes")
-                    && boost::equals(get_attribute(node, "mutable"), "no")
-                    && boost::equals(get_attribute(node, "prot"), "public"))
+                if (boost::equals(get_attribute(node, "prot"), "public"))
                 {
-                    std::string name = parse_named_node(node->first_node(), "name");
-                    doc.cos.variables.push_back(base_element(name));
-                    doc.cos.variables.back().id = id;
+                    parameter p;
+                    p.id = id;
+                    for(rapidxml::xml_node<>* var_node = node->first_node(); var_node; var_node=var_node->next_sibling())
+                    {
+                        if(boost::equals(var_node->name(), "name"))
+                        {
+                            p.name = var_node->value();
+                        }
+                        else if(boost::equals(var_node->name(), "type"))
+                        {
+                            get_contents(var_node->first_node(), p.fulltype);
+                            p.type = p.fulltype;
+                            //boost::replace_all(p.type, " const", "");
+                            //boost::trim(p.type);
+                            //boost::replace_all(p.type, "&", "");
+                            //boost::replace_all(p.type, "*", "");
+                            boost::trim(p.type);
+
+                            // If alt output is used retrieve type with QBK links
+                            if ( configuration::alt == config.output_style )
+                            {
+                                p.fulltype_without_links = p.fulltype;
+                                p.fulltype.clear();
+                                parse_para(var_node->first_node(), config, p.fulltype, p.skip);
+                            }
+                        }
+                        else if(boost::equals(var_node->name(), "briefdescription"))
+                        {
+                            parse_para(var_node->first_node(), config, p.brief_description, p.skip);
+                        }
+                        else if(p.brief_description.empty() && boost::equals(var_node->name(), "detaileddescription"))
+                        {
+                            parse_para(var_node->first_node(), config, p.brief_description, p.skip);
+                        }
+                    }
+                    doc.cos.variables.push_back(p);
                 }
             }
 
diff --git a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/quickbook_output.hpp b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/quickbook_output.hpp
index 34295b7..0cb6f24 100644
--- a/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/quickbook_output.hpp
+++ b/libs/geometry/doc/src/docutils/tools/doxygen_xml2qbk/quickbook_output.hpp
@@ -544,9 +544,32 @@ void quickbook_output(class_or_struct const& cos, configuration const& config, s
         out << std::endl;
     }
 
-    out << "{" << std::endl
-        << "  // ..." << std::endl
-        << "};" << std::endl
+    out << "{" << std::endl;
+    if (! cos.variables.empty())
+    {
+        size_t maxlength = 0;
+        BOOST_FOREACH(parameter const& p, cos.variables)
+        {
+            if (! p.skip)
+            {
+                size_t length = 6 + p.fulltype.size() + p.name.size();
+                if (length > maxlength) maxlength = length;
+            }
+        }
+        BOOST_FOREACH(parameter const& p, cos.variables)
+        {
+            if (! p.skip)
+            {
+                size_t length = 4 + p.fulltype.size() + p.name.size();
+                out << "  " << p.fulltype << " " << p.name << ";";
+                while(length++ < maxlength) out << " ";
+                out << "// " << p.brief_description << std::endl;
+            }
+        }
+    }
+    else
+        out << "  // ..." << std::endl;
+    out << "};" << std::endl
         << "``" << std::endl << std::endl;
     quickbook_markup(cos.qbk_markup, markup_after, markup_synopsis, out);
 
