-class DriverMED_Family;
-typedef boost::shared_ptr<DriverMED_Family> DriverMED_FamilyPtr;
-typedef std::list<DriverMED_FamilyPtr> DriverMED_FamilyPtrList;
-typedef std::map<int,SMESHDS_SubMesh*> SMESHDS_SubMeshPtrMap;
-typedef std::list<SMESHDS_GroupBase*> SMESHDS_GroupBasePtrList;
-typedef std::set<const SMDS_MeshElement*> ElementsSet;
-
-class DriverMED_Family
+#define REST_EDGES_FAMILY -1
+#define REST_FACES_FAMILY -2
+#define REST_VOLUMES_FAMILY -3
+#define REST_0DELEM_FAMILY -4
+#define REST_BALL_FAMILY -5
+#define FIRST_ELEM_FAMILY -6
+
+// Not In Group families
+#define NIG_EDGES_FAMILY INT_MAX-1
+#define NIG_FACES_FAMILY INT_MAX-2
+#define NIG_VOLS_FAMILY INT_MAX-3
+#define NIG_0DELEM_FAMILY INT_MAX-4
+#define NIG_BALL_FAMILY INT_MAX-5
+#define NIG_GROUP_PREFIX "NOT_IN_GRP"
+
+typedef std::list<DriverMED_FamilyPtr > DriverMED_FamilyPtrList;
+typedef std::map<int,SMESHDS_SubMesh* > SMESHDS_SubMeshPtrMap;
+typedef std::list<SMESHDS_GroupBase* > SMESHDS_GroupBasePtrList;
+typedef std::set<const SMDS_MeshElement*,TIDCompare > ElementsSet;
+typedef boost::container::flat_set< SMDSAbs_ElementType > ElemTypeSet;
+
+class MESHDRIVERMED_EXPORT DriverMED_Family