diff --git a/FindKDL.cmake b/FindKDL.cmake
index 4ebbb6735d84a9dfe778e864d20608db062c58b8..0425105aab04459ac2a649f2424b063813610537 100644
--- a/FindKDL.cmake
+++ b/FindKDL.cmake
@@ -1,15 +1,60 @@
 # Locate KDL install directory
 
-FIND_PATH(KDL_DIR orocos_kdl-config.cmake /usr/local/share/orocos_kdl)
+# This module defines
+# KDL_INSTALL where to find include, lib, bin, etc.
+# KDL_FOUND, is set to true
 
-INCLUDE (${KDL_DIR}/orocos_kdl-config.cmake)
+INCLUDE (${PROJECT_SOURCE_DIR}/FindPkgConfig.cmake)
 
-MESSAGE(STATUS "Detecting KDL: using orocos_kdl-config.cmake to locate files.")
+MESSAGE( STATUS ${CMAKE_PKGCONFIG_EXECUTABLE} )
 
-IF (orocos_kdl_INCLUDE_DIRS AND orocos_kdl_LIBRARIES)
-    SET(KDL_FOUND TRUE)
-    MESSAGE(STATUS "   Libraries: ${orocos_kdl_LIBRARIES}")
-    MESSAGE(STATUS "   Defines: ${orocos_kdl_INCLUDE_DIRS}")
-ELSE (orocos_kdl_INCLUDE_DIRS AND orocos_kdl_LIBRARIES)
-    SET(KDL_FOUND FALSE)
-ENDIF (orocos_kdl_INCLUDE_DIRS AND orocos_kdl_LIBRARIES)     
+IF ( CMAKE_PKGCONFIG_EXECUTABLE )
+
+    MESSAGE( STATUS "Detecting KDL" )
+    
+    SET(ENV{PKG_CONFIG_PATH} "${KDL_INSTALL}/lib/pkgconfig/")
+    MESSAGE( "Looking for KDL in: ${KDL_INSTALL}")
+    PKGCONFIG( "orocos-kdl >= 0.99" KDL_FOUND KDL_INCLUDE_DIRS KDL_DEFINES KDL_LINK_DIRS KDL_LIBS )
+
+    IF( KDL_FOUND )
+        MESSAGE("   Includes in: ${KDL_INCLUDE_DIRS}")
+        MESSAGE("   Libraries in: ${KDL_LINK_DIRS}")
+        MESSAGE("   Libraries: ${KDL_LIBS}")
+        MESSAGE("   Defines: ${KDL_DEFINES}")
+
+	INCLUDE_DIRECTORIES( ${KDL_INCLUDE_DIRS} )
+	LINK_DIRECTORIES( ${KDL_LINK_DIRS})
+	#OROCOS_PKGCONFIG_INCPATH("${KDLTK_INCLUDE_DIRS}")
+	#OROCOS_PKGCONFIG_LIBS("${KDL_LIBS}")
+	#OROCOS_PKGCONFIG_LIBPATH("${KDL_LINK_DIRS}")
+
+#	SET(ENV{PKG_CONFIG_PATH} "${KDL_INSTALL}/lib/pkgconfig/:${OROCOS_INSTALL}/lib/pkgconfig")
+#	MESSAGE( "Looking for KDL Toolkit in: ${PKG_CONFIG_PATH}")
+#	PKGCONFIG( "orocos-kdltk-${OROCOS_TARGET} >= 0.99" KDLTK_FOUND KDLTK_INCLUDE_DIRS KDLTK_DEFINES KDLTK_LINK_DIRS KDLTK_LIBS )
+#	IF(KDLTK_FOUND)
+#	  INCLUDE_DIRECTORIES( ${KDLTK_INCLUDE_DIRS} )
+#	  LINK_DIRECTORIES( ${KDLTK_LINK_DIRS})
+#	  OROCOS_PKGCONFIG_INCPATH("${KDLTK_INCLUDE_DIRS}")
+#	  OROCOS_PKGCONFIG_LIBPATH("${KDLTK_LINK_DIRS}")
+#	  OROCOS_PKGCONFIG_LIBS("${KDLTK_LIBS}")
+#	  IF(CORBA_ENABLED)
+#	    SET(ENV{PKG_CONFIG_PATH} "${KDL_INSTALL}/lib/pkgconfig/:${OROCOS_INSTALL}/lib/pkgconfig")
+#	    MESSAGE("Looking for KDL Toolkit CORBA extension in ${PKG_CONFIG_PATH}")
+#	    PKGCONFIG( "orocos-kdltk-corba-${OROCOS_TARGET} >= 0.99" KDLTKCORBA_FOUND KDLTKCORBA_INCLUDE_DIRS KDLTKCORBA_DEFINES KDLTKCORBA_LINK_DIRS KDLTKCORBA_LIBS )
+#	    IF(KDLTKCORBA_FOUND)
+#	      INCLUDE_DIRECTORIES( ${KDLTKCORBA_INCLUDE_DIRS} )
+#	      LINK_DIRECTORIES( ${KDLTKCORBA_LINK_DIRS})
+#	      OROCOS_PKGCONFIG_INCPATH("${KDLTKCORBA_INCLUDE_DIRS}")
+#	      OROCOS_PKGCONFIG_LIBPATH("${KDLTKCORBA_LINK_DIRS}")
+#	      OROCOS_PKGCONFIG_LIBS("${KDLTKCORBA_LIBS}")
+#	    ENDIF ( KDLTKCORBA_FOUND )
+#	  ENDIF(CORBA_ENABLED)
+#	ENDIF ( KDLTK_FOUND )
+      ENDIF ( KDL_FOUND )
+
+ELSE  ( CMAKE_PKGCONFIG_EXECUTABLE )
+
+    # Can't find pkg-config -- have to search manually
+    MESSAGE( FATAL_ERROR "Can't find KDL without pkgconfig !")
+
+ENDIF ( CMAKE_PKGCONFIG_EXECUTABLE )
\ No newline at end of file
diff --git a/FindPkgConfig.cmake b/FindPkgConfig.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..1b4dd35f73fae3a8921c137ae56654fa0885a498
--- /dev/null
+++ b/FindPkgConfig.cmake
@@ -0,0 +1,133 @@
+## FindPkgConfig.cmake
+## by  Albert Strasheim <http://students . ee . sun . ac . za/~albert/>
+## and Alex Brooks (a.brooks at acfr . usyd . edu . au)
+##
+## This module finds packages using pkg-config, which retrieves
+## information about packages from special metadata files.
+##
+## See http://www . freedesktop . org/Software/pkgconfig/
+##
+## -------------------------------------------------------------------
+##
+## Usage:
+##
+## INCLUDE( ${CMAKE_ROOT}/Modules/FindPkgConfig.cmake)
+## 
+## IF ( CMAKE_PKGCONFIG_EXECUTABLE )
+##
+##     # Find all the librtk stuff with pkg-config
+##     PKGCONFIG( "librtk >= 2.0" HAVE_RTK RTK_INCLUDE_DIRS RTK_DEFINES RTK_LINK_DIRS RTK_LIBS )
+##
+## ELSE  ( CMAKE_PKGCONFIG_EXECUTABLE )
+##
+##     # Can't find pkg-config -- have to find librtk somehow else
+##
+## ENDIF ( CMAKE_PKGCONFIG_EXECUTABLE )
+##
+##
+## Notes:
+## 
+## You can set the PKG_CONFIG_PATH environment variable to tell
+## pkg-config where to search for .pc files. See pkg-config(1) for
+## more information.
+##
+#
+# FIXME: IF(WIN32) pkg-config --msvc-syntax ENDIF(WIN32) ???
+#
+# FIXME: Parsing of pkg-config output is specific to gnu-style flags
+#
+
+FIND_PROGRAM(CMAKE_PKGCONFIG_EXECUTABLE pkg-config)
+MARK_AS_ADVANCED(CMAKE_PKGCONFIG_EXECUTABLE)
+
+########################################
+
+MACRO(PKGCONFIG_PARSE_FLAGS FLAGS INCLUDES DEFINES)
+
+  #MESSAGE("DEBUG: FLAGS: ${FLAGS}")
+
+  STRING(REGEX MATCHALL " -I[^ ]*" ${INCLUDES} "${FLAGS}")
+  STRING(REGEX REPLACE " -I" "" ${INCLUDES} "${${INCLUDES}}")
+  #MESSAGE("DEBUG: INCLUDES: ${${INCLUDES}}")
+  
+  STRING(REGEX REPLACE " -I[^ ]*" "" ${DEFINES} "${FLAGS}")
+  #MESSAGE("DEBUG: DEFINES: ${${DEFINES}}")
+
+ENDMACRO(PKGCONFIG_PARSE_FLAGS)
+
+########################################
+
+MACRO(PKGCONFIG_PARSE_LIBS LIBS LINKDIRS LINKLIBS)
+
+  #MESSAGE("DEBUG: LIBS: ${LIBS}")
+
+  STRING(REGEX MATCHALL " -L[^ ]*" ${LINKDIRS} "${LIBS}")
+  STRING(REGEX REPLACE " -L" "" ${LINKDIRS} "${${LINKDIRS}}")
+  #MESSAGE("DEBUG: LINKDIRS: ${${LINKDIRS}}")
+
+  STRING(REGEX MATCHALL " -l[^ ]*" ${LINKLIBS} "${LIBS}")
+  STRING(REGEX REPLACE " -l" "" ${LINKLIBS} "${${LINKLIBS}}")
+  #MESSAGE("DEBUG: LINKLIBS: ${${LINKLIBS}}")
+
+ENDMACRO(PKGCONFIG_PARSE_LIBS)
+
+########################################
+
+MACRO(PKGCONFIG LIBRARY FOUND INCLUDE_DIRS DEFINES LINKDIRS LINKLIBS)
+
+  SET(${FOUND} 0)
+
+# alexm: why print it twice? once here, and once when it's found/not found
+#   MESSAGE("-- Looking for ${LIBRARY}")
+  
+  IF(CMAKE_PKGCONFIG_EXECUTABLE)
+    # MESSAGE("DEBUG: pkg-config executable found")
+    
+    EXEC_PROGRAM(${CMAKE_PKGCONFIG_EXECUTABLE}
+      ARGS "'${LIBRARY}'"
+      OUTPUT_VARIABLE PKGCONFIG_OUTPUT
+      RETURN_VALUE PKGCONFIG_RETURN)
+
+    IF(NOT PKGCONFIG_RETURN)
+      
+      # set C_FLAGS and CXX_FLAGS
+      EXEC_PROGRAM(${CMAKE_PKGCONFIG_EXECUTABLE}
+        ARGS "--cflags '${LIBRARY}'"
+        OUTPUT_VARIABLE CMAKE_PKGCONFIG_C_FLAGS)
+
+      #SET(CMAKE_PKGCONFIG_CXX_FLAGS "${CMAKE_PKGCONFIG_C_FLAGS}")
+      PKGCONFIG_PARSE_FLAGS(" ${CMAKE_PKGCONFIG_C_FLAGS}" ${INCLUDE_DIRS} ${DEFINES} )
+      
+      # set LIBRARIES
+      EXEC_PROGRAM(${CMAKE_PKGCONFIG_EXECUTABLE}
+        ARGS "--libs '${LIBRARY}'"
+        OUTPUT_VARIABLE CMAKE_PKGCONFIG_LIBRARIES)
+      PKGCONFIG_PARSE_LIBS (" ${CMAKE_PKGCONFIG_LIBRARIES}" ${LINKDIRS} ${LINKLIBS} )
+
+      SET(${FOUND} 1)
+      MESSAGE("-- Looking for ${LIBRARY} -- found")
+
+    ELSE(NOT PKGCONFIG_RETURN)
+      MESSAGE("-- Looking for ${LIBRARY} -- not found")
+      
+      SET(CMAKE_PKGCONFIG_C_FLAGS "")
+      SET(CMAKE_PKGCONFIG_CXX_FLAGS "")
+      SET(CMAKE_PKGCONFIG_LIBRARIES "")
+      SET(${INCLUDE_DIRS} "")
+      SET(${DEFINES} "")
+      SET(${LINKDIRS} "")
+      SET(${LINKLIBS} "")
+
+    ENDIF(NOT PKGCONFIG_RETURN)
+
+  ELSE(CMAKE_PKGCONFIG_EXECUTABLE)
+    MESSAGE("-- pkg-config executable NOT FOUND")
+  ENDIF(CMAKE_PKGCONFIG_EXECUTABLE)
+
+  #MESSAGE("Have  ${LIBRARY}       : ${${FOUND}}")
+  #MESSAGE("${LIBRARY} include dirs: ${${INCLUDE_DIRS}}")
+  #MESSAGE("${LIBRARY} defines     : ${${DEFINES}}")
+  #MESSAGE("${LIBRARY} link dirs   : ${${LINKDIRS}}")
+  #MESSAGE("${LIBRARY} link libs   : ${${LINKLIBS}}")
+
+ENDMACRO(PKGCONFIG)
\ No newline at end of file
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 57e7569115b14b1922d46e89b67960729e3d44b2..656d92db42f44dffd12990d0874e52f06153cae2 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -23,12 +23,12 @@ FIND_PACKAGE(Eigen3 REQUIRED)
 SET(CMAKE_BUILD_TYPE release)
 
 # add the necessary include directories
