diff --git a/CHANGELOG.md b/CHANGELOG.md
index 66c2b6c55ff050a819bb0ed490f90e29ad1aadfc..b73317db3030557fe920a01b8e0bd0f51a707ef5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,10 @@
 - Added CMake option `OGS_CPU_ARCHITECTURE`, #858, [donwloadable binaries](http://docs.opengeosys.org/download) build by Jenkins should now run on more CPUs
 - Added CMake options for Boost, VTK and Eigen (`OGS_LIB_BOOST`, ...) to specify if libs are searched on the system first, then build them locally (`Default`), or you can specify to just use system libs (`System`) or force a local build (`Local`)
 
+### Documentation
+
+- Added [offline viewable Doxygen documentation](http://docs.opengeosys.org/docs/devguide/documentation/offline-documentation-viewer)
+
 
 # 6.0.3
 
diff --git a/Documentation/DocsetFeed.xml.in b/Documentation/DocsetFeed.xml.in
new file mode 100644
index 0000000000000000000000000000000000000000..dc46e38575e7187b65ce5ac1533514f4f5a97856
--- /dev/null
+++ b/Documentation/DocsetFeed.xml.in
@@ -0,0 +1,4 @@
+<entry>
+	<version>${OGS_VERSION}</version>
+	<url>http://s3-eu-central-1.amazonaws.com/opengeosys/ogs6-docset/ogs6.tgz</url>
+</entry>
diff --git a/Documentation/Doxyfile.in b/Documentation/Doxyfile.in
index f925119ca182b41124dffae4b003d411b4ce19a0..1925e7ba10689882b7b94598483e52e826444395 100644
--- a/Documentation/Doxyfile.in
+++ b/Documentation/Doxyfile.in
@@ -1524,7 +1524,7 @@ MATHJAX_CODEFILE       =
 # The default value is: YES.
 # This tag requires that the tag GENERATE_HTML is set to YES.
 
-SEARCHENGINE           = YES
+SEARCHENGINE           = ${DOCS_SEARCHENGINE_STRING}
 
 # When the SERVER_BASED_SEARCH tag is enabled the search engine will be
 # implemented using a web server instead of a web client using Javascript. There
@@ -1669,7 +1669,7 @@ EXTRA_PACKAGES         =
 # to HTML_HEADER.
 # This tag requires that the tag GENERATE_LATEX is set to YES.
 
-LATEX_HEADER           = 
+LATEX_HEADER           =
 
 # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
 # generated LaTeX document. The footer should contain everything after the last
@@ -1680,7 +1680,7 @@ LATEX_HEADER           =
 # Note: Only use a user-defined footer if you know what you are doing!
 # This tag requires that the tag GENERATE_LATEX is set to YES.
 
-LATEX_FOOTER           = 
+LATEX_FOOTER           =
 
 # The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
 # LaTeX style sheets that are included after the standard style sheets created
@@ -1691,7 +1691,7 @@ LATEX_FOOTER           =
 # list).
 # This tag requires that the tag GENERATE_LATEX is set to YES.
 
-LATEX_EXTRA_STYLESHEET = 
+LATEX_EXTRA_STYLESHEET =
 
 # The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
 # other source files which should be copied to the LATEX_OUTPUT output
@@ -1699,7 +1699,7 @@ LATEX_EXTRA_STYLESHEET =
 # markers available.
 # This tag requires that the tag GENERATE_LATEX is set to YES.
 
-LATEX_EXTRA_FILES      = 
+LATEX_EXTRA_FILES      =
 
 # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
 # prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
@@ -1799,14 +1799,14 @@ RTF_HYPERLINKS         = NO
 # default style sheet that doxygen normally uses.
 # This tag requires that the tag GENERATE_RTF is set to YES.
 
-RTF_STYLESHEET_FILE    = 
+RTF_STYLESHEET_FILE    =
 
 # Set optional variables used in the generation of an RTF document. Syntax is
 # similar to doxygen's config file. A template extensions file can be generated
 # using doxygen -e rtf extensionFile.
 # This tag requires that the tag GENERATE_RTF is set to YES.
 
-RTF_EXTENSIONS_FILE    = 
+RTF_EXTENSIONS_FILE    =
 
 # If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
 # with syntax highlighting in the RTF output.
@@ -1851,7 +1851,7 @@ MAN_EXTENSION          = .3
 # MAN_EXTENSION with the initial . removed.
 # This tag requires that the tag GENERATE_MAN is set to YES.
 
-MAN_SUBDIR             = 
+MAN_SUBDIR             =
 
 # If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
 # will generate one additional man file for each entity documented in the real
@@ -2005,7 +2005,7 @@ SEARCH_INCLUDES        = YES
 # preprocessor.
 # This tag requires that the tag SEARCH_INCLUDES is set to YES.
 
-INCLUDE_PATH           = 
+INCLUDE_PATH           =
 
 # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
 # patterns (like *.h and *.hpp) to filter out the header-files in the
@@ -2343,12 +2343,12 @@ DIAFILE_DIRS           =
 # generate a warning when it encounters a \startuml command in this case and
 # will not generate output for the diagram.
 
-PLANTUML_JAR_PATH      = 
+PLANTUML_JAR_PATH      =
 
 # When using plantuml, the specified paths are searched for files specified by
 # the !include statement in a plantuml block.
 
-PLANTUML_INCLUDE_PATH  = 
+PLANTUML_INCLUDE_PATH  =
 
 # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
 # that will be shown in the graph. If the number of nodes in a graph becomes
diff --git a/scripts/cmake/DocumentationSetup.cmake b/scripts/cmake/DocumentationSetup.cmake
index d5785e25017a196652a26750a6bcb9c73a1fbd65..c66acfea4281446c7cf9f36859418791b1f155a9 100644
--- a/scripts/cmake/DocumentationSetup.cmake
+++ b/scripts/cmake/DocumentationSetup.cmake
@@ -1,8 +1,6 @@
 if(DOXYGEN_FOUND)
 
-	if(APPLE)
-		option(DOCS_GENERATE_DOCSET "Generate Apple Docsets." OFF)
-	endif()
+	option(DOCS_GENERATE_DOCSET "Generate Dash Docsets." OFF)
 
 	set(DOT_FOUND "NO")
 	if(DOXYGEN_DOT_FOUND)
@@ -13,17 +11,31 @@ if(DOXYGEN_FOUND)
 		WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
 		COMMENT "Generating source code documentation with Doxygen." VERBATIM)
 
