diff --git a/Geo/GModelIO_MSH.cpp b/Geo/GModelIO_MSH.cpp
index 00127caa3b62fe2e5c636163c98fd1e79a1fe50d..73232135000dca622c650db97de970e1068ca60a 100644
--- a/Geo/GModelIO_MSH.cpp
+++ b/Geo/GModelIO_MSH.cpp
@@ -348,7 +348,20 @@ int GModel::readMSH(const std::string &name)
   else
     _storeVerticesInEntities(_vertexMapCache);
 
-  // FIXME: store physicals in entities
+  // store physicals in entities
+  for(int dim = 0; dim < 4; dim++){
+    for(std::map<int, std::vector<int> >::iterator it = entities[dim].begin();
+        it != entities[dim].end(); it++){
+      GEntity *ge = 0;
+      switch(dim){
+      case 0: ge = getVertexByTag(it->first); break;
+      case 1: ge = getEdgeByTag(it->first); break;
+      case 2: ge = getFaceByTag(it->first); break;
+      case 3: ge = getRegionByTag(it->first); break;
+      }
+      ge->physicals = it->second;
+    }
+  }
 
   fclose(fp);