diff --git a/CMakeLists.txt b/CMakeLists.txt
index 40ee33bf56fa1e7506ce6ff6ee82a25bfbbe8972..2dc89c3abc5d57e31957ffb2fd83f84f8830a9f0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -119,6 +119,7 @@ macro(append_gmsh_src DIRNAME FILES)
     list(APPEND LIST ${DIRNAME}/${FILE})
   endforeach(FILE)
   set(GMSH_SRC ${GMSH_SRC};${LIST} PARENT_SCOPE)
+  set(GMSH_DIRS ${GMSH_DIRS};${DIRNAME} PARENT_SCOPE)
 endmacro(append_gmsh_src)
 
 macro(find_all_libraries VARNAME LISTNAME SUFFIX)
@@ -630,6 +631,11 @@ include_directories(Common Fltk Geo Graphics Mesh Solver Numeric Parser Plugin
   contrib/Tetgen contrib/Fl_Tree contrib/gmm contrib/kbipack
   ${EXTERNAL_INCLUDES} ${CMAKE_BINARY_DIR}/Common)
 
+# create group sources for easier navigation in IDEs
+foreach(DIR ${GMSH_DIRS})
+  source_group(${DIR} REGULAR_EXPRESSION ${DIR}/.*)
+endforeach(DIR)
+
 # static library target: we don't build it by default (we could then
 # create the gmsh target by linking with it) because doing so slows
 # down the compile/link development a lot: running ranlib+ar on a