diff --git a/utils/time-sync/Makefile b/utils/time-sync/Makefile
new file mode 100644
index 0000000..d58ad3b
--- /dev/null
+++ b/utils/time-sync/Makefile
@@ -0,0 +1,17 @@
+CFLAGS = -Wall
+SRCS = ipod-scsi.c time-sync.c
+OBJS = $(patsubst %.c,%.o,$(SRCS))
+
+all: time-sync
+
+clean:
+	rm -f ${OBJS} ipod-time-sync
+
+%.o: %.c
+	gcc ${CFLAGS} -c -o $@ $^
+
+time-sync: ${OBJS}
+	gcc ${CFLAGS} -lsgutils2 -o $@ $^
+
+install: time-sync
+	cp time-sync /usr/local/bin/
\ No newline at end of file
diff --git a/utils/time-sync/README b/utils/time-sync/README
new file mode 100644
index 0000000..31a876f
--- /dev/null
+++ b/utils/time-sync/README
@@ -0,0 +1,20 @@
+time-sync is a utility to sync the time with any Rockbox target that runs the
+software USB stack.
+
+It was originally take from libgpod and stripped of unnecessary code.
+
+http://gtkpod.git.sourceforge.net/git/gitweb.cgi?p=gtkpod/libgpod
+
+To compile and install, just run:
+    make
+    make install
+
+Example run:
+    mcuelenaere@wim2160:~/rockbox/utils/time-sync$ sudo time-sync /dev/sdb1
+	Data Payload: 07 da 00 14 04 0c 30 2b 00 00 00 00
+	Write buffer cmd: 3b 01 00 0c 00 00 00 00 0c 00
+    Time was synced!
+
+Example udev rule (for Onda VX747):
+    # automatically adjust my Rockboxed DAP RTC
+    ACTION=="add", ATTRS{idVendor}=="07c4", ATTRS{idProduct}=="a4a5", KERNEL=="sd?", NAME="%k", RUN+="/usr/local/bin/time-sync /dev/%k"
diff --git a/utils/time-sync/ipod-scsi.c b/utils/time-sync/ipod-scsi.c
new file mode 100644
index 0000000..163cfbc
--- /dev/null
+++ b/utils/time-sync/ipod-scsi.c
@@ -0,0 +1,100 @@
+/* Copyright (c) 2007, Christophe Fergeau  <teuf@gnome.org>
+ * Part of the libgpod project.
+ * 
+ * URL: http://www.gtkpod.org/
+ * URL: http://gtkpod.sourceforge.net/
+ *
+ * The code contained in this file is free software; you can redistribute
+ * it and/or modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either version
+ * 2.1 of the License, or (at your option) any later version.
+ *
+ * This file is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this code; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * iTunes and iPod are trademarks of Apple
+ *
+ * This product is not supported/written/published by Apple!
+ *
+ */
+
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <unistd.h>
+#include <scsi/sg_cmds.h>
+#include <endian.h>
+#include <time.h>
+
+static int do_sg_write_buffer (const char *device, void *buffer, size_t len)
+{
+    int fd;
+    size_t i;
+
+    fd = open (device, O_RDWR);
+    if (fd < 0) {
+	printf ("Couldn't open device %s\n", device);
+	return -1;
+    }
+
+    printf ("    Data Payload: ");
+    for (i = 0; i < len; i++) {
+	printf ("%02x ", *((uint8_t *)buffer+i));
+    }
+    printf ("\n");
+
+    if (sg_ll_write_buffer (fd, 1, 0, 0x0c0000, buffer, len, 1, 1) != 0) {
+	close(fd);
+	return -2;
+    }
+    close(fd);
+
+    return 0;
+}
+
+int sync_time (const char *device, struct tm *tm)
+{
+    struct iPodTime {
+	uint16_t year;
+	uint16_t days;
+	uint8_t timezone;
+	uint8_t hour;
+	uint8_t minute;
+	uint8_t second;
+	uint8_t dst;
+	uint8_t padding[3];
+    } __attribute__((__packed__));
+    struct iPodTime ipod_time;
+
+    if (tm == NULL) {
+	time_t current_time;
+	current_time = time (NULL);
+	tm = localtime (&current_time);
+    }
+
+    ipod_time.year = htobe16 (1900+tm->tm_year);
+    ipod_time.days = htobe16 (tm->tm_yday);
+    /* the timezone value is the shift east of UTC in 15 min chunks
+     * so eg. UTC+2 is 2*4 = 8
+     */
+    ipod_time.timezone = tm->tm_gmtoff / 900;
+    ipod_time.hour = tm->tm_hour;
+    ipod_time.minute = tm->tm_min;
+    ipod_time.second = tm->tm_sec;
+    if (tm->tm_isdst) {
+	ipod_time.dst = 1;
+    } else {
+	ipod_time.dst = 0;
+    }
+    memset (ipod_time.padding, 0, sizeof (ipod_time.padding));
+
+    return do_sg_write_buffer (device, &ipod_time, sizeof (ipod_time));
+}
diff --git a/utils/time-sync/time-sync.c b/utils/time-sync/time-sync.c
new file mode 100644
index 0000000..ebb46ed
--- /dev/null
+++ b/utils/time-sync/time-sync.c
@@ -0,0 +1,41 @@
+/* Copyright (c) 2009, Christophe Fergeau  <teuf@gnome.org>
+ *
+ * The code contained in this file is free software; you can redistribute
+ * it and/or modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either version
+ * 2.1 of the License, or (at your option) any later version.
+ *
+ * This file is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this code; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <time.h>
+
+extern int sync_time (const char *dev, struct tm *tm);
+extern char *basename (char *__filename);
+
+int
+main (int argc, char **argv)
+{
+    if (argc < 2) {
+        printf ("usage: %s <device>\n", basename(argv[0]));
+	return 1;
+    }
+
+    if (sync_time (argv[1], NULL)) {
+	printf ("Error occured while syncing time.\n");
+    } else {
+	printf ("Time was synced!\n");
+    }
+
+    return 0;
+}