+	# Defaults
 	set(DOCS_GENERATE_TREEVIEW_STRING "YES" CACHE INTERNAL "")
 	set(DOCS_DISABLE_INDEX_STRING "NO" CACHE INTERNAL "")
+	set(DOCS_GENERATE_DOCSET_STRING "NO" CACHE INTERNAL "")
+	set(DOCS_SEARCHENGINE_STRING "YES" CACHE INTERNAL "")
+
+	# Dash Docsets
 	if(DOCS_GENERATE_DOCSET)
-		set(DOCS_GENERATE_TREEVIEW_STRING "NO" CACHE INTERNAL "" FORCE)
-		set(DOCS_DISABLE_INDEX_STRING "YES" CACHE INTERNAL "" FORCE)
+		find_program(DOCSETUTIL_TOOLPATH docsetutil
+			PATH /Applications/Xcode.app/Contents/Developer/usr/bin)
+		if(NOT DOCSETUTIL_TOOLPATH)
+			message(FATAL_ERROR "docsetutil required for Docset-generation!")
+		endif()
+		set(DOCS_GENERATE_TREEVIEW_STRING "NO" CACHE INTERNAL "")
+		set(DOCS_DISABLE_INDEX_STRING "YES" CACHE INTERNAL "")
 		set(DOCS_GENERATE_DOCSET_STRING "YES" CACHE INTERNAL "")
+		set(DOCS_SEARCHENGINE_STRING "NO" CACHE INTERNAL "")
 		add_custom_command(TARGET doc POST_BUILD
-			COMMAND make WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/docs
+			COMMAND make
+			COMMAND mv org.doxygen.Project.docset ogs6.docset
+			WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/docs
 			COMMENT "Generating docset ...")
-	endif() # DOCS_GENERATE_DOCSET
+		configure_file(Documentation/DocsetFeed.xml.in ${PROJECT_BINARY_DIR}/docs/ogs6.xml)
+	endif()
 
 	configure_file(Documentation/Doxyfile.in ${PROJECT_BINARY_DIR}/Doxyfile)
 
-endif() # DOXYGEN_FOUND
+endif()