diff --git a/src/SaxParser.cpp b/src/SaxParser.cpp
index 6f8e20cee145d5ef894b865a5370ce7dafabd371..eb753d009075c3f011c95ab807e50beda6b99ca7 100644
--- a/src/SaxParser.cpp
+++ b/src/SaxParser.cpp
@@ -96,7 +96,7 @@ SaxParser::SaxParser(GeometryFactory& geoFac, SyncData& dataset, double * fps):_
     _color=0.0;
     _dataset.clearFrames();
 
-    _geometry = std::shared_ptr<FacilityGeometry>(new FacilityGeometry("No name"));
+    _geometry = std::shared_ptr<FacilityGeometry>(new FacilityGeometry("No name", "No name", "No name"));
     _geoFactory.AddElement(-1,-1,_geometry);
 
     //default header
@@ -634,7 +634,6 @@ void SaxParser::clearPoints()
 /// provided for convenience and will be removed in the next version
 bool SaxParser::parseGeometryJPS(QString fileName, GeometryFactory& geoFac)
 {
-
     double captionsColor=0;//red
     if(!fileName.endsWith(".xml",Qt::CaseInsensitive)) return false;
     QString wd;
@@ -654,7 +653,10 @@ bool SaxParser::parseGeometryJPS(QString fileName, GeometryFactory& geoFac)
     {
         for(auto&& itr_subroom: itr_room.second->GetAllSubRooms())
         {
-            auto geometry= shared_ptr<FacilityGeometry>(new FacilityGeometry(itr_subroom.second->GetType()));
+              auto geometry= shared_ptr<FacilityGeometry>(
+                    new FacilityGeometry(itr_subroom.second->GetType(), itr_room.second->GetCaption(),itr_subroom.second->GetCaption()
+              )
+        );
 
             int currentFloorPolyID=0;
             int currentObstPolyID=0;
@@ -803,7 +805,7 @@ void SaxParser::parseGeometryTRAV(QString content, GeometryFactory& geoFac,QDomN
     // to be filled
     QDomDocument doc("");
     QDomNode geoNode;
-    auto geometry= shared_ptr<FacilityGeometry>(new FacilityGeometry("no mame"));
+    auto geometry= shared_ptr<FacilityGeometry>(new FacilityGeometry("no name", "no name", "no name"));
 
     //first try to open the file
     if(content.endsWith(".trav",Qt::CaseInsensitive) ) {
@@ -1039,6 +1041,7 @@ QString SaxParser::extractGeometryFilename(QString &filename)
 
 void SaxParser::parseGeometryXMLV04(QString filename, GeometryFactory& geoFac)
 {
+      cout << "parsing 04\n" ;
     QDomDocument doc("");
     QFile file(filename);
 
@@ -1049,7 +1052,8 @@ void SaxParser::parseGeometryXMLV04(QString filename, GeometryFactory& geoFac)
         //cout<<"The file is too large: "<<filename.toStdString()<<endl;
         return;
     }
-    auto geo= shared_ptr<FacilityGeometry>(new FacilityGeometry("no name"));
+            
+    auto geo= shared_ptr<FacilityGeometry>(new FacilityGeometry("no name", "no name", "no name"));
     //cout<<"filename: "<<filename.toStdString()<<endl;
 
     //TODO: check if you can parse this with the building classes.
@@ -1129,8 +1133,10 @@ void SaxParser::parseGeometryXMLV04(QString filename, GeometryFactory& geoFac)
         position[1]/=pos_count;
         position[2]/=pos_count;
         geo->addObjectLabel(position,position,caption,color);
-        //cout<<"position: [" <<position[0]<<", "<<position[1]<<", "<<position[2]<<" ]"<<endl;;
-
+        geo->SetRoomCaption(roomCaption);
+        geo->SetSubRoomCaption(subroomCaption);
+        cout<<"position: [" <<position[0]<<", "<<position[1]<<", "<<position[2]<<" ]"<<endl;;
+        cout << roomCaption<< "  " << subroomCaption << "\n" ;
     }
 
     QDomNodeList xObstaclesList=doc.elementsByTagName("obstacle");
@@ -1406,7 +1412,7 @@ bool SaxParser::ParseGradientFieldVTK(QString fileName, GeometryFactory& geoFac)
     //conversion from m to cm
     actor->SetScale(100);
 
-    auto gradient_field= shared_ptr<FacilityGeometry>(new FacilityGeometry("Gradient Field"));
+    auto gradient_field= shared_ptr<FacilityGeometry>(new FacilityGeometry("Gradient Field", "no name", "no name"));
     gradient_field->addGradientField(actor);
 
     geoFac.AddElement(-1,-1,gradient_field);
diff --git a/src/geometry/Building.cpp b/src/geometry/Building.cpp
index 89400ce07315130e0c4cc5f877b8d4768b913703..dda5bfef89c83f5bfe2c16f42b948cdfa0e8f54e 100644
--- a/src/geometry/Building.cpp
+++ b/src/geometry/Building.cpp
@@ -439,7 +439,7 @@ bool Building::LoadGeometry(const std::string &geometryfile)
           for(TiXmlElement* xSubRoom = xRoom->FirstChildElement("subroom"); xSubRoom;
                     xSubRoom = xSubRoom->NextSiblingElement("subroom")) {
 
-
+               string subroom_caption = xmltoa(xSubRoom->Attribute("caption"), "no Caption");
                string subroom_id = xmltoa(xSubRoom->Attribute("id"), "-1");
                string SubroomClosed = xmltoa(xSubRoom->Attribute("closed"), "0");
                string type = xmltoa(xSubRoom->Attribute("class"),"subroom");
@@ -471,7 +471,7 @@ bool Building::LoadGeometry(const std::string &geometryfile)
                     //normal subroom or corridor
                     subroom = new NormalSubRoom();
                }
-
+               subroom->SetCaption(subroom_caption);
                subroom->SetType(type);
                subroom->SetPlanEquation(A_x,B_y,C_z);
                subroom->SetRoomID(room->GetID());
diff --git a/src/geometry/FacilityGeometry.cpp b/src/geometry/FacilityGeometry.cpp
index 79b592380702698634f8e495c4231a78c386a38e..3ecb786dfae33be1ecec62cedccca9ea1d8aa917 100644
--- a/src/geometry/FacilityGeometry.cpp
+++ b/src/geometry/FacilityGeometry.cpp
@@ -68,7 +68,7 @@ using namespace std;
     vtkSmartPointer<type> name = vtkSmartPointer<type>::New()
 
 
-FacilityGeometry::FacilityGeometry(const string &description)
+FacilityGeometry::FacilityGeometry(const string &description, const string &roomCaption, const string &subroomCaption)
 {
 
     assembly = vtkAssembly::New();
@@ -107,6 +107,8 @@ FacilityGeometry::FacilityGeometry(const string &description)
     doorColor = 50;
     navlineColor=95;
     _description=description;
+    _roomCaption=roomCaption;
+    _subroomCaption=subroomCaption;
 }
 
 FacilityGeometry::~FacilityGeometry()
@@ -891,3 +893,17 @@ const std::string & FacilityGeometry::GetDescription() const
 {
     return _description;
 }
+
+const std::string & FacilityGeometry::GetSubRoomCaption() const
+{
+    return _subroomCaption;
+}
+
+const std::string & FacilityGeometry::GetRoomCaption() const
+{
+    return _roomCaption;
+}
+
+void FacilityGeometry::SetRoomCaption(std::string s) {_roomCaption=s; }
+
+void FacilityGeometry::SetSubRoomCaption(std::string s) {_subroomCaption=s; }
diff --git a/src/geometry/FacilityGeometry.h b/src/geometry/FacilityGeometry.h
index ec8eb65c3f849df73a680715748fded58911ede0..9b9cff255c54fd113b09d9e67b81d731aca999e5 100644
--- a/src/geometry/FacilityGeometry.h
+++ b/src/geometry/FacilityGeometry.h
@@ -63,8 +63,7 @@ public:
         BOX      //!< BOX defined by centre, length, width and height
     };
 
-    FacilityGeometry(const std::string & description);
-
+    FacilityGeometry(const std::string &description, const std::string &roomCaption, const std::string &subroomCaption);
     virtual ~FacilityGeometry();
 
     vtkAssembly* getActor2D();
@@ -114,7 +113,10 @@ public:
     void addGradientField(vtkActor* gradientField);
 
     const std::string & GetDescription() const ;
-
+    const std::string & GetRoomCaption() const ;
+    const std::string & GetSubRoomCaption() const ;
+    void SetRoomCaption(std::string s);
+    void SetSubRoomCaption(std::string s);
     /// draw other kinds of objects
     void addObjectSphere(double center[3], double radius, double couleur=1);
     void addObjectCone(double center[3], double height, double radius, double couleur=2);
@@ -186,6 +188,8 @@ private:
     vtkActor2DCollection* captions;
 
     std::string _description;
+    std::string _roomCaption;
+    std::string _subroomCaption;
     bool _visibility=true;
 };
 
diff --git a/src/geometry/GeometryFactory.cpp b/src/geometry/GeometryFactory.cpp
index 4e489107d1ddebb67809ac1e5a91d253122f5d7a..5aa8825b2ee2fecdc6cbbcdaf804fcee1be74af7 100644
--- a/src/geometry/GeometryFactory.cpp
+++ b/src/geometry/GeometryFactory.cpp
@@ -64,6 +64,7 @@ void GeometryFactory::ChangeWallsColor(double* color)
                 subroom.second->changeWallsColor(color);
         }
     }