-INCLUDE_DIRECTORIES(. ${EIGEN3_INCLUDE_DIR} ${Boost_INCLUDE_DIRS} ${orocos_kdl_INCLUDE_DIRS})
+INCLUDE_DIRECTORIES(. ${EIGEN3_INCLUDE_DIR} ${Boost_INCLUDE_DIRS} ${KDL_INCLUDE_DIRS})
 
 # create the shared library
 ADD_LIBRARY(uam_task_ctrl SHARED ${sources} ${sources_tasks})
 
-TARGET_LINK_LIBRARIES(uam_task_ctrl ${Boost_LIBRARIES} ${orocos_kdl_LIBRARIES}) 
+TARGET_LINK_LIBRARIES(uam_task_ctrl ${Boost_LIBRARIES} ${KDL_LIBS}) 
 
 # link necessary libraries
 INSTALL(TARGETS uam_task_ctrl
@@ -40,5 +40,7 @@ INSTALL(FILES ${headers} DESTINATION include/iridrivers/uam)
 INSTALL(FILES ${headers_tasks} DESTINATION include/iridrivers/uam/tasks)
 
 INSTALL(FILES ../Finduam_task_ctrl.cmake DESTINATION ${CMAKE_ROOT}/Modules/)
+INSTALL(FILES ../FindKDL.cmake DESTINATION ${CMAKE_ROOT}/Modules/)
+INSTALL(FILES ../FindPkgConfig.cmake DESTINATION ${CMAKE_ROOT}/Modules/)
 
 ADD_SUBDIRECTORY(examples)