diff --git a/classes/catkin.bbclass b/classes/catkin.bbclass
index 5a515d93d71ef1e85c66ccda2d934ce07c52bb78..97daff6f89ecb1ce1d63a7414d592b249e997216 100644
--- a/classes/catkin.bbclass
+++ b/classes/catkin.bbclass
@@ -2,7 +2,7 @@
 # Copyright (c) 2013 Stefan Herbrechtsmeier, Bielefeld University
 # 
 
-inherit cmake distutils-base
+inherit cmake distutils-base ros
 
 DEPENDS_prepend = "${@['catkin-native ', ''][d.getVar('BPN', True) == 'catkin']}"
 
@@ -28,33 +28,6 @@ OECMAKE_BUILDPATH = "${S}/build"
 export BUILD_SYS
 export HOST_SYS
 
-FILES_SOLIBSDEV = ""
-FILES_${PN} += "${libdir}/lib*${SOLIBSDEV}"
-
-ROS_BPN = "${@d.getVar('BPN', True).replace('-', '_')}"
-ROS_BP = "${ROS_BPN}-${PV}"
-
-FILES_${PN} += "\
-    ${prefix}/etc \
-    ${datadir}/ros/config/${ROS_BPN}.config \
-    ${datadir}/${ROS_BPN} \
-    "
-
-FILES_${PN}-dev += "\
-    ${datadir}/${ROS_BPN}/cmake \
-    ${datadir}/${ROS_BPN}/*.template \
-    "
-
-FILES_${PN}-dbg += "\
-    ${libdir}/${ROS_BPN}/.debug/* \
-    "
-
-PACKAGES += "${PN}-commonlisp"
-
-FILES_${PN}-commonlisp += " \
-    ${datadir}/common-lisp/ \
-    "
-
 SYSROOT_PREPROCESS_FUNCS += "catkin_sysroot_preprocess"
 
 catkin_sysroot_preprocess () {
diff --git a/classes/ros.bbclass b/classes/ros.bbclass
new file mode 100644
index 0000000000000000000000000000000000000000..3fb19ca7893ee1a45b2a05470646a777b73f4a70
--- /dev/null
+++ b/classes/ros.bbclass
@@ -0,0 +1,33 @@
+#
+# Copyright (c) 2013 Stefan Herbrechtsmeier, Bielefeld University
+# 
+
+ROS_BPN = "${@d.getVar('BPN', True).replace('-', '_')}"
+
+ROS_SPN ?= "${ROS_BPN}"
+ROS_SP = "${ROS_SPN}-${PV}"
+
+FILES_SOLIBSDEV = ""
+FILES_${PN} += "${libdir}/lib*${SOLIBSDEV}"
+
+FILES_${PN} += "\
+    ${prefix}/etc \
+    ${datadir}/ros/config/${ROS_BPN}.config \
+    ${datadir}/ros/core/${ROS_BPN} \
+    ${datadir}/${ROS_BPN} \
+    "
+
+FILES_${PN}-dev += "\
+    ${datadir}/${ROS_BPN}/cmake \
+    ${datadir}/${ROS_BPN}/*.template \
+    "
+
+FILES_${PN}-dbg += "\
+    ${libdir}/${ROS_BPN}/.debug/* \
+    "
+
+PACKAGES += "${PN}-commonlisp"
+
+FILES_${PN}-commonlisp += " \
+    ${datadir}/common-lisp/ \
+    "
diff --git a/recipes-ros/actionlib/actionlib/0001-check-for-CATKIN_ENABLE_TESTING.patch b/recipes-ros/actionlib/actionlib/0001-check-for-CATKIN_ENABLE_TESTING.patch
new file mode 100644
index 0000000000000000000000000000000000000000..74ab3c2f3c496ef7dc429e5b6e604f8a4df2fa2b
--- /dev/null
+++ b/recipes-ros/actionlib/actionlib/0001-check-for-CATKIN_ENABLE_TESTING.patch
@@ -0,0 +1,38 @@
+From f066ff531ecdea3b859881aa1f4b4b34cba910c1 Mon Sep 17 00:00:00 2001
+From: Dirk Thomas <dthomas@osrfoundation.org>
+Date: Wed, 3 Jul 2013 11:30:06 -0700
+Subject: [PATCH] check for CATKIN_ENABLE_TESTING
+
+---
+ CMakeLists.txt | 4 +++-
+ package.xml    | 2 +-
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 8a51426..20421f1 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -32,4 +32,6 @@ install(DIRECTORY include/${PROJECT_NAME}/
+   DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
+   FILES_MATCHING PATTERN "*.h")
+ 
+-add_subdirectory(test)
++if(CATKIN_ENABLE_TESTING)
++  add_subdirectory(test)
++endif()
+diff --git a/package.xml b/package.xml
+index 4d692ee..e45d984 100644
+--- a/package.xml
++++ b/package.xml
+@@ -14,7 +14,7 @@
+   <author>Eitan Marder-Eppstein</author>
+   <author>Vijay Pradeep</author>
+ 
+-  <buildtool_depend>catkin</buildtool_depend>
++  <buildtool_depend version_gte="0.5.68">catkin</buildtool_depend>
+ 
+   <build_depend>actionlib_msgs</build_depend>
+   <build_depend>boost</build_depend>
+-- 
+1.8.1.6
+
diff --git a/recipes-ros/actionlib/actionlib_1.10.1.bb b/recipes-ros/actionlib/actionlib_1.10.1.bb
index 01eae00e51dbb8c46449835024afa558608372f1..7f7b5fd6b241a6188b1e8c9793ae2c4a6c136aba 100644
--- a/recipes-ros/actionlib/actionlib_1.10.1.bb
+++ b/recipes-ros/actionlib/actionlib_1.10.1.bb
@@ -4,14 +4,12 @@ SECTION = "devel"
 LICENSE = "BSD"
 LIC_FILES_CHKSUM = "file://package.xml;beginline=11;endline=11;md5=d566ef916e9dedc494f5f793a6690ba5"
 
-SRC_URI = "https://github.com/ros/${BPN}/archive/${PV}.tar.gz;downloadfilename=${BP}.tar.gz;name=archive"
-SRC_URI[archive.md5sum] = "8da88314483b1330906b0ecf89c33494"
-SRC_URI[archive.sha256sum] = "c76317f60afec9e4cdcce28e0b88b9aef7e355ba8295228e759aa914ed10aae4"
+DEPENDS = "actionlib-msgs roscpp rostest"
 
-SRC_URI += "https://github.com/ros/actionlib/commit/f066ff531ecdea3b859881aa1f4b4b34cba910c1.patch;name=patch"
-SRC_URI[patch.md5sum] = "ba32239ddb0c6837a4296119dda5f08a"
-SRC_URI[patch.sha256sum] = "d07e4cd0982fee417f574acac4e2e2a0387188bf254c6f49f7ab0f8c206082b8"
+SRC_URI = "https://github.com/ros/${ROS_SPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_SP}.tar.gz"
+SRC_URI[md5sum] = "8da88314483b1330906b0ecf89c33494"
+SRC_URI[sha256sum] = "c76317f60afec9e4cdcce28e0b88b9aef7e355ba8295228e759aa914ed10aae4"
 
-DEPENDS = "actionlib-msgs roscpp rostest"
+SRC_URI += "file://0001-check-for-CATKIN_ENABLE_TESTING.patch"
 
 inherit catkin
diff --git a/recipes-ros/bond-core/bond-core.inc b/recipes-ros/bond-core/bond-core.inc
index 24f2f42eeade828595872fdd1d2ae1762fb3d462..4302ea2dd9906da852a182324a947313b5f36ee6 100644
--- a/recipes-ros/bond-core/bond-core.inc
+++ b/recipes-ros/bond-core/bond-core.inc
@@ -1,7 +1,9 @@
-SRC_URI = "https://github.com/ros/bond_core/archive/${PV}.tar.gz;downloadfilename=bond_core-${PV}.tar.gz"
+SRC_URI = "https://github.com/ros/${ROS_SPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_SP}.tar.gz"
 SRC_URI[md5sum] = "1bb6c5dd1148c67d2759e665d7ae75b3"
 SRC_URI[sha256sum] = "1145db3800591e585325131cb6322366e82e634c97dd3cbb4ab43e1c1f4ec415"
 
-S = "${WORKDIR}/bond_core-${PV}/${PN}"
+S = "${WORKDIR}/${ROS_SP}/${ROS_BPN}"
 
 inherit catkin
+
+ROS_SPN = "bond_core"
diff --git a/recipes-ros/catkin/catkin/0001-modify-logic-of-sourcing-env-hooks-to-provide-contex.patch b/recipes-ros/catkin/catkin/0001-modify-logic-of-sourcing-env-hooks-to-provide-contex.patch
new file mode 100644
index 0000000000000000000000000000000000000000..eef3063c193c7a8032f77bcd5b4ce94b3fd6e0c2
--- /dev/null
+++ b/recipes-ros/catkin/catkin/0001-modify-logic-of-sourcing-env-hooks-to-provide-contex.patch
@@ -0,0 +1,515 @@
+From a0d699a08f10424adad38eee25673c9a66120ec4 Mon Sep 17 00:00:00 2001
+From: Dirk Thomas <dthomas@osrfoundation.org>
+Date: Thu, 25 Jul 2013 14:54:43 -0700
+Subject: [PATCH 1/4] modify logic of sourcing env hooks to provide context of
+ workspace to each env hook (#490)
+
+---
+ cmake/templates/_setup_util.py.in | 26 +++++++++++++++++++++-----
+ cmake/templates/setup.sh.in       | 34 +++++++++++-----------------------
+ 2 files changed, 32 insertions(+), 28 deletions(-)
+
+diff --git a/cmake/templates/_setup_util.py.in b/cmake/templates/_setup_util.py.in
+index 6957b10..e7e57ee 100755
+--- a/cmake/templates/_setup_util.py.in
++++ b/cmake/templates/_setup_util.py.in
+@@ -200,7 +200,9 @@ def find_env_hooks(environ, cmake_prefix_path):
+     lines.append(comment('found environment hooks in workspaces'))
+ 
+     generic_env_hooks = []
++    generic_env_hooks_workspace = []
+     specific_env_hooks = []
++    specific_env_hooks_workspace = []
+     generic_env_hooks_by_filename = {}
+     specific_env_hooks_by_filename = {}
+     generic_env_hook_ext = 'bat' if IS_WINDOWS else 'sh'
+@@ -212,18 +214,32 @@ def find_env_hooks(environ, cmake_prefix_path):
+         if os.path.isdir(env_hook_dir):
+             for filename in sorted(os.listdir(env_hook_dir)):
+                 if filename.endswith('.%s' % generic_env_hook_ext):
+-                    generic_env_hooks.append(os.path.join(env_hook_dir, filename))
+                     # remove previous env hook with same name if present
+                     if filename in generic_env_hooks_by_filename:
+-                        generic_env_hooks.remove(generic_env_hooks_by_filename[filename])
++                        i = generic_env_hooks.index(generic_env_hooks_by_filename[filename])
++                        generic_env_hooks.pop(i)
++                        generic_env_hooks_workspace.pop(i)
++                    # append env hook
++                    generic_env_hooks.append(os.path.join(env_hook_dir, filename))
++                    generic_env_hooks_workspace.append(workspace)
+                     generic_env_hooks_by_filename[filename] = generic_env_hooks[-1]
+                 elif specific_env_hook_ext is not None and filename.endswith('.%s' % specific_env_hook_ext):
+-                    specific_env_hooks.append(os.path.join(env_hook_dir, filename))
+                     # remove previous env hook with same name if present
+                     if filename in specific_env_hooks_by_filename:
+-                        specific_env_hooks.remove(specific_env_hooks_by_filename[filename])
++                        i = specific_env_hooks.index(specific_env_hooks_by_filename[filename])
++                        specific_env_hooks.pop(i)
++                        specific_env_hooks_workspace.pop(i)
++                    # append env hook
++                    specific_env_hooks.append(os.path.join(env_hook_dir, filename))
++                    specific_env_hooks_workspace.append(workspace)
+                     specific_env_hooks_by_filename[filename] = specific_env_hooks[-1]
+-    lines.append(assignment('_CATKIN_ENVIRONMENT_HOOKS', os.pathsep.join(generic_env_hooks + specific_env_hooks)))
++    env_hooks = generic_env_hooks + specific_env_hooks
++    env_hooks_workspace = generic_env_hooks_workspace + specific_env_hooks_workspace
++    count = len(env_hooks)
++    lines.append(assignment('_CATKIN_ENVIRONMENT_HOOKS_COUNT', count))
++    for i in range(count):
++        lines.append(assignment('_CATKIN_ENVIRONMENT_HOOKS_%d' % i, env_hooks[i]))
++        lines.append(assignment('_CATKIN_ENVIRONMENT_HOOKS_%d_WORKSPACE' % i, env_hooks_workspace[i]))
+     return lines
+ 
+ 
+diff --git a/cmake/templates/setup.sh.in b/cmake/templates/setup.sh.in
+index c29adf5..fa28dfb 100644
+--- a/cmake/templates/setup.sh.in
++++ b/cmake/templates/setup.sh.in
+@@ -47,30 +47,18 @@ CATKIN_SHELL=$CATKIN_SHELL "$_SETUP_UTIL" $@ > $_SETUP_TMP
+ . $_SETUP_TMP
+ rm -f $_SETUP_TMP
+ 
+-# save value of IFS, including if it was unset
+-# the "+x" syntax helps differentiate unset from empty
+-_IFS=$IFS
+-if [ -z ${IFS+x} ]; then
+-  _IFS_WAS_UNSET=1
+-fi
+-
+ # source all environment hooks
+-IFS=":"
+-for _envfile in $_CATKIN_ENVIRONMENT_HOOKS; do
+-  # restore value of IFS, including if it was unset
+-  IFS=$_IFS
+-  if [ $_IFS_WAS_UNSET ]; then
+-    unset IFS
+-  fi
++_i=0
++while [ $_i -lt $_CATKIN_ENVIRONMENT_HOOKS_COUNT ]; do
++  eval _envfile=\$_CATKIN_ENVIRONMENT_HOOKS_$_i
++  unset _CATKIN_ENVIRONMENT_HOOKS_$_i
++  eval _envfile_workspace=\$_CATKIN_ENVIRONMENT_HOOKS_${_i}_WORKSPACE
++  unset _CATKIN_ENVIRONMENT_HOOKS_${_i}_WORKSPACE
++  # set workspace for environment hook
++  CATKIN_ENV_HOOK_WORKSPACE=$_envfile_workspace
+   . "$_envfile"
++  unset CATKIN_ENV_HOOK_WORKSPACE
++  _i=$((_i + 1))
+ done
+ 
+-# restore value of IFS, including if it was unset
+-IFS=$_IFS
+-if [ $_IFS_WAS_UNSET ]; then
+-  unset IFS
+-  unset _IFS_WAS_UNSET
+-fi
+-unset _IFS
+-
+-unset _CATKIN_ENVIRONMENT_HOOKS
++unset _CATKIN_ENVIRONMENT_HOOKS_COUNT
+-- 
+1.8.1.6
+
+
+From 644daf7443bf3f3ed3f178800478cb5724298a16 Mon Sep 17 00:00:00 2001
+From: Dirk Thomas <dthomas@osrfoundation.org>
+Date: Thu, 25 Jul 2013 17:01:11 -0700
+Subject: [PATCH 2/4] update shell scripts to define or allow override
+ CATKIN_SETUP_DIR (#490)
+
+---
+ cmake/templates/_setup_util.py.in | 15 ++++++++-------
+ cmake/templates/env.sh.in         |  8 +++++---
+ cmake/templates/setup.bash.in     |  5 ++++-
+ cmake/templates/setup.sh.in       |  5 ++++-
+ cmake/templates/setup.zsh.in      |  3 ++-
+ 5 files changed, 23 insertions(+), 13 deletions(-)
+
+diff --git a/cmake/templates/_setup_util.py.in b/cmake/templates/_setup_util.py.in
+index e7e57ee..0d3c86a 100755
+--- a/cmake/templates/_setup_util.py.in
++++ b/cmake/templates/_setup_util.py.in
+@@ -41,13 +41,6 @@ import os
+ import platform
+ import sys
+ 
+-# environment at generation time
+-CMAKE_PREFIX_PATH = '@CMAKE_PREFIX_PATH_AS_IS@'.split(';')
+-setup_dir = '@SETUP_DIR@'
+-if setup_dir and setup_dir not in CMAKE_PREFIX_PATH:
+-    CMAKE_PREFIX_PATH.insert(0, setup_dir)
+-CMAKE_PREFIX_PATH = os.pathsep.join(CMAKE_PREFIX_PATH)
+-
+ CATKIN_MARKER_FILE = '.catkin'
+ 
+ system = platform.system()
+@@ -256,6 +249,14 @@ if __name__ == '__main__':
+         print(e, file=sys.stderr)
+         exit(1)
+ 
++    # environment at generation time
++    CMAKE_PREFIX_PATH = '@CMAKE_PREFIX_PATH_AS_IS@'.split(';')
++    # prepend current workspace if not already part of CPP
++    base_path = os.path.dirname(__file__)
++    if base_path not in CMAKE_PREFIX_PATH:
++        CMAKE_PREFIX_PATH.insert(0, base_path)
++    CMAKE_PREFIX_PATH = os.pathsep.join(CMAKE_PREFIX_PATH)
++
+     environ = dict(os.environ)
+     lines = []
+     if not args.extend:
+diff --git a/cmake/templates/env.sh.in b/cmake/templates/env.sh.in
+index 5d04650..ad259ea 100755
+--- a/cmake/templates/env.sh.in
++++ b/cmake/templates/env.sh.in
+@@ -5,7 +5,9 @@ if [ $# -eq 0 ] ; then
+   /bin/echo "Usage: env.sh COMMANDS"
+   /bin/echo "Calling env.sh without arguments is not supported anymore. Instead spawn a subshell and source a setup file manually."
+   exit 1
+-else
+-  . "@SETUP_DIR@/@SETUP_FILENAME@.sh"
+-  exec "$@"
+ fi
++
++# source @SETUP_FILENAME@.sh from same directory as this file
++CATKIN_SETUP_DIR=$(cd `dirname $0`;pwd)
++. "$CATKIN_SETUP_DIR/@SETUP_FILENAME@.sh"
++exec "$@"
+diff --git a/cmake/templates/setup.bash.in b/cmake/templates/setup.bash.in
+index 078fd13..97e9e70 100644
+--- a/cmake/templates/setup.bash.in
++++ b/cmake/templates/setup.bash.in
+@@ -2,4 +2,7 @@
+ # generated from catkin/cmake/templates/setup.bash.in
+ 
+ CATKIN_SHELL=bash
+-. "@SETUP_DIR@/setup.sh"
++
++# source setup.sh from same directory as this file
++CATKIN_SETUP_DIR=$(cd `dirname ${BASH_SOURCE[0]}`;pwd)
++. "$CATKIN_SETUP_DIR/setup.sh"
+diff --git a/cmake/templates/setup.sh.in b/cmake/templates/setup.sh.in
+index fa28dfb..66b91ca 100644
+--- a/cmake/templates/setup.sh.in
++++ b/cmake/templates/setup.sh.in
+@@ -6,7 +6,10 @@
+ # Supported command line options:
+ # --extend: skips the undoing of changes from a previously sourced setup file
+ 
+-_SETUP_UTIL="@SETUP_DIR@/_setup_util.py"
++# since this file is sourced either use the provided CATKIN_SETUP_DIR
++# or fall back to the destination set at configure time
++: ${CATKIN_SETUP_DIR:=@SETUP_DIR@}
++_SETUP_UTIL="$CATKIN_SETUP_DIR/_setup_util.py"
+ 
+ if [ ! -f "$_SETUP_UTIL" ]; then
+   echo "Missing Python script: $_SETUP_UTIL"
+diff --git a/cmake/templates/setup.zsh.in b/cmake/templates/setup.zsh.in
+index 220d1fb..5e681e4 100644
+--- a/cmake/templates/setup.zsh.in
++++ b/cmake/templates/setup.zsh.in
+@@ -2,6 +2,7 @@
+ # generated from catkin/cmake/templates/setup.zsh.in
+ 
+ CATKIN_SHELL=zsh
++CATKIN_SETUP_DIR=$(cd `dirname $0`;pwd)
+ emulate sh # emulate POSIX
+-. "@SETUP_DIR@/setup.sh"
++. "$CATKIN_SETUP_DIR/setup.sh"
+ emulate zsh # back to zsh mode
+-- 
+1.8.1.6
+
+
+From 198c7b8afafc4e92ed912959e299935b301ac434 Mon Sep 17 00:00:00 2001
+From: Dirk Thomas <dthomas@osrfoundation.org>
+Date: Thu, 25 Jul 2013 17:02:08 -0700
+Subject: [PATCH 3/4] update exported include dirs in generated cmake config
+ files to not contain absolute paths (#490)
+
+---
+ cmake/catkin_package.cmake         | 2 +-
+ cmake/templates/pkgConfig.cmake.in | 7 +++++--
+ 2 files changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/cmake/catkin_package.cmake b/cmake/catkin_package.cmake
+index 574bce9..a543864 100644
+--- a/cmake/catkin_package.cmake
++++ b/cmake/catkin_package.cmake
+@@ -434,7 +434,7 @@ function(_catkin_package)
+   # absolute path to include dir under install prefix if any include dir is set
+   set(PROJECT_ABSOLUTE_INCLUDE_DIRS "")
+   if(NOT "${PROJECT_INCLUDE_DIRS}" STREQUAL "")
+-    set(PROJECT_ABSOLUTE_INCLUDE_DIRS ${PKG_INCLUDE_PREFIX}/include)
++    set(PROJECT_ABSOLUTE_INCLUDE_DIRS "${CATKIN_GLOBAL_INCLUDE_DESTINATION}")
+   endif()
+   if(PROJECT_DEPENDENCIES_INCLUDE_DIRS)
+     list(APPEND PROJECT_ABSOLUTE_INCLUDE_DIRS ${PROJECT_DEPENDENCIES_INCLUDE_DIRS})
+diff --git a/cmake/templates/pkgConfig.cmake.in b/cmake/templates/pkgConfig.cmake.in
+index dce3158..334e5f2 100644
+--- a/cmake/templates/pkgConfig.cmake.in
++++ b/cmake/templates/pkgConfig.cmake.in
+@@ -89,8 +89,11 @@ if(NOT "@PROJECT_ABSOLUTE_INCLUDE_DIRS@" STREQUAL "")
+   foreach(idir ${absolute_include_dirs})
+     if(IS_ABSOLUTE ${idir} AND IS_DIRECTORY ${idir})
+       set(include ${idir})
+-    elseif(IS_DIRECTORY @PKG_INCLUDE_PREFIX@/${idir})
+-      set(include @PKG_INCLUDE_PREFIX@/${idir})
++    elseif("${idir}" STREQUAL "${CATKIN_GLOBAL_INCLUDE_DESTINATION}")
++      get_filename_component(include "${@PROJECT_NAME@_DIR}/../../../${CATKIN_GLOBAL_INCLUDE_DESTINATION}" ABSOLUTE)
++      if(NOT IS_DIRECTORY ${include})
++        message(FATAL_ERROR "Project '@PROJECT_NAME@' specifies '${idir}' as an include dir, which is not found.  It does not exist in '${include}'.  Ask the maintainer '@PROJECT_MAINTAINER@' to fix it.")
++      endif()
+     else()
+       message(FATAL_ERROR "Project '@PROJECT_NAME@' specifies '${idir}' as an include dir, which is not found.  It does neither exist as an absolute directory nor in '@PKG_INCLUDE_PREFIX@/${idir}'.  Ask the maintainer '@PROJECT_MAINTAINER@' to fix it.")
+     endif()
+-- 
+1.8.1.6
+
+
+From 8067802506d0b66926b665ee301ca6ce77ab3deb Mon Sep 17 00:00:00 2001
+From: Dirk Thomas <dthomas@osrfoundation.org>
+Date: Thu, 25 Jul 2013 17:06:48 -0700
+Subject: [PATCH 4/4] update catkin_make_isolated to support installation with
+ DESTDIR (#490)
+
+---
+ bin/catkin_make_isolated |  5 +++-
+ python/catkin/builder.py | 63 +++++++++++++++++++++++++++++++++---------------
+ 2 files changed, 47 insertions(+), 21 deletions(-)
+
+diff --git a/bin/catkin_make_isolated b/bin/catkin_make_isolated
+index 25ed5db..6ea7d4d 100755
+--- a/bin/catkin_make_isolated
++++ b/bin/catkin_make_isolated
+@@ -107,6 +107,8 @@ def main():
+     if not sys.stdout.isatty():
+         opts.no_color = True
+ 
++    destdir = os.environ['DESTDIR'] if 'DESTDIR' in os.environ else None
++
+     build_workspace_isolated(
+         workspace=opts.workspace or '.',
+         sourcespace=opts.source,
+@@ -122,7 +124,8 @@ def main():
+         cmake_args=cmake_args,
+         make_args=opts.make_args,
+         catkin_make_args=opts.catkin_make_args,
+-        continue_from_pkg=opts.from_package is not None
++        continue_from_pkg=opts.from_package is not None,
++        destdir=destdir
+     )
+ 
+ if __name__ == '__main__':
+diff --git a/python/catkin/builder.py b/python/catkin/builder.py
+index b157d6e..932e720 100644
+--- a/python/catkin/builder.py
++++ b/python/catkin/builder.py
+@@ -163,18 +163,23 @@ def print_command_banner(cmd, cwd, color):
+         print('####')
+ 
+ 
+-def run_command_colorized(cmd, cwd, quiet=False):
+-    run_command(cmd, cwd, quiet=quiet, colorize=True)
++def run_command_colorized(cmd, cwd, quiet=False, add_env=None):
++    run_command(cmd, cwd, quiet=quiet, colorize=True, add_env=add_env)
+ 
+ 
+-def run_command(cmd, cwd, quiet=False, colorize=False):
++def run_command(cmd, cwd, quiet=False, colorize=False, add_env=None):
+     capture = (quiet or colorize)
+     stdout_pipe = subprocess.PIPE if capture else None
+     stderr_pipe = subprocess.STDOUT if capture else None
++    env = None
++    if add_env:
++        env = copy.copy(os.environ)
++        env.update(add_env)
+     try:
+         proc = subprocess.Popen(
+             cmd, cwd=cwd, shell=False,
+-            stdout=stdout_pipe, stderr=stderr_pipe
++            stdout=stdout_pipe, stderr=stderr_pipe,
++            env=env
+         )
+     except OSError as e:
+         raise OSError("Failed command '%s': %s" % (cmd, e))
+@@ -213,10 +218,11 @@ def _check_build_dir(name, workspace, buildspace):
+     return package_build_dir
+ 
+ 
+-def isolation_print_command(cmd, path=None):
++def isolation_print_command(cmd, path=None, add_env=None):
+     cprint(
+         blue_arrow + " " + sanitize(cmd) + "@|" +
+-        (" @!@{kf}in@| '@!" + sanitize(path) + "@|'" if path else '')
++        (" @!@{kf}in@| '@!" + sanitize(path) + "@|'" if path else '') +
++        (" @!@{kf}with@| '@!" + ' '.join(['%s=%s' % (k, v) for k, v in add_env.items()]) + "@|'" if add_env else '')
+     )
+ 
+ 
+@@ -280,7 +286,8 @@ def extract_jobs_flags(mflags):
+ def build_catkin_package(
+     path, package,
+     workspace, buildspace, develspace, installspace,
+-    install, force_cmake, quiet, last_env, cmake_args, make_args
++    install, force_cmake, quiet, last_env, cmake_args, make_args,
++    destdir=None
+ ):
+     cprint(
+         "Processing @{cf}catkin@| package: '@!@{bf}" +
+@@ -324,11 +331,12 @@ def build_catkin_package(
+             '-DCMAKE_INSTALL_PREFIX=' + installspace
+         ]
+         cmake_cmd.extend(cmake_args)
+-        isolation_print_command(' '.join(cmake_cmd), build_dir)
++        add_env = get_additional_environment(install, destdir, installspace)
++        isolation_print_command(' '.join(cmake_cmd), build_dir, add_env=add_env)
+         if last_env is not None:
+             cmake_cmd = [last_env] + cmake_cmd
+         try:
+-            run_command_colorized(cmake_cmd, build_dir, quiet)
++            run_command_colorized(cmake_cmd, build_dir, quiet, add_env=add_env)
+         except subprocess.CalledProcessError as e:
+             if os.path.exists(makefile):
+                 # remove Makefile to force CMake invocation next time
+@@ -338,11 +346,12 @@ def build_catkin_package(
+         print('Makefile exists, skipping explicit cmake invocation...')
+         # Check to see if cmake needs to be run via make
+         make_check_cmake_cmd = ['make', 'cmake_check_build_system']
+-        isolation_print_command(' '.join(make_check_cmake_cmd), build_dir)
++        add_env = get_additional_environment(install, destdir, installspace)
++        isolation_print_command(' '.join(make_check_cmake_cmd), build_dir, add_env=add_env)
+         if last_env is not None:
+             make_check_cmake_cmd = [last_env] + make_check_cmake_cmd
+         run_command_colorized(
+-            make_check_cmake_cmd, build_dir, quiet
++            make_check_cmake_cmd, build_dir, quiet, add_env=add_env
+         )
+ 
+     # Run make
+@@ -372,10 +381,18 @@ def has_make_target(path, target):
+     return target in targets
+ 
+ 
++def get_additional_environment(install, destdir, installspace):
++    add_env = {}
++    if install and destdir:
++        add_env['CATKIN_SETUP_DIR'] = os.path.join(destdir, installspace[1:])
++    return add_env
++
++
+ def build_cmake_package(
+     path, package,
+     workspace, buildspace, develspace, installspace,
+-    install, force_cmake, quiet, last_env, cmake_args, make_args
++    install, force_cmake, quiet, last_env, cmake_args, make_args,
++    destdir=None
+ ):
+     # Notify the user that we are processing a plain cmake package
+     cprint(
+@@ -496,19 +513,21 @@ def build_package(
+     path, package,
+     workspace, buildspace, develspace, installspace,
+     install, force_cmake, quiet, last_env, cmake_args, make_args, catkin_make_args,
++    destdir=None,
+     number=None, of=None
+ ):
+     if platform.system() in ['Linux', 'Darwin']:
+         status_msg = '{package_name} [{number} of {total}]'.format(package_name=package.name, number=number, total=of)
+         sys.stdout.write("\x1b]2;" + status_msg + "\x07")
+     cprint('@!@{gf}==>@| ', end='')
+-    new_last_env = get_new_env(package, develspace, installspace, install, last_env)
++    new_last_env = get_new_env(package, develspace, installspace, install, last_env, destdir)
+     build_type = _get_build_type(package)
+     if build_type == 'catkin':
+         build_catkin_package(
+             path, package,
+             workspace, buildspace, develspace, installspace,
+-            install, force_cmake, quiet, last_env, cmake_args, make_args + catkin_make_args
++            install, force_cmake, quiet, last_env, cmake_args, make_args + catkin_make_args,
++            destdir=destdir
+         )
+         if not os.path.exists(new_last_env):
+             raise RuntimeError(
+@@ -521,7 +540,8 @@ def build_package(
+         build_cmake_package(
+             path, package,
+             workspace, buildspace, develspace, installspace,
+-            install, force_cmake, quiet, last_env, cmake_args, make_args
++            install, force_cmake, quiet, last_env, cmake_args, make_args,
++            destdir=destdir
+         )
+     else:
+         sys.exit('Can not build package with unknown build_type')
+@@ -534,7 +554,7 @@ def build_package(
+     return new_last_env
+ 
+ 
+-def get_new_env(package, develspace, installspace, install, last_env):
++def get_new_env(package, develspace, installspace, install, last_env, destdir=None):
+     new_env = None
+     build_type = _get_build_type(package)
+     if build_type in ['catkin', 'cmake']:
+@@ -542,6 +562,8 @@ def get_new_env(package, develspace, installspace, install, last_env):
+             installspace if install else develspace,
+             'env.sh'
+         )
++        if destdir is not None:
++            new_env = os.path.join(destdir, new_env[1:])
+     return new_env
+ 
+ 
+@@ -572,7 +594,8 @@ def build_workspace_isolated(
+     cmake_args=None,
+     make_args=None,
+     catkin_make_args=None,
+-    continue_from_pkg=False
++    continue_from_pkg=False,
++    destdir=None
+ ):
+     '''
+     Runs ``cmake``, ``make`` and optionally ``make install`` for all
+@@ -603,6 +626,7 @@ def build_workspace_isolated(
+         packages, ``[str]``
+     :param continue_from_pkg: indicates whether or not cmi should continue
+         when a package is reached, ``bool``
++    :param destdir: define DESTDIR for cmake/invocation, ``string``
+     '''
+     if not colorize:
+         disable_ANSI_colors()
+@@ -738,6 +762,7 @@ def build_workspace_isolated(
+                     workspace, buildspace, pkg_develspace, installspace,
+                     install, force_cmake or (install_toggled and is_cmake_package),
+                     quiet, last_env, cmake_args, make_args, catkin_make_args,
++                    destdir=destdir,
+                     number=index + 1, of=len(ordered_packages)
+                 )
+             except subprocess.CalledProcessError as e:
+@@ -758,7 +783,7 @@ def build_workspace_isolated(
+                 sys.exit('Command failed, exiting.')
+         else:
+             cprint("Skipping package: '@!@{bf}" + package.name + "@|'")
+-            last_env = get_new_env(package, pkg_develspace, installspace, install, last_env)
++            last_env = get_new_env(package, pkg_develspace, installspace, install, last_env, destdir)
+ 
+     # Provide a top level devel space environment setup script
+     if not os.path.exists(develspace):
+@@ -793,7 +818,6 @@ def build_workspace_isolated(
+                     'CATKIN_GLOBAL_LIB_DESTINATION': 'lib',
+                     'CMAKE_PREFIX_PATH_AS_IS': ';'.join(os.environ['CMAKE_PREFIX_PATH'].split(os.pathsep)),
+                     'PYTHON_INSTALL_DIR': get_python_install_dir(),
+-                    'SETUP_DIR': '',
+                 }
+                 with open(generated_setup_util_py, 'w') as f:
+                     f.write(configure_file(os.path.join(get_cmake_path(), 'templates', '_setup_util.py.in'), variables))
+@@ -802,7 +826,6 @@ def build_workspace_isolated(
+                 sys.exit("Unable to process CMAKE_PREFIX_PATH from environment. Cannot generate environment files.")
+ 
+             variables = {
+-                'SETUP_DIR': develspace,
+                 'SETUP_FILENAME': 'setup'
+             }
+             with open(generated_env_sh, 'w') as f:
+-- 
+1.8.1.6
+
diff --git a/recipes-ros/catkin/catkin_0.5.71.bb b/recipes-ros/catkin/catkin_0.5.71.bb
index d39e7623fd31972afc3111b0d69701f99d78c3f4..9621ccf3efc63196b7548c53b2bedc2f13132d06 100644
--- a/recipes-ros/catkin/catkin_0.5.71.bb
+++ b/recipes-ros/catkin/catkin_0.5.71.bb
@@ -3,19 +3,17 @@ SECTION = "devel"
 LICENSE = "BSD"
 LIC_FILES_CHKSUM = "file://package.xml;beginline=7;endline=7;md5=d566ef916e9dedc494f5f793a6690ba5"
 
-DEPENDS = "cmake python-empy python-catkin-pkg python-empy-native python-catkin-pkg-native"
+PR = "r1"
 
-RDEPENDS_${PN}_class-native = ""
-RDEPENDS_${PN} = "cmake make binutils binutils-symlinks gcc gcc-symlinks g++ g++-symlinks \
-    python-catkin-pkg python-argparse python-misc python-multiprocessing \
-    python-shell python-subprocess python-xml"
+DEPENDS = "cmake python-empy python-catkin-pkg python-empy-native python-catkin-pkg-native"
 
-SRC_URI = "https://github.com/ros/catkin/archive/${PV}.tar.gz;downloadfilename=${ROS_BP}.tar.gz \
-           file://0001-CATKIN_WORKSPACES-Don-t-require-.catkin-file.patch \
-           "
+SRC_URI = "https://github.com/ros/${ROS_SPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_SP}.tar.gz"
 SRC_URI[md5sum] = "1c30ac4fcc82ce2aedf610ea972ab4d2"
 SRC_URI[sha256sum] = "2494dbe3446fe94a55f57c74260e072f97d72944d89610fe4994dbc79cf1a561"
 
+SRC_URI += "file://0001-modify-logic-of-sourcing-env-hooks-to-provide-contex.patch"
+SRC_URI += "file://0001-CATKIN_WORKSPACES-Don-t-require-.catkin-file.patch"
+
 inherit catkin
 
 FILES_${PN}-dev += "\
@@ -27,3 +25,8 @@ FILES_${PN}-dev += "\
     ${prefix}/env.sh \
     ${prefix}/setup.* \
     "
+
+RDEPENDS_${PN}_class-native = ""
+RDEPENDS_${PN} = "cmake make binutils binutils-symlinks gcc gcc-symlinks g++ g++-symlinks \
+    python-catkin-pkg python-argparse python-misc python-multiprocessing \
+    python-shell python-subprocess python-xml"
diff --git a/recipes-ros/class-loader/class-loader_0.2.2.bb b/recipes-ros/class-loader/class-loader_0.2.2.bb
index bfbd03b1c04da2c84c26b0939b11b7a62c5cae96..9e4745e87c083f5d8c79a79035db0ab600c65b43 100644
--- a/recipes-ros/class-loader/class-loader_0.2.2.bb
+++ b/recipes-ros/class-loader/class-loader_0.2.2.bb
@@ -6,17 +6,16 @@ runtime libraries (e.g. .so/.dll files), introspect the library for exported \
 plugin classes, and allows users to instantiate objects of said exported \
 classes without the explicit declaration (i.e. header file) for those classes.\
 "
-
 SECTION = "devel"
 LICENSE = "BSD"
 LIC_FILES_CHKSUM = "file://package.xml;beginline=9;endline=9;md5=d566ef916e9dedc494f5f793a6690ba5"
 
-SRC_URI = "https://github.com/ros/${ROS_BPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_BP}.tar.gz"
+DEPENDS = "console-bridge libpoco"
+
+SRC_URI = "https://github.com/ros/${ROS_SPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_SP}.tar.gz"
 SRC_URI[md5sum] = "c3bbc15c580dbf3b814b8af84218a777"
 SRC_URI[sha256sum] = "afaa155be9e34d905396c96eac040007e23b4ba90d2b2677ab67a1b32086fe13"
 
-DEPENDS = "console-bridge libpoco"
-
-S = "${WORKDIR}/${ROS_BP}"
+S = "${WORKDIR}/${ROS_SP}"
 
 inherit catkin
diff --git a/recipes-ros/common-msgs/common-msgs.inc b/recipes-ros/common-msgs/common-msgs.inc
index 01b915fc339bdd45a2cbca932b0ab2c66f37d0fa..5f8e521727e179be0816acc1fb1656aaacca37bf 100644
--- a/recipes-ros/common-msgs/common-msgs.inc
+++ b/recipes-ros/common-msgs/common-msgs.inc
@@ -1,9 +1,11 @@
-SRC_URI = "https://github.com/ros/common_msgs/archive/${PV}.tar.gz;downloadfilename=common_msgs-${PV}.tar.gz"
+SRC_URI = "https://github.com/ros/${ROS_SPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_SP}.tar.gz"
 SRC_URI[md5sum] = "6259ec362103ed96abbcf7d67703aed5"
 SRC_URI[sha256sum] = "54864270e973cec64f9315aed9e07f8d3837c409602dd18653c843c7a35690d0"
 
-inherit catkin
+DEPENDS += "cpp-common roscpp-serialization message-generation-native message-runtime-native std-msgs"
+
+S = "${WORKDIR}/${ROS_SP}/${ROS_BPN}"
 
-S = "${WORKDIR}/common_msgs-${PV}/${ROS_BPN}"
+inherit catkin
 
-DEPENDS = "cpp-common roscpp-serialization message-generation-native message-runtime-native std-msgs"
+ROS_SPN = "common_msgs"
diff --git a/recipes-ros/common-msgs/nav-msgs_1.10.0.bb b/recipes-ros/common-msgs/nav-msgs_1.10.0.bb
index 8d76ba371262b8f8954f0290ec6fd449778dcc90..6b5825efc8cbe7bef12a053674bc8052cb6956d9 100644
--- a/recipes-ros/common-msgs/nav-msgs_1.10.0.bb
+++ b/recipes-ros/common-msgs/nav-msgs_1.10.0.bb
@@ -3,6 +3,6 @@ SECTION = "devel"
 LICENSE = "BSD"
 LIC_FILES_CHKSUM = "file://package.xml;beginline=9;endline=9;md5=d566ef916e9dedc494f5f793a6690ba5"
 
-require common-msgs.inc
+DEPENDS = "actionlib-msgs geometry-msgs"
 
-DEPENDS += "actionlib-msgs geometry-msgs"
+require common-msgs.inc
diff --git a/recipes-ros/common-msgs/sensor-msgs_1.10.0.bb b/recipes-ros/common-msgs/sensor-msgs_1.10.0.bb
index 8690899aba3114300fe7dfdfde4018a4c7191022..1f74e396e8b91283fe05ff0c567a98976030f8b2 100644
--- a/recipes-ros/common-msgs/sensor-msgs_1.10.0.bb
+++ b/recipes-ros/common-msgs/sensor-msgs_1.10.0.bb
@@ -4,6 +4,6 @@ SECTION = "devel"
 LICENSE = "BSD"
 LIC_FILES_CHKSUM = "file://package.xml;beginline=9;endline=9;md5=d566ef916e9dedc494f5f793a6690ba5"
 
-require common-msgs.inc
+DEPENDS = "geometry-msgs"
 
-DEPENDS += "geometry-msgs"
+require common-msgs.inc
diff --git a/recipes-ros/common-msgs/shape-msgs_1.10.0.bb b/recipes-ros/common-msgs/shape-msgs_1.10.0.bb
index a37676f3b3fab1f1935724da5bebe3b6da2c6c3a..b311bcc7bdc0646af0f65054796196389829d1dc 100644
--- a/recipes-ros/common-msgs/shape-msgs_1.10.0.bb
+++ b/recipes-ros/common-msgs/shape-msgs_1.10.0.bb
@@ -3,6 +3,6 @@ SECTION = "devel"
 LICENSE = "BSD"
 LIC_FILES_CHKSUM = "file://package.xml;beginline=8;endline=8;md5=d566ef916e9dedc494f5f793a6690ba5"
 
-require common-msgs.inc
+DEPENDS = "geometry-msgs"
 
-DEPENDS += "geometry-msgs"
+require common-msgs.inc
diff --git a/recipes-ros/common-msgs/stereo-msgs_1.10.0.bb b/recipes-ros/common-msgs/stereo-msgs_1.10.0.bb
index fb64ca3db495fb2404e9fb52faec6cd33e50e46d..7561a1dd2f5471f1aa5f89024641d09bfb5fc13f 100644
--- a/recipes-ros/common-msgs/stereo-msgs_1.10.0.bb
+++ b/recipes-ros/common-msgs/stereo-msgs_1.10.0.bb
@@ -4,6 +4,6 @@ SECTION = "devel"
 LICENSE = "BSD"
 LIC_FILES_CHKSUM = "file://package.xml;beginline=8;endline=8;md5=d566ef916e9dedc494f5f793a6690ba5"
 
-require common-msgs.inc
+DEPENDS = "sensor-msgs"
 
-DEPENDS += "sensor-msgs"
+require common-msgs.inc
diff --git a/recipes-ros/common-msgs/trajectory-msgs_1.10.0.bb b/recipes-ros/common-msgs/trajectory-msgs_1.10.0.bb
index 2f0d3c1ec361b8b423dce74984ed2e563b3295c3..05227b649fb768d2bc93b43a3e2eff2e60aff113 100644
--- a/recipes-ros/common-msgs/trajectory-msgs_1.10.0.bb
+++ b/recipes-ros/common-msgs/trajectory-msgs_1.10.0.bb
@@ -3,6 +3,6 @@ SECTION = "devel"
 LICENSE = "BSD"
 LIC_FILES_CHKSUM = "file://package.xml;beginline=8;endline=8;md5=d566ef916e9dedc494f5f793a6690ba5"
 
-require common-msgs.inc
+DEPENDS = "geometry-msgs"
 
-DEPENDS += "geometry-msgs"
+require common-msgs.inc
diff --git a/recipes-ros/common-msgs/visualization-msgs_1.10.0.bb b/recipes-ros/common-msgs/visualization-msgs_1.10.0.bb
index d05f1856676a38527c96633613d03675333167d5..909caeacf007e80fb04d26fd5b92e650d6b64bf7 100644
--- a/recipes-ros/common-msgs/visualization-msgs_1.10.0.bb
+++ b/recipes-ros/common-msgs/visualization-msgs_1.10.0.bb
@@ -4,6 +4,6 @@ SECTION = "devel"
 LICENSE = "BSD"
 LIC_FILES_CHKSUM = "file://package.xml;beginline=12;endline=12;md5=d566ef916e9dedc494f5f793a6690ba5"
 
-require common-msgs.inc
+DEPENDS = "geometry-msgs"
 
-DEPENDS += "geometry-msgs"
+require common-msgs.inc
diff --git a/recipes-ros/common-tutorials/common-tutorials.inc b/recipes-ros/common-tutorials/common-tutorials.inc
index ee7f39b78c34b2f0f05e2388fe2cd2fc7c39754d..6c4dffb518f4e8b8de5bb173897f2ad97a60d4f8 100644
--- a/recipes-ros/common-tutorials/common-tutorials.inc
+++ b/recipes-ros/common-tutorials/common-tutorials.inc
@@ -1,7 +1,9 @@
-SRC_URI = "https://github.com/ros/common_tutorials/archive/${PV}.tar.gz;downloadfilename=common_tutorials-${PV}.tar.gz"
+SRC_URI = "https://github.com/ros/${ROS_SPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_SP}.tar.gz"
 SRC_URI[md5sum] = "0055265f3854afcf4cc0abff06a9f023"
 SRC_URI[sha256sum] = "257f45f36463d5ffc04e1d60ac1fc6a2e7c1b11d012daa43b2eb43001383048c"
 
-S = "${WORKDIR}/common_tutorials-${PV}/${ROS_BPN}"
+S = "${WORKDIR}/${ROS_SP}/${ROS_BPN}"
 
 inherit catkin
+
+ROS_SPN = "common_tutorials"
diff --git a/recipes-ros/console-bridge/console-bridge_0.2.4.bb b/recipes-ros/console-bridge/console-bridge_0.2.4.bb
index cf9c48872be0d180215de60792dfcc44b3ee8c6e..0053d4ba2a851a6aa96a8c60d63717bab0bf53c5 100644
--- a/recipes-ros/console-bridge/console-bridge_0.2.4.bb
+++ b/recipes-ros/console-bridge/console-bridge_0.2.4.bb
@@ -3,9 +3,7 @@ console_bridge is a ROS-independent, pure CMake package that provides logging \
 calls that mirror those found in rosconsole, but for applications that are \
 not necessarily using ROS.\
 "
-
 SECTION = "devel"
-
 LICENSE = "BSD"
 LIC_FILES_CHKSUM = "\
   file://include/console_bridge/console.h;beginline=1;endline=33;md5=279eed49072cc9f6ebe38974afcc4803 \
@@ -14,13 +12,10 @@ LIC_FILES_CHKSUM = "\
 
 DEPENDS = "boost"
 
-SRC_URI = "https://github.com/ros/console_bridge/archive/${PV}.tar.gz;downloadfilename=${BP}.tar.gz"
+SRC_URI = "https://github.com/ros/${ROS_SPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_SP}.tar.gz"
 SRC_URI[md5sum] = "e484d34bf0170ee12311d0fc6dd5f4fe"
 SRC_URI[sha256sum] = "d4bdd0b6bce0c6fa9ff18b8926d4953161451bc49dd11497211eb1a62cfe72b7"
 
-S = "${WORKDIR}/console_bridge-${PV}"
-
-inherit cmake
+S = "${WORKDIR}/${ROS_SP}"
 
-FILES_SOLIBSDEV = ""
-FILES_${PN} += "${libdir}/lib*${SOLIBSDEV}"
+inherit cmake ros
diff --git a/recipes-ros/dynamic-reconfigure/dynamic-reconfigure/0001-resolve-dynamic_reconfigure-path-in-installspace-at-.patch b/recipes-ros/dynamic-reconfigure/dynamic-reconfigure/0001-resolve-dynamic_reconfigure-path-in-installspace-at-.patch
new file mode 100644
index 0000000000000000000000000000000000000000..175480e4867aac8faf7248963727da60385cf54d
--- /dev/null
+++ b/recipes-ros/dynamic-reconfigure/dynamic-reconfigure/0001-resolve-dynamic_reconfigure-path-in-installspace-at-.patch
@@ -0,0 +1,26 @@
+From b7b222534f7259ca457ea354d92c5708f895202e Mon Sep 17 00:00:00 2001
+From: Dirk Thomas <dthomas@osrfoundation.org>
+Date: Mon, 29 Jul 2013 11:51:23 -0700
+Subject: [PATCH] resolve dynamic_reconfigure path in installspace at runtime
+ (ros/catkin#490)
+
+---
+ cmake/extras.cmake.em | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cmake/extras.cmake.em b/cmake/extras.cmake.em
+index de2082e..e37b1fa 100644
+--- a/cmake/extras.cmake.em
++++ b/cmake/extras.cmake.em
+@@ -3,7 +3,7 @@
+ set(dynamic_reconfigure_BASE_DIR "@(CMAKE_CURRENT_SOURCE_DIR)")
+ @[else]@
+ # base dir in installspace
+-set(dynamic_reconfigure_BASE_DIR "@(CMAKE_INSTALL_PREFIX)/@(CATKIN_PACKAGE_SHARE_DESTINATION)")
++set(dynamic_reconfigure_BASE_DIR "${dynamic_reconfigure_DIR}/..")
+ @[end if]@
+ 
+ macro(generate_dynamic_reconfigure_options)
+-- 
+1.8.1.6
+
diff --git a/recipes-ros/dynamic-reconfigure/dynamic-reconfigure_1.5.32.bb b/recipes-ros/dynamic-reconfigure/dynamic-reconfigure_1.5.32.bb
index dc2dc3a341582c02029f811ebfddb3a1dd3fda58..ec96a62370f7f33f8cabeb7db30bed3f7b85daef 100644
--- a/recipes-ros/dynamic-reconfigure/dynamic-reconfigure_1.5.32.bb
+++ b/recipes-ros/dynamic-reconfigure/dynamic-reconfigure_1.5.32.bb
@@ -1,22 +1,20 @@
 DESCRIPTION = "\
 This unary stack contains the dynamic_reconfigure package which provides a means to change \
 node parameters at any time without having to restart the node."
-
 SECTION = "devel"
 LICENSE = "BSD"
 LIC_FILES_CHKSUM = "file://package.xml;beginline=9;endline=9;md5=5ee5b8b046ae48ad94a2037ca953a67b"
 
-SRC_URI = "https://github.com/ros/${ROS_BPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_BP}.tar.gz;name=archive"
-SRC_URI[archive.md5sum] = "9061fd30e5a04e8376eaddffaae86b07"
-SRC_URI[archive.sha256sum] = "4203b0a8389d9ac3203110b507d23fa353262cf26253f40abece6418d6c2bdd4"
+SRC_URI = "https://github.com/ros/${ROS_SPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_SP}.tar.gz"
+SRC_URI[md5sum] = "9061fd30e5a04e8376eaddffaae86b07"
+SRC_URI[sha256sum] = "4203b0a8389d9ac3203110b507d23fa353262cf26253f40abece6418d6c2bdd4"
 
-SRC_URI += "https://github.com/ros/dynamic_reconfigure/commit/b7b222534f7259ca457ea354d92c5708f895202e.patch;name=patch"
-SRC_URI[patch.md5sum] = "0607963ca3f940362c9e78b5f8019cb9"
-SRC_URI[patch.sha256sum] = "e132ed52fe35c287658700857f7d9439793ff2be7f9fa9a19731024152ccaf29"
+SRC_URI += "file://0001-resolve-dynamic_reconfigure-path-in-installspace-at-.patch"
 
 DEPENDS = "roscpp std-msgs roslib"
-RDEPENDS_${PN} = "roslib"
 
-S = "${WORKDIR}/${ROS_BP}"
+S = "${WORKDIR}/${ROS_SP}"
 
 inherit catkin
+
+RDEPENDS_${PN} = "roslib"
diff --git a/recipes-ros/gencpp/gencpp/0001-gencpp-extras.cmake.em-Use-find_program-for-GENCPP_B.patch b/recipes-ros/gencpp/gencpp/0001-gencpp-extras.cmake.em-Use-find_program-for-GENCPP_B.patch
deleted file mode 100644
index 8eef1267e79203de86d28cfb151e4193e36503e4..0000000000000000000000000000000000000000
--- a/recipes-ros/gencpp/gencpp/0001-gencpp-extras.cmake.em-Use-find_program-for-GENCPP_B.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 4e51c828b27eb1d67a3199c692aac1783f853493 Mon Sep 17 00:00:00 2001
-From: Lukas Bulwahn <lukas.bulwahn@oss.bmw-carit.de>
-Date: Fri, 12 Jul 2013 09:59:13 +0200
-Subject: [PATCH] gencpp-extras.cmake.em: Use find_program for GENCPP_BIN
-
-This patch was originally created by
-Stefan Herbrechtsmeier <stefan@herbrechtsmeier.net>.
-I only adjusted it to the current version.
-
-Signed-off-by: Lukas Bulwahn <lukas.bulwahn@oss.bmw-carit.de>
----
- cmake/gencpp-extras.cmake.em |   10 +++++++---
- 1 file changed, 7 insertions(+), 3 deletions(-)
-
-diff --git a/cmake/gencpp-extras.cmake.em b/cmake/gencpp-extras.cmake.em
-index 87f46fd..4fc5284 100644
---- a/cmake/gencpp-extras.cmake.em
-+++ b/cmake/gencpp-extras.cmake.em
-@@ -1,13 +1,17 @@
- @[if DEVELSPACE]@
- # bin and template dir variables in develspace
--set(GENCPP_BIN "@(CMAKE_CURRENT_SOURCE_DIR)/scripts/gen_cpp.py")
-+set(GENCPP_BIN_DIR "@(CMAKE_CURRENT_SOURCE_DIR)/scripts")
- set(GENCPP_TEMPLATE_DIR "@(CMAKE_CURRENT_SOURCE_DIR)/scripts")
-+set(CATKIN_FIND_ROOT_PATH_MODE NO_CMAKE_FIND_ROOT_PATH)
- @[else]@
- # bin and template dir variables in installspace
--set(GENCPP_BIN "@(CMAKE_INSTALL_PREFIX)/@(CATKIN_PACKAGE_BIN_DESTINATION)/gen_cpp.py")
--set(GENCPP_TEMPLATE_DIR "@(CMAKE_INSTALL_PREFIX)/@(CATKIN_PACKAGE_SHARE_DESTINATION)")
-+set(GENCPP_BIN_DIR "@(CMAKE_INSTALL_PREFIX)/@(CATKIN_PACKAGE_BIN_DESTINATION)")
-+set(GENCPP_TEMPLATE_DIR "${CMAKE_CURRENT_LIST_DIR}/..")
-+set(CATKIN_FIND_ROOT_PATH_MODE "")
- @[end if]@
- 
-+find_program(GENCPP_BIN gen_cpp.py PATHS ${GENCPP_BIN_DIR} NO_DEFAULT_PATH ${CATKIN_FIND_ROOT_PATH_MODE})
-+
- # Generate .msg->.h for cpp
- # The generated .h files should be added ALL_GEN_OUTPUT_FILES_cpp
- macro(_generate_msg_cpp ARG_PKG ARG_MSG ARG_IFLAGS ARG_MSG_DEPS ARG_GEN_OUTPUT_DIR)
--- 
-1.7.9.5
-
diff --git a/recipes-ros/gencpp/gencpp/0001-resolve-gencpp-path-in-installspace-at-runtime.patch b/recipes-ros/gencpp/gencpp/0001-resolve-gencpp-path-in-installspace-at-runtime.patch
new file mode 100644
index 0000000000000000000000000000000000000000..cd0cfa20a08f7ef3c76c1c0c29981c04686c1d29
--- /dev/null
+++ b/recipes-ros/gencpp/gencpp/0001-resolve-gencpp-path-in-installspace-at-runtime.patch
@@ -0,0 +1,28 @@
+From e5acaf690d6276d427f6b0ecaab67b52f55bbe8a Mon Sep 17 00:00:00 2001
+From: Dirk Thomas <dthomas@osrfoundation.org>
+Date: Fri, 26 Jul 2013 13:33:58 -0700
+Subject: [PATCH] resolve gencpp path in installspace at runtime
+ (ros/catkin#490)
+
+---
+ cmake/gencpp-extras.cmake.em | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/gencpp-extras.cmake.em b/cmake/gencpp-extras.cmake.em
+index 87f46fd..88ce935 100644
+--- a/cmake/gencpp-extras.cmake.em
++++ b/cmake/gencpp-extras.cmake.em
+@@ -4,8 +4,8 @@ set(GENCPP_BIN "@(CMAKE_CURRENT_SOURCE_DIR)/scripts/gen_cpp.py")
+ set(GENCPP_TEMPLATE_DIR "@(CMAKE_CURRENT_SOURCE_DIR)/scripts")
+ @[else]@
+ # bin and template dir variables in installspace
+-set(GENCPP_BIN "@(CMAKE_INSTALL_PREFIX)/@(CATKIN_PACKAGE_BIN_DESTINATION)/gen_cpp.py")
+-set(GENCPP_TEMPLATE_DIR "@(CMAKE_INSTALL_PREFIX)/@(CATKIN_PACKAGE_SHARE_DESTINATION)")
++set(GENCPP_BIN "${gencpp_DIR}/../../../@(CATKIN_PACKAGE_BIN_DESTINATION)/gen_cpp.py")
++set(GENCPP_TEMPLATE_DIR "${gencpp_DIR}/..")
+ @[end if]@
+ 
+ # Generate .msg->.h for cpp
+-- 
+1.8.1.6
+
diff --git a/recipes-ros/gencpp/gencpp_0.4.13.bb b/recipes-ros/gencpp/gencpp_0.4.13.bb
index 7b74c686a195e09f1da5a6b19c7f7d5c7cbf83dc..91143f9d2c418b565877abf4d73dfb0385b21060 100644
--- a/recipes-ros/gencpp/gencpp_0.4.13.bb
+++ b/recipes-ros/gencpp/gencpp_0.4.13.bb
@@ -5,11 +5,12 @@ LIC_FILES_CHKSUM = "file://package.xml;beginline=7;endline=7;md5=d566ef916e9dedc
 
 DEPENDS = "genmsg-native"
 
-PR = "r1"
+PR = "r2"
 
-SRC_URI = "https://github.com/ros/${BPN}/archive/${PV}.tar.gz;downloadfilename=${BP}.tar.gz \
-           file://0001-gencpp-extras.cmake.em-Use-find_program-for-GENCPP_B.patch"
+SRC_URI = "https://github.com/ros/${ROS_SPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_SP}.tar.gz"
 SRC_URI[md5sum] = "801b40dcfab468f761dbdae33f848782"
 SRC_URI[sha256sum] = "d1dcd6655c8c4d4325ab067c25284032d40e00aa3409a5a5cf069d310a60d485"
 
+SRC_URI += "file://0001-resolve-gencpp-path-in-installspace-at-runtime.patch"
+
 inherit catkin
diff --git a/recipes-ros/genlisp/genlisp/0001-genlisp-extras.cmake.em-Use-find_program-for-GENLISP.patch b/recipes-ros/genlisp/genlisp/0001-genlisp-extras.cmake.em-Use-find_program-for-GENLISP.patch
deleted file mode 100644
index dc5507f26c26318e4a959871713c54fbcd98d1ae..0000000000000000000000000000000000000000
--- a/recipes-ros/genlisp/genlisp/0001-genlisp-extras.cmake.em-Use-find_program-for-GENLISP.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From 4efc32314f5ee02e5be759ea288e11b6de64f1a1 Mon Sep 17 00:00:00 2001
-From: Stefan Herbrechtsmeier <stefan@herbrechtsmeier.net>
-Date: Tue, 4 Jun 2013 17:58:41 +0200
-Subject: [PATCH] genlisp-extras.cmake.em: Use find_program for GENLISP_BIN
-
-Signed-off-by: Stefan Herbrechtsmeier <stefan@herbrechtsmeier.net>
----
- cmake/genlisp-extras.cmake.em |   10 +++++++---
- 1 files changed, 7 insertions(+), 3 deletions(-)
-
-diff --git a/cmake/genlisp-extras.cmake.em b/cmake/genlisp-extras.cmake.em
-index 0d135d0..db52d54 100644
---- a/cmake/genlisp-extras.cmake.em
-+++ b/cmake/genlisp-extras.cmake.em
-@@ -1,13 +1,17 @@
- @[if DEVELSPACE]@
- # bin and template dir variables in develspace
--set(GENLISP_BIN "@(CMAKE_CURRENT_SOURCE_DIR)/scripts/gen_lisp.py")
-+set(GENLISP_BIN_DIR "@(CMAKE_CURRENT_SOURCE_DIR)/scripts/gen_lisp.py")
- set(GENLISP_TEMPLATE_DIR "@(CMAKE_CURRENT_SOURCE_DIR)/scripts")
-+set(CATKIN_FIND_ROOT_PATH_MODE NO_CMAKE_FIND_ROOT_PATH)
- @[else]@
- # bin and template dir variables in installspace
--set(GENLISP_BIN "@(CMAKE_INSTALL_PREFIX)/@(CATKIN_PACKAGE_BIN_DESTINATION)/gen_lisp.py")
--set(GENLISP_TEMPLATE_DIR "@(CMAKE_INSTALL_PREFIX)/@(CATKIN_PACKAGE_SHARE_DESTINATION)")
-+set(GENLISP_BIN_DIR "@(CMAKE_INSTALL_PREFIX)/@(CATKIN_PACKAGE_BIN_DESTINATION)/")
-+set(GENLISP_TEMPLATE_DIR "${CMAKE_CURRENT_LIST_DIR}/..")
-+set(CATKIN_FIND_ROOT_PATH_MODE "")
- @[end if]@
- 
-+find_program(GENLISP_BIN gen_lisp.py PATHS ${GENLISP_BIN_DIR} NO_DEFAULT_PATH ${CATKIN_FIND_ROOT_PATH_MODE})
-+
- # Generate .msg or .srv -> .lisp
- # The generated .lisp files should be added ALL_GEN_OUTPUT_FILES_lisp
- macro(_generate_lisp ARG_PKG ARG_MSG ARG_IFLAGS ARG_MSG_DEPS ARG_GEN_OUTPUT_DIR)
--- 
-1.7.0.4
-
diff --git a/recipes-ros/genlisp/genlisp/0001-resolve-genlisp-path-in-installspace-at-runtime.patch b/recipes-ros/genlisp/genlisp/0001-resolve-genlisp-path-in-installspace-at-runtime.patch
new file mode 100644
index 0000000000000000000000000000000000000000..1dbf34779d8849dd2c6fbc6c3dc1144c84f99e01
--- /dev/null
+++ b/recipes-ros/genlisp/genlisp/0001-resolve-genlisp-path-in-installspace-at-runtime.patch
@@ -0,0 +1,28 @@
+From 42458c1d0a4ca1d3e78b8b1b2cac5e8fb2169a60 Mon Sep 17 00:00:00 2001
+From: Dirk Thomas <dthomas@osrfoundation.org>
+Date: Fri, 26 Jul 2013 13:34:11 -0700
+Subject: [PATCH] resolve genlisp path in installspace at runtime
+ (ros/catkin#490)
+
+---
+ cmake/genlisp-extras.cmake.em | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cmake/genlisp-extras.cmake.em b/cmake/genlisp-extras.cmake.em
+index a8dec4b..c62037d 100644
+--- a/cmake/genlisp-extras.cmake.em
++++ b/cmake/genlisp-extras.cmake.em
+@@ -4,8 +4,8 @@ set(GENLISP_BIN "@(CMAKE_CURRENT_SOURCE_DIR)/scripts/gen_lisp.py")
+ set(GENLISP_TEMPLATE_DIR "@(CMAKE_CURRENT_SOURCE_DIR)/scripts")
+ @[else]@
+ # bin and template dir variables in installspace
+-set(GENLISP_BIN "@(CMAKE_INSTALL_PREFIX)/@(CATKIN_PACKAGE_BIN_DESTINATION)/gen_lisp.py")
+-set(GENLISP_TEMPLATE_DIR "@(CMAKE_INSTALL_PREFIX)/@(CATKIN_PACKAGE_SHARE_DESTINATION)")
++set(GENLISP_BIN "${genlisp_DIR}/../../../@(CATKIN_PACKAGE_BIN_DESTINATION)/gen_lisp.py")
++set(GENLISP_TEMPLATE_DIR "${genlisp_DIR}/..")
+ @[end if]@
+ 
+ # Generate .msg or .srv -> .lisp
+-- 
+1.8.1.6
+
diff --git a/recipes-ros/genlisp/genlisp_0.4.11.bb b/recipes-ros/genlisp/genlisp_0.4.11.bb
index 13f19a347637d59b570ebf76697f9fd939003747..c0e0125dd7347571ad3800fd177025fabf61c291 100644
--- a/recipes-ros/genlisp/genlisp_0.4.11.bb
+++ b/recipes-ros/genlisp/genlisp_0.4.11.bb
@@ -5,11 +5,12 @@ LIC_FILES_CHKSUM = "file://package.xml;beginline=9;endline=9;md5=d566ef916e9dedc
 
 DEPENDS = "genmsg-native"
 
-PR = "r1"
+PR = "r2"
 
-SRC_URI = "https://github.com/ros/${BPN}/archive/${PV}.tar.gz;downloadfilename=${BP}.tar.gz \
-           file://0001-genlisp-extras.cmake.em-Use-find_program-for-GENLISP.patch"
+SRC_URI = "https://github.com/ros/${ROS_SPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_SP}.tar.gz"
 SRC_URI[md5sum] = "b9be0a57abf76187a1057fb62cdc31e1"
 SRC_URI[sha256sum] = "cc373440fcbf57cafb758795cb50045fdd96de717b93d3d5956b7a1a2af4d3e2"
 
+SRC_URI += "file://0001-resolve-genlisp-path-in-installspace-at-runtime.patch"
+
 inherit catkin
diff --git a/recipes-ros/genmsg/genmsg/0001-modify-msg-file-handling-to-reference-them-relatively.patch b/recipes-ros/genmsg/genmsg/0001-modify-msg-file-handling-to-reference-them-relatively.patch
deleted file mode 100644
index e32f6d2ec0d351fa1ade95c3636ef85da616a1b8..0000000000000000000000000000000000000000
--- a/recipes-ros/genmsg/genmsg/0001-modify-msg-file-handling-to-reference-them-relatively.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-diff -Naur a/cmake/genmsg-extras.cmake.em b/cmake/genmsg-extras.cmake.em
---- a/cmake/genmsg-extras.cmake.em	2013-07-12 09:10:43.810555389 +0200
-+++ b/cmake/genmsg-extras.cmake.em	2013-07-12 09:14:17.122564232 +0200
-@@ -202,8 +202,7 @@
-     ${CATKIN_DEVEL_PREFIX}/share/${PROJECT_NAME}/cmake/${PROJECT_NAME}-msg-paths.cmake
-     @@ONLY)
-   # generate and install config of message include dirs for project
--  _prepend_path(${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME} "${${PROJECT_NAME}_MSG_INCLUDE_DIRS_INSTALLSPACE}" INCLUDE_DIRS_W_PATH UNIQUE)
--  set(PKG_MSG_INCLUDE_DIRS "${INCLUDE_DIRS_W_PATH}")
-+  set(PKG_MSG_INCLUDE_DIRS "${${PROJECT_NAME}_MSG_INCLUDE_DIRS_INSTALLSPACE}")
-   configure_file(
-     ${genmsg_CMAKE_DIR}/pkg-msg-paths.cmake.in
-     ${CMAKE_CURRENT_BINARY_DIR}/catkin_generated/installspace/${PROJECT_NAME}-msg-paths.cmake
-diff -Naur a/cmake/pkg-msg-paths.cmake.in b/cmake/pkg-msg-paths.cmake.in
---- a/cmake/pkg-msg-paths.cmake.in	2013-07-12 09:10:43.814555390 +0200
-+++ b/cmake/pkg-msg-paths.cmake.in	2013-07-12 09:15:35.818567495 +0200
-@@ -1,2 +1,7 @@
--set(@PROJECT_NAME@_MSG_INCLUDE_DIRS "@PKG_MSG_INCLUDE_DIRS@")
-+if(@DEVELSPACE@)
-+  set(@PROJECT_NAME@_MSG_INCLUDE_DIRS @PKG_MSG_INCLUDE_DIRS@)
-+else()
-+  _prepend_path(${@PROJECT_NAME@_DIR}/.. "@PKG_MSG_INCLUDE_DIRS@" INCLUDE_DIRS_W_PATH)
-+  set(@PROJECT_NAME@_MSG_INCLUDE_DIRS "${INCLUDE_DIRS_W_PATH}")
-+endif()
- set(@PROJECT_NAME@_MSG_DEPENDENCIES @ARG_DEPENDENCIES@)
diff --git a/recipes-ros/genmsg/genmsg/0001-resolve-path-of-message-file-and-include-dirs-in-ins.patch b/recipes-ros/genmsg/genmsg/0001-resolve-path-of-message-file-and-include-dirs-in-ins.patch
new file mode 100644
index 0000000000000000000000000000000000000000..7b1858b8c6206cbc427285d6bf6d351c219e875a
--- /dev/null
+++ b/recipes-ros/genmsg/genmsg/0001-resolve-path-of-message-file-and-include-dirs-in-ins.patch
@@ -0,0 +1,128 @@
+From cb45b131576a898ced69e3e5e9758173365dc5cf Mon Sep 17 00:00:00 2001
+From: Dirk Thomas <dthomas@osrfoundation.org>
+Date: Fri, 26 Jul 2013 13:35:17 -0700
+Subject: [PATCH] resolve path of message file and include dirs in installspace
+ at runtime (ros/catkin#490)
+
+---
+ CMakeLists.txt                 |  3 ++-
+ cmake/genmsg-extras.cmake.em   | 29 ++++++++++++++++++-----------
+ cmake/pkg-msg-paths.cmake.em   | 10 ++++++++++
+ cmake/pkg-msg-paths.cmake.in   |  2 --
+ cmake/pkg-msg-paths.context.in |  8 ++++++++
+ 5 files changed, 38 insertions(+), 14 deletions(-)
+ create mode 100644 cmake/pkg-msg-paths.cmake.em
+ delete mode 100644 cmake/pkg-msg-paths.cmake.in
+ create mode 100644 cmake/pkg-msg-paths.context.in
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 5e8fcf0..aa66f86 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -9,7 +9,8 @@ install(
+   cmake/pkg-genmsg.cmake.em
+   cmake/pkg-genmsg.context.in
+   cmake/pkg-msg-extras.cmake.in
+-  cmake/pkg-msg-paths.cmake.in
++  cmake/pkg-msg-paths.cmake.em
++  cmake/pkg-msg-paths.context.in
+   DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/cmake)
+ 
+ catkin_python_setup()
+diff --git a/cmake/genmsg-extras.cmake.em b/cmake/genmsg-extras.cmake.em
+index 3ba4b37..b57af38 100644
+--- a/cmake/genmsg-extras.cmake.em
++++ b/cmake/genmsg-extras.cmake.em
+@@ -106,7 +106,7 @@ macro(add_message_files)
+     install(FILES ${FILES_W_PATH}
+       DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/${ARG_DIRECTORY})
+ 
+-    _prepend_path("${CMAKE_INSTALL_PREFIX}/${CATKIN_PACKAGE_SHARE_DESTINATION}/${ARG_DIRECTORY}" "${ARG_FILES}" FILES_W_PATH)
++    _prepend_path("${ARG_DIRECTORY}" "${ARG_FILES}" FILES_W_PATH)
+     list(APPEND ${PROJECT_NAME}_INSTALLED_MESSAGE_FILES ${FILES_W_PATH})
+   endif()
+ endmacro()
+@@ -196,18 +196,21 @@ macro(generate_messages)
+   catkin_destinations()
+ 
+   # generate devel space config of message include dirs for project
++  set(DEVELSPACE TRUE)
++  set(INSTALLSPACE FALSE)
+   set(PKG_MSG_INCLUDE_DIRS "${${PROJECT_NAME}_MSG_INCLUDE_DIRS_DEVELSPACE}")
+-  configure_file(
+-    ${genmsg_CMAKE_DIR}/pkg-msg-paths.cmake.in
+-    ${CATKIN_DEVEL_PREFIX}/share/${PROJECT_NAME}/cmake/${PROJECT_NAME}-msg-paths.cmake
+-    @@ONLY)
++  em_expand(${genmsg_CMAKE_DIR}/pkg-msg-paths.context.in
++    ${CMAKE_CURRENT_BINARY_DIR}/catkin_generated/${PROJECT_NAME}-msg-paths-context.py
++    ${genmsg_CMAKE_DIR}/pkg-msg-paths.cmake.em
++    ${CATKIN_DEVEL_PREFIX}/share/${PROJECT_NAME}/cmake/${PROJECT_NAME}-msg-paths.cmake)
+   # generate and install config of message include dirs for project
+-  _prepend_path(${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME} "${${PROJECT_NAME}_MSG_INCLUDE_DIRS_INSTALLSPACE}" INCLUDE_DIRS_W_PATH UNIQUE)
+-  set(PKG_MSG_INCLUDE_DIRS "${INCLUDE_DIRS_W_PATH}")
+-  configure_file(
+-    ${genmsg_CMAKE_DIR}/pkg-msg-paths.cmake.in
+-    ${CMAKE_CURRENT_BINARY_DIR}/catkin_generated/installspace/${PROJECT_NAME}-msg-paths.cmake
+-    @@ONLY)
++  set(DEVELSPACE FALSE)
++  set(INSTALLSPACE TRUE)
++  set(PKG_MSG_INCLUDE_DIRS "${${PROJECT_NAME}_MSG_INCLUDE_DIRS_INSTALLSPACE}")
++  em_expand(${genmsg_CMAKE_DIR}/pkg-msg-paths.context.in
++    ${CMAKE_CURRENT_BINARY_DIR}/catkin_generated/installspace/${PROJECT_NAME}-msg-paths-context.py
++    ${genmsg_CMAKE_DIR}/pkg-msg-paths.cmake.em
++    ${CMAKE_CURRENT_BINARY_DIR}/catkin_generated/installspace/${PROJECT_NAME}-msg-paths.cmake)
+   install(FILES ${CMAKE_CURRENT_BINARY_DIR}/catkin_generated/installspace/${PROJECT_NAME}-msg-paths.cmake
+     DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/cmake)
+ 
+@@ -256,6 +259,10 @@ macro(generate_messages)
+     include(${config})
+     unset(config CACHE)
+ 
++    # explicitly set message include dirs for current project since information from pkg-msg-paths.cmake is not yet available
++    if(${dep} STREQUAL ${PROJECT_NAME})
++      set(${dep}_MSG_INCLUDE_DIRS ${${PROJECT_NAME}_MSG_INCLUDE_DIRS_DEVELSPACE})
++    endif()
+     foreach(path ${${dep}_MSG_INCLUDE_DIRS})
+       list(APPEND MSG_INCLUDE_DIRS "${dep}")
+       list(APPEND MSG_INCLUDE_DIRS "${path}")
+diff --git a/cmake/pkg-msg-paths.cmake.em b/cmake/pkg-msg-paths.cmake.em
+new file mode 100644
+index 0000000..eb6f88a
+--- /dev/null
++++ b/cmake/pkg-msg-paths.cmake.em
+@@ -0,0 +1,10 @@
++# generated from genmsg/cmake/pkg-msg-paths.cmake.em
++
++@[if DEVELSPACE]@
++# message include dirs in develspace
++set(@(PROJECT_NAME)_MSG_INCLUDE_DIRS "@(PKG_MSG_INCLUDE_DIRS)")
++@[else]@
++# message include dirs in installspace
++_prepend_path("${@(PROJECT_NAME)_DIR}/.." "@(PKG_MSG_INCLUDE_DIRS)" @(PROJECT_NAME)_MSG_INCLUDE_DIRS UNIQUE)
++@[end if]@
++set(@(PROJECT_NAME)_MSG_DEPENDENCIES @(ARG_DEPENDENCIES))
+diff --git a/cmake/pkg-msg-paths.cmake.in b/cmake/pkg-msg-paths.cmake.in
+deleted file mode 100644
+index c40966c..0000000
+--- a/cmake/pkg-msg-paths.cmake.in
++++ /dev/null
+@@ -1,2 +0,0 @@
+-set(@PROJECT_NAME@_MSG_INCLUDE_DIRS "@PKG_MSG_INCLUDE_DIRS@")
+-set(@PROJECT_NAME@_MSG_DEPENDENCIES @ARG_DEPENDENCIES@)
+diff --git a/cmake/pkg-msg-paths.context.in b/cmake/pkg-msg-paths.context.in
+new file mode 100644
+index 0000000..499e2f9
+--- /dev/null
++++ b/cmake/pkg-msg-paths.context.in
+@@ -0,0 +1,8 @@
++# generated from genmsg/cmake/pkg-msg-paths.context.in
++
++DEVELSPACE = '@DEVELSPACE@' == 'TRUE'
++INSTALLSPACE = '@INSTALLSPACE@' == 'TRUE'
++
++PROJECT_NAME = '@PROJECT_NAME@'
++PKG_MSG_INCLUDE_DIRS = '@PKG_MSG_INCLUDE_DIRS@'
++ARG_DEPENDENCIES = '@ARG_DEPENDENCIES@'
+-- 
+1.8.1.6
+
diff --git a/recipes-ros/genmsg/genmsg_0.4.21.bb b/recipes-ros/genmsg/genmsg_0.4.21.bb
index c7d59d0701a417dc0ea557920cf70c7617f0c6ae..d3b6188c1632cc1cc318b00113150713dbb63757 100644
--- a/recipes-ros/genmsg/genmsg_0.4.21.bb
+++ b/recipes-ros/genmsg/genmsg_0.4.21.bb
@@ -3,16 +3,15 @@ SECTION = "devel"
 LICENSE = "BSD"
 LIC_FILES_CHKSUM = "file://package.xml;beginline=9;endline=9;md5=d566ef916e9dedc494f5f793a6690ba5"
 
-PR = "r1"
-
-SRC_URI = "https://github.com/ros/${BPN}/archive/${PV}.tar.gz;downloadfilename=${BP}.tar.gz \
-           file://0001-modify-msg-file-handling-to-reference-them-relatively.patch \
-           "
-
-RDEPENDS_${PN} = "python-stringold python-pprint"
-RDEPENDS_${PN}_class-native = ""
+PR = "r2"
 
+SRC_URI = "https://github.com/ros/${ROS_SPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_SP}.tar.gz"
 SRC_URI[md5sum] = "03ff82b1efa75552d4a5a000e0576cc4"
 SRC_URI[sha256sum] = "e7e4b23eadb97b0deca53874532c0b42f10f406a9db2affd7d6f04101a4a2901"
 
+SRC_URI += "file://0001-resolve-path-of-message-file-and-include-dirs-in-ins.patch"
+
 inherit catkin
+
+RDEPENDS_${PN} = "python-stringold python-pprint"
+RDEPENDS_${PN}_class-native = ""
diff --git a/recipes-ros/genpy/genpy/0001-genpy-extras.cmake.em-use-find_program-for-GENxxx_PY_BIN.patch b/recipes-ros/genpy/genpy/0001-genpy-extras.cmake.em-use-find_program-for-GENxxx_PY_BIN.patch
deleted file mode 100644
index 99216a796c5b21426f5eb444512bbd8a041dd40e..0000000000000000000000000000000000000000
--- a/recipes-ros/genpy/genpy/0001-genpy-extras.cmake.em-use-find_program-for-GENxxx_PY_BIN.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-diff -Naur a/cmake/genpy-extras.cmake.em b/cmake/genpy-extras.cmake.em
---- a/cmake/genpy-extras.cmake.em	2013-05-30 12:31:39.000000000 +0200
-+++ b/cmake/genpy-extras.cmake.em	2013-05-30 12:43:02.000000000 +0200
-@@ -1,13 +1,15 @@
- @[if DEVELSPACE]@
- # bin dir variables in develspace
- set(GENPY_BIN_DIR "@(CMAKE_CURRENT_SOURCE_DIR)/scripts")
-+set(CATKIN_FIND_ROOT_PATH_MODE NO_CMAKE_FIND_ROOT_PATH)
- @[else]@
- # bin dir variables in installspace
- set(GENPY_BIN_DIR "@(CMAKE_INSTALL_PREFIX)/@(CATKIN_PACKAGE_BIN_DESTINATION)")
-+set(CATKIN_FIND_ROOT_PATH_MODE "")
- @[end if]@
- 
-+find_program(GENMSG_PY_BIN genmsg_py.py PATHS ${GENPY_BIN_DIR} NO_DEFAULT_PATH CATKIN_FIND_ROOT_PATH_MODE)
-+find_program(GENSRV_PY_BIN gensrv_py.py PATHS ${GENPY_BIN_DIR} NO_DEFAULT_PATH CATKIN_FIND_ROOT_PATH_MODE)
--set(GENMSG_PY_BIN ${GENPY_BIN_DIR}/genmsg_py.py)
--set(GENSRV_PY_BIN ${GENPY_BIN_DIR}/gensrv_py.py)
- 
- # Generate .msg->.h for py
- # The generated .h files should be added ALL_GEN_OUTPUT_FILES_py
diff --git a/recipes-ros/genpy/genpy/0001-resolve-genpy-path-in-installspace-at-runtime.patch b/recipes-ros/genpy/genpy/0001-resolve-genpy-path-in-installspace-at-runtime.patch
new file mode 100644
index 0000000000000000000000000000000000000000..89037733687e5dcb7a9ad1469969a21469496abc
--- /dev/null
+++ b/recipes-ros/genpy/genpy/0001-resolve-genpy-path-in-installspace-at-runtime.patch
@@ -0,0 +1,30 @@
+From 1bc78ac23e465c1b3ef040d11c53d89cdc00b8ae Mon Sep 17 00:00:00 2001
+From: Dirk Thomas <dthomas@osrfoundation.org>
+Date: Fri, 26 Jul 2013 13:34:18 -0700
+Subject: [PATCH] resolve genpy path in installspace at runtime
+ (ros/catkin#490)
+
+---
+ cmake/genpy-extras.cmake.em | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/cmake/genpy-extras.cmake.em b/cmake/genpy-extras.cmake.em
+index fd78a97..5a57285 100644
+--- a/cmake/genpy-extras.cmake.em
++++ b/cmake/genpy-extras.cmake.em
+@@ -1,9 +1,9 @@
+ @[if DEVELSPACE]@
+-# bin dir variables in develspace
++# location of scripts in develspace
+ set(GENPY_BIN_DIR "@(CMAKE_CURRENT_SOURCE_DIR)/scripts")
+ @[else]@
+-# bin dir variables in installspace
+-set(GENPY_BIN_DIR "@(CMAKE_INSTALL_PREFIX)/@(CATKIN_PACKAGE_BIN_DESTINATION)")
++# location of scripts in installspace
++set(GENPY_BIN_DIR "${genpy_DIR}/../../../@(CATKIN_PACKAGE_BIN_DESTINATION)")
+ @[end if]@
+ 
+ set(GENMSG_PY_BIN ${GENPY_BIN_DIR}/genmsg_py.py)
+-- 
+1.8.1.6
+
diff --git a/recipes-ros/genpy/genpy_0.4.13.bb b/recipes-ros/genpy/genpy_0.4.13.bb
index 0828b2d12d23f7387482b95929f6b7c4ecae30b3..9a9e28ca3902597902d747cf8ffe2cd925cfdd72 100644
--- a/recipes-ros/genpy/genpy_0.4.13.bb
+++ b/recipes-ros/genpy/genpy_0.4.13.bb
@@ -4,14 +4,16 @@ LICENSE = "BSD"
 LIC_FILES_CHKSUM = "file://package.xml;beginline=7;endline=7;md5=d566ef916e9dedc494f5f793a6690ba5"
 
 DEPENDS = "genmsg-native"
-RDEPENDS_${PN} = "python-math genmsg python-shell"
-RDEPENDS_${PN}_class-native = ""
 
-PR = "r2"
+PR = "r3"
 
-SRC_URI = "https://github.com/ros/${BPN}/archive/${PV}.tar.gz;downloadfilename=${BP}.tar.gz \
-           file://0001-genpy-extras.cmake.em-use-find_program-for-GENxxx_PY_BIN.patch"
+SRC_URI = "https://github.com/ros/${ROS_SPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_SP}.tar.gz"
 SRC_URI[md5sum] = "201e3f1aa5e12ccc09159b1a3d9272f7"
 SRC_URI[sha256sum] = "9dae768e9350c835ae8a40f19d230e3fe023bfc1e259a14be8b3ae7c4c632d3c"
 
+SRC_URI += "file://0001-resolve-genpy-path-in-installspace-at-runtime.patch"
+
 inherit catkin
+
+RDEPENDS_${PN} = "python-math genmsg python-shell"
+RDEPENDS_${PN}_class-native = ""
diff --git a/recipes-ros/geometry-angles-utils/angles/0001-check-for-CATKIN_ENABLE_TESTING.patch b/recipes-ros/geometry-angles-utils/angles/0001-check-for-CATKIN_ENABLE_TESTING.patch
new file mode 100644
index 0000000000000000000000000000000000000000..73080d0a0771b03add173019d9ef8d68b4833a1c
--- /dev/null
+++ b/recipes-ros/geometry-angles-utils/angles/0001-check-for-CATKIN_ENABLE_TESTING.patch
@@ -0,0 +1,36 @@
+From 8b1879e93b8ae2f89df345edaf688521e5c0ab97 Mon Sep 17 00:00:00 2001
+From: Lukas Bulwahn <lukas.bulwahn@oss.bmw-carit.de>
+Date: Mon, 15 Jul 2013 14:04:43 +0200
+Subject: [PATCH] check for CATKIN_ENABLE_TESTING
+
+---
+ angles/CMakeLists.txt | 4 +++-
+ angles/package.xml    | 2 +-
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/angles/CMakeLists.txt b/angles/CMakeLists.txt
+index a2cc37f..4026fc6 100644
+--- a/angles/CMakeLists.txt
++++ b/angles/CMakeLists.txt
+@@ -10,4 +10,6 @@ install(DIRECTORY include/${PROJECT_NAME}/
+ 
+ include_directories(include)
+ 
+-add_subdirectory(test)
++if(CATKIN_ENABLE_TESTING)
++  add_subdirectory(test)
++endif()
+diff --git a/angles/package.xml b/angles/package.xml
+index fe7f848..2409595 100644
+--- a/angles/package.xml
++++ b/angles/package.xml
+@@ -16,5 +16,5 @@
+ 
+   <url>http://ros.org/wiki/angles</url>
+ 
+-  <buildtool_depend>catkin</buildtool_depend>
++  <buildtool_depend version_gte="0.5.68">catkin</buildtool_depend>
+ </package>
+-- 
+1.8.1.6
+
diff --git a/recipes-ros/geometry-angles-utils/angles_1.9.9.bb b/recipes-ros/geometry-angles-utils/angles_1.9.9.bb
index 8c5dd73a1b75eaf20c28bdf94e4b6c1198e3ebb3..3f8eb531591467f6672c9320df49bf6fa7431625 100644
--- a/recipes-ros/geometry-angles-utils/angles_1.9.9.bb
+++ b/recipes-ros/geometry-angles-utils/angles_1.9.9.bb
@@ -3,14 +3,12 @@ SECTION = "devel"
 LICENSE = "BSD"
 LIC_FILES_CHKSUM = "file://package.xml;beginline=15;endline=15;md5=d566ef916e9dedc494f5f793a6690ba5"
 
-SRC_URI = "https://github.com/ros/${BPN}/archive/${PV}.tar.gz;downloadfilename=${BP}.tar.gz;name=archive"
-SRC_URI[archive.md5sum] = "c2a841dbeb1f3036449919773ac70876"
-SRC_URI[archive.sha256sum] = "5e690bf611bead83c2fdcab5a9617b622a9869e55fd1742c00b4015ddf4f8cfc"
+SRC_URI = "https://github.com/ros/${ROS_SPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_SP}.tar.gz"
+SRC_URI[md5sum] = "c2a841dbeb1f3036449919773ac70876"
+SRC_URI[sha256sum] = "5e690bf611bead83c2fdcab5a9617b622a9869e55fd1742c00b4015ddf4f8cfc"
 
-SRC_URI += "https://github.com/bulwahn/angles/commit/8b1879e93b8ae2f89df345edaf688521e5c0ab97.patch;striplevel=2;name=patch"
-SRC_URI[patch.md5sum] = "d55c70b7328ed6e9d00d3185ddf4b0bf"
-SRC_URI[patch.sha256sum] = "2b7303ca01e355680adadd18c3b97dfb1071715375c14a3759ad96f807fc09e5"
+SRC_URI += "file://0001-check-for-CATKIN_ENABLE_TESTING.patch;striplevel=2"
 
-S = "${WORKDIR}/${BP}/${BPN}"
+S = "${WORKDIR}/${ROS_SP}/${ROS_BPN}"
 
 inherit catkin
diff --git a/recipes-ros/geometry-experimental/geometry-experimental.inc b/recipes-ros/geometry-experimental/geometry-experimental.inc
index b5aaab5ece82cc0fd9be5bd8b3e16729992125fa..a8f4982000ad1e104ef0f79c9e58dbc155ae6bf6 100644
--- a/recipes-ros/geometry-experimental/geometry-experimental.inc
+++ b/recipes-ros/geometry-experimental/geometry-experimental.inc
@@ -1,7 +1,9 @@
-SRC_URI = "https://github.com/ros/geometry_experimental/archive/${PV}.tar.gz;downloadfilename=geometry_experimental-${PV}.tar.gz"
+SRC_URI = "https://github.com/ros/${ROS_SPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_SP}.tar.gz"
 SRC_URI[md5sum] = "530cbf52308427e15a0568f5226313aa"
 SRC_URI[sha256sum] = "10a95045136510c1db5743481930ced6d164c6990d9e1a7c2afd9d6fa5062d02"
 
+S = "${WORKDIR}/${ROS_SP}/${ROS_BPN}"
+
 inherit catkin
 
-S = "${WORKDIR}/geometry_experimental-${PV}/${ROS_BPN}"
+ROS_SPN = "geometry_experimental"
diff --git a/recipes-ros/geometry/geometry.inc b/recipes-ros/geometry/geometry.inc
index c94353d48dccae9355403b43d24fd19cd52711fb..ebba3b5619fe9c6465331e76c54a96ccfdbfc245 100644
--- a/recipes-ros/geometry/geometry.inc
+++ b/recipes-ros/geometry/geometry.inc
@@ -1,7 +1,9 @@
-SRC_URI = "https://github.com/ros/geometry/archive/${PV}.tar.gz;downloadfilename=geometry-${PV}.tar.gz"
+SRC_URI = "https://github.com/ros/${ROS_SPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_SP}.tar.gz"
 SRC_URI[md5sum] = "ccaadd38c183c2c257e75ac907868c87"
 SRC_URI[sha256sum] = "30527d91f182478b7819a947237c92ce1effe61cd11d2d710e0408c971f2bc74"
 
+S = "${WORKDIR}/${ROS_SP}/${ROS_BPN}"
+
 inherit catkin
 
-S = "${WORKDIR}/geometry-${PV}/${ROS_BPN}"
+ROS_SPN = "geometry"
diff --git a/recipes-ros/image-common/image-common.inc b/recipes-ros/image-common/image-common.inc
index 7997af1e6d59c0c300831761526ea6e194a49419..4eb2cc7882b3dd1bcbd79f8c6844ed564cbf9b89 100644
--- a/recipes-ros/image-common/image-common.inc
+++ b/recipes-ros/image-common/image-common.inc
@@ -1,7 +1,9 @@
-SRC_URI = "https://github.com/ros-perception/image_common/archive/${PV}.tar.gz;downloadfilename=image_common-${PV}.tar.gz"
+SRC_URI = "https://github.com/ros-perception/${ROS_SPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_SP}.tar.gz"
 SRC_URI[md5sum] = "72dc5897c021987cca04756cbf3ddc27"
 SRC_URI[sha256sum] = "022f3c81ade13e644cf7f3c96712a362dc668f2edf37c125f3b9411818eb294a"
 
+S = "${WORKDIR}/${ROS_SP}/${ROS_BPN}"
+
 inherit catkin
 
-S = "${WORKDIR}/image_common-${PV}/${ROS_BPN}"
+ROS_SPN = "image_common"
diff --git a/recipes-ros/message-generation/message-generation_0.2.9.bb b/recipes-ros/message-generation/message-generation_0.2.9.bb
index 17aefcbd3fc6cc0b4be6aeb0f9da4c50d0887880..8f112a5e8e4d8c3c624d3929fbc0ad9a6001e1e6 100644
--- a/recipes-ros/message-generation/message-generation_0.2.9.bb
+++ b/recipes-ros/message-generation/message-generation_0.2.9.bb
@@ -5,10 +5,10 @@ LIC_FILES_CHKSUM = "file://package.xml;beginline=7;endline=7;md5=d566ef916e9dedc
 
 DEPENDS = "gencpp-native genlisp-native genmsg-native genpy-native"
 
-SRC_URI = "https://github.com/ros/${ROS_BPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_BP}.tar.gz"
+SRC_URI = "https://github.com/ros/${ROS_SPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_SP}.tar.gz"
 SRC_URI[md5sum] = "b3086fbe24cc103f412cb30d83362e36"
 SRC_URI[sha256sum] = "9ce9c5b4e995933c575f2a5cb5c4b042b39913637bca06554092a52c3bb24c12"
 
-S = "${WORKDIR}/${ROS_BP}"
+S = "${WORKDIR}/${ROS_SP}"
 
 inherit catkin
diff --git a/recipes-ros/message-runtime/message-runtime_0.4.11.bb b/recipes-ros/message-runtime/message-runtime_0.4.11.bb
index 9b030d87b03d34f2a282066902a6f8c32aa14509..b798971db14d711fb6ee78b1b9c9adfd015b6fd0 100644
--- a/recipes-ros/message-runtime/message-runtime_0.4.11.bb
+++ b/recipes-ros/message-runtime/message-runtime_0.4.11.bb
@@ -5,10 +5,10 @@ LIC_FILES_CHKSUM = "file://package.xml;beginline=7;endline=7;md5=d566ef916e9dedc
 
 DEPENDS = "gencpp-native"
 
-SRC_URI = "https://github.com/ros/${ROS_BPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_BP}.tar.gz"
+SRC_URI = "https://github.com/ros/${ROS_SPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_SP}.tar.gz"
 SRC_URI[md5sum] = "10a516326a3bf18f5b5b4523c6e53940"
 SRC_URI[sha256sum] = "87f6b56679ea6b90512e2f2d299dd129d361b4a5d167237a9d28ac56ce6f2a36"
 
-S = "${WORKDIR}/${ROS_BP}"
+S = "${WORKDIR}/${ROS_SP}"
 
 inherit catkin
diff --git a/recipes-ros/nodelet-core/nodelet-core.inc b/recipes-ros/nodelet-core/nodelet-core.inc
index 6e98fda53a98c15acab53920de14ebadc51f1b02..7c365b3a75f1b6db3e3cfd936c6a1836663caf91 100644
--- a/recipes-ros/nodelet-core/nodelet-core.inc
+++ b/recipes-ros/nodelet-core/nodelet-core.inc
@@ -1,7 +1,9 @@
-SRC_URI = "https://github.com/ros/nodelet_core/archive/${PV}.tar.gz;downloadfilename=${BP}.tar.gz"
+SRC_URI = "https://github.com/ros/${ROS_SPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_SP}.tar.gz"
 SRC_URI[md5sum] = "b4ec524761d1d2494f5901b77ad35f9b"
 SRC_URI[sha256sum] = "ad79f48e0916490d2095ea9ea81a796a060553d4e60ba5b148b96a95369b8124"
 
-S = "${WORKDIR}/nodelet_core-${PV}/${ROS_BPN}"
+S = "${WORKDIR}/${ROS_SP}/${ROS_BPN}"
 
 inherit catkin
+
+ROS_SPN = "nodelet_core"
diff --git a/recipes-ros/nodelet-core/nodelet-topic-tools_1.8.0.bb b/recipes-ros/nodelet-core/nodelet-topic-tools_1.8.0.bb
index 007212736f84ac162c880233f50b2f56751567a8..5953ea79e8f920b319d0a89c03bcbe8c8fc79b2f 100644
--- a/recipes-ros/nodelet-core/nodelet-topic-tools_1.8.0.bb
+++ b/recipes-ros/nodelet-core/nodelet-topic-tools_1.8.0.bb
@@ -1,5 +1,4 @@
 DESCRIPTION = "This package contains common nodelet tools such as a mux, demux and throttle."
-
 SECTION = "devel"
 LICENSE = "BSD"
 LIC_FILES_CHKSUM = "file://package.xml;beginline=8;endline=8;md5=d566ef916e9dedc494f5f793a6690ba5"
diff --git a/recipes-ros/nodelet-core/nodelet_1.8.0.bb b/recipes-ros/nodelet-core/nodelet_1.8.0.bb
index 5a27a757ee569b216d159e198b08db3a4178a724..da4e7571c47fee37d3a2193e0c9b7a11f1855cb7 100644
--- a/recipes-ros/nodelet-core/nodelet_1.8.0.bb
+++ b/recipes-ros/nodelet-core/nodelet_1.8.0.bb
@@ -6,7 +6,6 @@ This package provides both the nodelet base class needed for \
 implementing a nodelet, as well as the NodeletLoader class used \
 for instantiating nodelets\
 "
-
 SECTION = "devel"
 LICENSE = "BSD"
 LIC_FILES_CHKSUM = "file://package.xml;beginline=14;endline=14;md5=d566ef916e9dedc494f5f793a6690ba5"
diff --git a/recipes-ros/pluginlib/pluginlib_1.9.21.bb b/recipes-ros/pluginlib/pluginlib_1.9.21.bb
index 94a14476804999353111595d9ee82c3332579f8a..fd25111a12350de1fb044f91a6fc0c5d284b23e5 100644
--- a/recipes-ros/pluginlib/pluginlib_1.9.21.bb
+++ b/recipes-ros/pluginlib/pluginlib_1.9.21.bb
@@ -2,12 +2,11 @@ DESCRIPTION = "\
 The pluginlib package provides tools for writing and dynamically loading plugins using the ROS build infrastructure.\
 To work, these tools require plugin providers to register their plugins in the package.xml of their package.\
 "
-
 SECTION = "devel"
 LICENSE = "BSD & BSL-1.0"
 LIC_FILES_CHKSUM = "file://package.xml;beginline=9;endline=10;md5=bbbb6ab628b1f3daee74dd9c62bee312"
 
-SRC_URI = "https://github.com/ros/${PN}/archive/${PV}.tar.gz;downloadfilename=${BP}.tar.gz"
+SRC_URI = "https://github.com/ros/${ROS_SPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_SP}.tar.gz"
 SRC_URI[md5sum] = "c506945693bc53e60600a849275e4a98"
 SRC_URI[sha256sum] = "a8c5aa266a27810c39a2ced76d531358880c7728a948f7e7a8972b70ed42a425"
 
diff --git a/recipes-ros/ros-comm/files/0001-fix-roslaunch-check-script-in-install-space.patch b/recipes-ros/ros-comm/files/0001-fix-roslaunch-check-script-in-install-space.patch
new file mode 100644
index 0000000000000000000000000000000000000000..bda8dcc6f52a511927a7d905d1d0bb795a8d2c69
--- /dev/null
+++ b/recipes-ros/ros-comm/files/0001-fix-roslaunch-check-script-in-install-space.patch
@@ -0,0 +1,25 @@
+From 60f0f657bd9aabfedba0b00374ae8398e5e92359 Mon Sep 17 00:00:00 2001
+From: Dirk Thomas <dthomas@osrfoundation.org>
+Date: Wed, 24 Jul 2013 00:19:21 -0700
+Subject: [PATCH] fix roslaunch check script in install space (fix #257)
+
+---
+ tools/roslaunch/cmake/roslaunch-extras.cmake.em | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tools/roslaunch/cmake/roslaunch-extras.cmake.em b/tools/roslaunch/cmake/roslaunch-extras.cmake.em
+index 10c0ce2..bb1ae40 100644
+--- a/tools/roslaunch/cmake/roslaunch-extras.cmake.em
++++ b/tools/roslaunch/cmake/roslaunch-extras.cmake.em
+@@ -5,7 +5,7 @@
+ set(roslaunch_check_script @(CMAKE_CURRENT_SOURCE_DIR)/scripts/roslaunch-check)
+ @[else]@
+ # set path to roslaunch-check.py installspace
+-set(roslaunch_check_script @(CMAKE_INSTALL_PREFIX)/${CATKIN_PACKAGE_SHARE_DESTINATION}/scripts/roslaunch-check)
++set(roslaunch_check_script @(CMAKE_INSTALL_PREFIX)/@(CATKIN_PACKAGE_SHARE_DESTINATION)/scripts/roslaunch-check)
+ @[end if]@
+ 
+ #
+-- 
+1.8.1.6
+
diff --git a/recipes-ros/ros-comm/files/0002-resolve-roslaunch-rostest-paths-in-installspace-at-r.patch b/recipes-ros/ros-comm/files/0002-resolve-roslaunch-rostest-paths-in-installspace-at-r.patch
new file mode 100644
index 0000000000000000000000000000000000000000..794f3b2b662bfc97e7e42f1d20255d586135c38d
--- /dev/null
+++ b/recipes-ros/ros-comm/files/0002-resolve-roslaunch-rostest-paths-in-installspace-at-r.patch
@@ -0,0 +1,57 @@
+From e0366e14128ed0083e9450bbe9f98fd9b2806454 Mon Sep 17 00:00:00 2001
+From: Dirk Thomas <dthomas@osrfoundation.org>
+Date: Fri, 26 Jul 2013 13:37:23 -0700
+Subject: [PATCH] resolve roslaunch/rostest paths in installspace at runtime
+ without find_program()  (ros/catkin#490)
+
+---
+ tools/roslaunch/cmake/roslaunch-extras.cmake.em |  6 +++---
+ tools/rostest/cmake/rostest-extras.cmake.em     | 12 ++++--------
+ 2 files changed, 7 insertions(+), 11 deletions(-)
+
+diff --git a/tools/roslaunch/cmake/roslaunch-extras.cmake.em b/tools/roslaunch/cmake/roslaunch-extras.cmake.em
+index bb1ae40..6df3a14 100644
+--- a/tools/roslaunch/cmake/roslaunch-extras.cmake.em
++++ b/tools/roslaunch/cmake/roslaunch-extras.cmake.em
+@@ -1,11 +1,11 @@
+ # generated from ros_comm/tools/roslaunch/cmake/roslaunch-extras.cmake.em
+ 
+ @[if DEVELSPACE]@
+-# set path to roslaunch-check.py in develspace
++# set path to roslaunch-check script in develspace
+ set(roslaunch_check_script @(CMAKE_CURRENT_SOURCE_DIR)/scripts/roslaunch-check)
+ @[else]@
+-# set path to roslaunch-check.py installspace
+-set(roslaunch_check_script @(CMAKE_INSTALL_PREFIX)/@(CATKIN_PACKAGE_SHARE_DESTINATION)/scripts/roslaunch-check)
++# set path to roslaunch-check script installspace
++set(roslaunch_check_script ${roslaunch_DIR}/../scripts/roslaunch-check)
+ @[end if]@
+ 
+ #
+diff --git a/tools/rostest/cmake/rostest-extras.cmake.em b/tools/rostest/cmake/rostest-extras.cmake.em
+index 1fca6bc..93ca8ff 100644
+--- a/tools/rostest/cmake/rostest-extras.cmake.em
++++ b/tools/rostest/cmake/rostest-extras.cmake.em
+@@ -8,15 +8,11 @@ function(add_rostest file)
+   _warn_if_skip_testing("add_rostest")
+ 
+ @[if DEVELSPACE]@
+-  # find program in develspace
+-  find_program_required(ROSTEST_EXE rostest 
+-    PATHS @(PROJECT_SOURCE_DIR)/scripts
+-    NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
++  # bin in develspace
++  set(ROSTEST_EXE "@(PROJECT_SOURCE_DIR)/scripts/rostest")
+ @[else]@
+-  # find program in installspace
+-  find_program_required(ROSTEST_EXE rostest 
+-    PATHS @(CMAKE_INSTALL_PREFIX)/bin
+-    NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
++  # bin in installspace
++  set(ROSTEST_EXE "${rostest_DIR}/../../../@(CATKIN_GLOBAL_BIN_DESTINATION)/rostest")
+ @[end if]@
+ 
+   cmake_parse_arguments(_rostest "" "WORKING_DIRECTORY" "ARGS" ${ARGN})
+-- 
+1.8.1.6
+
diff --git a/recipes-ros/ros-comm/message-filters_1.9.47.bb b/recipes-ros/ros-comm/message-filters_1.9.47.bb
index 6260489c92c63671982ad0525a7e96d7e3c695b6..339948fdc37282014ebc047fe38da5376379bc6f 100644
--- a/recipes-ros/ros-comm/message-filters_1.9.47.bb
+++ b/recipes-ros/ros-comm/message-filters_1.9.47.bb
@@ -7,4 +7,4 @@ DEPENDS = "boost rosconsole roscpp rostest-native rosunit-native xmlrpcpp"
 
 require ros-comm.inc
 
-S = "${WORKDIR}/ros_comm-${PV}/utilities/${ROS_BPN}"
+ROS_PKG_SUBDIR = "utilities"
diff --git a/recipes-ros/ros-comm/ros-comm.inc b/recipes-ros/ros-comm/ros-comm.inc
index 3ddfa24f35becafd9989e3765921e007019996f0..850bafd6a9783bcedb11ef2ca3c01db0308ad7d6 100644
--- a/recipes-ros/ros-comm/ros-comm.inc
+++ b/recipes-ros/ros-comm/ros-comm.inc
@@ -1,5 +1,13 @@
-SRC_URI = "https://github.com/ros/ros_comm/archive/${PV}.tar.gz;downloadfilename=ros_comm-${PV}.tar.gz"
+SRC_URI = "https://github.com/ros/${ROS_SPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_SP}.tar.gz"
 SRC_URI[md5sum] = "2d4b8083abc6598857e01b698f4b0d20"
 SRC_URI[sha256sum] = "44c5a076a604134e44d044e08b2c15b185aefac277b8632b5ca2d011ec8d3da6"
 
+SRC_URI += "file://0001-fix-roslaunch-check-script-in-install-space.patch;patchdir=../.."
+SRC_URI += "file://0002-resolve-roslaunch-rostest-paths-in-installspace-at-r.patch;patchdir=../.."
+
+ROS_PKG_SUBDIR ?= ""
+S = "${WORKDIR}/${ROS_SP}/${ROS_PKG_SUBDIR}/${ROS_BPN}"
+
 inherit catkin
+
+ROS_SPN = "ros_comm"
diff --git a/recipes-ros/ros-comm/rosbag_1.9.47.bb b/recipes-ros/ros-comm/rosbag_1.9.47.bb
index c3217c199427a4d86a5066d1a4325fb219981738..1201a9999ea174cbabfb46fc650e9f8b6f7c6f43 100644
--- a/recipes-ros/ros-comm/rosbag_1.9.47.bb
+++ b/recipes-ros/ros-comm/rosbag_1.9.47.bb
@@ -8,9 +8,10 @@ LIC_FILES_CHKSUM = "file://package.xml;beginline=10;endline=10;md5=d566ef916e9de
 DEPENDS = "boost bzip2 cpp-common python-imaging \
   rosconsole roscpp roscpp-serialization topic-tools \
   xmlrpcpp"
-RDEPENDS_${PN} = "python-compression python-threading python-pyyaml python-io \
-  genmsg genpy roslib rospy"
 
 require ros-comm.inc
 
-S = "${WORKDIR}/ros_comm-${PV}/tools/${BPN}"
+ROS_PKG_SUBDIR = "tools"
+
+RDEPENDS_${PN} = "python-compression python-threading python-pyyaml python-io \
+  genmsg genpy roslib rospy"
diff --git a/recipes-ros/ros-comm/rosconsole_1.9.47.bb b/recipes-ros/ros-comm/rosconsole_1.9.47.bb
index bc251ef983ef11bc5ced113face6cecbb32f34d4..51cc89e846b605272dc1fcf0df5a3226d80bfc2d 100644
--- a/recipes-ros/ros-comm/rosconsole_1.9.47.bb
+++ b/recipes-ros/ros-comm/rosconsole_1.9.47.bb
@@ -7,4 +7,4 @@ DEPENDS = "apr boost cpp-common log4cxx rostime rosunit-native"
 
 require ros-comm.inc
 
-S = "${WORKDIR}/ros_comm-${PV}/tools/${BPN}"
+ROS_PKG_SUBDIR = "tools"
diff --git a/recipes-ros/ros-comm/roscpp_1.9.47.bb b/recipes-ros/ros-comm/roscpp_1.9.47.bb
index 9033388c6f30f4b35c094c14ee990923349f5773..15ff417a6cb27c8f0148c6a6f5ebff28d7cda9e9 100644
--- a/recipes-ros/ros-comm/roscpp_1.9.47.bb
+++ b/recipes-ros/ros-comm/roscpp_1.9.47.bb
@@ -13,8 +13,8 @@ DEPENDS = "\
 
 require ros-comm.inc
 
-SRC_URI += "file://0001-roscpp-do-not-try-to-find-pthread-by-own-methods.patch;striplevel=3"
+SRC_URI += "file://0001-roscpp-do-not-try-to-find-pthread-by-own-methods.patch;patchdir=../.."
 
-S = "${WORKDIR}/ros_comm-${PV}/clients/${BPN}"
+ROS_PKG_SUBDIR = "clients"
 
 CXXFLAGS_append = " -I${OECMAKE_BUILDPATH}/devel/include"
diff --git a/recipes-ros/ros-comm/rosgraph-msgs_1.9.47.bb b/recipes-ros/ros-comm/rosgraph-msgs_1.9.47.bb
index 918212f642dfa3426c7e3c75cbaa71a07a8b3936..6a8af0695042178ea19dc091e0c5328f2637c09e 100644
--- a/recipes-ros/ros-comm/rosgraph-msgs_1.9.47.bb
+++ b/recipes-ros/ros-comm/rosgraph-msgs_1.9.47.bb
@@ -7,4 +7,4 @@ DEPENDS = "message-generation-native message-runtime-native std-msgs roscpp-seri
 
 require ros-comm.inc
 
-S = "${WORKDIR}/ros_comm-${PV}/messages/${ROS_BPN}"
+ROS_PKG_SUBDIR = "messages"
diff --git a/recipes-ros/ros-comm/rosgraph_1.9.47.bb b/recipes-ros/ros-comm/rosgraph_1.9.47.bb
index 3c8c3227bbbaf360e1ca6c7bf91c131af171844f..6f742d37867a1fdac4542ca8771eab2d7a671ede 100644
--- a/recipes-ros/ros-comm/rosgraph_1.9.47.bb
+++ b/recipes-ros/ros-comm/rosgraph_1.9.47.bb
@@ -8,4 +8,4 @@ RDEPENDS_${PN} = "python-xmlrpc python-threading python-rospkg rospy python-neti
 
 require ros-comm.inc
 
-S = "${WORKDIR}/ros_comm-${PV}/tools/${BPN}"
+ROS_PKG_SUBDIR = "tools"
diff --git a/recipes-ros/ros-comm/roslaunch_1.9.47.bb b/recipes-ros/ros-comm/roslaunch_1.9.47.bb
index 762b0f5033b561e31805ea60bb0d993ac6cca2ab..927a0354d31837263c64fcb2c7b4cd15f590e491 100644
--- a/recipes-ros/ros-comm/roslaunch_1.9.47.bb
+++ b/recipes-ros/ros-comm/roslaunch_1.9.47.bb
@@ -3,6 +3,11 @@ via SSH, as well as setting parameters on the Parameter Server."
 SECTION = "devel"
 LICENSE = "BSD"
 LIC_FILES_CHKSUM = "file://package.xml;beginline=16;endline=16;md5=d566ef916e9dedc494f5f793a6690ba5"
+
+require ros-comm.inc
+
+ROS_PKG_SUBDIR = "tools"
+
 RDEPENDS_${PN} = "\
   coreutils \
   python-textutils \
@@ -20,7 +25,3 @@ RDEPENDS_${PN} = "\
   rosout \
   rosparam \
 "
-
-require ros-comm.inc
-
-S = "${WORKDIR}/ros_comm-${PV}/tools/${BPN}"
diff --git a/recipes-ros/ros-comm/rosmaster_1.9.47.bb b/recipes-ros/ros-comm/rosmaster_1.9.47.bb
index c31e3ab857d550bc49cb5fed1746066fb37cea2b..062372e59b38f78d0a87dff7652c39a0a1750cda 100644
--- a/recipes-ros/ros-comm/rosmaster_1.9.47.bb
+++ b/recipes-ros/ros-comm/rosmaster_1.9.47.bb
@@ -5,4 +5,4 @@ LIC_FILES_CHKSUM = "file://package.xml;beginline=8;endline=8;md5=d566ef916e9dedc
 
 require ros-comm.inc
 
-S = "${WORKDIR}/ros_comm-${PV}/tools/${BPN}"
+ROS_PKG_SUBDIR = "tools"
diff --git a/recipes-ros/ros-comm/rosmsg_1.9.47.bb b/recipes-ros/ros-comm/rosmsg_1.9.47.bb
index 60bf7acdf2de33e752d2a483dc62b32744e41384..eaf6198b7f44b8cb2913a32b327b6fcd94e959b4 100644
--- a/recipes-ros/ros-comm/rosmsg_1.9.47.bb
+++ b/recipes-ros/ros-comm/rosmsg_1.9.47.bb
@@ -7,4 +7,4 @@ LIC_FILES_CHKSUM = "file://package.xml;beginline=14;endline=14;md5=d566ef916e9de
 
 require ros-comm.inc
 
-S = "${WORKDIR}/ros_comm-${PV}/tools/${BPN}"
+ROS_PKG_SUBDIR = "tools"
diff --git a/recipes-ros/ros-comm/rosnode_1.9.47.bb b/recipes-ros/ros-comm/rosnode_1.9.47.bb
index 762900b6b12e257ba705f30267217e9afc66e9e6..817425d5b048377bfcf61025281e4b1fec8f59d4 100644
--- a/recipes-ros/ros-comm/rosnode_1.9.47.bb
+++ b/recipes-ros/ros-comm/rosnode_1.9.47.bb
@@ -9,4 +9,4 @@ RDEPENDS_${PN} = "python-io python-xmlrpc rosgraph rostopic"
 
 require ros-comm.inc
 
-S = "${WORKDIR}/ros_comm-${PV}/tools/${BPN}"
+ROS_PKG_SUBDIR = "tools"
diff --git a/recipes-ros/ros-comm/rosout_1.9.47.bb b/recipes-ros/ros-comm/rosout_1.9.47.bb
index f4edc171eb867a78e350271f26bf442c46c3f2b3..5d6720b6f892dabb8a550590cafbbf0b2730bd06 100644
--- a/recipes-ros/ros-comm/rosout_1.9.47.bb
+++ b/recipes-ros/ros-comm/rosout_1.9.47.bb
@@ -7,4 +7,4 @@ DEPENDS = "log4cxx roscpp rosgraph-msgs"
 
 require ros-comm.inc
 
-S = "${WORKDIR}/ros_comm-${PV}/tools/${BPN}"
+ROS_PKG_SUBDIR = "tools"
diff --git a/recipes-ros/ros-comm/rosparam_1.9.47.bb b/recipes-ros/ros-comm/rosparam_1.9.47.bb
index be50d6e9dd361876c95e085c4f72a8657b1c6fbb..ff5e1b25d575cc4d41f67016ecf4e47ddb463684 100644
--- a/recipes-ros/ros-comm/rosparam_1.9.47.bb
+++ b/recipes-ros/ros-comm/rosparam_1.9.47.bb
@@ -6,4 +6,4 @@ LIC_FILES_CHKSUM = "file://package.xml;beginline=15;endline=15;md5=d566ef916e9de
 
 require ros-comm.inc
 
-S = "${WORKDIR}/ros_comm-${PV}/tools/${BPN}"
+ROS_PKG_SUBDIR = "tools"
diff --git a/recipes-ros/ros-comm/rospy_1.9.47.bb b/recipes-ros/ros-comm/rospy_1.9.47.bb
index 154705d3f62718ba97476acd143627735c8b0cee..802be6f14d10efb1137c2a264ae47b8d33f4aae6 100644
--- a/recipes-ros/ros-comm/rospy_1.9.47.bb
+++ b/recipes-ros/ros-comm/rospy_1.9.47.bb
@@ -8,4 +8,4 @@ RDEPENDS_${PN} = "std-msgs genpy python-logging python-pyyaml rosgraph roslib ro
 
 require ros-comm.inc
 
-S = "${WORKDIR}/ros_comm-${PV}/clients/${BPN}"
+ROS_PKG_SUBDIR = "clients"
diff --git a/recipes-ros/ros-comm/rosservice_1.9.47.bb b/recipes-ros/ros-comm/rosservice_1.9.47.bb
index d7fbe98a812d19076a6dcc790aa041ad5cc53a44..344328a54f252437854253229549194b2cded045 100644
--- a/recipes-ros/ros-comm/rosservice_1.9.47.bb
+++ b/recipes-ros/ros-comm/rosservice_1.9.47.bb
@@ -5,4 +5,4 @@ LIC_FILES_CHKSUM = "file://package.xml;beginline=13;endline=13;md5=d566ef916e9de
 
 require ros-comm.inc
 
-S = "${WORKDIR}/ros_comm-${PV}/tools/${BPN}"
+ROS_PKG_SUBDIR = "tools"
diff --git a/recipes-ros/ros-comm/rostest_1.9.47.bb b/recipes-ros/ros-comm/rostest_1.9.47.bb
index 68518aa8bba6cb124d8af697e178531d6bbb7eba..07927d550db15c11a53a3244af864118e6047a29 100644
--- a/recipes-ros/ros-comm/rostest_1.9.47.bb
+++ b/recipes-ros/ros-comm/rostest_1.9.47.bb
@@ -8,6 +8,6 @@ DEPENDS_class-native = "boost-native rosunit-native"
 
 require ros-comm.inc
 
-S = "${WORKDIR}/ros_comm-${PV}/tools/${BPN}"
+ROS_PKG_SUBDIR = "tools"
 
 OECMAKE_EXTRA_ROOT_PATH_class-native = "${OECMAKE_BUILDPATH}/devel"
diff --git a/recipes-ros/ros-comm/rostopic_1.9.47.bb b/recipes-ros/ros-comm/rostopic_1.9.47.bb
index 914b627ba833cb971c8b748480ec424e2586a0f3..2108f54f38e1acbfbfb8306056975f1175f1793d 100644
--- a/recipes-ros/ros-comm/rostopic_1.9.47.bb
+++ b/recipes-ros/ros-comm/rostopic_1.9.47.bb
@@ -5,8 +5,9 @@ LICENSE = "BSD"
 LIC_FILES_CHKSUM = "file://package.xml;beginline=17;endline=17;md5=d566ef916e9dedc494f5f793a6690ba5"
 
 DEPENDS = "rostest-native"
-RDEPENDS_${PN} = "rosbag"
 
 require ros-comm.inc
 
-S = "${WORKDIR}/ros_comm-${PV}/tools/${BPN}"
+ROS_PKG_SUBDIR = "tools"
+
+RDEPENDS_${PN} = "rosbag"
diff --git a/recipes-ros/ros-comm/roswtf_1.9.47.bb b/recipes-ros/ros-comm/roswtf_1.9.47.bb
index a321073b4c31aefa84e3593eb4a2cb38a7575ada..afeb36dc6b71ef35cc9f86a3a9a0a4f3744138e1 100644
--- a/recipes-ros/ros-comm/roswtf_1.9.47.bb
+++ b/recipes-ros/ros-comm/roswtf_1.9.47.bb
@@ -7,4 +7,4 @@ DEPENDS = "rostest-native"
 
 require ros-comm.inc
 
-S = "${WORKDIR}/ros_comm-${PV}/utilities/${BPN}"
+ROS_PKG_SUBDIR = "utilities"
diff --git a/recipes-ros/ros-comm/std-srvs_1.9.47.bb b/recipes-ros/ros-comm/std-srvs_1.9.47.bb
index b0c7c6cf1e1ceb56e81df7f2fc6d7eb0d1a17c3b..adc4f723a3666781b825875125acbb92892faa56 100644
--- a/recipes-ros/ros-comm/std-srvs_1.9.47.bb
+++ b/recipes-ros/ros-comm/std-srvs_1.9.47.bb
@@ -7,4 +7,4 @@ DEPENDS = "message-generation-native message-runtime-native"
 
 require ros-comm.inc
 
-S = "${WORKDIR}/ros_comm-${PV}/messages/${ROS_BPN}"
+ROS_PKG_SUBDIR = "messages"
diff --git a/recipes-ros/ros-comm/topic-tools_1.9.47.bb b/recipes-ros/ros-comm/topic-tools_1.9.47.bb
index bd57d2c4af823a1bb6b4622220d717e1ae58ed6d..05eab9b72ee3a1ea28548d7cd96d388401e805f8 100644
--- a/recipes-ros/ros-comm/topic-tools_1.9.47.bb
+++ b/recipes-ros/ros-comm/topic-tools_1.9.47.bb
@@ -8,4 +8,4 @@ DEPENDS = "rostest-native rostest roscpp"
 
 require ros-comm.inc
 
-S = "${WORKDIR}/ros_comm-${PV}/tools/${ROS_BPN}"
+ROS_PKG_SUBDIR = "tools"
diff --git a/recipes-ros/ros-comm/xmlrpcpp_1.9.47.bb b/recipes-ros/ros-comm/xmlrpcpp_1.9.47.bb
index 423e556293998fc4749507654f6e23f22c98ec16..6ff0a9da9ad7f1f3be3443d6504af56b1151aa04 100644
--- a/recipes-ros/ros-comm/xmlrpcpp_1.9.47.bb
+++ b/recipes-ros/ros-comm/xmlrpcpp_1.9.47.bb
@@ -11,4 +11,4 @@ DEPENDS = "cpp-common"
 
 require ros-comm.inc
 
-S = "${WORKDIR}/ros_comm-${PV}/utilities/${BPN}"
+ROS_PKG_SUBDIR = "utilities"
diff --git a/recipes-ros/ros-tutorials/ros-tutorials.inc b/recipes-ros/ros-tutorials/ros-tutorials.inc
index 403171b7b117b8d1248ca564ec0b535564372dc1..27942b4c0934fa257f308de24cf2c9e08a25d5e8 100644
--- a/recipes-ros/ros-tutorials/ros-tutorials.inc
+++ b/recipes-ros/ros-tutorials/ros-tutorials.inc
@@ -1,7 +1,9 @@
-SRC_URI = "https://github.com/ros/ros_tutorials/archive/${PV}.tar.gz;downloadfilename=ros_tutorials-${PV}.tar.gz;name=archive"
-SRC_URI[archive.md5sum] = "e1763e2ccc91976ac98b07d3f423478d"
-SRC_URI[archive.sha256sum] = "827622a42eb14119c3303665c91635fd4c1eb401e1585a9f1fde819f7651bdbf"
+SRC_URI = "https://github.com/ros/${ROS_SPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_SP}.tar.gz"
+SRC_URI[md5sum] = "e1763e2ccc91976ac98b07d3f423478d"
+SRC_URI[sha256sum] = "827622a42eb14119c3303665c91635fd4c1eb401e1585a9f1fde819f7651bdbf"
 
-S = "${WORKDIR}/ros_tutorials-${PV}/${ROS_BPN}"
+S = "${WORKDIR}/${ROS_SP}/${ROS_BPN}"
 
 inherit catkin
+
+ROS_SPN = "ros_tutorials"
diff --git a/recipes-ros/ros-tutorials/rospy-tutorials/0001-check-for-CATKIN_ENABLE_TESTING.patch b/recipes-ros/ros-tutorials/rospy-tutorials/0001-check-for-CATKIN_ENABLE_TESTING.patch
new file mode 100644
index 0000000000000000000000000000000000000000..4b6552fc0a95124c04ca7ef23d6ed94b92c72cb6
--- /dev/null
+++ b/recipes-ros/ros-tutorials/rospy-tutorials/0001-check-for-CATKIN_ENABLE_TESTING.patch
@@ -0,0 +1,65 @@
+From 1e559b3f811a6cf3daac59088d6d86ca1d31b261 Mon Sep 17 00:00:00 2001
+From: Dirk Thomas <dthomas@osrfoundation.org>
+Date: Wed, 3 Jul 2013 11:22:45 -0700
+Subject: [PATCH] check for CATKIN_ENABLE_TESTING
+
+---
+ rospy_tutorials/CMakeLists.txt | 24 +++++++++++++-----------
+ rospy_tutorials/package.xml    |  2 +-
+ 2 files changed, 14 insertions(+), 12 deletions(-)
+
+diff --git a/rospy_tutorials/CMakeLists.txt b/rospy_tutorials/CMakeLists.txt
+index bcd4ddd..b588dfc 100644
+--- a/rospy_tutorials/CMakeLists.txt
++++ b/rospy_tutorials/CMakeLists.txt
+@@ -10,17 +10,6 @@ generate_messages(DEPENDENCIES std_msgs)
+ 
+ catkin_package(CATKIN_DEPENDS message_runtime std_msgs)
+ 
+-foreach(T
+-    test/test-add-two-ints.launch
+-    test/test-peer-subscribe-notify.launch
+-    test/test-add-two-ints-with-roscpp-server.launch
+-    test/test-talker-listener.launch
+-    test/test-talker-listener-with-roscpp.launch
+-    test/test-on-shutdown.launch
+-    test/test-connection-header.launch)
+-  add_rostest(${T})
+-endforeach()
+-
+ # do not wildcard install files since the root folder of the package will contain a debian folder for releasing
+ foreach(T
+     001_talker_listener
+@@ -36,3 +25,16 @@ foreach(T
+     DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
+     USE_SOURCE_PERMISSIONS)
+ endforeach()
++
++if(CATKIN_ENABLE_TESTING)
++  foreach(T
++      test/test-add-two-ints.launch
++      test/test-peer-subscribe-notify.launch
++      test/test-add-two-ints-with-roscpp-server.launch
++      test/test-talker-listener.launch
++      test/test-talker-listener-with-roscpp.launch
++      test/test-on-shutdown.launch
++      test/test-connection-header.launch)
++     add_rostest(${T})
++  endforeach()
++endif()
+diff --git a/rospy_tutorials/package.xml b/rospy_tutorials/package.xml
+index 1be85c0..f7517e8 100644
+--- a/rospy_tutorials/package.xml
++++ b/rospy_tutorials/package.xml
+@@ -14,7 +14,7 @@
+   <url type="repository">https://github.com/ros/ros_tutorials</url>
+   <author>Ken Conley</author>
+ 
+-  <buildtool_depend>catkin</buildtool_depend>
++  <buildtool_depend version_gte="0.5.68">catkin</buildtool_depend>
+ 
+   <build_depend>message_generation</build_depend>
+   <build_depend>rostest</build_depend>
+-- 
+1.8.1.6
+
diff --git a/recipes-ros/ros-tutorials/rospy-tutorials_0.3.11.bb b/recipes-ros/ros-tutorials/rospy-tutorials_0.3.11.bb
index 6a5e832dc8d003609c9c185f53a4e8136afaabc6..2945f944735f4c4363b465f24b5af827a7b65655 100644
--- a/recipes-ros/ros-tutorials/rospy-tutorials_0.3.11.bb
+++ b/recipes-ros/ros-tutorials/rospy-tutorials_0.3.11.bb
@@ -7,6 +7,4 @@ DEPENDS = "message-generation rostest std-msgs cpp-common roscpp-serialization"
 
 require ros-tutorials.inc
 
-SRC_URI += "https://github.com/ros/ros_tutorials/commit/1e559b3f811a6cf3daac59088d6d86ca1d31b261.patch;striplevel=2;name=patch"
-SRC_URI[patch.md5sum] = "c9e4af54266205ad233acc064a456840"
-SRC_URI[patch.sha256sum] = "838ad3cbe2da1c625a44af80c4351f1187478e6ec52adc1c535942337252a719"
+SRC_URI += "file://0001-check-for-CATKIN_ENABLE_TESTING.patch;striplevel=2"
diff --git a/recipes-ros/ros/files/0001-resolve-rosunit-path-in-installspace-at-runtime-with.patch b/recipes-ros/ros/files/0001-resolve-rosunit-path-in-installspace-at-runtime-with.patch
new file mode 100644
index 0000000000000000000000000000000000000000..2e2ba0786447f8d949febea6418c400f90267b40
--- /dev/null
+++ b/recipes-ros/ros/files/0001-resolve-rosunit-path-in-installspace-at-runtime-with.patch
@@ -0,0 +1,139 @@
+From 7628b0d56df5fec691be9d8f913cf026fb125f6a Mon Sep 17 00:00:00 2001
+From: Dirk Thomas <dthomas@osrfoundation.org>
+Date: Fri, 2 Aug 2013 17:54:03 -0700
+Subject: [PATCH] resolve rosunit path in installspace at runtime without
+ find_program(), update env hooks to use runtime context (ros/catkin#490)
+
+---
+ core/rosbuild/env-hooks/10.rosbuild.sh.em   |  2 +-
+ core/rosbuild/package.xml                   |  2 +-
+ core/roslib/cmake/roslib-extras.cmake.em    |  2 +-
+ core/roslib/env-hooks/10.ros.sh.em          |  2 +-
+ core/roslib/package.xml                     |  2 +-
+ tools/rosbash/env-hooks/15.rosbash.bash.em  |  2 +-
+ tools/rosbash/package.xml                   |  2 +-
+ tools/rosunit/cmake/rosunit-extras.cmake.em | 22 ++++++----------------
+ 8 files changed, 13 insertions(+), 23 deletions(-)
+
+diff --git a/core/rosbuild/env-hooks/10.rosbuild.sh.em b/core/rosbuild/env-hooks/10.rosbuild.sh.em
+index af16b15..ebbfb0f 100644
+--- a/core/rosbuild/env-hooks/10.rosbuild.sh.em
++++ b/core/rosbuild/env-hooks/10.rosbuild.sh.em
+@@ -5,5 +5,5 @@
+ export ROS_ROOT="@(CMAKE_CURRENT_SOURCE_DIR)"
+ @[else]@
+ # env variables in installspace
+-export ROS_ROOT="@(CMAKE_INSTALL_PREFIX)/@(CATKIN_GLOBAL_SHARE_DESTINATION)/ros"
++export ROS_ROOT="$CATKIN_ENV_HOOK_WORKSPACE/@(CATKIN_GLOBAL_SHARE_DESTINATION)/ros"
+ @[end if]@
+diff --git a/core/rosbuild/package.xml b/core/rosbuild/package.xml
+index f96160a..d0c8836 100644
+--- a/core/rosbuild/package.xml
++++ b/core/rosbuild/package.xml
+@@ -12,7 +12,7 @@
+   <author>Troy Straszheim</author>
+   <author>Morgan Quigley</author>
+ 
+-  <buildtool_depend>catkin</buildtool_depend>
++  <buildtool_depend version_gte="0.5.72">catkin</buildtool_depend>
+ 
+   <build_depend>pkg-config</build_depend>
+ 
+diff --git a/core/roslib/cmake/roslib-extras.cmake.em b/core/roslib/cmake/roslib-extras.cmake.em
+index bf4742b..cf4ccb5 100644
+--- a/core/roslib/cmake/roslib-extras.cmake.em
++++ b/core/roslib/cmake/roslib-extras.cmake.em
+@@ -5,5 +5,5 @@
+ set(gendeps_exe @(CMAKE_CURRENT_SOURCE_DIR)/scripts/gendeps)
+ @[else]@
+ # set path to gendeps executable in installspace
+-set(gendeps_exe @(CMAKE_INSTALL_PREFIX)/lib/roslib/gendeps)
++set(gendeps_exe ${genlib_DIR}/../../../@(CATKIN_PACKAGE_BIN_DESTINATION)/gendeps)
+ @[end if]@
+diff --git a/core/roslib/env-hooks/10.ros.sh.em b/core/roslib/env-hooks/10.ros.sh.em
+index 39cde1b..bf4c0a2 100644
+--- a/core/roslib/env-hooks/10.ros.sh.em
++++ b/core/roslib/env-hooks/10.ros.sh.em
+@@ -37,7 +37,7 @@ export ROS_PACKAGE_PATH="`python -c \"$PYTHON_CODE_BUILD_ROS_PACKAGE_PATH\"`"
+ export ROS_ETC_DIR="@(CATKIN_DEVEL_PREFIX)/@(CATKIN_GLOBAL_ETC_DESTINATION)/ros"
+ @[else]@
+ # env variables in installspace
+-export ROS_ETC_DIR="@(CMAKE_INSTALL_PREFIX)/@(CATKIN_GLOBAL_ETC_DESTINATION)/ros"
++export ROS_ETC_DIR="$CATKIN_ENV_HOOK_WORKSPACE/@(CATKIN_GLOBAL_ETC_DESTINATION)/ros"
+ @[end if]@
+ 
+ # unset ROS workspace
+diff --git a/core/roslib/package.xml b/core/roslib/package.xml
+index 5e17842..9f2dc3e 100644
+--- a/core/roslib/package.xml
++++ b/core/roslib/package.xml
+@@ -13,7 +13,7 @@
+   <author email="mquigley@cs.stanford.edu">Morgan Quigley</author>
+   <author email="jfaust@willowgarage.com">Josh Faust</author>
+ 
+-  <buildtool_depend version_gte="0.5.68">catkin</buildtool_depend>
++  <buildtool_depend version_gte="0.5.72">catkin</buildtool_depend>
+ 
+   <build_depend>boost</build_depend>
+   <build_depend>rospack</build_depend>
+diff --git a/tools/rosbash/env-hooks/15.rosbash.bash.em b/tools/rosbash/env-hooks/15.rosbash.bash.em
+index 0430caf..07bd623 100644
+--- a/tools/rosbash/env-hooks/15.rosbash.bash.em
++++ b/tools/rosbash/env-hooks/15.rosbash.bash.em
+@@ -3,5 +3,5 @@
+ @[if DEVELSPACE]@
+ . "@(CMAKE_CURRENT_SOURCE_DIR)/rosbash"
+ @[else]@
+-. "@(CMAKE_INSTALL_PREFIX)/share/rosbash/rosbash"
++. "$CATKIN_ENV_HOOK_WORKSPACE/share/rosbash/rosbash"
+ @[end if]@
+diff --git a/tools/rosbash/package.xml b/tools/rosbash/package.xml
+index 50b969a..6642437 100644
+--- a/tools/rosbash/package.xml
++++ b/tools/rosbash/package.xml
+@@ -11,7 +11,7 @@
+   <author>Jeremy Leibs</author>
+   <author>Thibault Kruse</author>
+ 
+-  <buildtool_depend>catkin</buildtool_depend>
++  <buildtool_depend version_gte="0.5.72">catkin</buildtool_depend>
+ 
+   <run_depend>catkin</run_depend>
+ </package>
+diff --git a/tools/rosunit/cmake/rosunit-extras.cmake.em b/tools/rosunit/cmake/rosunit-extras.cmake.em
+index 47bd120..aad1a22 100644
+--- a/tools/rosunit/cmake/rosunit-extras.cmake.em
++++ b/tools/rosunit/cmake/rosunit-extras.cmake.em
+@@ -2,23 +2,13 @@ include(CMakeParseArguments)
+ 
+ macro(rosunit_initialize_tests)
+ @[if DEVELSPACE]@
+-  # find binary and scripts in develspace
+-  find_program(ROSUNIT_EXE rosunit
+-    PATHS "@(PROJECT_SOURCE_DIR)/scripts"
+-    NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
+-  if(NOT ROSUNIT_EXE)
+-    message(FATAL_ERROR "'rosunit' not found")
+-  endif()
+-  set(ROSUNIT_SCRIPTS_DIR @(PROJECT_SOURCE_DIR)/scripts)
++  # binary and script in develspace
++  set(ROSUNIT_SCRIPTS_DIR "@(CMAKE_CURRENT_SOURCE_DIR)/scripts")
++  set(ROSUNIT_EXE "${ROSUNIT_SCRIPTS_DIR}/rosunit")
+ @[else]@
+-  # find binary and scripts in installspace
+-  find_program(ROSUNIT_EXE rosunit
+-    PATHS "@(CMAKE_INSTALL_PREFIX)/bin"
+-    NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
+-  if(NOT ROSUNIT_EXE)
+-    message(FATAL_ERROR "'rosunit' not found")
+-  endif()
+-  set(ROSUNIT_SCRIPTS_DIR @(CMAKE_INSTALL_PREFIX)/@(CATKIN_PACKAGE_SHARE_DESTINATION)/scripts)
++  # binary and script in installspace
++  set(ROSUNIT_SCRIPTS_DIR "${rosunit_DIR}/../scripts")
++  set(ROSUNIT_EXE "${rosunit_DIR}/../../../@(CATKIN_GLOBAL_BIN_DESTINATION)/rosunit")
+ @[end if]@
+ endmacro()
+ 
+-- 
+1.8.1.6
+
diff --git a/recipes-ros/ros/mk_1.10.4.bb b/recipes-ros/ros/mk_1.10.4.bb
index 608f11189e42c74622253e5dc73164502a28eaaf..3de04cc4627e4ad2c9bafc12eb6d1f5ab14bf800 100644
--- a/recipes-ros/ros/mk_1.10.4.bb
+++ b/recipes-ros/ros/mk_1.10.4.bb
@@ -5,4 +5,4 @@ LIC_FILES_CHKSUM = "file://package.xml;beginline=10;endline=10;md5=d566ef916e9de
 
 require ros.inc
 
-S = "${WORKDIR}/ros-${PV}/core/${BPN}"
+ROS_PKG_SUBDIR = "core"
diff --git a/recipes-ros/ros/ros.inc b/recipes-ros/ros/ros.inc
index 5c421c535d588e4a97dcfd59a3df2dc4c6ce7e3c..e6922bf1d870bbae838bd33b838c17e5e21681ec 100644
--- a/recipes-ros/ros/ros.inc
+++ b/recipes-ros/ros/ros.inc
@@ -1,5 +1,12 @@
-SRC_URI = "https://github.com/ros/ros/archive/${PV}.tar.gz;downloadfilename=ros_${PV}.tar.gz"
+SRC_URI = "https://github.com/ros/${ROS_SPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_SP}.tar.gz"
 SRC_URI[md5sum] = "26ad8652a18bc11b530b0054bbb204b3"
 SRC_URI[sha256sum] = "ae3b8db6bf26867c38b1215e1e014616f00a396847fea31df64da63d2eac6ef2"
 
+SRC_URI += "file://0001-resolve-rosunit-path-in-installspace-at-runtime-with.patch;patchdir=../.."
+
+ROS_PKG_SUBDIR ?= ""
+S = "${WORKDIR}/${ROS_SP}/${ROS_PKG_SUBDIR}/${ROS_BPN}"
+
 inherit catkin
+
+ROS_SPN = "ros"
diff --git a/recipes-ros/ros/rosbash_1.10.4.bb b/recipes-ros/ros/rosbash_1.10.4.bb
index e4ab00a84fe2ab92bd507a96df1fa9eecf51b514..a04deb19c04d8ad02aa4832a3ee0bcc55312e891 100644
--- a/recipes-ros/ros/rosbash_1.10.4.bb
+++ b/recipes-ros/ros/rosbash_1.10.4.bb
@@ -5,6 +5,6 @@ LIC_FILES_CHKSUM = "file://package.xml;beginline=8;endline=8;md5=d566ef916e9dedc
 
 require ros.inc
 
-RDEPENDS_${PN} = "bash findutils"
+ROS_PKG_SUBDIR = "tools"
 
-S = "${WORKDIR}/ros-${PV}/tools/${BPN}"
+RDEPENDS_${PN} = "bash findutils"
diff --git a/recipes-ros/ros/rosboost-cfg_1.10.4.bb b/recipes-ros/ros/rosboost-cfg_1.10.4.bb
index a229ef51a749973a26f4e9a2d7ded4c7a1af80ef..03968121094d28da9a42517cb674a79e944aa927 100644
--- a/recipes-ros/ros/rosboost-cfg_1.10.4.bb
+++ b/recipes-ros/ros/rosboost-cfg_1.10.4.bb
@@ -5,4 +5,4 @@ LIC_FILES_CHKSUM = "file://package.xml;beginline=8;endline=8;md5=d566ef916e9dedc
 
 require ros.inc
 
-S = "${WORKDIR}/ros-${PV}/tools/${ROS_BPN}"
+ROS_PKG_SUBDIR = "tools"
diff --git a/recipes-ros/ros/rosbuild_1.10.4.bb b/recipes-ros/ros/rosbuild_1.10.4.bb
index b65e743040f0155e82627af55301f52adf4a3843..6a89e21bf53b3560f6cddf88ae06faccffb16d22 100644
--- a/recipes-ros/ros/rosbuild_1.10.4.bb
+++ b/recipes-ros/ros/rosbuild_1.10.4.bb
@@ -5,4 +5,4 @@ LIC_FILES_CHKSUM = "file://package.xml;beginline=8;endline=8;md5=d566ef916e9dedc
 
 require ros.inc
 
-S = "${WORKDIR}/ros-${PV}/core/${BPN}"
+ROS_PKG_SUBDIR = "core"
diff --git a/recipes-ros/ros/rosclean_1.10.4.bb b/recipes-ros/ros/rosclean_1.10.4.bb
index dcb02ccb2e16acc11b810de447bced4e22a1b90d..e83895561e457864749df041822de8487582af92 100644
--- a/recipes-ros/ros/rosclean_1.10.4.bb
+++ b/recipes-ros/ros/rosclean_1.10.4.bb
@@ -5,4 +5,4 @@ LIC_FILES_CHKSUM = "file://package.xml;beginline=8;endline=8;md5=d566ef916e9dedc
 
 require ros.inc
 
-S = "${WORKDIR}/ros-${PV}/tools/${BPN}"
+ROS_PKG_SUBDIR = "tools"
diff --git a/recipes-ros/ros/roscreate_1.10.4.bb b/recipes-ros/ros/roscreate_1.10.4.bb
index 312d466e6c99fcac6c9f23a11337a2de8563dd1d..213319ac9f658b52781ffc309a6a6a0b21ae2cc7 100644
--- a/recipes-ros/ros/roscreate_1.10.4.bb
+++ b/recipes-ros/ros/roscreate_1.10.4.bb
@@ -5,4 +5,4 @@ LIC_FILES_CHKSUM = "file://package.xml;beginline=10;endline=10;md5=d566ef916e9de
 
 require ros.inc
 
-S = "${WORKDIR}/ros-${PV}/tools/${BPN}"
+ROS_PKG_SUBDIR = "tools"
diff --git a/recipes-ros/ros/roslang_1.10.4.bb b/recipes-ros/ros/roslang_1.10.4.bb
index ae486f8a562492f07f128e65bc21a0567468bcfc..8d2ad547a190495c743570976c3f7451e3d302cb 100644
--- a/recipes-ros/ros/roslang_1.10.4.bb
+++ b/recipes-ros/ros/roslang_1.10.4.bb
@@ -5,4 +5,4 @@ LIC_FILES_CHKSUM = "file://package.xml;beginline=9;endline=9;md5=d566ef916e9dedc
 
 require ros.inc
 
-S = "${WORKDIR}/ros-${PV}/core/${BPN}"
+ROS_PKG_SUBDIR = "core"
diff --git a/recipes-ros/ros/roslib_1.10.4.bb b/recipes-ros/ros/roslib_1.10.4.bb
index d07e5097799dc812ff643973c55633cf0b7cba0c..38ce4aac3997e03780ef09e8deb12f926a48fc9c 100644
--- a/recipes-ros/ros/roslib_1.10.4.bb
+++ b/recipes-ros/ros/roslib_1.10.4.bb
@@ -4,8 +4,9 @@ LICENSE = "BSD"
 LIC_FILES_CHKSUM = "file://package.xml;beginline=9;endline=9;md5=d566ef916e9dedc494f5f793a6690ba5"
 
 DEPENDS = "boost rospack-native rospack"
-RDEPENDS_${PN} = "python-rospkg catkin"
 
 require ros.inc
 
-S = "${WORKDIR}/ros-${PV}/core/${BPN}"
+ROS_PKG_SUBDIR = "core"
+
+RDEPENDS_${PN} = "python-rospkg catkin"
diff --git a/recipes-ros/ros/rosmake_1.10.4.bb b/recipes-ros/ros/rosmake_1.10.4.bb
index 02415198a9ffc99c9134e1d07411485b1920bd12..3e771e9a4a30f0af02136796088811ebdb94e201 100644
--- a/recipes-ros/ros/rosmake_1.10.4.bb
+++ b/recipes-ros/ros/rosmake_1.10.4.bb
@@ -5,4 +5,4 @@ LIC_FILES_CHKSUM = "file://package.xml;beginline=9;endline=9;md5=d566ef916e9dedc
 
 require ros.inc
 
-S = "${WORKDIR}/ros-${PV}/tools/${BPN}"
+ROS_PKG_SUBDIR = "tools"
diff --git a/recipes-ros/ros/rosunit/0001-rosunit-extras.cmake.em-remove-NO_CMAKE_FIND_ROOT_PA.patch b/recipes-ros/ros/rosunit/0001-rosunit-extras.cmake.em-remove-NO_CMAKE_FIND_ROOT_PA.patch
deleted file mode 100644
index 1f5cd27fe24c3d6f7c744cbc2d0f651e813bb255..0000000000000000000000000000000000000000
--- a/recipes-ros/ros/rosunit/0001-rosunit-extras.cmake.em-remove-NO_CMAKE_FIND_ROOT_PA.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 2dc8c3356e38a9b6343c362f70c0cf900ed51296 Mon Sep 17 00:00:00 2001
-From: Stefan Herbrechtsmeier <stefan@herbrechtsmeier.net>
-Date: Thu, 21 Feb 2013 10:33:19 +0100
-Subject: [PATCH] rosunit-extras.cmake.em: remove NO_CMAKE_FIND_ROOT_PATH from find_program
-
----
- tools/rosunit/cmake/rosunit-extras.cmake.em |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/tools/rosunit/cmake/rosunit-extras.cmake.em b/tools/rosunit/cmake/rosunit-extras.cmake.em
-index 4b9bb0d..30db4d1 100644
---- a/tools/rosunit/cmake/rosunit-extras.cmake.em
-+++ b/tools/rosunit/cmake/rosunit-extras.cmake.em
-@@ -14,7 +14,7 @@ macro(rosunit_initialize_tests)
-   # find binary and scripts in installspace
-   find_program(ROSUNIT_EXE rosunit
-     PATHS "@(CMAKE_INSTALL_PREFIX)/bin"
--    NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
-+    NO_DEFAULT_PATH)
-   if(NOT ROSUNIT_EXE)
-     message(FATAL_ERROR "'rosunit' not found")
-   endif()
--- 
-1.7.0.4
-
diff --git a/recipes-ros/ros/rosunit_1.10.4.bb b/recipes-ros/ros/rosunit_1.10.4.bb
index 4679440999178b4b67a7664c10e35687433167c8..3308912e2cdac54ec4c1c0f59ebf94e18fbf3b4f 100644
--- a/recipes-ros/ros/rosunit_1.10.4.bb
+++ b/recipes-ros/ros/rosunit_1.10.4.bb
@@ -5,6 +5,4 @@ LIC_FILES_CHKSUM = "file://package.xml;beginline=8;endline=8;md5=d566ef916e9dedc
 
 require ros.inc
 
-SRC_URI += "file://0001-rosunit-extras.cmake.em-remove-NO_CMAKE_FIND_ROOT_PA.patch;striplevel=3"
-
-S = "${WORKDIR}/ros-${PV}/tools/${BPN}"
+ROS_PKG_SUBDIR = "tools"
diff --git a/recipes-ros/roscpp-core/roscpp-core.inc b/recipes-ros/roscpp-core/roscpp-core.inc
index 0aa7f984885b318ba24431cc1f59913d281eb60a..56307a160c2c23507a5e8e27c3a2c83f4f9fc1f9 100644
--- a/recipes-ros/roscpp-core/roscpp-core.inc
+++ b/recipes-ros/roscpp-core/roscpp-core.inc
@@ -1,7 +1,9 @@
-SRC_URI = "https://github.com/ros/roscpp_core/archive/${PV}.tar.gz;downloadfilename=rosscpp_core-${PV}.tar.gz"
+SRC_URI = "https://github.com/ros/${ROS_SPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_SP}.tar.gz"
 SRC_URI[md5sum] = "d02c9d1270d1f68487944fb0e76adcb7"
 SRC_URI[sha256sum] = "805b08c5b7044dd93bfaf4a0dd5807b391d1d86db9f6d143f9946b5528500eda"
 
-S = "${WORKDIR}/roscpp_core-${PV}/${ROS_BPN}"
+S = "${WORKDIR}/${ROS_SP}/${ROS_BPN}"
 
 inherit catkin
+
+ROS_SPN = "roscpp_core"
diff --git a/recipes-ros/rospack/rospack_2.1.21.bb b/recipes-ros/rospack/rospack_2.1.21.bb
index 3610377108928333232ee3f0483fc4732505ee80..2e2c958fab0fd860a4039cbc94319cfe5545e1f9 100644
--- a/recipes-ros/rospack/rospack_2.1.21.bb
+++ b/recipes-ros/rospack/rospack_2.1.21.bb
@@ -4,10 +4,11 @@ LICENSE = "BSD"
 LIC_FILES_CHKSUM = "file://package.xml;beginline=6;endline=6;md5=d566ef916e9dedc494f5f793a6690ba5"
 
 DEPENDS = "boost python-rospkg-native libtinyxml"
-RDEPENDS_${PN} = "python-rosdep python-subprocess"
 
-SRC_URI = "https://github.com/ros/${BPN}/archive/${PV}.tar.gz;downloadfilename=${BP}.tar.gz"
+SRC_URI = "https://github.com/ros/${ROS_SPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_SP}.tar.gz"
 SRC_URI[md5sum] = "0bb1d12a115b7902d5b1f8546d63cdf8"
 SRC_URI[sha256sum] = "43a7e64015c4e28fbfda071dcb9451a6ac0443df75242a32c23cfda68d230f93"
 
 inherit catkin
+
+RDEPENDS_${PN} = "python-rosdep python-subprocess"
diff --git a/recipes-ros/std-msgs/std-msgs_0.5.7.bb b/recipes-ros/std-msgs/std-msgs_0.5.7.bb
index 5e3fc1689d609ef57ed57e8c50448e5b2b346d8e..32acf1c02fcf36b16e0d25d841e5b4c000774298 100644
--- a/recipes-ros/std-msgs/std-msgs_0.5.7.bb
+++ b/recipes-ros/std-msgs/std-msgs_0.5.7.bb
@@ -6,10 +6,10 @@ LIC_FILES_CHKSUM = "file://package.xml;beginline=9;endline=9;md5=5ee5b8b046ae48a
 
 DEPENDS = "message-generation-native message-runtime-native"
 
-SRC_URI = "https://github.com/ros/${ROS_BPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_BP}.tar.gz"
+SRC_URI = "https://github.com/ros/${ROS_SPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_SP}.tar.gz"
 SRC_URI[md5sum] = "ea40e6dd8ea19fe54a2b476358c0ceea"
 SRC_URI[sha256sum] = "acc3d6aed8ede795e4bc6676c1849924699a418769b3d29016a9a2ac08319a56"
 
-S = "${WORKDIR}/${ROS_BP}"
+S = "${WORKDIR}/${ROS_SP}"
 
 inherit catkin