diff --git a/config/debug/ltrace.in b/config/debug/ltrace.in
index b119410f..dd04fca9 100644
--- a/config/debug/ltrace.in
+++ b/config/debug/ltrace.in
@@ -14,6 +14,12 @@ choice
 # Don't remove next line
 # CT_INSERT_VERSION_BELOW
 
+config LTRACE_V_0_5_3
+    bool
+    prompt "0.5.3 (EXPERIMENTAL)"
+    depends on EXPERIMENTAL
+    select LTRACE_0_5_3_or_later
+
 config LTRACE_V_0_5_2
     bool
     prompt "0.5.2"
@@ -39,7 +45,12 @@ config LTRACE_VERSION
     string
 # Don't remove next line
 # CT_INSERT_VERSION_STRING_BELOW
+    default "0.5.3" if LTRACE_V_0_5_3
     default "0.5.2" if LTRACE_V_0_5_2
     default "0.5.1" if LTRACE_V_0_5_1
     default "0.5" if LTRACE_V_0_5
     default "0.4" if LTRACE_V_0_4
+
+config LTRACE_0_5_3_or_later
+    bool
+    default n
diff --git a/patches/ltrace/0.5.3/100-allow-cross-compile.patch b/patches/ltrace/0.5.3/100-allow-cross-compile.patch
new file mode 100644
index 00000000..58572cd1
--- /dev/null
+++ b/patches/ltrace/0.5.3/100-allow-cross-compile.patch
@@ -0,0 +1,84 @@
+This patch is courtesy of OpenEmbedded, by Khem Raj <raj.khem@gmail.com>
+
+http://cgit.openembedded.org/cgit.cgi/openembedded/commit/?id=b85b779688f0abc389e3c25d06b54de8b86385c1
+
+Index: ltrace-0.5.3/common.h
+===================================================================
+--- ltrace-0.5.3.orig/common.h	2009-10-23 23:13:45.700282578 -0700
++++ ltrace-0.5.3/common.h	2009-10-23 23:14:13.550371553 -0700
+@@ -1,3 +1,5 @@
++#ifndef COMMON_H
++#define COMMON_H
+ #include <sys/types.h>
+ #include <sys/time.h>
+ #include <stdio.h>
+@@ -251,3 +253,5 @@ extern void * sym2addr(Process *, struct
+ #if 0				/* not yet */
+ extern int umoven(Process * proc, void * addr, int len, void * laddr);
+ #endif
++#endif
++
+Index: ltrace-0.5.3/configure
+===================================================================
+--- ltrace-0.5.3.orig/configure	2009-10-23 23:13:45.630316494 -0700
++++ ltrace-0.5.3/configure	2009-10-23 23:13:59.672869527 -0700
+@@ -30,7 +30,7 @@ int main () {
+   return cplus_demangle();
+ }
+ EOF
+-if gcc conftest.c -liberty 2>/dev/null
++if $CC conftest.c -liberty 2>/dev/null
+ then
+   HAVE_LIBIBERTY=1
+   echo "yes"
+@@ -48,7 +48,7 @@ int main () {
+   return __cxa_demangle();
+ }
+ EOF
+-if gcc conftest.c -lsupc++ 2>/dev/null
++if $CC conftest.c -lsupc++ 2>/dev/null
+ then
+   HAVE_LIBSUPC__=1
+   echo "yes"
+@@ -67,7 +67,7 @@ int main () {
+   return 0;
+ }
+ EOF
+-if gcc conftest.c 2>/dev/null
++if $CC conftest.c 2>/dev/null
+ then
+   HAVE_ELF_C_READ_MMAP=1
+   echo "yes"
+@@ -77,15 +77,12 @@ else
+ fi
+ rm -f conftest.c a.out
+ 
+-CC=gcc
+-CPPFLAGS=' -I /usr/include/libelf'
+ CFLAGS='-g -O2'
+ LIBS='-lelf -lsupc++ -liberty '
+-INSTALL='/usr/bin/install -c'
++INSTALL='install -c'
+ iquote='-iquote '
+ iquoteend=''
+ 
+-prefix=/usr/local
+ sysconfdir='${prefix}/etc'
+ bindir='${prefix}/bin'
+ mandir='${prefix}/share/man'
+Index: ltrace-0.5.3/debug.h
+===================================================================
+--- ltrace-0.5.3.orig/debug.h	2009-10-23 23:13:45.670276809 -0700
++++ ltrace-0.5.3/debug.h	2009-10-23 23:14:26.440319785 -0700
+@@ -1,3 +1,5 @@
++#ifndef DEBUG_H
++#define DEBUG_H
+ #include <features.h>
+ 
+ /* debug levels:
+@@ -14,4 +16,4 @@ void debug_(int level, const char *file,
+ int xinfdump(long, void *, int);
+ 
+ # define debug(level, expr...) debug_(level, __FILE__, __LINE__, expr)
+-
++#endif
diff --git a/patches/ltrace/0.5.3/110-alpha-support.patch b/patches/ltrace/0.5.3/110-alpha-support.patch
new file mode 100644
index 00000000..838b84b1
--- /dev/null
+++ b/patches/ltrace/0.5.3/110-alpha-support.patch
@@ -0,0 +1,11 @@
+diff -ru ltrace-0.5.3.orig/sysdeps/linux-gnu/Makefile ltrace-0.5.3/sysdeps/linux-gnu/Makefile
+--- ltrace-0.5.3.orig/sysdeps/linux-gnu/Makefile	2009-07-25 17:13:02.000000000 +0200
++++ ltrace-0.5.3/sysdeps/linux-gnu/Makefile	2010-01-01 22:20:45.000000000 +0100
+@@ -2,6 +2,7 @@
+ 				-e s/i.86/i386/ \
+ 				-e s/sun4u/sparc64/ \
+ 				-e s/sparc64/sparc/ \
++				-e s/alpha.*/alpha/ \
+ 				-e s/arm.*/arm/ \
+ 				-e s/sa110/arm/ \
+ 				-e s/ppc64/ppc/ \
diff --git a/patches/ltrace/0.5.3/120-debian-ltrace_0.5.3-2.patch b/patches/ltrace/0.5.3/120-debian-ltrace_0.5.3-2.patch
new file mode 100644
index 00000000..483c7433
--- /dev/null
+++ b/patches/ltrace/0.5.3/120-debian-ltrace_0.5.3-2.patch
@@ -0,0 +1,78 @@
+Debian patch courtesy of the Debian ltrace maintainer Juan Cespedes <cespedes@debian.org>
+
+--- ltrace-0.5.3.orig/sysdeps/linux-gnu/breakpoint.c
++++ ltrace-0.5.3/sysdeps/linux-gnu/breakpoint.c
+@@ -6,8 +6,6 @@
+ #include "common.h"
+ #include "arch.h"
+ 
+-static unsigned char break_insn[] = BREAKPOINT_VALUE;
+-
+ #ifdef ARCH_HAVE_ENABLE_BREAKPOINT
+ extern void arch_enable_breakpoint(pid_t, Breakpoint *);
+ void
+@@ -20,6 +18,9 @@
+ 	arch_enable_breakpoint(pid, sbp);
+ }
+ #else
++
++static unsigned char break_insn[] = BREAKPOINT_VALUE;
++
+ void
+ enable_breakpoint(pid_t pid, Breakpoint *sbp) {
+ 	unsigned int i, j;
+--- ltrace-0.5.3.orig/sysdeps/linux-gnu/arm/breakpoint.c
++++ ltrace-0.5.3/sysdeps/linux-gnu/arm/breakpoint.c
+@@ -24,10 +24,7 @@
+ 
+ #include <sys/ptrace.h>
+ #include "config.h"
+-#include "arch.h"
+-#include "options.h"
+-#include "output.h"
+-#include "debug.h"
++#include "common.h"
+ 
+ void
+ arch_enable_breakpoint(pid_t pid, Breakpoint *sbp) {
+@@ -59,8 +56,6 @@
+ void
+ arch_disable_breakpoint(pid_t pid, const Breakpoint *sbp) {
+ 	unsigned int i, j;
+-	const unsigned char break_insn[] = BREAKPOINT_VALUE;
+-	const unsigned char thumb_break_insn[] = THUMB_BREAKPOINT_VALUE;
+ 
+ 	debug(1, "arch_disable_breakpoint(%d,%p)", pid, sbp->addr);
+ 
+--- ltrace-0.5.3.orig/sysdeps/linux-gnu/ia64/plt.c
++++ ltrace-0.5.3/sysdeps/linux-gnu/ia64/plt.c
+@@ -1,4 +1,5 @@
+ #include <gelf.h>
++#include <sys/ptrace.h>
+ #include "common.h"
+ 
+ /* A bundle is 128 bits */
+--- ltrace-0.5.3.orig/sysdeps/linux-gnu/ia64/breakpoint.c
++++ ltrace-0.5.3/sysdeps/linux-gnu/ia64/breakpoint.c
+@@ -6,10 +6,7 @@
+ 
+ #include <sys/ptrace.h>
+ #include <string.h>
+-#include "arch.h"
+-#include "options.h"
+-#include "output.h"
+-#include "debug.h"
++#include "common.h"
+ 
+ static long long
+ extract_bit_field(char *bundle, int from, int len) {
+--- ltrace-0.5.3.orig/sysdeps/linux-gnu/ia64/regs.c
++++ ltrace-0.5.3/sysdeps/linux-gnu/ia64/regs.c
+@@ -7,7 +7,6 @@
+ #include <asm/rse.h>
+ 
+ #include <stddef.h>
+-#include "debug.h"
+ #include "common.h"
+ 
+ void *
diff --git a/patches/ltrace/0.5.3/130-add-sysdep.patch b/patches/ltrace/0.5.3/130-add-sysdep.patch
new file mode 100644
index 00000000..6fd8d262
--- /dev/null
+++ b/patches/ltrace/0.5.3/130-add-sysdep.patch
@@ -0,0 +1,17 @@
+This patch is courtesy of OpenEmbedded, by Khem Raj <raj.khem@gmail.com>
+
+http://cgit.openembedded.org/cgit.cgi/openembedded/commit/?id=b85b779688f0abc389e3c25d06b54de8b86385c1
+
+Index: ltrace-0.5.3/Makefile.in
+===================================================================
+--- ltrace-0.5.3.orig/Makefile.in	2009-10-23 22:06:08.130304691 -0700
++++ ltrace-0.5.3/Makefile.in	2009-10-23 22:06:53.160369614 -0700
+@@ -39,6 +39,8 @@ ltrace:		main.o libltrace.a
+ libltrace.a: 	sysdeps/sysdep.o $(OBJ)
+ 		$(AR) rcv $@ $^
+ 
++$(OBJ):		sysdeps/sysdep.o
++
+ sysdeps/sysdep.o: dummy
+ 		$(MAKE) -C sysdeps/$(OS)
+ 
diff --git a/patches/ltrace/0.5.3/140-mips-remove-CP.patch b/patches/ltrace/0.5.3/140-mips-remove-CP.patch
new file mode 100644
index 00000000..4532a8f3
--- /dev/null
+++ b/patches/ltrace/0.5.3/140-mips-remove-CP.patch
@@ -0,0 +1,16 @@
+This patch is courtesy of OpenEmbedded, by Khem Raj <raj.khem@gmail.com>
+
+http://cgit.openembedded.org/cgit.cgi/openembedded/commit/?id=b85b779688f0abc389e3c25d06b54de8b86385c1
+
+Index: ltrace-0.5.3/sysdeps/linux-gnu/mipsel/trace.c
+===================================================================
+--- ltrace-0.5.3.orig/sysdeps/linux-gnu/mipsel/trace.c	2009-10-23 23:15:59.822783128 -0700
++++ ltrace-0.5.3/sysdeps/linux-gnu/mipsel/trace.c	2009-10-23 23:16:10.441268788 -0700
+@@ -127,7 +127,6 @@ gimme_arg(enum tof type, Process *proc, 
+ 			return ret;
+ 		} else {
+ 			// If we need this, I think we can look at [sp+16] for arg_num==4.
+-			CP;
+ 			return 0;
+ 		}
+ 	}
diff --git a/patches/ltrace/0.5.3/140-mips.patch b/patches/ltrace/0.5.3/140-mips.patch
new file mode 100644
index 00000000..b01b7a90
--- /dev/null
+++ b/patches/ltrace/0.5.3/140-mips.patch
@@ -0,0 +1,40 @@
+This patch is courtesy of OpenEmbedded, by Khem Raj <raj.khem@gmail.com>
+
+http://cgit.openembedded.org/cgit.cgi/openembedded/commit/?id=b85b779688f0abc389e3c25d06b54de8b86385c1
+
+Index: ltrace-0.5.3/sysdeps/linux-gnu/mipsel/plt.c
+===================================================================
+--- ltrace-0.5.3.orig/sysdeps/linux-gnu/mipsel/plt.c	2009-10-23 23:25:59.292780574 -0700
++++ ltrace-0.5.3/sysdeps/linux-gnu/mipsel/plt.c	2009-10-23 23:26:22.671522220 -0700
+@@ -1,4 +1,4 @@
+-#include <debug.h>
++#include "debug.h"
+ #include <gelf.h>
+ #include <sys/ptrace.h>
+ #include "common.h"
+Index: ltrace-0.5.3/sysdeps/linux-gnu/mipsel/regs.c
+===================================================================
+--- ltrace-0.5.3.orig/sysdeps/linux-gnu/mipsel/regs.c	2009-10-23 23:25:59.312777529 -0700
++++ ltrace-0.5.3/sysdeps/linux-gnu/mipsel/regs.c	2009-10-23 23:26:08.190311896 -0700
+@@ -4,7 +4,6 @@
+ #include <sys/types.h>
+ #include <sys/ptrace.h>
+ #include <asm/ptrace.h>
+-#include <linux/user.h>
+ 
+ #include "common.h"
+ #include "mipsel.h"
+Index: ltrace-0.5.3/handle_event.c
+===================================================================
+--- ltrace-0.5.3.orig/handle_event.c	2009-10-23 23:29:48.780274445 -0700
++++ ltrace-0.5.3/handle_event.c	2009-10-23 23:37:32.260284055 -0700
+@@ -573,7 +573,8 @@ handle_breakpoint(Event *event) {
+ 			void *old_addr;
+ 			struct library_symbol *sym= event->proc->callstack[i].c_un.libfunc;
+ 			assert(sym);
+-			old_addr = dict_find_entry(event->proc->breakpoints, sym2addr(event->proc, sym))->addr;
++			struct Breakpoint *tbp = dict_find_entry(event->proc->breakpoints, sym2addr(event->proc, sym));
++			old_addr = tbp->addr;
+ 			addr=sym2addr(event->proc,sym);
+ 			assert(old_addr !=0 && addr !=0);
+ 			if(addr != old_addr){
diff --git a/patches/ltrace/0.5.3/150-allow-configurable-arch.patch b/patches/ltrace/0.5.3/150-allow-configurable-arch.patch
new file mode 100644
index 00000000..7208ca8c
--- /dev/null
+++ b/patches/ltrace/0.5.3/150-allow-configurable-arch.patch
@@ -0,0 +1,48 @@
+This patch is to ensure the proper ARCH is selected when cross compiling.  Make
+sure to call the configure script with, e.g., HOST=arm ./configure to select 
+the arm sysdeps.
+
+	Joachim Nilsson <jocke@vmlinux.org>
+
+diff -ru ltrace-0.5.3.orig/configure ltrace-0.5.3/configure
+--- ltrace-0.5.3.orig/configure	2010-01-02 11:05:55.000000000 +0100
++++ ltrace-0.5.3/configure	2010-01-02 20:49:11.000000000 +0100
+@@ -110,7 +110,7 @@
+ #
+ # Makefile.in -> Makefile
+ #
+-x_subst_vars='PACKAGE_VERSION HOST_OS INSTALL CC CPPFLAGS CFLAGS LDFLAGS LIBS iquote iquoteend prefix sysconfdir mandir docdir'
++x_subst_vars='PACKAGE_VERSION HOST HOST_OS INSTALL CC CPPFLAGS CFLAGS LDFLAGS LIBS iquote iquoteend prefix sysconfdir mandir docdir'
+ 
+ for i in $x_subst_vars
+ do
+Only in ltrace-0.5.3: configure~
+diff -ru ltrace-0.5.3.orig/Makefile.in ltrace-0.5.3/Makefile.in
+--- ltrace-0.5.3.orig/Makefile.in	2010-01-02 11:05:55.000000000 +0100
++++ ltrace-0.5.3/Makefile.in	2010-01-03 01:28:41.000000000 +0100
+@@ -1,10 +1,12 @@
+ #
+ # ltrace's Makefile.in
+ #
+-
++MY_TARGET       = @HOST@
++ifdef MY_TARGET
++ARCH            = $(MY_TARGET)
++endif
+ #OS		:= $(shell uname -s)
+ OS		:= @HOST_OS@
+-
+ TOPDIR		= $(shell pwd)
+ 
+ prefix		= @prefix@
+Only in ltrace-0.5.3: Makefile.in~
+diff -ru ltrace-0.5.3.orig/sysdeps/linux-gnu/Makefile ltrace-0.5.3/sysdeps/linux-gnu/Makefile
+--- ltrace-0.5.3.orig/sysdeps/linux-gnu/Makefile	2010-01-02 11:05:55.000000000 +0100
++++ ltrace-0.5.3/sysdeps/linux-gnu/Makefile	2010-01-02 20:49:51.000000000 +0100
+@@ -1,4 +1,4 @@
+-ARCH		:=	$(shell uname -m | sed \
++ARCH		?=	$(shell uname -m | sed \
+ 				-e s/i.86/i386/ \
+ 				-e s/sun4u/sparc64/ \
+ 				-e s/sparc64/sparc/ \
+Only in ltrace-0.5.3/sysdeps/linux-gnu: Makefile~
diff --git a/patches/ltrace/0.5.3/160-fix-missing-ptrace-defines.patch b/patches/ltrace/0.5.3/160-fix-missing-ptrace-defines.patch
new file mode 100644
index 00000000..48af146c
--- /dev/null
+++ b/patches/ltrace/0.5.3/160-fix-missing-ptrace-defines.patch
@@ -0,0 +1,72 @@
+This patch tries to fix the issue when PTRACE_EVENT_FORK is not found in the standard
+system headers.  The begininngs of this was already in place in trace.c, this patch
+only takes that idea and puts it in a shared include file for trace.c *and* events.c.
+The latter of which otherwise fails to build on Arm.
+
+	Joachim Nilsson <jocke@vmlinux.org>
+
+diff -ruN ltrace-0.5.3.orig/sysdeps/linux-gnu/events.c ltrace-0.5.3/sysdeps/linux-gnu/events.c
+--- ltrace-0.5.3.orig/sysdeps/linux-gnu/events.c	2009-07-25 17:13:02.000000000 +0200
++++ ltrace-0.5.3/sysdeps/linux-gnu/events.c	2010-01-03 14:33:46.000000000 +0100
+@@ -7,9 +7,8 @@
+ #include <errno.h>
+ #include <signal.h>
+ #include <string.h>
+-#include <sys/ptrace.h>
+ 
+-#include "common.h"
++#include "trace.h"
+ 
+ static Event event;
+ 
+diff -ruN ltrace-0.5.3.orig/sysdeps/linux-gnu/trace.c ltrace-0.5.3/sysdeps/linux-gnu/trace.c
+--- ltrace-0.5.3.orig/sysdeps/linux-gnu/trace.c	2009-07-25 17:13:02.000000000 +0200
++++ ltrace-0.5.3/sysdeps/linux-gnu/trace.c	2010-01-03 14:33:38.000000000 +0100
+@@ -5,10 +5,9 @@
+ #include <unistd.h>
+ #include <sys/types.h>
+ #include <sys/wait.h>
+-#include "ptrace.h"
+ #include <asm/unistd.h>
+ 
+-#include "common.h"
++#include "trace.h"
+ 
+ /* If the system headers did not provide the constants, hard-code the normal
+    values.  */
+diff -ruN ltrace-0.5.3.orig/sysdeps/linux-gnu/trace.h ltrace-0.5.3/sysdeps/linux-gnu/trace.h
+--- ltrace-0.5.3.orig/sysdeps/linux-gnu/trace.h	1970-01-01 01:00:00.000000000 +0100
++++ ltrace-0.5.3/sysdeps/linux-gnu/trace.h	2010-01-03 14:33:26.000000000 +0100
+@@ -0,0 +1,32 @@
++/* If the system headers did not provide the constants, hard-code the normal values. */
++#ifndef __SYSDEPS_TRACE_H__
++#define __SYSDEPS_TRACE_H__
++
++#include "ptrace.h"
++#include "common.h"
++
++#ifndef PTRACE_EVENT_FORK
++#warning  PTRACE_EVENT_FORK not found... redefining.
++#define PTRACE_OLDSETOPTIONS    21
++#define PTRACE_SETOPTIONS       0x4200
++#define PTRACE_GETEVENTMSG      0x4201
++
++/* options set using PTRACE_SETOPTIONS */
++#define PTRACE_O_TRACESYSGOOD   0x00000001
++#define PTRACE_O_TRACEFORK      0x00000002
++#define PTRACE_O_TRACEVFORK     0x00000004
++#define PTRACE_O_TRACECLONE     0x00000008
++#define PTRACE_O_TRACEEXEC      0x00000010
++#define PTRACE_O_TRACEVFORKDONE 0x00000020
++#define PTRACE_O_TRACEEXIT      0x00000040
++
++/* Wait extended result codes for the above trace options.  */
++#define PTRACE_EVENT_FORK       1
++#define PTRACE_EVENT_VFORK      2
++#define PTRACE_EVENT_CLONE      3
++#define PTRACE_EVENT_EXEC       4
++#define PTRACE_EVENT_VFORK_DONE 5
++#define PTRACE_EVENT_EXIT       6
++
++#endif /* PTRACE_EVENT_FORK */
++#endif /* __SYSDEPS_TRACE_H__ */
diff --git a/scripts/build/debug/400-ltrace.sh b/scripts/build/debug/400-ltrace.sh
index 6b289ab4..2a015f20 100644
--- a/scripts/build/debug/400-ltrace.sh
+++ b/scripts/build/debug/400-ltrace.sh
@@ -27,11 +27,19 @@ do_debug_ltrace_build() {
     CT_Pushd "${CT_BUILD_DIR}/build-ltrace"
 
     CT_DoLog EXTRA "Configuring ltrace"
-    CT_DoExecLog ALL        \
-    ./configure             \
-        --build=${CT_BUILD} \
-        --host=${CT_TARGET} \
-        --prefix=/usr
+    # ltrace-0.5.3, and later, don't use GNU Autotools configure script anymore
+    if [ "${CT_LTRACE_0_5_3_or_later}" = "y" ]; then
+        CC=${CT_TARGET}-${CT_CC} \
+        HOST=${CT_ARCH} \
+        CFLAGS="${CT_TARGET_CFLAGS}" \
+        CT_DoExecLog ALL ./configure --prefix=/usr
+    else
+        CT_DoExecLog ALL        \
+        ./configure             \
+            --build=${CT_BUILD} \
+            --host=${CT_TARGET} \
+            --prefix=/usr
+    fi
 
     CT_DoLog EXTRA "Building ltrace"
     CT_DoExecLog ALL make