diff --git a/src/OpenMesh/Apps/CMakeLists.txt b/src/OpenMesh/Apps/CMakeLists.txt
index f60e90f9d819f75143bca80e306926ca709dc420..b88bb6a872115da21ec8f2904d5f23232e8a6b40 100644
--- a/src/OpenMesh/Apps/CMakeLists.txt
+++ b/src/OpenMesh/Apps/CMakeLists.txt
@@ -7,6 +7,7 @@ find_package (GLEW)
acg_qt4 ()
+add_subdirectory (Dualizer)
add_subdirectory (Decimating/commandlineDecimater)
add_subdirectory (Smoothing)
add_subdirectory (Subdivider/commandlineSubdivider)
diff --git a/src/OpenMesh/Apps/Dualizer/CMakeLists.txt b/src/OpenMesh/Apps/Dualizer/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..861f5fed76c1407b58a3ab323c503ce89e816ff6
--- /dev/null
+++ b/src/OpenMesh/Apps/Dualizer/CMakeLists.txt
@@ -0,0 +1,20 @@
+include (ACGCommon)
+
+include_directories (
+ ../../..
+ ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+set (targetName Dualizer)
+
+# collect all header and source files
+acg_append_files (headers "*.hh" .)
+acg_append_files (sources "*.cc" .)
+
+acg_add_executable (${targetName} ${headers} ${sources})
+
+target_link_libraries (${targetName}
+ OpenMeshCore
+ OpenMeshTools
+)
+
diff --git a/src/OpenMesh/Apps/Dualizer/dualizer.cc b/src/OpenMesh/Apps/Dualizer/dualizer.cc
new file mode 100644
index 0000000000000000000000000000000000000000..7fbf8d7702e5a92e192b54d02182254f03566d8f
--- /dev/null
+++ b/src/OpenMesh/Apps/Dualizer/dualizer.cc
@@ -0,0 +1,75 @@
+/*===========================================================================*\
+ * *
+ * OpenMesh *
+ * Copyright (C) 2001-2009 by Computer Graphics Group, RWTH Aachen *
+ * www.openmesh.org *
+ * *
+ *---------------------------------------------------------------------------*
+ * This file is part of OpenMesh. *
+ * *
+ * OpenMesh is free software: you can redistribute it and/or modify *
+ * it under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation, either version 3 of *
+ * the License, or (at your option) any later version with the *
+ * following exceptions: *
+ * *
+ * If other files instantiate templates or use macros *
+ * or inline functions from this file, or you compile this file and *
+ * link it with other files to produce an executable, this file does *
+ * not by itself cause the resulting executable to be covered by the *
+ * GNU Lesser General Public License. This exception does not however *
+ * invalidate any other reasons why the executable file might be *
+ * covered by the GNU Lesser General Public License. *
+ * *
+ * OpenMesh is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU LesserGeneral Public *
+ * License along with OpenMesh. If not, *
+ * see . *
+ * *
+\*===========================================================================*/
+
+/*===========================================================================*\
+ * *
+ * $Revision$ *
+ * $Date$ *
+ * *
+\*===========================================================================*/
+
+#include
+
+#include
+#include
+
+#include
+
+typedef OpenMesh::PolyMesh_ArrayKernelT<> MyMesh;
+
+
+int main(int argc, char **argv)
+{
+ MyMesh mesh;
+
+ // read mesh from argv[1]
+ if ( !OpenMesh::IO::read_mesh(mesh, argv[1]) )
+ {
+ std::cerr << "Cannot read mesh from file" << argv[1] << std::endl;
+ return 1;
+ }
+
+ MyMesh *dual = OpenMesh::Util::MeshDual(mesh);
+
+ // write mesh to output.obj
+ if ( !OpenMesh::IO::write_mesh(*dual, "output.obj") )
+ {
+ std::cerr << "Cannot write mesh to file 'output.obj'" << std::endl;
+ return 1;
+ }
+
+ delete dual;
+
+ return 0;
+}