diff --git a/Common/ListUtils.cpp b/Common/ListUtils.cpp
index 6a4ac5c9b0e5a1a216834ad31058253fbe21ba06..922e13aebd5a2f0b73d089af8a1f8106a8eb6355 100644
--- a/Common/ListUtils.cpp
+++ b/Common/ListUtils.cpp
@@ -154,6 +154,23 @@ void List_Sort(List_T * liste, int (*fcmp) (const void *a, const void *b))
   qsort(liste->array, liste->n, liste->size, fcmp);
 }
 
+void List_Unique(List_T * liste, int (*fcmp) (const void *a, const void *b))
+{
+  if(liste->isorder != 1) {
+    List_Sort(liste, fcmp);
+    liste->isorder = 1;
+  }
+  if(!List_Nbr(liste))
+    return;
+  int write_index=0;
+  for( int i=1; i < List_Nbr(liste); i++){
+     void *data=List_Pointer(liste,i);
+    if((fcmp(data,(void*)List_Pointer(liste,write_index))))
+      List_Write(liste,++write_index,data);
+  }
+  liste->n=write_index+1;
+}
+
 int List_Search(List_T * liste, void *data,
                 int (*fcmp) (const void *a, const void *b))
 {
diff --git a/Common/ListUtils.h b/Common/ListUtils.h
index e08b0a2908287b3cbc0a302b853db1f10008f9db..ebf2d4220b313e4a5c3550c68e55738785e74ac2 100644
--- a/Common/ListUtils.h
+++ b/Common/ListUtils.h
@@ -35,6 +35,7 @@ void   *List_Pointer_NoChange(List_T *liste, int index);
 void   *List_Pointer_Fast(List_T *liste, int index);
 void   *List_Pointer_Test(List_T *liste, int index);
 void    List_Sort(List_T *liste, int (*fcmp)(const void *a, const void *b));
+void    List_Unique(List_T *liste, int (*fcmp)(const void *a, const void *b));
 int     List_Search(List_T *liste, void *data, int (*fcmp)(const void *a, const void *b));
 int     List_ISearch(List_T *liste, void *data, int (*fcmp)(const void *a, const void *b));
 int     List_ISearchSeq(List_T *liste, void * data, int (*fcmp)(const void *a, const void *b));
diff --git a/Fltk/menuWindow.cpp b/Fltk/menuWindow.cpp
index 1afbfd1dc6d939b7e98b04d8bf4b37d5a0eda5f5..4945a130a7586142358e174e760967f7c94c4498 100644
--- a/Fltk/menuWindow.cpp
+++ b/Fltk/menuWindow.cpp
@@ -940,16 +940,21 @@ static void add_new_surface_volume(int mode)
               }
             }
             if(ib == 'l') {
-              int num = (type == ENT_LINE) ? 
-                GUI::instance()->selectedEdges[0]->tag() :
-                GUI::instance()->selectedFaces[0]->tag();
-              if(select_contour(type, num, List1)) {
-                if(type == ENT_LINE)
-                  add_lineloop(List1, GModel::current()->getFileName(), &num);
-                else
-                  add_surfloop(List1, GModel::current()->getFileName(), &num);
-                List_Reset(List1);
-                List_Add(List2, &num);
+              int size = (type == ENT_LINE) ? 
+                GUI::instance()->selectedEdges.size() :
+                GUI::instance()->selectedFaces.size();
+              for(int i=0;i<size;i++){
+                int num = (type == ENT_LINE) ? 
+                  GUI::instance()->selectedEdges[i]->tag() :
+                  GUI::instance()->selectedFaces[i]->tag();
+                if(select_contour(type, num, List1)) {
+                  if(type == ENT_LINE)
+                    add_lineloop(List1, GModel::current()->getFileName(), &num);
+                  else
+                    add_surfloop(List1, GModel::current()->getFileName(), &num);
+                  List_Reset(List1);
+                  List_Add(List2, &num);
+                }
               }
             }
             if(ib == 'r') {
@@ -957,6 +962,7 @@ static void add_new_surface_volume(int mode)
                            "surface/volume creation");
             }
           }
+          List_Unique(List2,fcmp_absint);
           if(List_Nbr(List2)) {
             switch (mode) {
             case 0: add_surf("Plane Surface", List2, 
diff --git a/Geo/SOrientedBoundingBox.cpp b/Geo/SOrientedBoundingBox.cpp
index e140152361a03a1a5d490a7f3ddd322bee3ffc47..494566f8af2bbbc105d68d056e0d2d5931ff9a6d 100644
--- a/Geo/SOrientedBoundingBox.cpp
+++ b/Geo/SOrientedBoundingBox.cpp
@@ -6,6 +6,7 @@
 // Contributed by Bastien Gorissen
 
 #include <math.h>
+#include <stdlib.h>
 #include "SOrientedBoundingBox.h"
 #include "GmshMatrix.h"