diff --git a/CMakeLists.txt b/CMakeLists.txt
index 62817ba0617c5fb50277cf7535368274ed9bd2dd..089d20a50aa4215d8d9d62b986fab3b80b70158c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -46,7 +46,16 @@ include_directories(${WCCL_SOURCE_DIR})
 
 set(LIBWCCL_VERSION "${ver_major}.${ver_minor}.${ver_patch}")
 
-find_package(Boost 1.41 REQUIRED COMPONENTS program_options filesystem regex)
+find_package(Boost 1.41 REQUIRED COMPONENTS program_options system filesystem regex)
+
+if(MSVC OR BORLAND)
+# Use the auto-linking feature, don't try to add libraries yourself:
+	set(Boost_LIBRARIES "")
+# Note the default is to link static libs and it is left like that here.
+# You can make it link to DLL by defining BOOST_#module#_DYN_LINK
+# in C++ source file or somewhere in CMake file, e.g. 
+# add_definitions( -DBOOST_FILESYSTEM_DYN_LINK )
+endif(MSVC OR BORLAND)
 
 add_subdirectory(libwccl)
 add_subdirectory(wcclparser)
diff --git a/CMakeScripts/FindGlib.cmake b/CMakeScripts/FindGlib.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..d3547d51d90f5126d486702a9cff1957f1ea07af
--- /dev/null
+++ b/CMakeScripts/FindGlib.cmake
@@ -0,0 +1,39 @@
+# - Try to find Glib-2.0 (with gobject)
+# Once done, this will define
+#
+#  Glib_FOUND - system has Glib
+#  Glib_INCLUDE_DIRS - the Glib include directories
+#  Glib_LIBRARIES - link these to use Glib
+
+include(LibFindMacros)
+
+# Use pkg-config to get hints about paths
+libfind_pkg_check_modules(Glib_PKGCONF glib-2.0)
+
+# Main include dir
+find_path(Glib_INCLUDE_DIR
+  NAMES glib.h
+  PATHS ${Glib_PKGCONF_INCLUDE_DIRS}
+  PATH_SUFFIXES glib-2.0
+)
+
+# Glib-related libraries also use a separate config header, which is in lib dir
+find_path(GlibConfig_INCLUDE_DIR
+  NAMES glibconfig.h
+  PATHS ${Glib_PKGCONF_INCLUDE_DIRS} /usr
+  PATH_SUFFIXES lib/glib-2.0/include
+)
+
+# Finally the library itself
+find_library(Glib_LIBRARY
+  NAMES glib-2.0
+  PATHS ${Glib_PKGCONF_LIBRARY_DIRS}
+)
+
+# Set the include dir variables and the libraries and let libfind_process do the rest.
+# NOTE: Singular variables for this library, plural for libraries this this lib depends on.
+set(Glib_PROCESS_INCLUDES Glib_INCLUDE_DIR GlibConfig_INCLUDE_DIR)
+set(Glib_PROCESS_LIBS Glib_LIBRARY)
+libfind_process(Glib)
+
+
diff --git a/CMakeScripts/FindGlibmm.cmake b/CMakeScripts/FindGlibmm.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..1615bc283e30d7e15c73585ebbd879c60668557f
--- /dev/null
+++ b/CMakeScripts/FindGlibmm.cmake
@@ -0,0 +1,38 @@
+# - Try to find Glibmm-2.4
+# Once done, this will define
+#
+#  Glibmm_FOUND - system has Glibmm
+#  Glibmm_INCLUDE_DIRS - the Glibmm include directories
+#  Glibmm_LIBRARIES - link these to use Glibmm
+
+include(LibFindMacros)
+
+# Dependencies
+libfind_package(Glibmm Glib)
+libfind_package(Glibmm SigC++)
+
+# Use pkg-config to get hints about paths
+libfind_pkg_check_modules(Glibmm_PKGCONF glibmm-2.4)
+
+# Main include dir
+find_path(Glibmm_INCLUDE_DIR
+  NAMES glibmm/main.h
+  PATHS ${Glibmm_PKGCONF_INCLUDE_DIRS}
+  PATH_SUFFIXES glibmm-2.4
+)
+
+# Glib-related libraries also use a separate config header, which is in lib dir
+find_path(GlibmmConfig_INCLUDE_DIR
+  NAMES glibmmconfig.h
+  PATHS ${Glibmm_PKGCONF_INCLUDE_DIRS} /usr
+  PATH_SUFFIXES lib/glibmm-2.4/include
+)
+
+libfind_library(Glibmm glibmm 2.4)
+
+# Set the include dir variables and the libraries and let libfind_process do the rest.
+# NOTE: Singular variables for this library, plural for libraries this this lib depends on.
+set(Glibmm_PROCESS_INCLUDES Glibmm_INCLUDE_DIR GlibmmConfig_INCLUDE_DIR Glib_INCLUDE_DIRS SigC++_INCLUDE_DIRS)
+set(Glibmm_PROCESS_LIBS Glibmm_LIBRARY Glib_LIBRARIES SigC++_LIBRARIES)
+libfind_process(Glibmm)
+
diff --git a/CMakeScripts/FindLibXML++.cmake b/CMakeScripts/FindLibXML++.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..d5ff78a69148d5145bf04701e5733f9589f77511
--- /dev/null
+++ b/CMakeScripts/FindLibXML++.cmake
@@ -0,0 +1,41 @@
+# - Try to find LibXML++ 2.6
+# Once done, this will define
+#
+#  LibXML++_FOUND - system has LibXML++
+#  LibXML++_INCLUDE_DIRS - the LibXML++ include directories
+#  LibXML++_LIBRARIES - link these to use LibXML++
+
+include(LibFindMacros)
+
+# Dependencies
+libfind_package(LibXML++ LibXML2)
+libfind_package(LibXML++ Glibmm)
+
+# Use pkg-config to get hints about paths
+libfind_pkg_check_modules(LibXML++_PKGCONF libxml++-2.6)
+
+# Main include dir
+find_path(LibXML++_INCLUDE_DIR
+  NAMES libxml++/libxml++.h
+  PATHS ${LibXML++_PKGCONF_INCLUDE_DIRS}
+  PATH_SUFFIXES libxml++-2.6
+)
+
+# Glib-related libraries also use a separate config header, which is in lib dir
+find_path(LibXML++Config_INCLUDE_DIR
+  NAMES libxml++config.h
+  PATHS ${LibXML++_PKGCONF_INCLUDE_DIRS} /usr
+  PATH_SUFFIXES lib/libxml++-2.6/include
+)
+
+# Finally the library itself
+find_library(LibXML++_LIBRARY
+  NAMES xml++-2.6
+  PATHS ${LibXML++_PKGCONF_LIBRARY_DIRS}
+)
+
+# Set the include dir variables and the libraries and let libfind_process do the rest.
+# NOTE: Singular variables for this library, plural for libraries this this lib depends on.
+set(LibXML++_PROCESS_INCLUDES LibXML++_INCLUDE_DIR LibXML++Config_INCLUDE_DIR LibXML2_INCLUDE_DIRS Glibmm_INCLUDE_DIRS)
+set(LibXML++_PROCESS_LIBS LibXML++_LIBRARY LibXML2_LIBRARIES Glibmm_LIBRARIES)
+libfind_process(LibXML++)
diff --git a/CMakeScripts/FindLibXML2.cmake b/CMakeScripts/FindLibXML2.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..013b27880864bad8a4cc0fbe5d087c7759d38aff
--- /dev/null
+++ b/CMakeScripts/FindLibXML2.cmake
@@ -0,0 +1,90 @@
+# - Try to find libxml2
+# Once done this will define
+#
+#  LibXML2_FOUND - system has xml2
+#  LibXML2_INCLUDE_DIRS - the xml2 include directory
+#  LibXML2_LIBRARIES - Link these to use xml2
+#  LibXML2_DEFINITIONS - Compiler switches required for using xml2
+#
+#  Copyright (c) 2008 Andreas Schneider <mail@cynapses.org>
+#  Modified for other libraries by Lasse Kärkkäinen <tronic>
+#
+#  Redistribution and use is allowed according to the terms of the New
+#  BSD license.
+#  For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+#
+
+
+if (LibXML2_LIBRARIES AND LibXML2_INCLUDE_DIRS)
+  # in cache already
+  set(LibXML2_FOUND TRUE)
+else (LibXML2_LIBRARIES AND LibXML2_INCLUDE_DIRS)
+  # use pkg-config to get the directories and then use these values
+  # in the FIND_PATH() and FIND_LIBRARY() calls
+  if (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4)
+    include(UsePkgConfig)
+    pkgconfig(libxml-2.0 _LibXML2_INCLUDEDIR _LibXML2_LIBDIR _LibXML2_LDFLAGS _LibXML2_CFLAGS)
+  else (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4)
+    find_package(PkgConfig)
+    if (PKG_CONFIG_FOUND)
+      pkg_check_modules(_LIBXML2 libxml-2.0)
+    endif (PKG_CONFIG_FOUND)
+  endif (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4)
+  find_path(LibXML2_INCLUDE_DIR
+    NAMES
+      libxml/xpath.h
+    PATHS
+      ${_LibXML2_INCLUDEDIR}
+      /usr/include
+      /usr/local/include
+      /opt/local/include
+      /sw/include
+    PATH_SUFFIXES
+      libxml2
+  )
+  
+  find_library(LibXML2_LIBRARY
+    NAMES
+      xml2
+    PATHS
+      ${_LibXML2_LIBDIR}
+      /usr/lib
+      /usr/local/lib
+      /opt/local/lib
+      /sw/lib
+  )
+
+  if (LibXML2_LIBRARY)
+    set(LibXML2_FOUND TRUE)
+  endif (LibXML2_LIBRARY)
+
+  set(LibXML2_INCLUDE_DIRS
+    ${LibXML2_INCLUDE_DIR}
+  )
+
+  if (LibXML2_FOUND)
+    set(LibXML2_LIBRARIES
+      ${LibXML2_LIBRARIES}
+      ${LibXML2_LIBRARY}
+    )
+  endif (LibXML2_FOUND)
+
+  if (LibXML2_INCLUDE_DIRS AND LibXML2_LIBRARIES)
+     set(LibXML2_FOUND TRUE)
+  endif (LibXML2_INCLUDE_DIRS AND LibXML2_LIBRARIES)
+
+  if (LibXML2_FOUND)
+    if (NOT LibXML2_FIND_QUIETLY)
+      message(STATUS "Found libxml2: ${LibXML2_LIBRARY}")
+    endif (NOT LibXML2_FIND_QUIETLY)
+  else (LibXML2_FOUND)
+    if (LibXML2_FIND_REQUIRED)
+      message(FATAL_ERROR "Could not find libxml2")
+    endif (LibXML2_FIND_REQUIRED)
+  endif (LibXML2_FOUND)
+
+  # show the LibXML2_INCLUDE_DIRS and LibXML2_LIBRARIES variables only in the advanced view
+  mark_as_advanced(LibXML2_INCLUDE_DIRS LibXML2_LIBRARIES)
+
+endif (LibXML2_LIBRARIES AND LibXML2_INCLUDE_DIRS)
+
diff --git a/CMakeScripts/FindSigC++.cmake b/CMakeScripts/FindSigC++.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..7d34d9ecfd8a5b872fb0ee41d9dada49c21fbea8
--- /dev/null
+++ b/CMakeScripts/FindSigC++.cmake
@@ -0,0 +1,34 @@
+# - Try to find SigC++-2.0
+# Once done, this will define
+#
+#  SigC++_FOUND - system has SigC++
+#  SigC++_INCLUDE_DIRS - the SigC++ include directories
+#  SigC++_LIBRARIES - link these to use SigC++
+
+include(LibFindMacros)
+
+# Use pkg-config to get hints about paths
+libfind_pkg_check_modules(SigC++_PKGCONF sigc++-2.0)
+
+# Main include dir
+find_path(SigC++_INCLUDE_DIR
+  NAMES sigc++/sigc++.h
+  PATHS ${SigC++_PKGCONF_INCLUDE_DIRS}
+  PATH_SUFFIXES sigc++-2.0
+)
+
+# Glib-related libraries also use a separate config header, which is in lib dir
+find_path(SigC++Config_INCLUDE_DIR
+  NAMES sigc++config.h
+  PATHS ${SigC++_PKGCONF_INCLUDE_DIRS} /usr
+  PATH_SUFFIXES lib/sigc++-2.0/include
+)
+
+libfind_library(SigC++ sigc 2.0)
+
+# Set the include dir variables and the libraries and let libfind_process do the rest.
+# NOTE: Singular variables for this library, plural for libraries this this lib depends on.
+set(SigC++_PROCESS_INCLUDES SigC++_INCLUDE_DIR SigC++Config_INCLUDE_DIR)
+set(SigC++_PROCESS_LIBS SigC++_LIBRARY)
+libfind_process(SigC++)
+
diff --git a/CMakeScripts/LibFindMacros.cmake b/CMakeScripts/LibFindMacros.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..69975c51be3f9c5e0ff372a4424f8de3b580ee88
--- /dev/null
+++ b/CMakeScripts/LibFindMacros.cmake
@@ -0,0 +1,99 @@
+# Works the same as find_package, but forwards the "REQUIRED" and "QUIET" arguments
+# used for the current package. For this to work, the first parameter must be the
+# prefix of the current package, then the prefix of the new package etc, which are
+# passed to find_package.
+macro (libfind_package PREFIX)
+  set (LIBFIND_PACKAGE_ARGS ${ARGN})
+  if (${PREFIX}_FIND_QUIETLY)
+    set (LIBFIND_PACKAGE_ARGS ${LIBFIND_PACKAGE_ARGS} QUIET)
+  endif (${PREFIX}_FIND_QUIETLY)
+  if (${PREFIX}_FIND_REQUIRED)
+    set (LIBFIND_PACKAGE_ARGS ${LIBFIND_PACKAGE_ARGS} REQUIRED)
+  endif (${PREFIX}_FIND_REQUIRED)
+  find_package(${LIBFIND_PACKAGE_ARGS})
+endmacro (libfind_package)
+
+# CMake developers made the UsePkgConfig system deprecated in the same release (2.6)
+# where they added pkg_check_modules. Consequently I need to support both in my scripts
+# to avoid those deprecated warnings. Here's a helper that does just that.
+# Works identically to pkg_check_modules, except that no checks are needed prior to use.
+macro (libfind_pkg_check_modules PREFIX PKGNAME)
+  if (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4)
+    include(UsePkgConfig)
+    pkgconfig(${PKGNAME} ${PREFIX}_INCLUDE_DIRS ${PREFIX}_LIBRARY_DIRS ${PREFIX}_LDFLAGS ${PREFIX}_CFLAGS)
+  else (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4)
+    find_package(PkgConfig)
+    if (PKG_CONFIG_FOUND)
+      pkg_check_modules(${PREFIX} ${PKGNAME})
+    endif (PKG_CONFIG_FOUND)
+  endif (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4)
+endmacro (libfind_pkg_check_modules)
+
+# Do the final processing once the paths have been detected.
+# If include dirs are needed, ${PREFIX}_PROCESS_INCLUDES should be set to contain
+# all the variables, each of which contain one include directory.
+# Ditto for ${PREFIX}_PROCESS_LIBS and library files.
+# Will set ${PREFIX}_FOUND, ${PREFIX}_INCLUDE_DIRS and ${PREFIX}_LIBRARIES.
+# Also handles errors in case library detection was required, etc.
+macro (libfind_process PREFIX)
+  # Skip processing if already processed during this run
+  if (NOT ${PREFIX}_FOUND)
+    # Start with the assumption that the library was found
+    set (${PREFIX}_FOUND TRUE)
+
+    # Process all includes and set _FOUND to false if any are missing
+    foreach (i ${${PREFIX}_PROCESS_INCLUDES})
+      if (${i})
+        set (${PREFIX}_INCLUDE_DIRS ${${PREFIX}_INCLUDE_DIRS} ${${i}})
+        mark_as_advanced(${i})
+      else (${i})
+        set (${PREFIX}_FOUND FALSE)
+      endif (${i})
+    endforeach (i)
+
+    # Process all libraries and set _FOUND to false if any are missing
+    foreach (i ${${PREFIX}_PROCESS_LIBS})
+      if (${i})
+        set (${PREFIX}_LIBRARIES ${${PREFIX}_LIBRARIES} ${${i}})
+        mark_as_advanced(${i})
+      else (${i})
+        set (${PREFIX}_FOUND FALSE)
+      endif (${i})
+    endforeach (i)
+
+    # Print message and/or exit on fatal error
+    if (${PREFIX}_FOUND)
+      if (NOT ${PREFIX}_FIND_QUIETLY)
+        message (STATUS "Found ${PREFIX} ${${PREFIX}_VERSION}")
+      endif (NOT ${PREFIX}_FIND_QUIETLY)
+    else (${PREFIX}_FOUND)
+      if (${PREFIX}_FIND_REQUIRED)
+        foreach (i ${${PREFIX}_PROCESS_INCLUDES} ${${PREFIX}_PROCESS_LIBS})
+          message("${i}=${${i}}")
+        endforeach (i)
+        message (FATAL_ERROR "Required library ${PREFIX} NOT FOUND.\nInstall the library (dev version) and try again. If the library is already installed, use ccmake to set the missing variables manually.")
+      endif (${PREFIX}_FIND_REQUIRED)
+    endif (${PREFIX}_FOUND)
+  endif (NOT ${PREFIX}_FOUND)
+endmacro (libfind_process)
+
+macro(libfind_library PREFIX basename)
+  set(TMP "")
+  if(MSVC80)
+    set(TMP -vc80)
+  endif(MSVC80)
+  if(MSVC90)
+    set(TMP -vc90)
+  endif(MSVC90)
+  set(${PREFIX}_LIBNAMES ${basename}${TMP})
+  if(${ARGC} GREATER 2)
+    set(${PREFIX}_LIBNAMES ${basename}${TMP}-${ARGV2})
+    string(REGEX REPLACE "\\." "_" TMP ${${PREFIX}_LIBNAMES})
+    set(${PREFIX}_LIBNAMES ${${PREFIX}_LIBNAMES} ${TMP})
+  endif(${ARGC} GREATER 2)
+  find_library(${PREFIX}_LIBRARY
+    NAMES ${${PREFIX}_LIBNAMES}
+    PATHS ${${PREFIX}_PKGCONF_LIBRARY_DIRS}
+  )
+endmacro(libfind_library)
+
diff --git a/wcclparser/CMakeLists.txt b/wcclparser/CMakeLists.txt
index 49180955e2167c8cd422a150971f211aa4b59dd5..822e7f2ac6c301b1d1d107efe0dc8585049a1495 100644
--- a/wcclparser/CMakeLists.txt
+++ b/wcclparser/CMakeLists.txt
@@ -7,6 +7,11 @@ if (Libedit_FOUND)
 	set(LIBS ${LIBS} ${Libedit_LIBRARIES})
 endif (Libedit_FOUND)
 
+find_package(LibXML++ REQUIRED)
+include_directories(${LibXML++_INCLUDE_DIRS})
+link_directories(${LibXML++_LIBRARY_DIRS})
+set(LIBS ${LIBS} ${LibXML++_LIBRARIES})
+
 include_directories( ${CMAKE_SOURCE_DIR} )
 
 add_definitions(-DLIBWCCL_WCCLPARSER_DATA_DIR="${PROJECT_SOURCE_DIR}/")