+
 }
 
 void GeometryFactory::ChangeExitsColor(double* color)
@@ -220,21 +221,35 @@ bool GeometryFactory::RefreshView()
 
         for (auto&& room: _geometryFactory)
         {
+
             //room caption
             //QStandardItem *roomcaption = new QStandardItem( QString("R %0").arg(room.first));
             //roomcaption->setEditable( false );
             //_model.setItem(room.first, 1, roomcaption);
+            QString roomCaption;
+            if (room.first>=0)
+                roomCaption = QString::fromStdString(_geometryFactory[room.first][0]->GetRoomCaption());
+            else
+                roomCaption = "empty";
+
+            QStandardItem *item = new QStandardItem( QString("Room: %0 (%1)")
+                                                     .arg(room.first)
+                                                     .arg(roomCaption)
+                              );
+//                                                   .arg(QString::fromStdString(
+         //   _geometryFactory[room.first][0]->GetRoomCaption()
 
-            QStandardItem *item = new QStandardItem( QString("Room:%0").arg(room.first));
+            // room.second[0].second->GetRoomCaption()
             item->setCheckable(true);
             item->setCheckState(Qt::Checked);
 
             for(auto&& subroom:room.second)
             {
                 QStandardItem *child = new QStandardItem(
-                            QString("%0: (%1)")
-                            .arg(QString::fromStdString(subroom.second->GetDescription()))
+                            QString("%2: %0 (%1)")
                             .arg(subroom.first)
+                                    .arg(QString::fromStdString(subroom.second->GetSubRoomCaption()))
+                                    .arg(QString::fromStdString(subroom.second->GetDescription()))
                             );
 
                 child->setEditable(false);
diff --git a/src/geometry/SubRoom.cpp b/src/geometry/SubRoom.cpp
index 2866572c07a974bcae3e9cb2822c069f0891110d..82209a1da1b1423536f0eed411fa7f322a7ee32b 100644
--- a/src/geometry/SubRoom.cpp
+++ b/src/geometry/SubRoom.cpp
@@ -56,7 +56,7 @@ SubRoom::SubRoom()
      _walls = vector<Wall > ();
      _poly = vector<Point > ();
      _obstacles=vector<Obstacle*> ();
-
+     _caption = "no subroom caption";
      _crossings = vector<Crossing*>();
      _transitions = vector<Transition*>();
      _hlines = vector<Hline*>();
@@ -80,6 +80,15 @@ SubRoom::~SubRoom()
      _obstacles.clear();
 }
 
+void SubRoom::SetCaption(const string& s)
+{
+     _caption = s;
+}
+
+const string& SubRoom::GetCaption() const
+{
+     return _caption;
+}
 
 void SubRoom::SetSubRoomID(int ID)
 {
diff --git a/src/geometry/SubRoom.h b/src/geometry/SubRoom.h
index 8ee6788380bccc552f75a30d171c1b09546335dd..cc34f2c40136187f9e04c068d7a22566139ff524 100644
--- a/src/geometry/SubRoom.h
+++ b/src/geometry/SubRoom.h
@@ -59,6 +59,7 @@ private:
      int _id;
      /// the unique id resulting from the count of all subrooms in the system
      int _uid;
+     std::string _caption;
      int _roomID;
      std::vector<int> _goalIDs; // all navigation lines contained in this subroom
      double _area;
@@ -103,6 +104,12 @@ public:
       * Set/Get the associated room id
       */
      void SetRoomID(int ID);
+     /**
+      * Set/Get the caption of the room
+      */
+     const std::string& GetCaption() const;
+
+     void SetCaption(const std::string& s);
 
      /**
       * Set the plane equation for this subroom.