diff --git a/CMakeLists.txt b/CMakeLists.txt
index 002e824bc..b5dde0d76 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -194,7 +194,7 @@ add_subdirectory(src)
 if(NOT BUILD_LIBRARIES_ONLY)
 add_subdirectory(shell_integration)
 add_subdirectory(doc)
-add_subdirectory(dev-doc)
+add_subdirectory(doc/dev)
 add_subdirectory(admin)
 endif(NOT BUILD_LIBRARIES_ONLY)
 
diff --git a/dev-doc/CMakeLists.txt b/doc/dev/CMakeLists.txt
similarity index 93%
rename from dev-doc/CMakeLists.txt
rename to doc/dev/CMakeLists.txt
index 198bf5475..9034f3e79 100644
--- a/dev-doc/CMakeLists.txt
+++ b/doc/dev/CMakeLists.txt
@@ -2,7 +2,7 @@
 find_package(Doxygen)
 if(DOXYGEN_FOUND)
     configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
-    add_custom_target(dev-doc
+    add_custom_target(doc-dev
     ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
     WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
     COMMENT "Generating API documentation with Doxygen" VERBATIM
diff --git a/dev-doc/Doxyfile.in b/doc/dev/Doxyfile.in
similarity index 99%
rename from dev-doc/Doxyfile.in
rename to doc/dev/Doxyfile.in
index 4f5f36660..763718817 100644
--- a/dev-doc/Doxyfile.in
+++ b/doc/dev/Doxyfile.in
@@ -398,7 +398,7 @@ LOOKUP_CACHE_SIZE      = 0
 # normally produced when WARNINGS is set to YES.
 # The default value is: NO.
 
-EXTRACT_ALL            = YES
+EXTRACT_ALL            = NO
 
 # If the EXTRACT_PRIVATE tag is set to YES all private members of a class will
 # be included in the documentation.
@@ -457,7 +457,7 @@ HIDE_UNDOC_MEMBERS     = NO
 # no effect if EXTRACT_ALL is enabled.
 # The default value is: NO.
 
-HIDE_UNDOC_CLASSES     = NO
+HIDE_UNDOC_CLASSES     = YES
 
 # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
 # (class|struct|union) declarations. If set to NO these declarations will be
@@ -553,7 +553,7 @@ SORT_MEMBERS_CTORS_1ST = NO
 # appear in their defined order.
 # The default value is: NO.
 
-SORT_GROUP_NAMES       = NO
+SORT_GROUP_NAMES       = YES 
 
 # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
 # fully-qualified names, including namespaces. If set to NO, the class list will
@@ -1899,7 +1899,7 @@ ENABLE_PREPROCESSING   = YES
 # The default value is: NO.
 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
 
-MACRO_EXPANSION        = NO
+MACRO_EXPANSION        = YES
 
 # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
 # the macro expansion is limited to the macros specified with the PREDEFINED and
@@ -1907,7 +1907,7 @@ MACRO_EXPANSION        = NO
 # The default value is: NO.
 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
 
-EXPAND_ONLY_PREDEF     = NO
+EXPAND_ONLY_PREDEF     = YES
 
 # If the SEARCH_INCLUDES tag is set to YES the includes files in the
 # INCLUDE_PATH will be searched if a #include is found.
@@ -1939,7 +1939,7 @@ INCLUDE_FILE_PATTERNS  =
 # recursively expanded use the := operator instead of the = operator.
 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
 
-PREDEFINED             =
+PREDEFINED             = OWNCLOUDSYNC_EXPORT
 
 # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
 # tag can be used to specify a list of macro names that should be expanded. The
diff --git a/dev-doc/main-page.md b/doc/dev/main-page.md
similarity index 100%
rename from dev-doc/main-page.md
rename to doc/dev/main-page.md
diff --git a/src/cmd/cmd.h b/src/cmd/cmd.h
index ebbff8699..ef07f324a 100644
--- a/src/cmd/cmd.h
+++ b/src/cmd/cmd.h
@@ -18,7 +18,10 @@
 
 #include <QObject>
 
-
+/*!
+ * \brief Helper class for command line client
+ * \ingroup cmd
+ */
 class Cmd : public QObject {
     Q_OBJECT
 public:
diff --git a/src/cmd/cmd.md b/src/cmd/cmd.md
new file mode 100644
index 000000000..3c1f51db9
--- /dev/null
+++ b/src/cmd/cmd.md
@@ -0,0 +1,4 @@
+\defgroup cmd The command line client
+
+The command line client
+=======================
diff --git a/src/cmd/netrcparser.h b/src/cmd/netrcparser.h
index 9f93d1b2c..6d67d8f29 100644
--- a/src/cmd/netrcparser.h
+++ b/src/cmd/netrcparser.h
@@ -20,6 +20,10 @@
 
 namespace OCC {
 
+/*!
+ * \brief Parser for netrc files
+ * \ingroup cmd
+ */
 class NetrcParser
 {
 public:
diff --git a/src/cmd/simplesslerrorhandler.cpp b/src/cmd/simplesslerrorhandler.cpp
index 60a68c4d5..4d3f545ec 100644
--- a/src/cmd/simplesslerrorhandler.cpp
+++ b/src/cmd/simplesslerrorhandler.cpp
@@ -15,6 +15,8 @@
 #include "account.h"
 #include "simplesslerrorhandler.h"
 
+namespace OCC {
+
 bool SimpleSslErrorHandler::handleErrors(QList<QSslError> errors, const QSslConfiguration &conf, QList<QSslCertificate> *certs, OCC::AccountPtr account)
 {
     (void) account;
@@ -30,3 +32,5 @@ bool SimpleSslErrorHandler::handleErrors(QList<QSslError> errors, const QSslConf
     }
     return true;
 }
+
+}
diff --git a/src/cmd/simplesslerrorhandler.h b/src/cmd/simplesslerrorhandler.h
index 11b99a19f..69789a368 100644
--- a/src/cmd/simplesslerrorhandler.h
+++ b/src/cmd/simplesslerrorhandler.h
@@ -18,9 +18,17 @@
 class QSslError;
 class QSslCertificate;
 
+namespace OCC {
+
+/*!
+ * \brief The SimpleSslErrorHandler class
+ * \ingroup cmd
+ */
 class SimpleSslErrorHandler : public OCC::AbstractSslErrorHandler {
 public:
     bool handleErrors(QList<QSslError> errors, const QSslConfiguration &conf, QList<QSslCertificate> *certs, OCC::AccountPtr) Q_DECL_OVERRIDE;
 };
 
+}
+
 #endif // SIMPLESSLERRORHANDLER_H
diff --git a/src/gui/accountmanager.h b/src/gui/accountmanager.h
index 30d445696..0d10d2001 100644
--- a/src/gui/accountmanager.h
+++ b/src/gui/accountmanager.h
@@ -20,6 +20,10 @@ namespace OCC {
 
 typedef QSharedPointer<AccountState> AccountStatePtr;
 
+/*!
+   \brief The AccountManager class
+   \ingroup gui
+*/
 class AccountManager : public QObject {
     Q_OBJECT
 public:
diff --git a/src/gui/accountmigrator.h b/src/gui/accountmigrator.h
index 0e2a644cc..5b0d6f4cd 100644
--- a/src/gui/accountmigrator.h
+++ b/src/gui/accountmigrator.h
@@ -18,6 +18,10 @@
 
 namespace OCC {
 
+/*!
+ * \brief The AccountSettings class
+ * \ingroup gui
+ */
 class AccountMigrator {
 
 public:
diff --git a/src/gui/accountsettings.h b/src/gui/accountsettings.h
index dd6438de1..6f6bb6396 100644
--- a/src/gui/accountsettings.h
+++ b/src/gui/accountsettings.h
@@ -40,6 +40,10 @@ class Account;
 class AccountState;
 class FolderStatusModel;
 
+/*!
+ * \brief The AccountSettings class
+ * \ingroup gui
+ */
 class AccountSettings : public QWidget
 {
     Q_OBJECT
diff --git a/src/gui/accountstate.h b/src/gui/accountstate.h
index a2c3c60e2..ddc5c00c0 100644
--- a/src/gui/accountstate.h
+++ b/src/gui/accountstate.h
@@ -30,8 +30,9 @@ class AccountState;
 class Account;
 class AbstractCredentials;
 
-/**
- * @brief Extra info about an ownCloud server account.
+/*!
+ * \brief Extra info about an ownCloud server account.
+ * \ingroup gui
  */
 class AccountState : public QObject {
     Q_OBJECT
@@ -91,8 +92,6 @@ public:
     /** Returns a new settings object for this account, already in the right groups. */
     std::unique_ptr<QSettings> settings();
 
-
-
 private:
     void setState(State state);
 
diff --git a/src/gui/addcertificatedialog.h b/src/gui/addcertificatedialog.h
index 77a0c04ae..3c6c5dce7 100644
--- a/src/gui/addcertificatedialog.h
+++ b/src/gui/addcertificatedialog.h
@@ -24,6 +24,10 @@ namespace Ui {
 class AddCertificateDialog;
 }
 
+/*!
+ * \brief The AddCertificateDialog class
+ * \ingroup gui
+ */
 class AddCertificateDialog : public QDialog
 {
     Q_OBJECT
diff --git a/src/gui/application.h b/src/gui/application.h
index 3657d791b..676ab53ec 100644
--- a/src/gui/application.h
+++ b/src/gui/application.h
@@ -43,6 +43,10 @@ class Theme;
 class Folder;
 class SslErrorDialog;
 
+/*!
+ * \brief The Application class
+ * \ingroup gui
+ */
 class Application : public SharedTools::QtSingleApplication
 {
     Q_OBJECT
diff --git a/src/gui/authenticationdialog.h b/src/gui/authenticationdialog.h
index ce0fb3c82..cfa1f3f3d 100644
--- a/src/gui/authenticationdialog.h
+++ b/src/gui/authenticationdialog.h
@@ -20,7 +20,10 @@ class QLineEdit;
 
 namespace OCC {
 
-/** @brief Authenticate a user for a specific credential given his credentials */
+/*!
+ * \brief Authenticate a user for a specific credential given his credentials
+ * \ingroup gui
+ */
 class AuthenticationDialog : public QDialog {
     Q_OBJECT
 public:
diff --git a/src/gui/cocoainitializer.h b/src/gui/cocoainitializer.h
index 63d199bb9..a55c5888b 100644
--- a/src/gui/cocoainitializer.h
+++ b/src/gui/cocoainitializer.h
@@ -14,7 +14,10 @@
 namespace OCC {
 namespace Mac {
 
-/** CocoaInitializer provides an AutoRelease Pool via RIIA for use in main() */
+/*!
+ * \brief CocoaInitializer provides an AutoRelease Pool via RIIA for use in main()
+ * \ingroup gui
+ */
 class CocoaInitializer {
 public:
     CocoaInitializer();
diff --git a/src/gui/creds/credentialsfactory.h b/src/gui/creds/credentialsfactory.h
index fbb6e91f0..6763c6265 100644
--- a/src/gui/creds/credentialsfactory.h
+++ b/src/gui/creds/credentialsfactory.h
@@ -22,6 +22,11 @@ namespace OCC
 {
 class AbstractCredentials;
 
+
+/*!
+ * \brief The HttpCredentialsGui namespace
+ * \ingroup gui
+ */
 namespace CredentialsFactory
 {
 
diff --git a/src/gui/creds/httpcredentialsgui.h b/src/gui/creds/httpcredentialsgui.h
index 3f368125d..4441c2c99 100644
--- a/src/gui/creds/httpcredentialsgui.h
+++ b/src/gui/creds/httpcredentialsgui.h
@@ -19,6 +19,10 @@
 namespace OCC
 {
 
+/*!
+ * \brief The HttpCredentialsGui class
+ * \ingroup gui
+ */
 class HttpCredentialsGui : public HttpCredentials {
     Q_OBJECT
 public:
diff --git a/src/gui/creds/shibboleth/shibbolethrefresher.h b/src/gui/creds/shibboleth/shibbolethrefresher.h
index bc6d76cf0..9b62f18a2 100644
--- a/src/gui/creds/shibboleth/shibbolethrefresher.h
+++ b/src/gui/creds/shibboleth/shibbolethrefresher.h
@@ -26,6 +26,10 @@ namespace OCC
 class Account;
 class ShibbolethCredentials;
 
+/*!
+ * \brief The ShibbolethRefresher class
+ * \ingroup gui
+ */
 class ShibbolethRefresher : public QObject
 {
     Q_OBJECT
diff --git a/src/gui/creds/shibboleth/shibbolethuserjob.h b/src/gui/creds/shibboleth/shibbolethuserjob.h
index cf4bed070..a918ccbd0 100644
--- a/src/gui/creds/shibboleth/shibbolethuserjob.h
+++ b/src/gui/creds/shibboleth/shibbolethuserjob.h
@@ -19,9 +19,10 @@
 namespace OCC
 {
 
-/**
-  * @brief Fetch the user name of the shibboleth connection
-  */
+/*!
+ * \brief Fetch the user name of the shibboleth connection
+ * \ingroup gui
+ */
 class ShibbolethUserJob : public JsonApiJob {
     Q_OBJECT
 public:
diff --git a/src/gui/creds/shibboleth/shibbolethwebview.h b/src/gui/creds/shibboleth/shibbolethwebview.h
index 89e353e88..1e656cf4e 100644
--- a/src/gui/creds/shibboleth/shibbolethwebview.h
+++ b/src/gui/creds/shibboleth/shibbolethwebview.h
@@ -28,6 +28,10 @@ namespace OCC
 
 class ShibbolethCookieJar;
 
+/*!
+ * \brief The ShibbolethWebView class
+ * \ingroup gui
+ */
 class ShibbolethWebView : public QWebView
 {
   Q_OBJECT
diff --git a/src/gui/creds/shibbolethcredentials.h b/src/gui/creds/shibbolethcredentials.h
index 0008e6dec..a2feae798 100644
--- a/src/gui/creds/shibbolethcredentials.h
+++ b/src/gui/creds/shibbolethcredentials.h
@@ -33,6 +33,10 @@ namespace OCC
 
 class ShibbolethWebView;
 
+/*!
+ * \brief The ShibbolethCredentials class
+ * \ingroup gui
+ */
 class ShibbolethCredentials : public AbstractCredentials
 {
 Q_OBJECT
diff --git a/src/gui/folder.h b/src/gui/folder.h
index 542c6e242..bb9c8525d 100644
--- a/src/gui/folder.h
+++ b/src/gui/folder.h
@@ -44,6 +44,10 @@ namespace OCC {
 class SyncEngine;
 class AccountState;
 
+/*!
+ * \brief The FolderDefinition class
+ * \ingroup gui
+ */
 class FolderDefinition
 {
 public:
@@ -68,6 +72,10 @@ public:
                      FolderDefinition* folder);
 };
 
+/*!
+ * \brief The Folder class
+ * \ingroup gui
+ */
 class Folder : public QObject
 {
     Q_OBJECT
diff --git a/src/gui/folderman.h b/src/gui/folderman.h
index 634872889..61f633b73 100644
--- a/src/gui/folderman.h
+++ b/src/gui/folderman.h
@@ -33,6 +33,10 @@ class Application;
 class SyncResult;
 class SocketApi;
 
+/*!
+ * \brief The FolderMan class
+ * \ingroup gui
+ */
 class FolderMan : public QObject
 {
     Q_OBJECT
diff --git a/src/gui/folderstatusdelegate.h b/src/gui/folderstatusdelegate.h
index 0e1a58f23..fd7237b15 100644
--- a/src/gui/folderstatusdelegate.h
+++ b/src/gui/folderstatusdelegate.h
@@ -18,7 +18,10 @@
 
 namespace OCC {
 
-
+/*!
+ * \brief The FolderStatusDelegate class
+ * \ingroup gui
+ */
 class FolderStatusDelegate : public QStyledItemDelegate
 {
     Q_OBJECT
diff --git a/src/gui/folderstatusmodel.h b/src/gui/folderstatusmodel.h
index fdb0b68e1..1a1f7240b 100644
--- a/src/gui/folderstatusmodel.h
+++ b/src/gui/folderstatusmodel.h
@@ -26,6 +26,10 @@ namespace OCC {
 class Folder;
 class ProgressInfo;
 
+/*!
+ * \brief The FolderStatusModel class
+ * \ingroup gui
+ */
 class FolderStatusModel : public QAbstractItemModel
 {
     Q_OBJECT
diff --git a/src/gui/folderwatcher.h b/src/gui/folderwatcher.h
index 27b131886..b5f2fbbef 100644
--- a/src/gui/folderwatcher.h
+++ b/src/gui/folderwatcher.h
@@ -31,7 +31,9 @@ namespace OCC {
 
 class FolderWatcherPrivate;
 
-/*
+/*!
+ * \brief Montiors a directory recursively for changes
+ *
  * Folder Watcher monitors a directory and its sub directories
  * for changes in the local file system. Changes are signalled
  * through the pathChanged() signal.
@@ -40,6 +42,8 @@ class FolderWatcherPrivate;
  * does not automatically adds them to the list of monitored
  * dirs. That is the responsibility of the user of this class to
  * call addPath() with the new dir.
+ *
+ * \ingroup gui
  */
 
 class FolderWatcher : public QObject
diff --git a/src/gui/folderwatcher_linux.h b/src/gui/folderwatcher_linux.h
index 2ce091787..f40e802c5 100644
--- a/src/gui/folderwatcher_linux.h
+++ b/src/gui/folderwatcher_linux.h
@@ -24,6 +24,11 @@
 
 namespace OCC
 {
+
+/*!
+ * \brief Linux (inotify) API implementation of FolderWatcher
+ * \ingroup gui
+ */
 class FolderWatcherPrivate : public QObject
 {
     Q_OBJECT
diff --git a/src/gui/folderwatcher_mac.h b/src/gui/folderwatcher_mac.h
index 646200916..783575824 100644
--- a/src/gui/folderwatcher_mac.h
+++ b/src/gui/folderwatcher_mac.h
@@ -23,6 +23,10 @@
 namespace OCC
 {
 
+/*!
+ * \brief Mac OS X API implementation of FolderWatcher
+ * \ingroup gui
+ */
 class FolderWatcherPrivate
 {
 public:
diff --git a/src/gui/folderwatcher_qt.h b/src/gui/folderwatcher_qt.h
index 03bb0f9d1..e9b983f9e 100644
--- a/src/gui/folderwatcher_qt.h
+++ b/src/gui/folderwatcher_qt.h
@@ -22,6 +22,10 @@ namespace OCC {
 
 class FolderWatcher;
 
+/*!
+ * \brief Qt API implementation of FolderWatcher
+ * \ingroup gui
+ */
 class FolderWatcherPrivate : public QObject {
     Q_OBJECT
 public:
diff --git a/src/gui/folderwatcher_win.h b/src/gui/folderwatcher_win.h
index 08c766076..19598f3c9 100644
--- a/src/gui/folderwatcher_win.h
+++ b/src/gui/folderwatcher_win.h
@@ -21,8 +21,10 @@ namespace OCC {
 
 class FolderWatcher;
 
-// watcher thread
-
+/*!
+ * \brief The WatcherThread class
+ * \ingroup gui
+ */
 class WatcherThread : public QThread {
     Q_OBJECT
 public:
@@ -44,6 +46,10 @@ private:
     HANDLE _handle;
 };
 
+/*!
+ * \brief Windows implementation of FolderWatcher
+ * \ingroup gui
+ */
 class FolderWatcherPrivate : public QObject {
     Q_OBJECT
 public:
diff --git a/src/gui/folderwizard.h b/src/gui/folderwizard.h
index 1431104c5..24f4eb655 100644
--- a/src/gui/folderwizard.h
+++ b/src/gui/folderwizard.h
@@ -31,14 +31,19 @@ class SelectiveSyncTreeView;
 
 class ownCloudInfo;
 
+/*!
+ * \brief The FormatWarningsWizardPage class
+ * \ingroup gui
+ */
 class FormatWarningsWizardPage : public QWizardPage {
     Q_OBJECT
 protected:
     QString formatWarnings(const QStringList &warnings) const;
 };
 
-/**
- * page to ask for the local source folder
+/*!
+ * \brief Page to ask for the local source folder
+ * \ingroup gui
  */
 class FolderWizardLocalPath : public FormatWarningsWizardPage
 {
@@ -61,8 +66,9 @@ private:
 };
 
 
-/**
- * page to ask for the target folder
+/*!
+ * \brief page to ask for the target folder
+ * \ingroup gui
  */
 
 class FolderWizardRemotePath : public FormatWarningsWizardPage
@@ -100,7 +106,10 @@ private:
     QTimer _lscolTimer;
 };
 
-
+/*!
+ * \brief The FolderWizardSelectiveSync class
+ * \ingroup gui
+ */
 class FolderWizardSelectiveSync : public QWizardPage
 {
     Q_OBJECT
@@ -118,9 +127,9 @@ private:
 
 };
 
-
-/**
- *
+/*!
+ * \brief The FolderWizard class
+ * \ingroup gui
  */
 class FolderWizard : public QWizard
 {
diff --git a/src/gui/generalsettings.h b/src/gui/generalsettings.h
index 6c0c4aa7a..5be59c0aa 100644
--- a/src/gui/generalsettings.h
+++ b/src/gui/generalsettings.h
@@ -24,6 +24,10 @@ namespace Ui {
 class GeneralSettings;
 }
 
+/*!
+ * \brief The GeneralSettings class
+ * \ingroup gui
+ */
 class GeneralSettings : public QWidget
 {
     Q_OBJECT
diff --git a/src/gui/gui.md b/src/gui/gui.md
new file mode 100644
index 000000000..107ce2acb
--- /dev/null
+++ b/src/gui/gui.md
@@ -0,0 +1,5 @@
+The GUI Client
+==============
+
+\defgroup gui The GUI client
+
diff --git a/src/gui/ignorelisteditor.h b/src/gui/ignorelisteditor.h
index 22b5e8e96..aa573bbed 100644
--- a/src/gui/ignorelisteditor.h
+++ b/src/gui/ignorelisteditor.h
@@ -24,6 +24,10 @@ namespace Ui {
 class IgnoreListEditor;
 }
 
+/*!
+ * \brief The IgnoreListEditor class
+ * \ingroup gui
+ */
 class IgnoreListEditor : public QDialog
 {
     Q_OBJECT
diff --git a/src/gui/logbrowser.h b/src/gui/logbrowser.h
index 243c571a1..cb4bf8711 100644
--- a/src/gui/logbrowser.h
+++ b/src/gui/logbrowser.h
@@ -28,6 +28,10 @@
 
 namespace OCC {
 
+/*!
+ * \brief The LogWidget class
+ * \ingroup gui
+ */
 class LogWidget : public QPlainTextEdit 
 {
     Q_OBJECT
@@ -38,6 +42,10 @@ signals:
 
 };
 
+/*!
+ * \brief The LogBrowser class
+ * \ingroup gui
+ */
 class LogBrowser : public QDialog
 {
   Q_OBJECT
diff --git a/src/gui/networksettings.h b/src/gui/networksettings.h
index 4a91fa66a..2f9dd33bc 100644
--- a/src/gui/networksettings.h
+++ b/src/gui/networksettings.h
@@ -23,6 +23,10 @@ namespace Ui {
 class NetworkSettings;
 }
 
+/*!
+ * \brief The NetworkSettings class
+ * \ingroup gui
+ */
 class NetworkSettings : public QWidget
 {
     Q_OBJECT
diff --git a/src/gui/openfilemanager.h b/src/gui/openfilemanager.h
index d1dc1df99..5d8a33c69 100644
--- a/src/gui/openfilemanager.h
+++ b/src/gui/openfilemanager.h
@@ -15,6 +15,9 @@
 #include <QString>
 
 namespace OCC {
-/** Open the file manager with the specified file pre-selected */
+/*!
+ * \brief Open the file manager with the specified file pre-selected
+ * \ingroup gui
+ */
 void showInFileManager(const QString &localPath);
 }
diff --git a/src/gui/owncloudgui.h b/src/gui/owncloudgui.h
index a45543674..1a2960beb 100644
--- a/src/gui/owncloudgui.h
+++ b/src/gui/owncloudgui.h
@@ -33,6 +33,10 @@ class SettingsDialogMac;
 class Application;
 class LogBrowser;
 
+/*!
+ * \brief The ownCloudGui class
+ * \ingroup gui
+ */
 class ownCloudGui : public QObject
 {
     Q_OBJECT
diff --git a/src/gui/owncloudsetupwizard.h b/src/gui/owncloudsetupwizard.h
index 6c246b3ae..99829fa86 100644
--- a/src/gui/owncloudsetupwizard.h
+++ b/src/gui/owncloudsetupwizard.h
@@ -33,6 +33,10 @@ class AccountState;
 
 class OwncloudWizard;
 
+/*!
+ * \brief The DetermineAuthTypeJob class
+ * \ingroup gui
+ */
 class DetermineAuthTypeJob : public AbstractNetworkJob {
     Q_OBJECT
 public:
@@ -46,7 +50,10 @@ private:
     int _redirects;
 };
 
-
+/*!
+ * \brief The OwncloudSetupWizard class
+ * \ingroup gui
+ */
 class OwncloudSetupWizard : public QObject
 {
     Q_OBJECT
diff --git a/src/gui/protocolwidget.h b/src/gui/protocolwidget.h
index 91ae119ca..e792527a9 100644
--- a/src/gui/protocolwidget.h
+++ b/src/gui/protocolwidget.h
@@ -32,6 +32,10 @@ namespace Ui {
 }
 class Application;
 
+/*!
+ * \brief The ProtocolWidget class
+ * \ingroup gui
+ */
 class ProtocolWidget : public QWidget
 {
     Q_OBJECT
diff --git a/src/gui/quotainfo.h b/src/gui/quotainfo.h
index 385da011d..bb1912857 100644
--- a/src/gui/quotainfo.h
+++ b/src/gui/quotainfo.h
@@ -24,6 +24,10 @@ namespace OCC {
 
 class AccountState;
 
+/*!
+ * \brief The QuotaInfo class
+ * \ingroup gui
+ */
 class QuotaInfo : public QObject {
     Q_OBJECT
 public:
diff --git a/src/gui/selectivesyncdialog.h b/src/gui/selectivesyncdialog.h
index b601a8f10..a68b5c1d6 100644
--- a/src/gui/selectivesyncdialog.h
+++ b/src/gui/selectivesyncdialog.h
@@ -25,6 +25,10 @@ namespace OCC {
 
 class Folder;
 
+/*!
+ * \brief The SelectiveSyncTreeView class
+ * \ingroup gui
+ */
 class SelectiveSyncTreeView : public QTreeWidget {
     Q_OBJECT
 public:
@@ -57,6 +61,10 @@ private:
     QLabel *_loading;
 };
 
+/*!
+ * \brief The SelectiveSyncDialog class
+ * \ingroup gui
+ */
 class SelectiveSyncDialog : public QDialog {
     Q_OBJECT
 public:
diff --git a/src/gui/settingsdialog.h b/src/gui/settingsdialog.h
index f8e311a0a..a4db7150b 100644
--- a/src/gui/settingsdialog.h
+++ b/src/gui/settingsdialog.h
@@ -34,6 +34,10 @@ class Application;
 class FolderMan;
 class ownCloudGui;
 
+/*!
+ * \brief The SettingsDialog class
+ * \ingroup gui
+ */
 class SettingsDialog : public QDialog
 {
     Q_OBJECT
diff --git a/src/gui/settingsdialogmac.h b/src/gui/settingsdialogmac.h
index 370cc1405..faa85f736 100644
--- a/src/gui/settingsdialogmac.h
+++ b/src/gui/settingsdialogmac.h
@@ -31,6 +31,10 @@ class ownCloudGui;
 class Folder;
 class AccountState;
 
+/*!
+ * \brief The SettingsDialogMac class
+ * \ingroup gui
+ */
 class SettingsDialogMac : public MacPreferencesWindow
 {
     Q_OBJECT
diff --git a/src/gui/sharedialog.h b/src/gui/sharedialog.h
index ebb686bb7..8a8a92f92 100644
--- a/src/gui/sharedialog.h
+++ b/src/gui/sharedialog.h
@@ -23,6 +23,10 @@
 
 namespace OCC {
 
+/*!
+ * \brief The OcsShareJob class
+ * \ingroup gui
+ */
 class OcsShareJob : public AbstractNetworkJob {
     Q_OBJECT
 public:
@@ -53,6 +57,10 @@ class AbstractCredentials;
 class QuotaInfo;
 class SyncResult;
 
+/*!
+ * \brief The ShareDialog class
+ * \ingroup gui
+ */
 class ShareDialog : public QDialog
 {
     Q_OBJECT
diff --git a/src/gui/socketapi.h b/src/gui/socketapi.h
index 64982bbc4..7e284f7fd 100644
--- a/src/gui/socketapi.h
+++ b/src/gui/socketapi.h
@@ -40,6 +40,10 @@ namespace OCC {
 class SyncFileStatus;
 class Folder;
 
+/*!
+ * \brief The SocketApi class
+ * \ingroup gui
+ */
 class SocketApi : public QObject
 {
 Q_OBJECT
diff --git a/src/gui/sslbutton.h b/src/gui/sslbutton.h
index ef4014e86..191a0c062 100644
--- a/src/gui/sslbutton.h
+++ b/src/gui/sslbutton.h
@@ -26,6 +26,10 @@ namespace OCC {
 
 class AccountState;
 
+/*!
+ * \brief The SslButton class
+ * \ingroup gui
+ */
 class SslButton : public QToolButton
 {
     Q_OBJECT
diff --git a/src/gui/sslerrordialog.h b/src/gui/sslerrordialog.h
index 68f0fee7e..09badf2c8 100644
--- a/src/gui/sslerrordialog.h
+++ b/src/gui/sslerrordialog.h
@@ -31,11 +31,19 @@ namespace Ui {
 class SslErrorDialog;
 }
 
+/*!
+ * \brief The SslDialogErrorHandler class
+ * \ingroup gui
+ */
 class SslDialogErrorHandler : public AbstractSslErrorHandler {
 public:
     bool handleErrors(QList<QSslError> errors, const QSslConfiguration &conf, QList<QSslCertificate> *certs, AccountPtr) Q_DECL_OVERRIDE;
 };
 
+/*!
+ * \brief The SslErrorDialog class
+ * \ingroup gui
+ */
 class SslErrorDialog : public QDialog
 {
     Q_OBJECT
diff --git a/src/gui/syncrunfilelog.h b/src/gui/syncrunfilelog.h
index 1b6429e23..cf79a6eb4 100644
--- a/src/gui/syncrunfilelog.h
+++ b/src/gui/syncrunfilelog.h
@@ -24,6 +24,10 @@
 namespace OCC {
 class SyncFileItem;
 
+/*!
+ * \brief The SyncRunFileLog class
+ * \ingroup gui
+ */
 class SyncRunFileLog
 {
 public:
diff --git a/src/gui/systray.h b/src/gui/systray.h
index b923f4d79..45c04ab71 100644
--- a/src/gui/systray.h
+++ b/src/gui/systray.h
@@ -26,6 +26,10 @@ bool canOsXSendUserNotification();
 void sendOsXUserNotification(const QString &title, const QString &message);
 #endif
 
+/*!
+ * \brief The Systray class
+ * \ingroup gui
+ */
 class Systray : public QSystemTrayIcon
 {
     Q_OBJECT
diff --git a/src/gui/updater/ocupdater.h b/src/gui/updater/ocupdater.h
index 9843a30a1..2523a5333 100644
--- a/src/gui/updater/ocupdater.h
+++ b/src/gui/updater/ocupdater.h
@@ -28,7 +28,10 @@ class QTimer;
 
 namespace OCC {
 
-/** @short Class that uses an ownCloud propritary XML format to fetch update information */
+/*!
+ * \brief Class that uses an ownCloud propritary XML format to fetch update information
+ * \ingroup gui
+ */
 class OCUpdater : public QObject, public Updater
 {
     Q_OBJECT
@@ -72,7 +75,10 @@ private:
     UpdateInfo _updateInfo;
 };
 
-/** Windows Updater Using NSIS */
+/*!
+ * \brief Windows Updater Using NSIS
+ * \ingroup gui
+ */
 class NSISUpdater : public OCUpdater {
     Q_OBJECT
 public:
@@ -93,8 +99,13 @@ private:
 
 };
 
-/** Passive updater: Only implements notification for use in settings.
-    Does not do popups */
+/*!
+ *  @brief Updater that only implements notification for use in settings
+ *
+ *  The implementation does how show popups
+ *
+ *  \ingroup gui
+ */
 class PassiveUpdateNotifier : public OCUpdater {
     Q_OBJECT
 public:
diff --git a/src/gui/wizard/abstractcredswizardpage.h b/src/gui/wizard/abstractcredswizardpage.h
index 768a4f7ca..59fe69220 100644
--- a/src/gui/wizard/abstractcredswizardpage.h
+++ b/src/gui/wizard/abstractcredswizardpage.h
@@ -21,6 +21,10 @@ namespace OCC
 
 class AbstractCredentials;
 
+/*!
+ * \brief The AbstractCredentialsWizardPage class
+ * \ingroup gui
+ */
 class AbstractCredentialsWizardPage : public QWizardPage
 {
 public:
diff --git a/src/gui/wizard/owncloudadvancedsetuppage.h b/src/gui/wizard/owncloudadvancedsetuppage.h
index d5190ab98..3bb71383b 100644
--- a/src/gui/wizard/owncloudadvancedsetuppage.h
+++ b/src/gui/wizard/owncloudadvancedsetuppage.h
@@ -25,6 +25,10 @@ class QProgressIndicator;
 
 namespace OCC {
 
+/*!
+ * \brief The OwncloudAdvancedSetupPage class
+ * \ingroup gui
+ */
 class OwncloudAdvancedSetupPage: public QWizardPage
 {
     Q_OBJECT
diff --git a/src/gui/wizard/owncloudconnectionmethoddialog.cpp b/src/gui/wizard/owncloudconnectionmethoddialog.cpp
index c3418fd81..fcef6fef0 100644
--- a/src/gui/wizard/owncloudconnectionmethoddialog.cpp
+++ b/src/gui/wizard/owncloudconnectionmethoddialog.cpp
@@ -16,6 +16,8 @@
 #include "utility.h"
 #include <QUrl>
 
+namespace OCC {
+
 OwncloudConnectionMethodDialog::OwncloudConnectionMethodDialog(QWidget *parent) :
     QDialog(parent),
     ui(new Ui::OwncloudConnectionMethodDialog)
@@ -60,3 +62,5 @@ OwncloudConnectionMethodDialog::~OwncloudConnectionMethodDialog()
 {
     delete ui;
 }
+
+}
diff --git a/src/gui/wizard/owncloudconnectionmethoddialog.h b/src/gui/wizard/owncloudconnectionmethoddialog.h
index 1ceab64a9..4aa467221 100644
--- a/src/gui/wizard/owncloudconnectionmethoddialog.h
+++ b/src/gui/wizard/owncloudconnectionmethoddialog.h
@@ -19,10 +19,16 @@
 
 #include "ui_owncloudconnectionmethoddialog.h"
 
+namespace OCC {
+
 namespace Ui {
 class OwncloudConnectionMethodDialog;
 }
 
+/*!
+ * \brief The OwncloudConnectionMethodDialog class
+ * \ingroup gui
+ */
 class OwncloudConnectionMethodDialog : public QDialog
 {
     Q_OBJECT
@@ -48,4 +54,6 @@ private:
     Ui::OwncloudConnectionMethodDialog *ui;
 };
 
+}
+
 #endif // OWNCLOUDCONNECTIONMETHODDIALOG_H
diff --git a/src/gui/wizard/owncloudconnectionmethoddialog.ui b/src/gui/wizard/owncloudconnectionmethoddialog.ui
index ea5a5baa9..992d4ed44 100644
--- a/src/gui/wizard/owncloudconnectionmethoddialog.ui
+++ b/src/gui/wizard/owncloudconnectionmethoddialog.ui
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <ui version="4.0">
- <class>OwncloudConnectionMethodDialog</class>
- <widget class="QDialog" name="OwncloudConnectionMethodDialog">
+ <class>OCC::OwncloudConnectionMethodDialog</class>
+ <widget class="QDialog" name="OCC::OwncloudConnectionMethodDialog">
   <property name="geometry">
    <rect>
     <x>0</x>
diff --git a/src/gui/wizard/owncloudhttpcredspage.h b/src/gui/wizard/owncloudhttpcredspage.h
index 2a2de5354..76b248cb4 100644
--- a/src/gui/wizard/owncloudhttpcredspage.h
+++ b/src/gui/wizard/owncloudhttpcredspage.h
@@ -25,6 +25,9 @@ class QProgressIndicator;
 
 namespace OCC {
 
+/*!
+ * \brief The OwncloudHttpCredsPage class
+ */
 class OwncloudHttpCredsPage : public AbstractCredentialsWizardPage
 {
   Q_OBJECT
diff --git a/src/gui/wizard/owncloudsetuppage.h b/src/gui/wizard/owncloudsetuppage.h
index cd2734885..2f870574e 100644
--- a/src/gui/wizard/owncloudsetuppage.h
+++ b/src/gui/wizard/owncloudsetuppage.h
@@ -32,6 +32,10 @@ class QProgressIndicator;
 
 namespace OCC {
 
+/*!
+ * \brief The OwncloudSetupPage class
+ * \ingroup gui
+ */
 class OwncloudSetupPage: public QWizardPage
 {
     Q_OBJECT
diff --git a/src/gui/wizard/owncloudshibbolethcredspage.h b/src/gui/wizard/owncloudshibbolethcredspage.h
index c5a7b4916..dd94d072c 100644
--- a/src/gui/wizard/owncloudshibbolethcredspage.h
+++ b/src/gui/wizard/owncloudshibbolethcredspage.h
@@ -27,6 +27,10 @@ namespace OCC {
 
 class ShibbolethWebView;
 
+/*!
+ * \brief The OwncloudShibbolethCredsPage class
+ * \ingroup gui
+ */
 class OwncloudShibbolethCredsPage : public AbstractCredentialsWizardPage
 {
   Q_OBJECT
diff --git a/src/gui/wizard/owncloudwizard.h b/src/gui/wizard/owncloudwizard.h
index ebf42f9ef..5040e08f5 100644
--- a/src/gui/wizard/owncloudwizard.h
+++ b/src/gui/wizard/owncloudwizard.h
@@ -31,7 +31,11 @@ class OwncloudWizardResultPage;
 class AbstractCredentials;
 class AbstractCredentialsWizardPage;
 
-class OwncloudWizard: public QWizard
+/*!
+ * \brief The OwncloudWizard class
+ * \ingroup gui
+ */
+class OwncloudWizard : public QWizard
 {
     Q_OBJECT
 public:
diff --git a/src/gui/wizard/owncloudwizardresultpage.h b/src/gui/wizard/owncloudwizardresultpage.h
index 5622b56a7..807d07be7 100644
--- a/src/gui/wizard/owncloudwizardresultpage.h
+++ b/src/gui/wizard/owncloudwizardresultpage.h
@@ -22,6 +22,10 @@
 
 namespace OCC {
 
+/*!
+ * \brief The OwncloudWizardResultPage class
+ * \ingroup gui
+ */
 class OwncloudWizardResultPage : public QWizardPage
 {
   Q_OBJECT
diff --git a/src/libsync/abstractnetworkjob.h b/src/libsync/abstractnetworkjob.h
index c9f11c112..fbf82c31d 100644
--- a/src/libsync/abstractnetworkjob.h
+++ b/src/libsync/abstractnetworkjob.h
@@ -32,7 +32,8 @@ namespace OCC {
 class AbstractSslErrorHandler;
 
 /**
- * @brief The AbstractNetworkJob class
+ * \brief The AbstractNetworkJob class
+ * \ingroup libsync
  */
 class OWNCLOUDSYNC_EXPORT AbstractNetworkJob : public QObject {
     Q_OBJECT
diff --git a/src/libsync/accessmanager.h b/src/libsync/accessmanager.h
index 161f5c6dc..50942c8b7 100644
--- a/src/libsync/accessmanager.h
+++ b/src/libsync/accessmanager.h
@@ -23,6 +23,10 @@ class QUrl;
 namespace OCC
 {
 
+/*!
+ * \brief The AccessManager class
+ * \ingroup libsync
+ */
 class OWNCLOUDSYNC_EXPORT AccessManager : public QNetworkAccessManager
 {
     Q_OBJECT
diff --git a/src/libsync/account.cpp b/src/libsync/account.cpp
index 0d4b789a3..2b789e5df 100644
--- a/src/libsync/account.cpp
+++ b/src/libsync/account.cpp
@@ -32,6 +32,7 @@
 
 namespace OCC {
 
+
 Account::Account(QObject *parent)
     : QObject(parent)
     , _am(0)
diff --git a/src/libsync/account.h b/src/libsync/account.h
index 8f4557a28..8726544d9 100644
--- a/src/libsync/account.h
+++ b/src/libsync/account.h
@@ -41,15 +41,20 @@ class QuotaInfo;
 class AccessManager;
 
 
-/* Reimplement this to handle SSL errors */
+/*!
+ * \brief Reimplement this to handle SSL errors from libsync
+ * \ingroup libsync
+ */
 class AbstractSslErrorHandler {
 public:
     virtual ~AbstractSslErrorHandler() {}
     virtual bool handleErrors(QList<QSslError>, const QSslConfiguration &conf, QList<QSslCertificate>*, AccountPtr) = 0;
 };
 
-/**
- * @brief This class represents an account on an ownCloud Server
+
+/*!
+ * \brief The Account class represents an account on an ownCloud Server
+ * \ingroup libsync
  */
 class OWNCLOUDSYNC_EXPORT Account : public QObject {
     Q_OBJECT
diff --git a/src/libsync/bandwidthmanager.h b/src/libsync/bandwidthmanager.h
index 98057bf1f..2b5ad0523 100644
--- a/src/libsync/bandwidthmanager.h
+++ b/src/libsync/bandwidthmanager.h
@@ -26,6 +26,10 @@ class UploadDevice;
 class GETFileJob;
 class OwncloudPropagator;
 
+/*!
+ * \brief The BandwidthManager class
+ * \ingroup libsync
+ */
 class BandwidthManager : public QObject {
     Q_OBJECT
 public:
diff --git a/src/libsync/clientproxy.h b/src/libsync/clientproxy.h
index 756c0137a..734727270 100644
--- a/src/libsync/clientproxy.h
+++ b/src/libsync/clientproxy.h
@@ -26,6 +26,10 @@ namespace OCC {
 
 class ConfigFile;
 
+/*!
+ * \brief The ClientProxy class
+ * \ingroup libsync
+ */
 class OWNCLOUDSYNC_EXPORT ClientProxy : public QObject
 {
     Q_OBJECT
diff --git a/src/libsync/configfile.h b/src/libsync/configfile.h
index d1af84c55..cf9976af4 100644
--- a/src/libsync/configfile.h
+++ b/src/libsync/configfile.h
@@ -27,6 +27,10 @@ namespace OCC {
 
 class AbstractCredentials;
 
+/*!
+ * \brief The ConfigFile class
+ * \ingroup libsync
+ */
 class OWNCLOUDSYNC_EXPORT ConfigFile
 {
 public:
diff --git a/src/libsync/connectionvalidator.h b/src/libsync/connectionvalidator.h
index 4beb8dfba..03807e135 100644
--- a/src/libsync/connectionvalidator.h
+++ b/src/libsync/connectionvalidator.h
@@ -23,7 +23,7 @@
 
 namespace OCC {
 
-/**
+/*!
  * This is a job-like class to check that the server is up and that we are connected.
  * There is two entry point: checkServerAndAuth and checkAuthentication
  * checkAutentication is the quick version that only do the propfind
@@ -34,7 +34,7 @@ namespace OCC {
  *
  * Here follows the state machine
 
-
+\code{.unparsed}
 *---> checkServerAndAuth  (check status.php)
         Will asynchronously check for system proxy (if using system proxy)
         And then invoke slotCheckServerAndAuth
@@ -62,6 +62,7 @@ namespace OCC {
         JsonApiJob
         |
         +-> slotCapabilitiesRecieved --> X
+    \endcode
  */
 class OWNCLOUDSYNC_EXPORT ConnectionValidator : public QObject
 {
diff --git a/src/libsync/cookiejar.h b/src/libsync/cookiejar.h
index 99cbfbf74..d38b775a5 100644
--- a/src/libsync/cookiejar.h
+++ b/src/libsync/cookiejar.h
@@ -20,6 +20,10 @@
 
 namespace OCC {
 
+/*!
+ * \brief The CookieJar class
+ * \ingroup libsync
+ */
 class OWNCLOUDSYNC_EXPORT CookieJar : public QNetworkCookieJar
 {
     Q_OBJECT
diff --git a/src/libsync/discoveryphase.h b/src/libsync/discoveryphase.h
index 832c5265a..8539975c4 100644
--- a/src/libsync/discoveryphase.h
+++ b/src/libsync/discoveryphase.h
@@ -34,6 +34,10 @@ class Account;
  * if the files are new, or changed.
  */
 
+/*!
+ * \brief The FileStatPointer class
+ * \ingroup libsync
+ */
 class FileStatPointer {
 public:
     FileStatPointer(csync_vio_file_stat_t *stat)
@@ -66,7 +70,13 @@ struct DiscoveryDirectoryResult {
     DiscoveryDirectoryResult() : code(EIO), listIndex(0) { }
 };
 
-// Run in the main thread, reporting to the DiscoveryJobMainThread object
+/*!
+ * \brief The DiscoverySingleDirectoryJob class
+ *
+ * Run in the main thread, reporting to the DiscoveryJobMainThread object
+ *
+ * \ingroup libsync
+ */
 class DiscoverySingleDirectoryJob : public QObject {
     Q_OBJECT
 public:
@@ -129,9 +139,13 @@ public:
     void setupHooks(DiscoveryJob* discoveryJob, const QString &pathPrefix);
 };
 
-
-// Lives in the other thread
-// Deletes itself in start()
+/*!
+ * \brief The DiscoveryJob class
+ *
+ * Lives in the other thread, deletes itself in !start()
+ *
+ * \ingroup libsync
+ */
 class DiscoveryJob : public QObject {
     Q_OBJECT
     friend class DiscoveryMainThread;
diff --git a/src/libsync/filesystem.h b/src/libsync/filesystem.h
index 07cbf17e9..4fd34aa93 100644
--- a/src/libsync/filesystem.h
+++ b/src/libsync/filesystem.h
@@ -26,20 +26,29 @@ class QFileInfo;
 
 namespace OCC {
 
-/**
- * This file contains file system helper.
+/*!
+ *  \addtogroup libsync
+ *  @{
  */
 
+/**
+ * \brief This file contains file system helper
+ */
 namespace FileSystem {
 
-/** compare two files with given filename and return true if they have the same content */
+/*!
+ * \brief compare two files with given filename and return true if they have the same content
+ */
 bool fileEquals(const QString &fn1, const QString &fn2);
 
-/** Mark the file as hidden  (only has effects on windows) */
+/*!
+ * \brief Mark the file as hidden  (only has effects on windows)
+ */
 void OWNCLOUDSYNC_EXPORT setFileHidden(const QString& filename, bool hidden);
 
 
-/** Get the mtime for a filepath.
+/*!
+ * \brief Get the mtime for a filepath
  *
  * Use this over QFileInfo::lastModified() to avoid timezone related bugs. See
  * owncloud/core#9781 for details.
@@ -48,22 +57,24 @@ time_t OWNCLOUDSYNC_EXPORT getModTime(const QString& filename);
 
 bool setModTime(const QString &filename, time_t modTime);
 
-/** Get the size for a file.
+/*!
+ * \brief Get the size for a file
  *
  * Use this over QFileInfo::size() to avoid bugs with lnk files on Windows.
  * See https://bugreports.qt.io/browse/QTBUG-24831.
  */
 qint64 OWNCLOUDSYNC_EXPORT getSize(const QString& filename);
 
-/** Checks whether a file exists.
+/*!
+ * \brief Checks whether a file exists.
  *
  * Use this over QFileInfo::exists() and QFile::exists() to avoid bugs with lnk
  * files, see above.
  */
 bool OWNCLOUDSYNC_EXPORT fileExists(const QString& filename);
 
-/**
- * Rename the file \a originFileName to \a destinationFileName.
+/*!
+ * \brief Rename the file \a originFileName to \a destinationFileName.
  *
  * It behaves as QFile::rename() but handles .lnk files correctly on Windows.
  */
@@ -71,26 +82,32 @@ bool OWNCLOUDSYNC_EXPORT rename(const QString& originFileName,
                                 const QString& destinationFileName,
                                 QString* errorString = NULL);
 
-/**
- * Returns true if the file's mtime or size are not what is expected.
+/*!
+ * \brief Check if \a fileName chas changed given previous size and mtime
+ *
  * Nonexisting files are covered through mtime: they have an mtime of -1.
+ *
+ * \return true if the file's mtime or size are not what is expected.
  */
 bool fileChanged(const QString& fileName,
                  qint64 previousSize,
                  time_t previousMtime);
 
-/**
- * Like !fileChanged() but with verbose logging if the file *did* change.
+/*!
+ * \brief Like !fileChanged() but with verbose logging if the file *did* change.
  */
 bool verifyFileUnchanged(const QString& fileName,
                          qint64 previousSize,
                          time_t previousMtime);
 
-/**
+/*!
+ * \brief renames a file, overriding the target if it exists
+ *
  * Rename the file \a originFileName to \a destinationFileName, and
  * overwrite the destination if it already exists - as long as the
  * destination file has the expected \a destinationSize and
  * \a destinationMtime.
+ *
  * If the destination file does not exist, the given size and mtime are
  * ignored.
  */
@@ -100,7 +117,7 @@ bool renameReplace(const QString &originFileName,
                    time_t destinationMtime,
                    QString *errorString);
 
-/**
+/*!
  * Rename the file \a originFileName to \a destinationFileName, and
  * overwrite the destination if it already exists - without extra checks.
  */
@@ -108,7 +125,7 @@ bool uncheckedRenameReplace(const QString &originFileName,
                             const QString &destinationFileName,
                             QString *errorString);
 
-/**
+/*!
  * Replacement for QFile::open(ReadOnly) followed by a seek().
  * This version sets a more permissive sharing mode on Windows.
  *
@@ -118,7 +135,7 @@ bool uncheckedRenameReplace(const QString &originFileName,
 bool openAndSeekFileSharedRead(QFile* file, QString* error, qint64 seek);
 
 #ifdef Q_OS_WIN
-/**
+/*!
  * Returns the file system used at the given path.
  */
 QString fileSystemForPath(const QString & path);
@@ -130,4 +147,8 @@ QByteArray OWNCLOUDSYNC_EXPORT calcSha1( const QString& fileName );
 QByteArray OWNCLOUDSYNC_EXPORT calcAdler32( const QString& fileName );
 #endif
 
-}}
+}
+
+/*! @} */
+
+}
diff --git a/src/libsync/libsync.md b/src/libsync/libsync.md
new file mode 100644
index 000000000..d315618be
--- /dev/null
+++ b/src/libsync/libsync.md
@@ -0,0 +1,5 @@
+\defgroup libsync The sync library
+
+The sync library
+================
+
diff --git a/src/libsync/logger.h b/src/libsync/logger.h
index edeefa6b4..260dddcfd 100644
--- a/src/libsync/logger.h
+++ b/src/libsync/logger.h
@@ -37,6 +37,10 @@ struct Log{
   QString message;
 };
 
+/*!
+ * \brief The Logger class
+ * \ingroup libsync
+ */
 class OWNCLOUDSYNC_EXPORT Logger : public QObject
 {
   Q_OBJECT
diff --git a/src/libsync/networkjobs.h b/src/libsync/networkjobs.h
index 1062e89a8..018f31c7d 100644
--- a/src/libsync/networkjobs.h
+++ b/src/libsync/networkjobs.h
@@ -22,8 +22,9 @@ class QUrl;
 
 namespace OCC {
 
-/**
- * @brief The EntityExistsJob class
+/*!
+ * \brief The EntityExistsJob class
+ * \ingroup libsync
  */
 class OWNCLOUDSYNC_EXPORT EntityExistsJob : public AbstractNetworkJob {
     Q_OBJECT
@@ -38,8 +39,9 @@ private slots:
     virtual bool finished() Q_DECL_OVERRIDE;
 };
 
-/**
- * @brief The LsColJob class
+/*!
+ * \brief The LsColJob class
+ * \ingroup libsync
  */
 class OWNCLOUDSYNC_EXPORT LsColXMLParser : public QObject {
     Q_OBJECT
@@ -87,13 +89,15 @@ private:
     QList<QByteArray> _properties;
 };
 
-/**
- * @brief The PropfindJob class
+/*!
+ * \brief The PropfindJob class
  *
  * Setting the desired properties with setProperties() is mandatory.
  *
  * Note that this job is only for querying one item.
  * There is also the LsColJob which can be used to list collections
+ *
+ * \ingroup libsync
  */
 class OWNCLOUDSYNC_EXPORT PropfindJob : public AbstractNetworkJob {
     Q_OBJECT
@@ -124,7 +128,8 @@ private:
 };
 
 /**
- * @brief The MkColJob class
+ * \brief The MkColJob class
+ * \ingroup libsync
  */
 class OWNCLOUDSYNC_EXPORT MkColJob : public AbstractNetworkJob {
     Q_OBJECT
@@ -139,8 +144,9 @@ private slots:
     virtual bool finished() Q_DECL_OVERRIDE;
 };
 
-/**
- * @brief The CheckServerJob class
+/*!
+ * \brief The CheckServerJob class
+ * \ingroup libsync
  */
 class OWNCLOUDSYNC_EXPORT CheckServerJob : public AbstractNetworkJob {
     Q_OBJECT
@@ -166,8 +172,8 @@ private:
 };
 
 
-/**
- * @brief The RequestEtagJob class
+/*!
+ * \brief The RequestEtagJob class
  */
 class OWNCLOUDSYNC_EXPORT RequestEtagJob : public AbstractNetworkJob {
     Q_OBJECT
@@ -188,11 +194,14 @@ private slots:
  * Note! you need to be in the connected state before calling this because of a server bug:
  * https://github.com/owncloud/core/issues/12930
  *
- * To be used like this
+ * To be used like this:
+ * \code
  * _job = new JsonApiJob(account, QLatin1String("ocs/v1.php/foo/bar"), this);
  * connect(job, SIGNAL(jsonRecieved(QVariantMap)), ...)
  * The recieved QVariantMap is empty in case of error  or otherwise is a map as parsed by QtJson
+ * \encode
  *
+ * \ingroup libsync
  */
 class OWNCLOUDSYNC_EXPORT JsonApiJob : public AbstractNetworkJob {
     Q_OBJECT
diff --git a/src/libsync/owncloudpropagator.h b/src/libsync/owncloudpropagator.h
index add39bed1..388c89dfc 100644
--- a/src/libsync/owncloudpropagator.h
+++ b/src/libsync/owncloudpropagator.h
@@ -40,16 +40,14 @@ namespace OCC {
 class SyncJournalDb;
 class OwncloudPropagator;
 
-/**
- * @class PropagatorJob
- * @brief the base class of propagator jobs
+/*!
+ * \brief the base class of propagator jobs
  *
  * This can either be a job, or a container for jobs.
  * If it is a composite jobs, it then inherits from PropagateDirectory
  *
- *
+ * \ingroup libsync
  */
-
 class PropagatorJob : public QObject {
     Q_OBJECT
 protected:
@@ -158,8 +156,9 @@ public slots:
 };
 
 
-/*
- * Propagate a directory, and all its sub entries.
+/*!
+ * \brief Propagate a directory, and all its sub entries.
+ * \ingroup libsync
  */
 class PropagateDirectory : public PropagatorJob {
     Q_OBJECT
@@ -220,7 +219,10 @@ private slots:
 };
 
 
-// Dummy job that just mark it as completed and ignored.
+/*!
+ * \brief Dummy job that just mark it as completed and ignored
+ * \ingroup libsync
+ */
 class PropagateIgnoreJob : public PropagateItemJob {
     Q_OBJECT
 public:
@@ -349,7 +351,11 @@ private:
     mutable QMutex _touchedFilesMutex;
 };
 
-// Job that wait for all the poll jobs to be completed
+
+/*!
+ * \brief Job that wait for all the poll jobs to be completed
+ * \ingroup libsync
+ */
 class CleanupPollsJob : public QObject {
     Q_OBJECT
     QVector< SyncJournalDb::PollInfo > _pollInfos;
diff --git a/src/libsync/owncloudtheme.h b/src/libsync/owncloudtheme.h
index abe9261d1..767f5aedc 100644
--- a/src/libsync/owncloudtheme.h
+++ b/src/libsync/owncloudtheme.h
@@ -19,6 +19,10 @@
 
 namespace OCC {
 
+/*!
+ * \brief The ownCloudTheme class
+ * \ingroup libsync
+ */
 class ownCloudTheme : public Theme
 {
     Q_OBJECT
diff --git a/src/libsync/ownsql.h b/src/libsync/ownsql.h
index adcf7907d..e7bc7fe19 100644
--- a/src/libsync/ownsql.h
+++ b/src/libsync/ownsql.h
@@ -23,6 +23,10 @@
 
 namespace OCC {
 
+/*!
+ * \brief The SqlDatabase class
+ * \ingroup libsync
+ */
 class OWNCLOUDSYNC_EXPORT SqlDatabase
 {
     Q_DISABLE_COPY(SqlDatabase)
@@ -48,6 +52,10 @@ private:
 
 };
 
+/*!
+ * \brief The SqlQuery class
+ * \ingroup libsync
+ */
 class OWNCLOUDSYNC_EXPORT SqlQuery
 {
     Q_DISABLE_COPY(SqlQuery)
diff --git a/src/libsync/progressdispatcher.h b/src/libsync/progressdispatcher.h
index 381301011..7047d4186 100644
--- a/src/libsync/progressdispatcher.h
+++ b/src/libsync/progressdispatcher.h
@@ -27,6 +27,10 @@
 
 namespace OCC {
 
+/*!
+ * \brief The ProgressInfo class
+ * \ingroup libsync
+ */
 class OWNCLOUDSYNC_EXPORT ProgressInfo : public QObject
 {
     Q_OBJECT
diff --git a/src/libsync/propagatedownload.h b/src/libsync/propagatedownload.h
index ea14c0612..de9486986 100644
--- a/src/libsync/propagatedownload.h
+++ b/src/libsync/propagatedownload.h
@@ -21,6 +21,10 @@
 
 namespace OCC {
 
+/*!
+ * \brief The GETFileJob class
+ * \ingroup libsync
+ */
 class GETFileJob : public AbstractNetworkJob {
     Q_OBJECT
     QFile* _device;
@@ -98,7 +102,10 @@ private slots:
     void slotMetaDataChanged();
 };
 
-
+/*!
+ * \brief The PropagateDownloadFileQNAM class
+ * \ingroup libsync
+ */
 class PropagateDownloadFileQNAM : public PropagateItemJob {
     Q_OBJECT
 public:
diff --git a/src/libsync/propagateremotedelete.h b/src/libsync/propagateremotedelete.h
index e40289d9a..861d92cc7 100644
--- a/src/libsync/propagateremotedelete.h
+++ b/src/libsync/propagateremotedelete.h
@@ -18,6 +18,10 @@
 
 namespace OCC {
 
+/*!
+ * \brief The DeleteJob class
+ * \ingroup libsync
+ */
 class DeleteJob : public AbstractNetworkJob {
     Q_OBJECT
 public:
@@ -33,6 +37,10 @@ signals:
     void finishedSignal();
 };
 
+/*!
+ * \brief The PropagateRemoteDelete class
+ * \ingroup libsync
+ */
 class PropagateRemoteDelete : public PropagateItemJob {
     Q_OBJECT
     QPointer<DeleteJob> _job;
@@ -46,4 +54,4 @@ private slots:
 
 };
 
-}
\ No newline at end of file
+}
diff --git a/src/libsync/propagateremotemkdir.h b/src/libsync/propagateremotemkdir.h
index de556b829..b43690bf9 100644
--- a/src/libsync/propagateremotemkdir.h
+++ b/src/libsync/propagateremotemkdir.h
@@ -18,6 +18,10 @@
 
 namespace OCC {
 
+/*!
+ * \brief The PropagateRemoteMkdir class
+ * \ingroup libsync
+ */
 class PropagateRemoteMkdir : public PropagateItemJob {
     Q_OBJECT
     QPointer<AbstractNetworkJob> _job;
@@ -34,4 +38,4 @@ private slots:
     void success();
 };
 
-}
\ No newline at end of file
+}
diff --git a/src/libsync/propagateremotemove.h b/src/libsync/propagateremotemove.h
index 741b9a457..405f669aa 100644
--- a/src/libsync/propagateremotemove.h
+++ b/src/libsync/propagateremotemove.h
@@ -18,6 +18,10 @@
 
 namespace OCC {
 
+/*!
+ * \brief The MoveJob class
+ * \ingroup libsync
+ */
 class MoveJob : public AbstractNetworkJob {
     Q_OBJECT
     const QString _destination;
@@ -34,7 +38,10 @@ signals:
     void finishedSignal();
 };
 
-
+/*!
+ * \brief The PropagateRemoteMove class
+ * \ingroup libsync
+ */
 class PropagateRemoteMove : public PropagateItemJob {
     Q_OBJECT
     QPointer<MoveJob> _job;
diff --git a/src/libsync/propagateupload.h b/src/libsync/propagateupload.h
index 946a9fd71..e75634578 100644
--- a/src/libsync/propagateupload.h
+++ b/src/libsync/propagateupload.h
@@ -24,6 +24,10 @@
 namespace OCC {
 class BandwidthManager;
 
+/*!
+ * \brief The UploadDevice class
+ * \ingroup libsync
+ */
 class UploadDevice : public QIODevice {
     Q_OBJECT
 public:
@@ -74,6 +78,10 @@ protected slots:
     void slotJobUploadProgress(qint64 sent, qint64 t);
 };
 
+/*!
+ * \brief The PUTFileJob class
+ * \ingroup libsync
+ */
 class PUTFileJob : public AbstractNetworkJob {
     Q_OBJECT
 
@@ -115,11 +123,12 @@ private slots:
 #endif
 };
 
-/**
- * This job implements the assynchronous PUT
+/*!
+ * \brief This job implements the assynchronous PUT
+ *
  * If the server replies to a PUT with a OC-Finish-Poll url, we will query this url until the server
- * replies with an etag
- * https://github.com/owncloud/core/issues/12097
+ * replies with an etag. https://github.com/owncloud/core/issues/12097
+ * \ingroup libsync
  */
 class PollJob : public AbstractNetworkJob {
     Q_OBJECT
@@ -145,7 +154,10 @@ signals:
     void finishedSignal();
 };
 
-
+/*!
+ * \brief The PropagateUploadFileQNAM class
+ * \ingroup libsync
+ */
 class PropagateUploadFileQNAM : public PropagateItemJob {
     Q_OBJECT
 
diff --git a/src/libsync/propagator_legacy.h b/src/libsync/propagator_legacy.h
index a49093396..067df36cd 100644
--- a/src/libsync/propagator_legacy.h
+++ b/src/libsync/propagator_legacy.h
@@ -38,8 +38,10 @@ struct ScopedPointerHelpers {
 };
 
 
-/*
- * Abstract class for neon job.  Lives in the neon thread
+
+/*!
+ * \brief Abstract class for neon job. Lives in the neon thread
+ * \ingroup libsync
  */
 class PropagateNeonJob : public PropagateItemJob {
     Q_OBJECT
@@ -76,6 +78,10 @@ public:
     JobParallelism parallelism() Q_DECL_OVERRIDE { return WaitForFinished; }
 };
 
+/*!
+ * \brief The UpdateMTimeAndETagJob class
+ * \ingroup libsync
+ */
 class UpdateMTimeAndETagJob : public PropagateNeonJob {
     Q_OBJECT
 public:
@@ -83,6 +89,10 @@ public:
     void start() Q_DECL_OVERRIDE;
 };
 
+/*!
+ * \brief The PropagateUploadFileLegacy class
+ * \ingroup libsync
+ */
 class PropagateUploadFileLegacy: public PropagateNeonJob {
     Q_OBJECT
 public:
diff --git a/src/libsync/propagatorjobs.h b/src/libsync/propagatorjobs.h
index cdf7074f1..a1f045dcf 100644
--- a/src/libsync/propagatorjobs.h
+++ b/src/libsync/propagatorjobs.h
@@ -34,8 +34,9 @@ static const char checkSumSHA1C[] = "SHA1";
 static const char checkSumAdlerC[] = "Adler32";
 static const char checkSumAdlerUpperC[] = "ADLER32";
 
-/**
- * Declaration of the other propagation jobs
+/*!
+ * \brief Declaration of the other propagation jobs
+ * \ingroup libsync
  */
 class PropagateLocalRemove : public PropagateItemJob {
     Q_OBJECT
@@ -43,6 +44,11 @@ public:
     PropagateLocalRemove (OwncloudPropagator* propagator,const SyncFileItemPtr& item)  : PropagateItemJob(propagator, item) {}
     void start() Q_DECL_OVERRIDE;
 };
+
+/*!
+ * \brief The PropagateLocalMkdir class
+ * \ingroup libsync
+ */
 class PropagateLocalMkdir : public PropagateItemJob {
     Q_OBJECT
 public:
@@ -50,6 +56,11 @@ public:
     void start() Q_DECL_OVERRIDE;
 
 };
+
+/*!
+ * \brief The PropagateLocalRename class
+ * \ingroup libsync
+ */
 class PropagateLocalRename : public PropagateItemJob {
     Q_OBJECT
 public:
diff --git a/src/libsync/syncengine.h b/src/libsync/syncengine.h
index 4337bc1fa..5050b3780 100644
--- a/src/libsync/syncengine.h
+++ b/src/libsync/syncengine.h
@@ -46,6 +46,10 @@ class SyncJournalFileRecord;
 class SyncJournalDb;
 class OwncloudPropagator;
 
+/*!
+ * \brief The SyncEngine class
+ * \ingroup libsync
+ */
 class OWNCLOUDSYNC_EXPORT SyncEngine : public QObject
 {
     Q_OBJECT
diff --git a/src/libsync/syncfileitem.h b/src/libsync/syncfileitem.h
index 17cadfeb7..9c0df6c2f 100644
--- a/src/libsync/syncfileitem.h
+++ b/src/libsync/syncfileitem.h
@@ -29,8 +29,13 @@
  #define BITFIELD(size) :size
 #endif
 
+
 namespace OCC {
 
+/*!
+ * \brief The SyncFileItem class
+ * \ingroup libsync
+ */
 class SyncFileItem {
 public:
     enum Direction {
diff --git a/src/libsync/syncfilestatus.h b/src/libsync/syncfilestatus.h
index 319f4e4ac..b3eb9ed88 100644
--- a/src/libsync/syncfilestatus.h
+++ b/src/libsync/syncfilestatus.h
@@ -20,6 +20,10 @@
 
 namespace OCC {
 
+/*!
+ * \brief The SyncFileStatus class
+ * \ingroup libsync
+ */
 class OWNCLOUDSYNC_EXPORT SyncFileStatus
 {
 public:
diff --git a/src/libsync/syncjournaldb.h b/src/libsync/syncjournaldb.h
index edca7bb5e..62f9b7bb0 100644
--- a/src/libsync/syncjournaldb.h
+++ b/src/libsync/syncjournaldb.h
@@ -26,10 +26,11 @@ namespace OCC {
 class SyncJournalFileRecord;
 class SyncJournalErrorBlacklistRecord;
 
-/**
- * Class that handle the sync database
+/*!
+ * \brief Class that handle the sync database
  *
  * This class is thread safe. All public function are locking the mutex.
+ * \ingroup libsync
  */
 class OWNCLOUDSYNC_EXPORT SyncJournalDb : public QObject
 {
diff --git a/src/libsync/syncjournalfilerecord.h b/src/libsync/syncjournalfilerecord.h
index 459c6e6fe..dfa9251e4 100644
--- a/src/libsync/syncjournalfilerecord.h
+++ b/src/libsync/syncjournalfilerecord.h
@@ -23,6 +23,10 @@ namespace OCC {
 
 class SyncFileItem;
 
+/*!
+ * \brief The SyncJournalFileRecord class
+ * \ingroup libsync
+ */
 class OWNCLOUDSYNC_EXPORT SyncJournalFileRecord
 {
 public:
diff --git a/src/libsync/syncresult.h b/src/libsync/syncresult.h
index 576e05e4a..14990d20b 100644
--- a/src/libsync/syncresult.h
+++ b/src/libsync/syncresult.h
@@ -25,6 +25,10 @@
 namespace OCC
 {
 
+/*!
+ * \brief The SyncResult class
+ * \ingroup libsync
+ */
 class OWNCLOUDSYNC_EXPORT SyncResult
 {
 public:
diff --git a/src/libsync/theme.h b/src/libsync/theme.h
index 9df4dfab6..9f21f909e 100644
--- a/src/libsync/theme.h
+++ b/src/libsync/theme.h
@@ -29,6 +29,10 @@ namespace OCC {
 
 class SyncResult;
 
+/*!
+ * \brief The Theme class
+ * \ingroup libsync
+ */
 class OWNCLOUDSYNC_EXPORT Theme : public QObject
 {
     Q_OBJECT
diff --git a/src/libsync/transmissionchecksumvalidator.h b/src/libsync/transmissionchecksumvalidator.h
index 628e0a8d9..2d8161915 100644
--- a/src/libsync/transmissionchecksumvalidator.h
+++ b/src/libsync/transmissionchecksumvalidator.h
@@ -22,6 +22,10 @@
 
 namespace OCC {
 
+/*!
+ * \brief The TransmissionChecksumValidator class
+ * \ingroup libsync
+ */
 class OWNCLOUDSYNC_EXPORT TransmissionChecksumValidator : public QObject
 {
     Q_OBJECT
diff --git a/src/libsync/utility.h b/src/libsync/utility.h
index 272dc8962..7773f04b0 100644
--- a/src/libsync/utility.h
+++ b/src/libsync/utility.h
@@ -24,6 +24,9 @@
 
 namespace OCC {
 
+/** \addtogroup libsync
+ *  @{
+ */
 namespace Utility
 {
     OWNCLOUDSYNC_EXPORT void sleep(int sec);
@@ -113,7 +116,9 @@ namespace Utility
         QDateTime timeOfLap( const QString& lapName ) const;
         quint64 durationOfLap( const QString& lapName ) const;
     };
+
 }
+/** @} */ // \addtogroup
 
 }
 #endif // UTILITY_H
diff --git a/src/mirall/qbacktrace.h b/src/mirall/qbacktrace.h
deleted file mode 100644
index 8d1a7a469..000000000
--- a/src/mirall/qbacktrace.h
+++ /dev/null
@@ -1,24 +0,0 @@
-
-#include <execinfo.h>
-#include <stdlib.h>
-
-static QString qBacktrace( int levels = -1 )
-{
-    QString s;
-    void* trace[256];
-    int n = backtrace(trace, 256);
-    char** strings = backtrace_symbols (trace, n);
-
-    if ( levels != -1 )
-        n = qMin( n, levels );
-    s = QString::fromLatin1("[\n");
-
-    for (int i = 0; i < n; ++i)
-        s += QString::number(i) +
-             QString::fromLatin1(": ") +
-             QString::fromLatin1(strings[i]) + QString::fromLatin1("\n");
-    s += QString::fromLatin1("]\n");
-    free (strings);
-    return s;
-}
-