+string gdcmDictSet::DictPath = gdcmDictSet::BuildDictPath();
+gdcmDict* gdcmDictSet::DefaultPubDict = gdcmDictSet::LoadDefaultPubDict();
+
+/**
+ * \ingroup gdcmDictSet
+ * \brief Consider all the entries of the public dicom dictionnary.
+ * Build all list of all the tag names of all those entries.
+ * \sa gdcmDictSet::GetPubDictTagNamesByCategory
+ * @return A list of all entries of the public dicom dictionnary.
+ */
+list<string> * gdcmDictSet::GetPubDictTagNames(void) {
+ list<string> * Result = new list<string>;
+ TagKeyHT entries = gdcmDictSet::DefaultPubDict->GetEntries();
+
+ for (TagKeyHT::iterator tag = entries.begin(); tag != entries.end(); ++tag){
+ Result->push_back( tag->second->GetName() );
+ }
+ return Result;
+}
+
+/**
+ * \ingroup gdcmDictSet
+ * \brief Consider all the entries of the public dicom dictionnary.
+ * Build an hashtable whose keys are the names of the groups
+ * (fourth field in each line of dictionary) and whose corresponding
+ * values are lists of all the dictionnary entries among that
+ * group. Note that apparently the Dicom standard doesn't explicitely
+ * define a name (as a string) for each group.
+ * A typical usage of this method would be to enable a dynamic
+ * configuration of a Dicom file browser: the admin/user can
+ * select in the interface which Dicom tags should be displayed.
+ * @return An hashtable: whose keys are the names of the groups and whose
+ * corresponding values are lists of all the dictionnary entries
+ * among that group.
+ */
+map<string, list<string> > * gdcmDictSet::GetPubDictTagNamesByCategory(void) {
+ map<string, list<string> > * Result = new map<string, list<string> >;
+ TagKeyHT entries = gdcmDictSet::DefaultPubDict->GetEntries();
+
+ for (TagKeyHT::iterator tag = entries.begin(); tag != entries.end(); ++tag){
+ (*Result)[tag->second->GetFourth()].push_back(tag->second->GetName());
+ }
+ return Result;