diff --git a/src/SaxParser.cpp b/src/SaxParser.cpp
index 2b5d4b9348ad2940bc47bef414462c897923f17b..7aeb42fb1174b3f16ad691ae44cde4d68593535b 100644
--- a/src/SaxParser.cpp
+++ b/src/SaxParser.cpp
@@ -591,11 +591,15 @@ bool SaxParser::parseGeometryJPS(QString fileName, FacilityGeometry *geometry)
     if(!building->InitGeometry())
         return false; // create the polygons
 
-    int currentID=0;
+    int currentFloorPolyID=0;
+    int currentObstPolyID=0;
+
     // Setup the points
-    VTK_CREATE(vtkPoints,points);
+    VTK_CREATE(vtkPoints,floor_points);
+    VTK_CREATE(vtkPoints,obstacles_points);
     // Add the polygon to a list of polygons
-    VTK_CREATE(vtkCellArray,polygons);
+    VTK_CREATE(vtkCellArray,floor_polygons);
+    VTK_CREATE(vtkCellArray,obstacles_polygons);
 
     for (int i = 0; i < building->GetNumberOfRooms(); i++) {
         Room* r = building->GetRoom(i);
@@ -605,7 +609,6 @@ bool SaxParser::parseGeometryJPS(QString fileName, FacilityGeometry *geometry)
             SubRoom* sub = r->GetSubRoom(k);
 
             vector<Point> poly = sub->GetPolygon();
-
             if(sub->IsClockwise()==true) {
                 std::reverse(poly.begin(),poly.end());
             }
@@ -615,10 +618,10 @@ bool SaxParser::parseGeometryJPS(QString fileName, FacilityGeometry *geometry)
             polygon->GetPointIds()->SetNumberOfIds(poly.size());
 
             for (unsigned int s=0; s<poly.size(); s++) {
-                points->InsertNextPoint(poly[s]._x*FAKTOR,poly[s]._y*FAKTOR,sub->GetElevation(poly[s])*FAKTOR);
-                polygon->GetPointIds()->SetId(s, currentID++);
+                floor_points->InsertNextPoint(poly[s]._x*FAKTOR,poly[s]._y*FAKTOR,sub->GetElevation(poly[s])*FAKTOR);
+                polygon->GetPointIds()->SetId(s, currentFloorPolyID++);
             }
-            polygons->InsertNextCell(polygon);
+            floor_polygons->InsertNextCell(polygon);
 
             //plot the walls only for not stairs
             const vector<Wall>& walls= sub->GetAllWalls();
@@ -643,13 +646,12 @@ bool SaxParser::parseGeometryJPS(QString fileName, FacilityGeometry *geometry)
             geometry->addObjectLabel(pos,pos,caption,captionsColor);
 
             //plot the obstacles
-            const vector<Obstacle*>& obstacles = sub->GetAllObstacles();
-            for( unsigned int j=0; j<obstacles.size(); j++) {
-                Obstacle* obst= obstacles[j];
-                const vector<Wall>& walls= obst->GetAllWalls();
-                for(unsigned int w=0; w<walls.size(); w++) {
-                    Point p1 = walls[w].GetPoint1();
-                    Point p2 = walls[w].GetPoint2();
+            for(auto obst:sub->GetAllObstacles())
+            {
+                for(auto wall: obst->GetAllWalls())
+                {
+                    Point p1 = wall.GetPoint1();
+                    Point p2 = wall.GetPoint2();
                     double z1= sub->GetElevation(p1);
                     double z2= sub->GetElevation(p2);
                     geometry->addWall(p1._x*FAKTOR, p1._y*FAKTOR, z1*FAKTOR, p2._x*FAKTOR, p2._y*FAKTOR,z2*FAKTOR);
@@ -659,22 +661,38 @@ bool SaxParser::parseGeometryJPS(QString fileName, FacilityGeometry *geometry)
                 double z= sub->GetElevation(p);
                 double pos[3]= {p._x*FAKTOR,p._y*FAKTOR,z*FAKTOR};
                 geometry->addObjectLabel(pos,pos,obst->GetCaption(),captionsColor);
+
+                //add a special texture to the obstacles
+                auto poly = obst->GetPolygon();
+                //if(obst->IsClockwise()==true) {
+                //  std::reverse(poly.begin(),poly.end());
+                //}
+
+                // Create the polygon
+                VTK_CREATE(vtkPolygon,polygon);
+                polygon->GetPointIds()->SetNumberOfIds(poly.size());
+
+                for (unsigned int s=0; s<poly.size(); s++) {
+                    obstacles_points->InsertNextPoint(poly[s]._x*FAKTOR,poly[s]._y*FAKTOR,sub->GetElevation(poly[s])*FAKTOR);
+                    polygon->GetPointIds()->SetId(s, currentObstPolyID++);
+                }
+                obstacles_polygons->InsertNextCell(polygon);
             }
         }
     }
 
     // Create a PolyData to represent the floor
-    VTK_CREATE(vtkPolyData, polygonPolyData);
-    polygonPolyData->SetPoints(points);
-    polygonPolyData->SetPolys(polygons);
-    geometry->addFloor(polygonPolyData);
+    VTK_CREATE(vtkPolyData, floorPolygonPolyData);
+    floorPolygonPolyData->SetPoints(floor_points);
+    floorPolygonPolyData->SetPolys(floor_polygons);
+    geometry->addFloor(floorPolygonPolyData);
 
     // Create a PolyData to represen the obstacles
     //TODO:
-    //VTK_CREATE(vtkPolyData, polygonPolyData);
-    //polygonPolyData->SetPoints(points);
-    //polygonPolyData->SetPolys(polygons);
-    //geometry->addFloor(polygonPolyData);
+    VTK_CREATE(vtkPolyData, obstPolygonPolyData);
+    obstPolygonPolyData->SetPoints(obstacles_points);
+    obstPolygonPolyData->SetPolys(obstacles_polygons);
+    geometry->addObstacles(obstPolygonPolyData);
 
 
     // add the crossings
diff --git a/src/geometry/FacilityGeometry.cpp b/src/geometry/FacilityGeometry.cpp
index 543c98e8d7bb9be0afd41e9fe626ebb4d2d1c964..65d8a892443d3d236247f7074cf7d7e52657c3a7 100644
--- a/src/geometry/FacilityGeometry.cpp
+++ b/src/geometry/FacilityGeometry.cpp
@@ -80,6 +80,7 @@ FacilityGeometry::FacilityGeometry()
     assembly3D = vtkAssembly::New();
 
     floorActor = vtkActor::New();
+    obstaclesActor = vtkActor::New();
 
     captions=vtkActor2DCollection::New();
     linesPlotter2D = new LinePlotter2D();
@@ -122,6 +123,7 @@ FacilityGeometry::~FacilityGeometry()
     assemblyDoors3D->Delete();
     assembly3D->Delete();
     floorActor->Delete();
+    obstaclesActor->Delete();
 
     delete linesPlotter2D;
 }
@@ -579,6 +581,28 @@ void FacilityGeometry::addFloor(vtkPolyData* polygonPolyData )
     assembly3D->AddPart(floorActor);
 }
 
