diff --git a/include/usbmuxd.h b/include/usbmuxd.h
index 4ae71e2..ad0b126 100644
--- a/include/usbmuxd.h
+++ b/include/usbmuxd.h
@@ -175,6 +175,16 @@
 int usbmuxd_recv(int sfd, char *data, uint32_t len, uint32_t *recv_bytes);
 
 /**
+ * Reads the SystemBUID
+ *
+ * @param buid pointer to a variable that will be set to point to a newly
+ *     allocated string with the System BUID returned by usbmuxd
+ *
+ * @return 0 on success, a negative errno value otherwise.
+ */
+int usbmuxd_read_buid(char** buid);
+
+/**
  * Enable or disable the use of inotify extension. Enabled by default.
  * Use 0 to disable and 1 to enable inotify support.
  * This only has an effect on linux systems if inotify support has been built
diff --git a/src/libusbmuxd.c b/src/libusbmuxd.c
index b6e2bbe..909851c 100644
--- a/src/libusbmuxd.c
+++ b/src/libusbmuxd.c
@@ -439,6 +439,19 @@
 	return res;
 }
 
+static int send_read_buid_packet(int sfd, uint32_t tag)
+{
+	int res = -1;
+
+	/* construct message plist */
+	plist_t plist = create_plist_message("ReadBUID");
+
+	res = send_plist_packet(sfd, tag, plist);
+	plist_free(plist);
+
+	return res;
+}
+
 /**
  * Generates an event, i.e. calls the callback function.
  * A reference to a populated usbmuxd_event_t with information about the event
@@ -1052,6 +1065,44 @@
 	return usbmuxd_recv_timeout(sfd, data, len, recv_bytes, 5000);
 }
 
+int usbmuxd_read_buid(char **buid)
+{
+	int sfd;
+	int ret = 0;
+
+	if (!buid) {
+		return -EINVAL;
+	}
+	*buid = NULL;
+
+	sfd = connect_usbmuxd_socket();
+	if (sfd < 0) {
+		DEBUG(1, "%s: Error: Connection to usbmuxd failed: %s\n", __func__, strerror(errno));
+		return sfd;
+	}
+
+	proto_version = 1;
+	use_tag++;
+	if (send_read_buid_packet(sfd, use_tag) <= 0) {
+		DEBUG(1, "%s: Error sending connect message!\n", __func__);
+	} else {
+		uint32_t rc = 0;
+		plist_t pl = NULL;
+		if (usbmuxd_get_result(sfd, use_tag, &rc, &pl)) {
+			plist_t node = plist_dict_get_item(pl, "BUID");
+			if (node && plist_get_node_type(node) == PLIST_STRING) {
+				plist_get_string_val(node, buid);
+			}
+		} else {
+			ret = -(int)rc;
+		}
+		if (pl)
+			plist_free(pl);
+	}
+
+	return ret;
+}
+
 void libusbmuxd_set_use_inotify(int set)
 {
 #ifdef HAVE_INOTIFY
