diff --git a/Geo/discreteRegion.cpp b/Geo/discreteRegion.cpp
index cf07a936d3cff124b5a77e52bcedfede528d02e9..b87be48c515503adaba1ee9470819bdb9b0af269 100644
--- a/Geo/discreteRegion.cpp
+++ b/Geo/discreteRegion.cpp
@@ -7,12 +7,27 @@
 #include "GModelIO_GEO.h"
 #include "Geo.h"
 
-discreteRegion::discreteRegion(GModel *model, int num) : GRegion(model, num)
+discreteRegion::discreteRegion(GModel *model, int num)
+  : GRegion(model, num), _geometry(false)
 {
   ::Volume *v = CreateVolume(num, MSH_VOLUME_DISCRETE);
   Tree_Add(model->getGEOInternals()->Volumes, &v);
 }
 
-discreteRegion::discreteRegion(GModel *model) : GRegion(model, 0)
+discreteRegion::discreteRegion(GModel *model)
+  : GRegion(model, 0), _geometry(false)
 {
 }
+
+int discreteRegion::createGeometry()
+{
+  if(l_faces.empty()) {
+    Msg::Error("Discrete volume %d has no surfaces on its boundary", tag());
+    return 1;
+  }
+
+  // we should check that the surfaces form one or more (closed) shell(s)
+  _geometry = true;
+
+  return 0;
+}
diff --git a/Geo/discreteRegion.h b/Geo/discreteRegion.h
index d700564792299fbcc34025379cfa59b68221f891..c98c85e67a07fbee3e9a3ff08c02405463ace36b 100644
--- a/Geo/discreteRegion.h
+++ b/Geo/discreteRegion.h
@@ -11,11 +11,15 @@
 #include "MFace.h"
 
 class discreteRegion : public GRegion {
+private:
+  bool _geometry;
 public:
   discreteRegion(GModel *model, int num);
   discreteRegion(GModel *model);
   virtual ~discreteRegion() {}
   virtual GeomType geomType() const { return DiscreteVolume; }
+  virtual bool haveParametrization() { return _geometry; }
+  int createGeometry();
 };
 
 #endif