+void FacilityGeometry::addObstacles(vtkPolyData* polygonPolyData )
+{
+    //triagulate everything
+    // Create a mapper and actor
+    VTK_CREATE(vtkTriangleFilter,filter);
+    VTK_CREATE(vtkPolyDataMapper,mapper);
+
+#if VTK_MAJOR_VERSION <= 5
+    filter->SetInput(polygonPolyData);
+    mapper->SetInput(filter->GetOutput());
+#else
+    filter->SetInputData(polygonPolyData);
+    mapper->SetInputConnection(filter->GetOutputPort());
+#endif
+
+    obstaclesActor->SetMapper(mapper);
+    obstaclesActor->GetProperty()->SetColor(0.4,0.4,0.4);
+    obstaclesActor->GetProperty()->SetOpacity(0.5);
+
+    assembly2D->AddPart(obstaclesActor);
+    assembly3D->AddPart(obstaclesActor);
+}
 
 void FacilityGeometry::addFloor(double x1, double y1, double x2, double y2, double z)
 {
@@ -770,6 +794,11 @@ void FacilityGeometry::changeFloorColor(double *color)
     floorActor->GetProperty()->SetColor(color);
 }
 
+void FacilityGeometry::changeObstaclesColor(double *color)
+{
+    obstaclesActor->GetProperty()->SetColor(color);
+}
+
 void FacilityGeometry::set2D(bool status)
 {
     assembly2D->SetVisibility(status);
diff --git a/src/geometry/FacilityGeometry.h b/src/geometry/FacilityGeometry.h
index 0553a10e275dfc52c7f7048903f16c6f9c70e68f..05610a3d3a9a53d44b69a16c2e7c05fb27800ec4 100644
--- a/src/geometry/FacilityGeometry.h
+++ b/src/geometry/FacilityGeometry.h
@@ -106,6 +106,9 @@ public:
     void addFloor(double x1, double y1, double x2, double y2, double z=0);
     void addFloor(vtkPolyData* polygonPolyData);
 
+    ///draw obstacles
+    void addObstacles(vtkPolyData* polygonPolyData);
+
     /// 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);
@@ -117,6 +120,7 @@ public:
     void changeExitsColor(double* color);
     void changeNavLinesColor(double* color);
     void changeFloorColor(double* color);
+    void changeObstaclesColor(double* color);
 
     void set2D(bool status);
     void set3D(bool status);
@@ -163,6 +167,7 @@ private:
     vtkAssembly* assembly3D;
 
     vtkActor* floorActor;
+    vtkActor* obstaclesActor;
 
     // other parts
     vtkAssembly* assemblyCaptions;