diff --git a/Geo/Makefile b/Geo/Makefile
index 138e37ff2ea76d45c60504b5bb84897847e02866..4da178dfee0e264711e262d30dc8e03b9fdddf6b 100644
--- a/Geo/Makefile
+++ b/Geo/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.206 2008-05-19 18:50:32 remacle Exp $
+# $Id: Makefile,v 1.207 2008-05-19 19:09:55 remacle Exp $
 #
 # Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 #
@@ -34,6 +34,7 @@ SRC = GEntity.cpp\
       GVertex.cpp GEdge.cpp GEdgeLoop.cpp GFace.cpp GRegion.cpp\
       gmshVertex.cpp gmshEdge.cpp gmshFace.cpp gmshRegion.cpp gmshSurface.cpp\
       OCCVertex.cpp OCCEdge.cpp OCCFace.cpp OCCRegion.cpp\
+      discreteFace.cpp discreteRegion.cpp\
       fourierEdge.cpp fourierFace.cpp fourierProjectionFace.cpp\
       GModel.cpp\
         GModelIO_Geo.cpp\
diff --git a/Geo/discreteFace.cpp b/Geo/discreteFace.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..964d4bd589b505f23b27c8c07a83303c58e2a44a
--- /dev/null
+++ b/Geo/discreteFace.cpp
@@ -0,0 +1,13 @@
+#include "discreteFace.h"
+#if !defined(HAVE_GMSH_EMBEDDED)
+#include "Geo.h"
+#endif
+
+discreteFace::discreteFace(GModel *model, int num) : GFace(model, num)
+{
+#if !defined(HAVE_GMSH_EMBEDDED)
+  Surface *s = Create_Surface(num, MSH_SURF_DISCRETE);
+  Tree_Add(model->getGEOInternals()->Surfaces, &s);
+#endif
+  meshStatistics.status = GFace::DONE;    
+}
diff --git a/Geo/discreteFace.h b/Geo/discreteFace.h
index c5827b6a094300693fde8008d122d151fc71d8be..47a7de6d052ed353d21ac70a5f40faa499af6f27 100644
--- a/Geo/discreteFace.h
+++ b/Geo/discreteFace.h
@@ -23,20 +23,9 @@
 #include "GModel.h"
 #include "GFace.h"
 
-#if !defined(HAVE_GMSH_EMBEDDED)
-#include "Geo.h"
-#endif
-
 class discreteFace : public GFace {
  public:
-  discreteFace(GModel *model, int num) : GFace(model, num)
-  {
-#if !defined(HAVE_GMSH_EMBEDDED)
-    Surface *s = Create_Surface(num, MSH_SURF_DISCRETE);
-    Tree_Add(model->getGEOInternals()->Surfaces, &s);
-#endif
-    meshStatistics.status = GFace::DONE;    
-  }
+  discreteFace(GModel *model, int num);
   virtual ~discreteFace() {}
   virtual GPoint point(double par1, double par2) const { throw; }
   virtual SPoint2 parFromPoint(const SPoint3 &p) const { throw; }
diff --git a/Geo/discreteRegion.cpp b/Geo/discreteRegion.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..be555a1c85891865eaf64ee986571bac09b0508d
--- /dev/null
+++ b/Geo/discreteRegion.cpp
@@ -0,0 +1,14 @@
+#include "discreteRegion.h"
+#include "GModel.h"
+
+#if !defined(HAVE_GMSH_EMBEDDED)
+#include "Geo.h"
+#endif
+
+discreteRegion::discreteRegion(GModel *model, int num) : GRegion(model, num)
+{
+#if !defined(HAVE_GMSH_EMBEDDED)
+  ::Volume *v = Create_Volume(num, MSH_VOLUME_DISCRETE);
+  Tree_Add(model->getGEOInternals()->Volumes, &v);
+#endif
+}
diff --git a/Geo/discreteRegion.h b/Geo/discreteRegion.h
index 077d91182a9fd8e7f15514e8bb108be2985346d6..7fa284b6405fc34a4a1112428815146dfb1fd09d 100644
--- a/Geo/discreteRegion.h
+++ b/Geo/discreteRegion.h
@@ -21,20 +21,9 @@
 // Please report all bugs and problems to <gmsh@geuz.org>.
 
 #include "GRegion.h"
-
-#if !defined(HAVE_GMSH_EMBEDDED)
-#include "Geo.h"
-#endif
-
 class discreteRegion : public GRegion {
  public:
-  discreteRegion(GModel *model, int num) : GRegion(model, num)
-  {
-#if !defined(HAVE_GMSH_EMBEDDED)
-    ::Volume *v = Create_Volume(num, MSH_VOLUME_DISCRETE);
-    Tree_Add(model->getGEOInternals()->Volumes, &v);
-#endif
-  }
+  discreteRegion(GModel *model, int num) ;
   virtual ~discreteRegion() {}
   virtual GeomType geomType() const { return DiscreteVolume; }
 };