diff -Naur a/src/utils.c b/src/utils.c
--- a/src/utils.c	2014-10-16 04:23:27.000000000 -0700
+++ b/src/utils.c	2015-11-12 14:41:05.656507596 -0800
@@ -156,149 +156,6 @@
 #endif
 
 /**
- * Concatenate strings into a newly allocated string
- *
- * @note: Specify NULL for the last string in the varargs list
- *
- * @str: The first string in the list
- * @...: Subsequent strings.  Use NULL for the last item.
- *
- * @return a newly allocated string, or NULL if @str is NULL.  This will also
- * return NULL and set errno to ENOMEM if memory is exhausted.
- */
-char *string_concat(const char *str, ...)
-{
-	size_t len;
-	va_list args;
-	char *s;
-	char *result;
-	char *dest;
-
-	if (!str)
-		return NULL;
-
-	/* Compute final length */
-
-	len = strlen(str) + 1; /* plus 1 for the null terminator */
-
-	va_start(args, str);
-	s = va_arg(args, char *);
-	while (s) {
-		len += strlen(s);
-		s = va_arg(args, char*);
-	}
-	va_end(args);
-
-	/* Concat each string */
-
-	result = malloc(len);
-	if (!result)
-		return NULL; /* errno remains set */
-
-	dest = result;
-
-	dest = stpcpy(dest, str);
-
-	va_start(args, str);
-	s = va_arg(args, char *);
-	while (s) {
-		dest = stpcpy(dest, s);
-		s = va_arg(args, char *);
-	}
-	va_end(args);
-
-	return result;
-}
-
-void buffer_read_from_filename(const char *filename, char **buffer, uint64_t *length)
-{
-	FILE *f;
-	uint64_t size;
-
-	*length = 0;
-
-	f = fopen(filename, "rb");
-	if (!f) {
-		return;
-	}
-
-	fseek(f, 0, SEEK_END);
-	size = ftell(f);
-	rewind(f);
-
-	if (size == 0) {
-		fclose(f);
-		return;
-	}
-
-	*buffer = (char*)malloc(sizeof(char)*(size+1));
-	if (fread(*buffer, sizeof(char), size, f) != size) {
-		usbmuxd_log(LL_ERROR, "%s: ERROR: couldn't read %d bytes from %s", __func__, (int)size, filename);
-	}
-	fclose(f);
-
-	*length = size;
-}
-
-void buffer_write_to_filename(const char *filename, const char *buffer, uint64_t length)
-{
-	FILE *f;
-
-	f = fopen(filename, "wb");
-	if (f) {
-		fwrite(buffer, sizeof(char), length, f);
-		fclose(f);
-	}
-}
-
-int plist_read_from_filename(plist_t *plist, const char *filename)
-{
-	char *buffer = NULL;
-	uint64_t length;
-
-	if (!filename)
-		return 0;
-
-	buffer_read_from_filename(filename, &buffer, &length);
-
-	if (!buffer) {
-		return 0;
-	}
-
-	if ((length > 8) && (memcmp(buffer, "bplist00", 8) == 0)) {
-		plist_from_bin(buffer, length, plist);
-	} else {
-		plist_from_xml(buffer, length, plist);
-	}
-
-	free(buffer);
-
-	return 1;
-}
-
-int plist_write_to_filename(plist_t plist, const char *filename, enum plist_format_t format)
-{
-	char *buffer = NULL;
-	uint32_t length;
-
-	if (!plist || !filename)
-		return 0;
-
-	if (format == PLIST_FORMAT_XML)
-		plist_to_xml(plist, &buffer, &length);
-	else if (format == PLIST_FORMAT_BINARY)
-		plist_to_bin(plist, &buffer, &length);
-	else
-		return 0;
-
-	buffer_write_to_filename(filename, buffer, length);
-
-	free(buffer);
-
-	return 1;
-}
-
-/**
  * Get number of milliseconds since the epoch.
  */
 uint64_t mstime64(void)
diff -Naur a/src/utils.h b/src/utils.h
--- a/src/utils.h	2014-10-16 04:29:50.000000000 -0700
+++ b/src/utils.h	2015-11-12 14:40:41.990644890 -0800
@@ -19,6 +19,8 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
+#include <libimobiledevice/utils.h>
+
 #ifndef UTILS_H
 #define UTILS_H
 
@@ -73,18 +75,6 @@
 #ifndef HAVE_STPCPY
 char *stpcpy(char * s1, const char * s2);
 #endif
-char *string_concat(const char *str, ...);
-
-void buffer_read_from_filename(const char *filename, char **buffer, uint64_t *length);
-void buffer_write_to_filename(const char *filename, const char *buffer, uint64_t length);
-
-enum plist_format_t {
-	PLIST_FORMAT_XML,
-	PLIST_FORMAT_BINARY
-};
-
-int plist_read_from_filename(plist_t *plist, const char *filename);
-int plist_write_to_filename(plist_t plist, const char *filename, enum plist_format_t format);
 
 uint64_t mstime64(void);
 
