diff --git a/.bluez.metadata b/.bluez.metadata
new file mode 100644
index 0000000..71ea444
--- /dev/null
+++ b/.bluez.metadata
@@ -0,0 +1 @@
+2ba46754eb2d79c4d491eb24c9883355324cd08a SOURCES/bluez-4.101.tar.gz
diff --git a/README.md b/README.md
deleted file mode 100644
index 0e7897f..0000000
--- a/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-The master branch has no content
- 
-Look at the c7 branch if you are working with CentOS-7, or the c4/c5/c6 branch for CentOS-4, 5 or 6
- 
-If you find this file in a distro specific branch, it means that no content has been checked in yet
diff --git a/SOURCES/0001-Activate-the-Socket-Mobile-CF-kit.patch b/SOURCES/0001-Activate-the-Socket-Mobile-CF-kit.patch
new file mode 100644
index 0000000..d2f9aef
--- /dev/null
+++ b/SOURCES/0001-Activate-the-Socket-Mobile-CF-kit.patch
@@ -0,0 +1,25 @@
+From 9c6f914530c3873e88b55e3f7c18ce2b8b533e20 Mon Sep 17 00:00:00 2001
+From: Bastien Nocera <hadess@hadess.net>
+Date: Thu, 10 Jan 2013 09:14:33 +0100
+Subject: [PATCH] Activate the Socket Mobile CF kit
+
+https://bugzilla.redhat.com/show_bug.cgi?id=498756
+---
+ scripts/bluetooth-serial.rules | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/scripts/bluetooth-serial.rules b/scripts/bluetooth-serial.rules
+index 072335f..f6284ff 100644
+--- a/scripts/bluetooth-serial.rules
++++ b/scripts/bluetooth-serial.rules
+@@ -33,3 +33,7 @@ SUBSYSTEM=="tty", SUBSYSTEMS=="pcmcia", ATTRS{prod_id1}=="PCMCIA", ATTRS{prod_id
+ 
+ # CC&C BT0100M
+ SUBSYSTEM=="tty", SUBSYSTEMS=="pcmcia", ATTRS{prod_id1}=="Bluetooth BT0100M", ENV{HCIOPTS}="bcsp 115200", RUN+="bluetooth_serial"
++
++# SocketMobile CF Connection Kit
++SUBSYSTEM=="tty", SUBSYSTEMS=="pcmcia", ATTRS{prod_id1}=="Socket", ATTRS{prod_id2}=="CF+ Personal Network Card Rev 2.5", ENV{HCIOPTS}="socket", RUN+="bluetooth_serial"
++
+-- 
+1.8.0.1
+
diff --git a/SOURCES/0001-Add-sixaxis-cable-pairing-plugin.patch b/SOURCES/0001-Add-sixaxis-cable-pairing-plugin.patch
new file mode 100644
index 0000000..b20c9c8
--- /dev/null
+++ b/SOURCES/0001-Add-sixaxis-cable-pairing-plugin.patch
@@ -0,0 +1,554 @@
+From 64f9449656dbbb718d53a54ed8e7904e289280ec Mon Sep 17 00:00:00 2001
+From: Bastien Nocera <hadess@hadess.net>
+Date: Fri, 30 Dec 2011 12:34:29 +0100
+Subject: [PATCH] Add sixaxis cable-pairing plugin
+
+Implement the old "sixpair" using libudev and libusb-1.0.
+
+When a Sixaxis device is plugged in, events are filtered, and
+the device is selected, poked around to set the default Bluetooth
+address, and added to the database of the current default adapter.
+---
+ Makefile.am     |    9 +-
+ acinclude.m4    |   16 +++
+ configure.ac    |    1 +
+ plugins/cable.c |  382 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/adapter.c   |   19 +++
+ src/adapter.h   |    3 +
+ 6 files changed, 428 insertions(+), 2 deletions(-)
+ create mode 100644 plugins/cable.c
+
+diff --git a/Makefile.am b/Makefile.am
+index 53fcbe9..f831a72 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -238,6 +238,11 @@ builtin_sources += thermometer/main.c \
+ endif
+ 
+ 
++if CABLE
++builtin_modules += cable
++builtin_sources += plugins/cable.c
++endif
++
+ builtin_modules += hciops mgmtops
+ builtin_sources += plugins/hciops.c plugins/mgmtops.c
+ 
+@@ -306,7 +311,7 @@ src_bluetoothd_SOURCES = $(gdbus_sources) $(builtin_sources) \
+ 			src/event.h src/event.c \
+ 			src/oob.h src/oob.c src/eir.h src/eir.c
+ src_bluetoothd_LDADD = lib/libbluetooth-private.la @GLIB_LIBS@ @DBUS_LIBS@ \
+-								-ldl -lrt
++								@CABLE_LIBS@ -ldl -lrt
+ src_bluetoothd_LDFLAGS = $(AM_LDFLAGS) -Wl,--export-dynamic \
+ 				-Wl,--version-script=$(srcdir)/src/bluetooth.ver
+ 
+@@ -428,7 +433,7 @@ EXTRA_DIST += doc/manager-api.txt \
+ 
+ AM_YFLAGS = -d
+ 
+-AM_CFLAGS += @DBUS_CFLAGS@ @GLIB_CFLAGS@
++AM_CFLAGS += @DBUS_CFLAGS@ @GLIB_CFLAGS@ @CABLE_CFLAGS@
+ 
+ INCLUDES = -I$(builddir)/lib -I$(builddir)/src -I$(srcdir)/src \
+ 			-I$(srcdir)/audio -I$(srcdir)/sbc -I$(srcdir)/gdbus \
+diff --git a/acinclude.m4 b/acinclude.m4
+index 6505ad3..3f59989 100644
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -139,6 +139,12 @@ AC_DEFUN([AC_PATH_UDEV], [
+ 	AC_SUBST(UDEV_LIBS)
+ ])
+ 
++AC_DEFUN([AC_PATH_CABLE], [
++	PKG_CHECK_MODULES(CABLE, libudev libusb-1.0, cable_found=yes, cable_found=no)
++	AC_SUBST(CABLE_CFLAGS)
++	AC_SUBST(CABLE_LIBS)
++])
++
+ AC_DEFUN([AC_PATH_SNDFILE], [
+ 	PKG_CHECK_MODULES(SNDFILE, sndfile, sndfile_found=yes, sndfile_found=no)
+ 	AC_SUBST(SNDFILE_CFLAGS)
+@@ -176,6 +182,7 @@ AC_DEFUN([AC_ARG_BLUEZ], [
+ 	sndfile_enable=${sndfile_found}
+ 	hal_enable=no
+ 	usb_enable=${usb_found}
++	cable_enable=${cable_found}
+ 	alsa_enable=${alsa_found}
+ 	gstreamer_enable=${gstreamer_found}
+ 	audio_enable=yes
+@@ -265,6 +272,10 @@ AC_DEFUN([AC_ARG_BLUEZ], [
+ 		usb_enable=${enableval}
+ 	])
+ 
++	AC_ARG_ENABLE(cable, AC_HELP_STRING([--enable-cable], [enable DeviceKit support]), [
++		cable_enable=${enableval}
++	])
++
+ 	AC_ARG_ENABLE(tools, AC_HELP_STRING([--enable-tools], [install Bluetooth utilities]), [
+ 		tools_enable=${enableval}
+ 	])
+@@ -366,6 +377,10 @@ AC_DEFUN([AC_ARG_BLUEZ], [
+ 		AC_DEFINE(HAVE_LIBUSB, 1, [Define to 1 if you have USB library.])
+ 	fi
+ 
++	if (test "${cable_enable}" = "yes" && test "${cable_found}" = "yes"); then
++		AC_DEFINE(HAVE_CABLE, 1, [Define to 1 if you have libcable.])
++	fi
++
+ 	AM_CONDITIONAL(SNDFILE, test "${sndfile_enable}" = "yes" && test "${sndfile_found}" = "yes")
+ 	AM_CONDITIONAL(USB, test "${usb_enable}" = "yes" && test "${usb_found}" = "yes")
+ 	AM_CONDITIONAL(SBC, test "${alsa_enable}" = "yes" || test "${gstreamer_enable}" = "yes" ||
+@@ -398,4 +413,5 @@ AC_DEFUN([AC_ARG_BLUEZ], [
+ 	AM_CONDITIONAL(DBUSOOBPLUGIN, test "${dbusoob_enable}" = "yes")
+ 	AM_CONDITIONAL(WIIMOTEPLUGIN, test "${wiimote_enable}" = "yes")
+ 	AM_CONDITIONAL(GATTMODULES, test "${gatt_enable}" = "yes")
++	AM_CONDITIONAL(CABLE, test "${cable_enable}" = "yes" && test "${cable_found}" = "yes")
+ ])
+diff --git a/configure.ac b/configure.ac
+index 48b181e..45a4b15 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -46,6 +46,7 @@ AC_PATH_GSTREAMER
+ AC_PATH_USB
+ AC_PATH_UDEV
+ AC_PATH_SNDFILE
++AC_PATH_CABLE
+ AC_PATH_OUI
+ AC_PATH_READLINE
+ AC_PATH_CHECK
+diff --git a/plugins/cable.c b/plugins/cable.c
+new file mode 100644
+index 0000000..fe758db
+--- /dev/null
++++ b/plugins/cable.c
+@@ -0,0 +1,382 @@
++/*
++ *
++ *  BlueZ - Bluetooth protocol stack for Linux
++ *
++ *  Copyright (C) 2009  Bastien Nocera <hadess@hadess.net>
++ *
++ *
++ *  This program is free software; you can redistribute it and/or modify
++ *  it under the terms of the GNU General Public License as published by
++ *  the Free Software Foundation; either version 2 of the License, or
++ *  (at your option) any later version.
++ *
++ *  This program 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 General Public License for more details.
++ *
++ *  You should have received a copy of the GNU General Public License
++ *  along with this program; if not, write to the Free Software
++ *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
++ *
++ */
++
++#ifdef HAVE_CONFIG_H
++#include <config.h>
++#endif
++
++#include <glib.h>
++#define LIBUDEV_I_KNOW_THE_API_IS_SUBJECT_TO_CHANGE 1
++#include <libudev.h>
++#include <dbus/dbus.h>
++#include <bluetooth/bluetooth.h>
++#include <bluetooth/sdp.h>
++#include <libusb.h>
++
++#include "plugin.h"
++#include "log.h"
++
++#include "adapter.h"
++#include "manager.h"
++#include "device.h"
++
++#include "storage.h"
++#include "sdp_lib.h"
++
++/* Vendor and product ID for the Sixaxis PS3 controller */
++#define VENDOR 0x054c
++#define PRODUCT 0x0268
++#define SIXAXIS_PNP_RECORD "3601920900000A000100000900013503191124090004350D35061901000900113503190011090006350909656E09006A0901000900093508350619112409010009000D350F350D350619010009001335031900110901002513576972656C65737320436F6E74726F6C6C65720901012513576972656C65737320436F6E74726F6C6C6572090102251B536F6E7920436F6D707574657220456E7465727461696E6D656E740902000901000902010901000902020800090203082109020428010902052801090206359A35980822259405010904A101A102850175089501150026FF00810375019513150025013500450105091901291381027501950D0600FF8103150026FF0005010901A10075089504350046FF0009300931093209358102C0050175089527090181027508953009019102750895300901B102C0A1028502750895300901B102C0A10285EE750895300901B102C0A10285EF750895300901B102C0C0090207350835060904090901000902082800090209280109020A280109020B09010009020C093E8009020D280009020E2800"
++#define HID_UUID "00001124-0000-1000-8000-00805f9b34fb"
++
++static struct btd_device *create_cable_association(DBusConnection *conn,
++						    struct btd_adapter *adapter,
++						    const char *name,
++						    const char *address,
++						    guint32 vendor_id,
++						    guint32 product_id,
++						    const char *pnp_record)
++{
++	sdp_record_t *rec;
++	struct btd_device *device;
++	bdaddr_t src, dst;
++	char srcaddr[18];
++
++	device = adapter_find_device(adapter, address);
++	if (device == NULL) {
++		device = device_create(conn, adapter, address, BDADDR_BREDR);
++		if (device != NULL)
++			adapter_create_device_for_device(conn, adapter, device);
++	}
++	if (device != NULL) {
++		device_set_temporary(device, FALSE);
++		device_set_name(device, name);
++	}
++
++	str2ba(address, &dst);
++	adapter_get_address(adapter, &src);
++	ba2str(&src, srcaddr);
++
++	write_device_name(&dst, &src, (char *) name);
++
++	/* Store the device's SDP record */
++	rec = record_from_string(pnp_record);
++	store_record(srcaddr, address, rec);
++	sdp_record_free(rec);
++	/* Set the device id */
++	store_device_id(srcaddr, address, 0xffff, vendor_id, product_id, 0);
++	/* Don't write a profile, it will be updated when the device connects */
++
++	write_trust(srcaddr, address, "[all]", TRUE);
++
++	return device;
++}
++
++static char *get_bdaddr(libusb_device_handle *devh, int itfnum)
++{
++	unsigned char msg[17];
++	char *address;
++	int res;
++
++	res = libusb_control_transfer(devh,
++				      LIBUSB_ENDPOINT_IN | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE,
++				      0x01, 0x03f2, itfnum,
++				      (void*) msg, sizeof(msg),
++				      5000);
++
++	if (res < 0) {
++		DBG("Getting the device Bluetooth address failed");
++		return NULL;
++	}
++
++	address = g_strdup_printf("%02X:%02X:%02X:%02X:%02X:%02X",
++				  msg[4], msg[5], msg[6], msg[7], msg[8], msg[9]);
++
++	DBG("Device Bluetooth address: %s\n", address);
++
++	return address;
++}
++
++static gboolean set_master_bdaddr(libusb_device_handle *devh, int itfnum, char *host)
++{
++	unsigned char msg[8];
++	int mac[6];
++	int res;
++
++	if (sscanf(host, "%X:%X:%X:%X:%X:%X",
++		   &mac[0],&mac[1],&mac[2],&mac[3],&mac[4],&mac[5]) != 6) {
++		return FALSE;
++	}
++
++	msg[0] = 0x01;
++	msg[1] = 0x00;
++	msg[2] = mac[0];
++	msg[3] = mac[1];
++	msg[4] = mac[2];
++	msg[5] = mac[3];
++	msg[6] = mac[4];
++	msg[7] = mac[5];
++
++	res = libusb_control_transfer(devh,
++				      LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE,
++				      0x09, 0x03f5, itfnum,
++				      (void*) msg, sizeof(msg),
++				      5000);
++
++	if (res < 0) {
++		DBG("Setting the master Bluetooth address failed");
++		return FALSE;
++	}
++
++	return TRUE;
++}
++static void handle_usb_device(struct btd_adapter *adapter,
++			      libusb_device *dev,
++			      struct libusb_config_descriptor *cfg,
++			      int itfnum,
++			      const struct libusb_interface_descriptor *alt)
++{
++	DBusConnection *conn;
++	libusb_device_handle *devh;
++	char *device_bdaddr;
++	char adapter_bdaddr[18];
++	struct btd_device *device;
++	bdaddr_t dst;
++
++	device_bdaddr = NULL;
++	conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
++	if (conn == NULL) {
++		DBG("Failed to get on the bus");
++		return;
++	}
++
++	if (libusb_open(dev, &devh) < 0) {
++		DBG("Can't open device");
++		goto bail;
++	}
++	libusb_detach_kernel_driver(devh, itfnum);
++
++	if (libusb_claim_interface(devh, itfnum) < 0) {
++		DBG("Can't claim interface %d", itfnum);
++		goto bail;
++	}
++
++	device_bdaddr = get_bdaddr(devh, itfnum);
++	if (device_bdaddr == NULL) {
++		DBG("Failed to get the Bluetooth address from the device");
++		goto bail;
++	}
++
++	device = create_cable_association(conn,
++					  adapter,
++					  "PLAYSTATION(R)3 Controller",
++					  device_bdaddr,
++					  VENDOR, PRODUCT, SIXAXIS_PNP_RECORD);
++	btd_device_add_uuid(device, HID_UUID);
++
++	adapter_get_address(adapter, &dst);
++	ba2str(&dst, adapter_bdaddr);
++	DBG("Adapter bdaddr %s", adapter_bdaddr);
++
++	if (set_master_bdaddr(devh, itfnum, adapter_bdaddr) == FALSE) {
++		DBG("Failed to set the master Bluetooth address");
++		goto bail;
++	}
++
++bail:
++	dbus_connection_unref(conn);
++	g_free(device_bdaddr);
++	libusb_release_interface(devh, itfnum);
++	/* We ignore errors from the reattach, as there's nothing we
++	 * can do about it */
++	libusb_attach_kernel_driver(devh, itfnum);
++	if (devh != NULL)
++		libusb_close(devh);
++}
++
++static void handle_device_plug(struct udev_device *udevice)
++{
++	struct btd_adapter *adapter;
++	guint i;
++
++	libusb_device **list, *usbdev;
++	ssize_t num_devices;
++	struct libusb_device_descriptor desc;
++	guint8 j;
++
++	if (g_strcmp0(udev_device_get_property_value(udevice, "ID_SERIAL"),
++		      "Sony_PLAYSTATION_R_3_Controller") != 0)
++		return;
++	/* Don't look at events with an associated driver */
++	if (udev_device_get_property_value(udevice, "ID_USB_DRIVER") != NULL)
++		return;
++
++	DBG("Found Sixaxis device");
++
++	/* Look for the default adapter */
++	adapter = manager_get_default_adapter();
++	if (adapter == NULL)
++		return;
++
++	/* Look for the USB device */
++	libusb_init(NULL);
++
++	num_devices = libusb_get_device_list(NULL, &list);
++	if (num_devices < 0) {
++		DBG("libusb_get_device_list failed");
++		return;
++	}
++
++	usbdev = NULL;
++	for (i = 0; i < num_devices; i++) {
++		char *path;
++
++		path = g_strdup_printf("%s/%03d/%03d", "/dev/bus/usb",
++				       libusb_get_bus_number(list[i]),
++				       libusb_get_device_address(list[i]));
++		if (g_strcmp0(path, udev_device_get_devnode(udevice)) == 0) {
++			g_free(path);
++			usbdev = libusb_ref_device(list[i]);
++			break;
++		}
++		g_free(path);
++	}
++
++	libusb_free_device_list(list, TRUE);
++	if (usbdev == NULL) {
++		DBG("Found a Sixaxis, but couldn't find it via libusb");
++		goto out;
++	}
++
++	if (libusb_get_device_descriptor(usbdev, &desc) < 0) {
++		DBG("libusb_get_device_descriptor() failed");
++		goto out;
++	}
++
++	/* Look for the interface number that interests us */
++	for (j = 0; j < desc.bNumConfigurations; j++) {
++		struct libusb_config_descriptor *config;
++		guint8 k;
++
++		if (libusb_get_config_descriptor(usbdev, j, &config) < 0) {
++			DBG("Failed to get config descriptor %d", j);
++			continue;
++		}
++
++		for (k = 0; k < config->bNumInterfaces; k++) {
++			const struct libusb_interface *itf = &config->interface[k];
++			int l;
++
++			for (l = 0; l < itf->num_altsetting ; l++) {
++				struct libusb_interface_descriptor alt;
++
++				alt = itf->altsetting[l];
++				if (alt.bInterfaceClass == 3) {
++					handle_usb_device(adapter, usbdev, config, l, &alt);
++				}
++			}
++		}
++	}
++
++out:
++	if (usbdev != NULL)
++		libusb_unref_device(usbdev);
++	libusb_exit(NULL);
++}
++
++static gboolean device_event_idle(struct udev_device *udevice)
++{
++	handle_device_plug(udevice);
++	udev_device_unref(udevice);
++	return FALSE;
++}
++
++static struct udev *ctx = NULL;
++static struct udev_monitor *monitor = NULL;
++static guint watch_id = 0;
++
++static gboolean
++monitor_event(GIOChannel *source,
++	      GIOCondition condition,
++	      gpointer data)
++{
++	struct udev_device *udevice;
++
++	udevice = udev_monitor_receive_device(monitor);
++	if (udevice == NULL)
++		goto out;
++	if (g_strcmp0(udev_device_get_action(udevice), "add") != 0)
++		goto out;
++
++	g_timeout_add_seconds(1, (GSourceFunc) device_event_idle, udevice);
++
++out:
++	return TRUE;
++}
++
++
++static int cable_init(void)
++{
++	GIOChannel *channel;
++
++	DBG("Setup cable plugin");
++
++	ctx = udev_new();
++	monitor = udev_monitor_new_from_netlink(ctx, "udev");
++	if (monitor == NULL) {
++		error ("Could not get udev monitor");
++		return -1;
++	}
++
++	/* Listen for newly connected usb device */
++	udev_monitor_filter_add_match_subsystem_devtype(monitor,
++							"usb", NULL);
++	udev_monitor_enable_receiving(monitor);
++
++	channel = g_io_channel_unix_new(udev_monitor_get_fd(monitor));
++	watch_id = g_io_add_watch(channel, G_IO_IN, monitor_event, NULL);
++	g_io_channel_unref(channel);
++
++	return 0;
++}
++
++static void cable_exit(void)
++{
++	DBG("Cleanup cable plugin");
++
++	if (watch_id != 0) {
++		g_source_remove(watch_id);
++		watch_id = 0;
++	}
++	if (monitor != NULL) {
++		udev_monitor_unref(monitor);
++		monitor = NULL;
++	}
++	if (ctx != NULL) {
++		udev_unref(ctx);
++		ctx = NULL;
++	}
++}
++
++BLUETOOTH_PLUGIN_DEFINE(cable, VERSION,
++			BLUETOOTH_PLUGIN_PRIORITY_DEFAULT, cable_init, cable_exit)
+diff --git a/src/adapter.c b/src/adapter.c
+index 6e04faf..0488891 100644
+--- a/src/adapter.c
++++ b/src/adapter.c
+@@ -952,6 +952,25 @@ static struct btd_device *adapter_create_device(DBusConnection *conn,
+ 	return device;
+ }
+ 
++void adapter_create_device_for_device(DBusConnection *conn,
++				      struct btd_adapter *adapter,
++				      struct btd_device *device)
++{
++	const char *path;
++
++	device_set_temporary(device, TRUE);
++
++	adapter->devices = g_slist_append(adapter->devices, device);
++
++	path = device_get_path(device);
++	g_dbus_emit_signal(conn, adapter->path,
++			ADAPTER_INTERFACE, "DeviceCreated",
++			DBUS_TYPE_OBJECT_PATH, &path,
++			DBUS_TYPE_INVALID);
++
++	adapter_update_devices(adapter);
++}
++
+ void adapter_remove_device(DBusConnection *conn, struct btd_adapter *adapter,
+ 						struct btd_device *device,
+ 						gboolean remove_storage)
+diff --git a/src/adapter.h b/src/adapter.h
+index b7ea62b..ac0aa2e 100644
+--- a/src/adapter.h
++++ b/src/adapter.h
+@@ -114,6 +114,9 @@ void adapter_update_found_devices(struct btd_adapter *adapter,
+ 					uint8_t *data, uint8_t data_len);
+ void adapter_emit_device_found(struct btd_adapter *adapter,
+ 						struct remote_dev_info *dev);
++void adapter_create_device_for_device(DBusConnection *conn,
++				      struct btd_adapter *adapter,
++				      struct btd_device *device);
+ void adapter_mode_changed(struct btd_adapter *adapter, uint8_t scan_mode);
+ int adapter_set_name(struct btd_adapter *adapter, const char *name);
+ void adapter_name_changed(struct btd_adapter *adapter, const char *name);
+-- 
+1.7.10.2
+
diff --git a/SOURCES/0001-Enable-the-Gateway-and-Source-audio-profiles-by-defa.patch b/SOURCES/0001-Enable-the-Gateway-and-Source-audio-profiles-by-defa.patch
new file mode 100644
index 0000000..817f5ac
--- /dev/null
+++ b/SOURCES/0001-Enable-the-Gateway-and-Source-audio-profiles-by-defa.patch
@@ -0,0 +1,46 @@
+From 0b5f5d0be6a1c9aa2d63e72e6a979f46cfbcc866 Mon Sep 17 00:00:00 2001
+From: Mathieu Trudel-Lapierre <mathieu.trudel-lapierre@canonical.com>
+Date: Thu, 10 Jan 2013 09:20:22 +0100
+Subject: [PATCH] Enable the Gateway and Source audio profiles by default.
+
+Those can be disabled by the user in /etc/bluetooth/audio.conf if
+necessary.
+
+https://bugs.launchpad.net/ubuntu/+source/bluez/+bug/948613
+---
+ audio/a2dp.c    | 2 +-
+ audio/manager.c | 4 ++--
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/audio/a2dp.c b/audio/a2dp.c
+index 404be53..6c0ab26 100644
+--- a/audio/a2dp.c
++++ b/audio/a2dp.c
+@@ -1444,7 +1444,7 @@ int a2dp_register(DBusConnection *conn, const bdaddr_t *src, GKeyFile *config)
+ {
+ 	int sbc_srcs = 0, sbc_sinks = 0;
+ 	int mpeg12_srcs = 0, mpeg12_sinks = 0;
+-	gboolean source = TRUE, sink = FALSE, socket = FALSE;
++	gboolean source = TRUE, sink = TRUE, socket = TRUE;
+ 	gboolean delay_reporting = FALSE;
+ 	char *str;
+ 	GError *err = NULL;
+diff --git a/audio/manager.c b/audio/manager.c
+index d442d1d..99e03bb 100644
+--- a/audio/manager.c
++++ b/audio/manager.c
+@@ -110,9 +110,9 @@ static GSList *devices = NULL;
+ static struct enabled_interfaces enabled = {
+ 	.hfp		= TRUE,
+ 	.headset	= TRUE,
+-	.gateway	= FALSE,
++	.gateway	= TRUE,
+ 	.sink		= TRUE,
+-	.source		= FALSE,
++	.source		= TRUE,
+ 	.control	= TRUE,
+ 	.socket		= FALSE,
+ 	.media		= TRUE,
+-- 
+1.8.0.1
+
diff --git a/SOURCES/0001-Fix-GDBus-flags-after-conversion-to-macros.patch b/SOURCES/0001-Fix-GDBus-flags-after-conversion-to-macros.patch
new file mode 100644
index 0000000..44bcd45
--- /dev/null
+++ b/SOURCES/0001-Fix-GDBus-flags-after-conversion-to-macros.patch
@@ -0,0 +1,84 @@
+From a66a557038c0e3d21bc4f14090efb497558a12be Mon Sep 17 00:00:00 2001
+From: Lucas De Marchi <lucas.demarchi@profusion.mobi>
+Date: Tue, 26 Jun 2012 18:11:25 -0300
+Subject: [PATCH] Fix GDBus flags after conversion to macros
+
+Commit "aa3b9016bf444b60e1b7e1804dfc323a23a93c5a Convert GDBus methods
+to use macro helpers" converted the previous tables to use the new
+macros but some flags were lost.
+---
+ attrib/client.c   | 2 +-
+ audio/control.c   | 2 +-
+ audio/headset.c   | 2 +-
+ audio/transport.c | 2 +-
+ src/manager.c     | 2 +-
+ 5 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/attrib/client.c b/attrib/client.c
+index 8d119df..b3e3abe 100644
+--- a/attrib/client.c
++++ b/attrib/client.c
+@@ -519,7 +519,7 @@ static const GDBusMethodTable char_methods[] = {
+ 	{ GDBUS_METHOD("GetProperties",
+ 			NULL, GDBUS_ARGS({ "properties", "a{sv}" }),
+ 			get_properties) },
+-	{ GDBUS_METHOD("SetProperty",
++	{ GDBUS_ASYNC_METHOD("SetProperty",
+ 			GDBUS_ARGS({ "name", "s" }, { "value", "v" }), NULL,
+ 			set_property) },
+ 	{ }
+diff --git a/audio/control.c b/audio/control.c
+index c5a6a58..187f838 100644
+--- a/audio/control.c
++++ b/audio/control.c
+@@ -198,7 +198,7 @@ static DBusMessage *control_get_properties(DBusConnection *conn,
+ }
+ 
+ static const GDBusMethodTable control_methods[] = {
+-	{ GDBUS_ASYNC_METHOD("IsConnected",
++	{ GDBUS_DEPRECATED_METHOD("IsConnected",
+ 				NULL, GDBUS_ARGS({ "connected", "b" }),
+ 				control_is_connected) },
+ 	{ GDBUS_METHOD("GetProperties",
+diff --git a/audio/headset.c b/audio/headset.c
+index 729e4dc..b9c6265 100644
+--- a/audio/headset.c
++++ b/audio/headset.c
+@@ -2094,7 +2094,7 @@ static const GDBusMethodTable headset_methods[] = {
+ static const GDBusSignalTable headset_signals[] = {
+ 	{ GDBUS_DEPRECATED_SIGNAL("Connected", NULL) },
+ 	{ GDBUS_DEPRECATED_SIGNAL("Disconnected", NULL) },
+-	{ GDBUS_DEPRECATED_SIGNAL("AnswerRequested", NULL) },
++	{ GDBUS_SIGNAL("AnswerRequested", NULL) },
+ 	{ GDBUS_DEPRECATED_SIGNAL("Stopped", NULL) },
+ 	{ GDBUS_DEPRECATED_SIGNAL("Playing", NULL) },
+ 	{ GDBUS_DEPRECATED_SIGNAL("SpeakerGainChanged",
+diff --git a/audio/transport.c b/audio/transport.c
+index b015625..832ad2a 100644
+--- a/audio/transport.c
++++ b/audio/transport.c
+@@ -959,7 +959,7 @@ static const GDBusMethodTable transport_methods[] = {
+ 	{ GDBUS_ASYNC_METHOD("Release",
+ 			GDBUS_ARGS({ "access_type", "s" }), NULL,
+ 			release ) },
+-	{ GDBUS_ASYNC_METHOD("SetProperty",
++	{ GDBUS_METHOD("SetProperty",
+ 			GDBUS_ARGS({ "name", "s" }, { "value", "v" }),
+ 			NULL, set_property) },
+ 	{ },
+diff --git a/src/manager.c b/src/manager.c
+index 385354d..7061f64 100644
+--- a/src/manager.c
++++ b/src/manager.c
+@@ -207,7 +207,7 @@ static const GDBusMethodTable manager_methods[] = {
+ 			GDBUS_ARGS({ "pattern", "s" }),
+ 			GDBUS_ARGS({ "adapter", "o" }),
+ 			find_adapter) },
+-	{ GDBUS_ASYNC_METHOD("ListAdapters",
++	{ GDBUS_DEPRECATED_METHOD("ListAdapters",
+ 			NULL, GDBUS_ARGS({ "adapters", "ao" }),
+ 			list_adapters) },
+ 	{ }
+-- 
+1.8.0.1
+
diff --git a/SOURCES/0001-audio-Permit-concurrent-use-of-AG-and-HF-roles.patch b/SOURCES/0001-audio-Permit-concurrent-use-of-AG-and-HF-roles.patch
new file mode 100644
index 0000000..c1a5828
--- /dev/null
+++ b/SOURCES/0001-audio-Permit-concurrent-use-of-AG-and-HF-roles.patch
@@ -0,0 +1,51 @@
+From 2f92669697152848f2fae584d45fde5d80ea6eb8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Dalleau?=
+ <frederic.dalleau@linux.intel.com>
+Date: Fri, 22 Jun 2012 16:11:25 +0200
+Subject: [PATCH] audio: Permit concurrent use of AG and HF roles
+
+If a device supports both HF and AG roles, then if a SCO connection
+related to AG profile happens, the connection is rejected because HF is
+not connected. One consequence is pulseaudio failing to load bluetooth
+module.
+---
+ audio/main.c | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/audio/main.c b/audio/main.c
+index 5c751af..a48c8b8 100644
+--- a/audio/main.c
++++ b/audio/main.c
+@@ -102,7 +102,7 @@ static void sco_server_cb(GIOChannel *chan, GError *err, gpointer data)
+ 	if (device->headset) {
+ 		if (headset_get_state(device) < HEADSET_STATE_CONNECTED) {
+ 			DBG("Refusing SCO from non-connected headset");
+-			goto drop;
++			goto gateway;
+ 		}
+ 
+ 		if (!headset_get_hfp_active(device)) {
+@@ -115,7 +115,11 @@ static void sco_server_cb(GIOChannel *chan, GError *err, gpointer data)
+ 			goto drop;
+ 
+ 		headset_set_state(device, HEADSET_STATE_PLAYING);
+-	} else if (device->gateway) {
++		goto connect;
++	}
++
++gateway:
++	if (device->gateway) {
+ 		if (!gateway_is_connected(device)) {
+ 			DBG("Refusing SCO from non-connected AG");
+ 			goto drop;
+@@ -126,6 +130,7 @@ static void sco_server_cb(GIOChannel *chan, GError *err, gpointer data)
+ 	} else
+ 		goto drop;
+ 
++connect:
+ 	sk = g_io_channel_unix_get_fd(chan);
+ 	fcntl(sk, F_SETFL, 0);
+ 
+-- 
+1.8.0.1
+
diff --git a/SOURCES/0001-build-Enable-BIND_NOW.patch b/SOURCES/0001-build-Enable-BIND_NOW.patch
new file mode 100644
index 0000000..280dbd1
--- /dev/null
+++ b/SOURCES/0001-build-Enable-BIND_NOW.patch
@@ -0,0 +1,31 @@
+From 6c01076f556922a63c73f0fcc4d62b97f9e1aca8 Mon Sep 17 00:00:00 2001
+From: Fedora Bluez maintainers <bluez-owner@fedoraproject.org>
+Date: Thu, 7 Nov 2013 09:23:35 +0100
+Subject: [PATCH] build: Enable BIND_NOW
+
+Partial RELRO means that the object is GNU_RELRO but not BIND_NOW.  This
+reduces the effectiveness of RELRO.  bluez triggers this because it
+enables PIE during the build, and rpmdiff takes this as an indicator
+that the best possible hardening is desired.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=983161
+---
+ acinclude.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/acinclude.m4 b/acinclude.m4
+index ae58bbd..f0f8902 100644
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -359,7 +359,7 @@ AC_DEFUN([AC_ARG_BLUEZ], [
+ 
+ 	if (test "${pie_enable}" = "yes" && test "${ac_cv_prog_cc_pie}" = "yes"); then
+ 		misc_cflags="$misc_cflags -fPIC"
+-		misc_ldflags="$misc_ldflags -pie"
++		misc_ldflags="$misc_ldflags -pie -Wl,-z,now"
+ 	fi
+ 
+ 	if (test "${debug_enable}" = "yes" && test "${ac_cv_prog_cc_g}" = "yes"); then
+-- 
+1.8.3.1
+
diff --git a/SOURCES/0001-hid2hci-change-subsystem-in-udev-rule-from-usb-to-us.patch b/SOURCES/0001-hid2hci-change-subsystem-in-udev-rule-from-usb-to-us.patch
new file mode 100644
index 0000000..f8fcada
--- /dev/null
+++ b/SOURCES/0001-hid2hci-change-subsystem-in-udev-rule-from-usb-to-us.patch
@@ -0,0 +1,32 @@
+From d557e0d956d69318664ed5d1c3e4a765da24bc2a Mon Sep 17 00:00:00 2001
+From: Alexander Holler <holler@ahsoftware.de>
+Date: Tue, 20 Nov 2012 12:47:08 +0100
+Subject: [PATCH] hid2hci: change subsystem in udev rule from usb to usb*
+
+With kernel 3.6 (commit 7e97243c2080ecae7129e83635227fdebd4feef6) the
+class for some devices (e.g. dongles from Logitech) were changed from
+usb to usbmisc. As consequence the udev rule for hid2hci didn't work
+anymore with kernels >= 3.6.
+
+Changing the subsystem from "usb" to "usb*" matches both "usb" and
+"usbmisc" and works with all kernels.
+---
+ scripts/bluetooth-hid2hci.rules | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/scripts/bluetooth-hid2hci.rules b/scripts/bluetooth-hid2hci.rules
+index 0687c8a..db6bb03 100644
+--- a/scripts/bluetooth-hid2hci.rules
++++ b/scripts/bluetooth-hid2hci.rules
+@@ -1,7 +1,7 @@
+ # do not edit this file, it will be overwritten on update
+ 
+ ACTION=="remove", GOTO="hid2hci_end"
+-SUBSYSTEM!="usb", GOTO="hid2hci_end"
++SUBSYSTEM!="usb*", GOTO="hid2hci_end"
+ 
+ # Variety of Dell Bluetooth devices - match on a mouse device that is
+ # self powered and where a HID report needs to be sent to switch modes
+-- 
+1.8.0
+
diff --git a/SOURCES/0001-input-Add-helper-function-to-request-disconnect.patch b/SOURCES/0001-input-Add-helper-function-to-request-disconnect.patch
new file mode 100644
index 0000000..481b72c
--- /dev/null
+++ b/SOURCES/0001-input-Add-helper-function-to-request-disconnect.patch
@@ -0,0 +1,37 @@
+From c70bf65af6e301f18063491b22112300c0fb9b89 Mon Sep 17 00:00:00 2001
+From: Bastien Nocera <hadess@hadess.net>
+Date: Sun, 17 Jun 2012 01:25:46 +0200
+Subject: [PATCH 1/3] input: Add helper function to request disconnect
+
+---
+ input/device.c |    7 +++++++
+ input/device.h |    1 +
+ 2 files changed, 8 insertions(+)
+
+diff --git a/input/device.c b/input/device.c
+index 0e3f4a9..8fdd4e0 100644
+--- a/input/device.c
++++ b/input/device.c
+@@ -1306,3 +1306,10 @@ int input_device_close_channels(const bdaddr_t *src, const bdaddr_t *dst)
+ 
+ 	return 0;
+ }
++
++void input_device_request_disconnect(struct fake_input *fake)
++{
++	if (fake == NULL || fake->idev == NULL)
++		return;
++	device_request_disconnect(fake->idev->device, NULL);
++}
+diff --git a/input/device.h b/input/device.h
+index 509a353..ff52967 100644
+--- a/input/device.h
++++ b/input/device.h
+@@ -49,3 +49,4 @@ int input_device_unregister(const char *path, const char *uuid);
+ int input_device_set_channel(const bdaddr_t *src, const bdaddr_t *dst, int psm,
+ 							GIOChannel *io);
+ int input_device_close_channels(const bdaddr_t *src, const bdaddr_t *dst);
++void input_device_request_disconnect(struct fake_input *fake);
+-- 
+1.7.10
+
diff --git a/SOURCES/0001-input-Fix-not-adding-watches-when-io-channel-is-conn.patch b/SOURCES/0001-input-Fix-not-adding-watches-when-io-channel-is-conn.patch
new file mode 100644
index 0000000..0b984d5
--- /dev/null
+++ b/SOURCES/0001-input-Fix-not-adding-watches-when-io-channel-is-conn.patch
@@ -0,0 +1,101 @@
+From ea793cb9f744cd2942b66385118161b880de958a Mon Sep 17 00:00:00 2001
+From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
+Date: Tue, 19 Jun 2012 12:44:43 +0300
+Subject: [PATCH] input: Fix not adding watches when io channel is connected
+
+This can leave dangling pointers in case one of the channel is never
+connected which cause -EALREADY to be returned by
+input_device_set_channel next time the device attempts to connect.
+
+For the same reason the code path when acting as client now add the
+watch as soon as the connection completes instead when both channels
+are connected.
+---
+ input/device.c | 31 ++++++++++++++++++++++++-------
+ 1 file changed, 24 insertions(+), 7 deletions(-)
+
+diff --git a/input/device.c b/input/device.c
+index 0e3f4a9..09a9a39 100644
+--- a/input/device.c
++++ b/input/device.c
+@@ -387,6 +387,11 @@ static gboolean intr_watch_cb(GIOChannel *chan, GIOCondition cond, gpointer data
+ 	struct input_conn *iconn = data;
+ 	struct input_device *idev = iconn->idev;
+ 	gboolean connected = FALSE;
++	char address[18];
++
++	ba2str(&iconn->idev->dst, address);
++
++	DBG("Device %s disconnected", address);
+ 
+ 	/* Checking for ctrl_watch avoids a double g_io_channel_shutdown since
+ 	 * it's likely that ctrl_watch_cb has been queued for dispatching in
+@@ -415,6 +420,11 @@ static gboolean intr_watch_cb(GIOChannel *chan, GIOCondition cond, gpointer data
+ static gboolean ctrl_watch_cb(GIOChannel *chan, GIOCondition cond, gpointer data)
+ {
+ 	struct input_conn *iconn = data;
++	char address[18];
++
++	ba2str(&iconn->idev->dst, address);
++
++	DBG("Device %s disconnected", address);
+ 
+ 	/* Checking for intr_watch avoids a double g_io_channel_shutdown since
+ 	 * it's likely that intr_watch_cb has been queued for dispatching in
+@@ -811,13 +821,6 @@ static int input_device_connected(struct input_device *idev,
+ 	if (err < 0)
+ 		return err;
+ 
+-	iconn->intr_watch = g_io_add_watch(iconn->intr_io,
+-					G_IO_HUP | G_IO_ERR | G_IO_NVAL,
+-					intr_watch_cb, iconn);
+-	iconn->ctrl_watch = g_io_add_watch(iconn->ctrl_io,
+-					G_IO_HUP | G_IO_ERR | G_IO_NVAL,
+-					ctrl_watch_cb, iconn);
+-
+ 	connected = TRUE;
+ 	emit_property_changed(idev->conn, idev->path, INPUT_DEVICE_INTERFACE,
+ 				"Connected", DBUS_TYPE_BOOLEAN, &connected);
+@@ -854,6 +857,10 @@ static void interrupt_connect_cb(GIOChannel *chan, GError *conn_err,
+ 	dbus_message_unref(iconn->pending_connect);
+ 	iconn->pending_connect = NULL;
+ 
++	iconn->intr_watch = g_io_add_watch(iconn->intr_io,
++					G_IO_HUP | G_IO_ERR | G_IO_NVAL,
++					intr_watch_cb, iconn);
++
+ 	return;
+ 
+ failed:
+@@ -913,6 +920,10 @@ static void control_connect_cb(GIOChannel *chan, GError *conn_err,
+ 
+ 	iconn->intr_io = io;
+ 
++	iconn->ctrl_watch = g_io_add_watch(iconn->ctrl_io,
++					G_IO_HUP | G_IO_ERR | G_IO_NVAL,
++					ctrl_watch_cb, iconn);
++
+ 	return;
+ 
+ failed:
+@@ -1272,11 +1283,17 @@ int input_device_set_channel(const bdaddr_t *src, const bdaddr_t *dst, int psm,
+ 		if (iconn->ctrl_io)
+ 			return -EALREADY;
+ 		iconn->ctrl_io = g_io_channel_ref(io);
++		iconn->ctrl_watch = g_io_add_watch(iconn->ctrl_io,
++					G_IO_HUP | G_IO_ERR | G_IO_NVAL,
++					ctrl_watch_cb, iconn);
+ 		break;
+ 	case L2CAP_PSM_HIDP_INTR:
+ 		if (iconn->intr_io)
+ 			return -EALREADY;
+ 		iconn->intr_io = g_io_channel_ref(io);
++		iconn->intr_watch = g_io_add_watch(iconn->intr_io,
++					G_IO_HUP | G_IO_ERR | G_IO_NVAL,
++					intr_watch_cb, iconn);
+ 		break;
+ 	}
+ 
+-- 
+1.8.0.1
+
diff --git a/SOURCES/0001-network-NULL-dereference-fix.patch b/SOURCES/0001-network-NULL-dereference-fix.patch
new file mode 100644
index 0000000..5b6e750
--- /dev/null
+++ b/SOURCES/0001-network-NULL-dereference-fix.patch
@@ -0,0 +1,34 @@
+From b57c64f1aa5c51dd785f2572636b8c41ada06d72 Mon Sep 17 00:00:00 2001
+From: Pavel Raiskup <praiskup@redhat.com>
+Date: Tue, 30 Aug 2011 15:10:46 +0200
+Subject: [PATCH] network: NULL dereference fix
+
+Variable ifindex dereferenced on line 242 before null check on line 249.
+---
+ network/common.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/network/common.c b/network/common.c
+index 4704072..a223685 100644
+--- a/network/common.c
++++ b/network/common.c
+@@ -240,13 +240,15 @@ int bnep_if_down(const char *devname)
+ 
+ int bnep_add_to_bridge(const char *devname, const char *bridge)
+ {
+-	int ifindex = if_nametoindex(devname);
++	int ifindex;
+ 	struct ifreq ifr;
+ 	int sk, err;
+ 
+ 	if (!devname || !bridge)
+ 		return -EINVAL;
+ 
++	ifindex = if_nametoindex(devname);
++
+ 	sk = socket(AF_INET, SOCK_STREAM, 0);
+ 	if (sk < 0)
+ 		return -1;
+-- 
+1.8.0.1
+
diff --git a/SOURCES/0001-network-fix-network-Connect-method-parameters.patch b/SOURCES/0001-network-fix-network-Connect-method-parameters.patch
new file mode 100644
index 0000000..05edb01
--- /dev/null
+++ b/SOURCES/0001-network-fix-network-Connect-method-parameters.patch
@@ -0,0 +1,27 @@
+From 57170b311f1468330f4a9961dc0b3ac45f97bc13 Mon Sep 17 00:00:00 2001
+From: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
+Date: Sat, 30 Jun 2012 00:39:05 -0300
+Subject: [PATCH] network: fix network Connect() method parameters
+
+---
+ network/connection.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/network/connection.c b/network/connection.c
+index 544ec3a..59423a9 100644
+--- a/network/connection.c
++++ b/network/connection.c
+@@ -554,7 +554,9 @@ static void path_unregister(void *data)
+ 
+ static const GDBusMethodTable connection_methods[] = {
+ 	{ GDBUS_ASYNC_METHOD("Connect",
+-			NULL, NULL, connection_connect) },
++				GDBUS_ARGS({"uuid", "s"}),
++				GDBUS_ARGS({"interface", "s"}),
++				connection_connect) },
+ 	{ GDBUS_METHOD("Disconnect",
+ 			NULL, NULL, connection_disconnect) },
+ 	{ GDBUS_METHOD("GetProperties",
+-- 
+1.8.0.1
+
diff --git a/SOURCES/0001-work-around-Logitech-diNovo-Edge-keyboard-firmware-i.patch b/SOURCES/0001-work-around-Logitech-diNovo-Edge-keyboard-firmware-i.patch
new file mode 100644
index 0000000..447e951
--- /dev/null
+++ b/SOURCES/0001-work-around-Logitech-diNovo-Edge-keyboard-firmware-i.patch
@@ -0,0 +1,29 @@
+From 3aca31788655582f3029b3c88ad6f468c4de07a2 Mon Sep 17 00:00:00 2001
+From: Tommy <mesilliac@gmail.com>
+Date: Thu, 10 Jan 2013 09:18:43 +0100
+Subject: [PATCH] work around Logitech diNovo Edge keyboard firmware issue
+
+https://bugs.launchpad.net/ubuntu/+source/bluez/+bug/269851
+---
+ scripts/bluetooth-hid2hci.rules | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/scripts/bluetooth-hid2hci.rules b/scripts/bluetooth-hid2hci.rules
+index 0687c8a..2a571e5 100644
+--- a/scripts/bluetooth-hid2hci.rules
++++ b/scripts/bluetooth-hid2hci.rules
+@@ -11,7 +11,10 @@ ATTR{bInterfaceClass}=="03", ATTR{bInterfaceSubClass}=="01", ATTR{bInterfaceProt
+   RUN+="hid2hci --method=dell --devpath=%p", ENV{HID2HCI_SWITCH}="1"
+ 
+ # Logitech devices
+-KERNEL=="hiddev*", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c70[345abce]|c71[34bc]", \
++KERNEL=="hiddev*", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c70[345abce]|c71[3bc]", \
++  RUN+="hid2hci --method=logitech-hid --devpath=%p"
++# Logitech, Inc. diNovo Edge Keyboard
++KERNEL=="hidraw*", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c714", \
+   RUN+="hid2hci --method=logitech-hid --devpath=%p"
+ 
+ ENV{DEVTYPE}!="usb_device", GOTO="hid2hci_end"
+-- 
+1.8.0.1
+
diff --git a/SOURCES/0002-fakehid-Disconnect-from-PS3-remote-after-10-mins.patch b/SOURCES/0002-fakehid-Disconnect-from-PS3-remote-after-10-mins.patch
new file mode 100644
index 0000000..8941126
--- /dev/null
+++ b/SOURCES/0002-fakehid-Disconnect-from-PS3-remote-after-10-mins.patch
@@ -0,0 +1,118 @@
+From cca11542bcd4d1748c850806c1599ed1b76ea19a Mon Sep 17 00:00:00 2001
+From: Bastien Nocera <hadess@hadess.net>
+Date: Sun, 17 Jun 2012 01:26:18 +0200
+Subject: [PATCH 2/3] fakehid: Disconnect from PS3 remote after 10 mins
+
+After 10 minutes, disconnect the PS3 BD Remote to avoid draining its
+battery. This is consistent with its behaviour on the PS3.
+
+Original patch by Ruslan N. Marchenko <rufferson@gmail.com>
+---
+ input/device.h  |    1 +
+ input/fakehid.c |   36 ++++++++++++++++++++++++++++++++++++
+ 2 files changed, 37 insertions(+)
+
+diff --git a/input/device.h b/input/device.h
+index ff52967..d8baa2c 100644
+--- a/input/device.h
++++ b/input/device.h
+@@ -33,6 +33,7 @@ struct fake_input {
+ 	int		uinput;		/* uinput socket */
+ 	int		rfcomm;		/* RFCOMM socket */
+ 	uint8_t		ch;		/* RFCOMM channel number */
++	guint           timeout_id;	/* Disconnect timeout ID */
+ 	gboolean	(*connect) (struct input_conn *iconn, GError **err);
+ 	int		(*disconnect) (struct input_conn *iconn);
+ 	void		*priv;
+diff --git a/input/fakehid.c b/input/fakehid.c
+index 3181538..a125356 100644
+--- a/input/fakehid.c
++++ b/input/fakehid.c
+@@ -44,6 +44,9 @@
+ #include "fakehid.h"
+ #include "uinput.h"
+ 
++/* Timeout to get the PS3 remote disconnected, in seconds */
++#define PS3_REMOTE_TIMEOUT 10 * 60
++
+ enum ps3remote_special_keys {
+ 	PS3R_BIT_PS = 0,
+ 	PS3R_BIT_ENTER = 3,
+@@ -141,6 +144,20 @@ static unsigned int ps3remote_keymap[] = {
+ 	[0xff] = KEY_MAX,
+ };
+ 
++static gboolean ps3_remote_timeout_cb(gpointer user_data);
++
++static void ps3remote_set_timeout(struct fake_input *fake, gboolean enable)
++{
++	if (enable) {
++		fake->timeout_id = g_timeout_add_seconds(PS3_REMOTE_TIMEOUT, ps3_remote_timeout_cb, fake);
++	} else {
++		if (fake->timeout_id > 0) {
++			g_source_remove(fake->timeout_id);
++			fake->timeout_id = 0;
++		}
++	}
++}
++
+ static int ps3remote_decode(char *buff, int size, unsigned int *value)
+ {
+ 	static unsigned int lastkey = 0;
+@@ -203,6 +220,16 @@ error:
+ 	return -1;
+ }
+ 
++static gboolean
++ps3_remote_timeout_cb(gpointer user_data)
++{
++	struct fake_input *fake = (struct fake_input *) user_data;
++	input_device_request_disconnect(fake);
++	DBG("Disconnected PS3 BD Remote after timeout");
++	fake->timeout_id = 0;
++	return FALSE;
++}
++
+ static gboolean ps3remote_event(GIOChannel *chan, GIOCondition cond,
+ 				gpointer data)
+ {
+@@ -221,6 +248,9 @@ static gboolean ps3remote_event(GIOChannel *chan, GIOCondition cond,
+ 		goto failed;
+ 	}
+ 
++	/* Remove the old timeout */
++	ps3remote_set_timeout(fake, FALSE);
++
+ 	fd = g_io_channel_unix_get_fd(chan);
+ 
+ 	memset(buff, 0, sizeof(buff));
+@@ -256,6 +286,8 @@ static gboolean ps3remote_event(GIOChannel *chan, GIOCondition cond,
+ 		goto failed;
+ 	}
+ 
++	ps3remote_set_timeout(fake, TRUE);
++
+ 	return TRUE;
+ 
+ failed:
+@@ -318,6 +350,8 @@ static int ps3remote_setup_uinput(struct fake_input *fake,
+ 		goto err;
+ 	}
+ 
++	ps3remote_set_timeout(fake, TRUE);
++
+ 	return 0;
+ 
+ err:
+@@ -378,6 +412,8 @@ struct fake_input *fake_hid_connadd(struct fake_input *fake,
+ 	for (l = fake_hid->devices; l != NULL; l = l->next) {
+ 		old = l->data;
+ 		if (old->idev == fake->idev) {
++			if (fake->timeout_id > 0)
++				g_source_remove(fake->timeout_id);
+ 			g_free(fake);
+ 			fake = old;
+ 			fake_hid->connect(fake, NULL);
+-- 
+1.7.10
+
diff --git a/SOURCES/0003-fakehid-Use-the-same-constant-as-declared.patch b/SOURCES/0003-fakehid-Use-the-same-constant-as-declared.patch
new file mode 100644
index 0000000..b6adf77
--- /dev/null
+++ b/SOURCES/0003-fakehid-Use-the-same-constant-as-declared.patch
@@ -0,0 +1,26 @@
+From a354165e58f937ee12c16ab48ce334b664c8f163 Mon Sep 17 00:00:00 2001
+From: Bastien Nocera <hadess@hadess.net>
+Date: Sun, 17 Jun 2012 01:29:01 +0200
+Subject: [PATCH 3/3] fakehid: Use the same constant as declared
+
+ps3remote_keymap[] uses 0xff as the max value, so should we.
+---
+ input/fakehid.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/input/fakehid.c b/input/fakehid.c
+index a125356..a758413 100644
+--- a/input/fakehid.c
++++ b/input/fakehid.c
+@@ -335,7 +335,7 @@ static int ps3remote_setup_uinput(struct fake_input *fake,
+ 	}
+ 
+ 	/* enabling keys */
+-	for (i = 0; i < 256; i++)
++	for (i = 0; i < 0xff; i++)
+ 		if (ps3remote_keymap[i] != KEY_RESERVED)
+ 			if (ioctl(fake->uinput, UI_SET_KEYBIT,
+ 						ps3remote_keymap[i]) < 0) {
+-- 
+1.7.10
+
diff --git a/SOURCES/bluez-uinput.modules b/SOURCES/bluez-uinput.modules
new file mode 100644
index 0000000..9f721d9
--- /dev/null
+++ b/SOURCES/bluez-uinput.modules
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+if [ ! -c /dev/input/uinput ] ; then
+	exec /sbin/modprobe uinput >/dev/null 2>&1
+fi
+
diff --git a/SOURCES/bluez.gitignore b/SOURCES/bluez.gitignore
new file mode 100644
index 0000000..137d2e5
--- /dev/null
+++ b/SOURCES/bluez.gitignore
@@ -0,0 +1,100 @@
+*.o
+*.a
+*.lo
+*.la
+*.so
+.deps
+.libs
+.dirstamp
+Makefile
+Makefile.in
+aclocal.m4
+config.guess
+config.h
+config.h.in
+config.log
+config.status
+config.sub
+configure
+depcomp
+compile
+install-sh
+libtool
+ltmain.sh
+missing
+stamp-h1
+autom4te.cache
+
+ylwrap
+lexer.c
+parser.h
+parser.c
+
+bluez.pc
+lib/bluetooth
+src/builtin.h
+src/bluetoothd
+audio/telephony.c
+sap/sap.c
+scripts/bluetooth.rules
+scripts/97-bluetooth.rules
+scripts/97-bluetooth-hid2hci.rules
+
+sbc/sbcdec
+sbc/sbcenc
+sbc/sbcinfo
+sbc/sbctester
+
+attrib/gatttool
+tools/avctrl
+tools/avinfo
+tools/bccmd
+tools/ciptool
+tools/dfubabel
+tools/dfutool
+tools/hciattach
+tools/hciconfig
+tools/hcieventmask
+tools/hcisecfilter
+tools/hcitool
+tools/hid2hci
+tools/rfcomm
+tools/l2ping
+tools/ppporc
+tools/sdptool
+cups/bluetooth
+test/agent
+test/bdaddr
+test/hciemu
+test/attest
+test/hstest
+test/avtest
+test/l2test
+test/rctest
+test/scotest
+test/gaptest
+test/sdptest
+test/lmptest
+test/ipctest
+test/btiotest
+test/test-textfile
+test/uuidtest
+test/mpris-player
+compat/dund
+compat/hidd
+compat/pand
+unit/test-eir
+mgmt/btmgmt
+monitor/btmon
+emulator/btvirt
+
+doc/*.bak
+doc/*.stamp
+doc/bluez.*
+doc/bluez-*.txt
+doc/*.sgml
+doc/version.xml
+doc/xml
+doc/html
+src/bluetoothd.8
+src/bluetooth.service
diff --git a/SOURCES/dund.conf b/SOURCES/dund.conf
new file mode 100644
index 0000000..dec4a84
--- /dev/null
+++ b/SOURCES/dund.conf
@@ -0,0 +1 @@
+#DUNDARGS='--search --persist'
diff --git a/SOURCES/dund.init b/SOURCES/dund.init
new file mode 100755
index 0000000..6b2e563
--- /dev/null
+++ b/SOURCES/dund.init
@@ -0,0 +1,70 @@
+#!/bin/sh
+
+# chkconfig:	- 26 89
+
+### BEGIN INIT INFO
+# Required-Start: bluetooth
+# Default-Start: 
+# Short-Description: Bluetooth Dial-Up-Networking Daemon.
+# Description: Bluetooth Dial-Up-Networking Daemon. Provides PPP over RFCOMM
+# services.
+### END INIT INFO
+
+# Source function library.
+. /etc/rc.d/init.d/functions
+
+[ -f /etc/sysconfig/network ] && . /etc/sysconfig/network
+
+[ "${NETWORKING}" = "yes" ] || exit 0
+
+[ -r /etc/sysconfig/dund ] && . /etc/sysconfig/dund
+
+start() 
+{
+	[ -z "$DUNDARGS" ] && exit 6
+
+        echo -n $"Starting dund: "
+        daemon /usr/bin/dund $DUNDARGS
+	RETVAL=$?
+	echo
+	[ $RETVAL = 0 ] && touch /var/lock/subsys/dund
+        return $RETVAL
+}
+
+stop() 
+{
+        echo -n $"Shutting down dund: "
+	/usr/bin/dund -K
+	killproc dund
+	RETVAL=$?
+
+	rm -f  /var/lock/subsys/dund
+        echo
+	return $RETVAL
+}
+
+# See how we were called.
+case "$1" in
+  start)
+	start
+        ;;
+  stop)
+	stop
+        ;;
+  force-reload|restart|reload)
+	stop
+	start
+	;;
+  try-restart|condrestart)
+	[ -e /var/lock/subsys/dund ] && (stop; start)
+	;;
+  status)
+  	status dund
+	RETVAL=$?
+	;;
+  *)
+        echo $"Usage: $0 {start|stop|status|restart|reload|condrestart}"
+        exit 3
+esac
+
+exit $RETVAL
diff --git a/SOURCES/pand.conf b/SOURCES/pand.conf
new file mode 100644
index 0000000..ee1003a
--- /dev/null
+++ b/SOURCES/pand.conf
@@ -0,0 +1,2 @@
+#PANDARGS='--listen --role NAP'
+#PANDARGS='--search --cache --persist'
diff --git a/SOURCES/pand.init b/SOURCES/pand.init
new file mode 100755
index 0000000..5877e72
--- /dev/null
+++ b/SOURCES/pand.init
@@ -0,0 +1,73 @@
+#!/bin/sh
+
+# chkconfig:	- 26 89
+
+### BEGIN INIT INFO
+# Required-Start: bluetooth
+# Default-Start:
+# Short-Description: Bluetooth Personal Area Networking Daemon.
+# Description: Bluetooth Personal Area Networking Daemon. Provides network
+# services over Bluetooth.
+### END INIT INFO
+
+# Source function library.
+. /etc/rc.d/init.d/functions
+
+[ -f /etc/sysconfig/network ] && . /etc/sysconfig/network
+
+[ "${NETWORKING}" = "yes" ] || exit 0
+
+[ -r /etc/sysconfig/pand ] && . /etc/sysconfig/pand
+
+start() 
+{
+	[ -z "$PANDARGS" ] && exit 6
+        [ -x /etc/bluetooth/pan/system-up ] && /etc/bluetooth/pan/system-up
+
+        echo -n $"Starting pand: "
+        daemon /usr/bin/pand $PANDARGS
+	RETVAL=$?
+        echo
+	[ $RETVAL = 0 ] && touch /var/lock/subsys/pand
+	return $RETVAL
+}
+
+stop() 
+{
+        echo -n $"Shutting down pand: "
+	/usr/bin/pand -K
+	killproc pand
+	RETVAL=$?
+        [ -x /etc/bluetooth/pan/system-down ] && /etc/bluetooth/pan/system-down
+	rm -f  /var/lock/subsys/pand
+        echo
+	return $RETVAL
+}
+
+[ -f /usr/bin/pand ] || exit 0
+
+# See how we were called.
+case "$1" in
+  start)
+	start
+        ;;
+  stop)
+	stop
+        ;;
+  force-reload|restart|reload)
+	stop
+	start
+	;;
+  try-restart|condrestart)
+	[ -e /var/lock/subsys/pand ] && (stop; start)
+	;;
+  status)
+  	status pand
+	RETVAL=$?
+	;;
+  *)
+        echo $"Usage: $0 {start|stop|status|restart|reload|condrestart}"
+        exit 3
+esac
+
+exit $RETVAL
diff --git a/SOURCES/rfcomm.init b/SOURCES/rfcomm.init
new file mode 100755
index 0000000..b1e53da
--- /dev/null
+++ b/SOURCES/rfcomm.init
@@ -0,0 +1,65 @@
+#!/bin/sh
+
+# chkconfig:	- 27 88
+
+### BEGIN INIT INFO
+# Required-Start: bluetooth
+# Default-Start: 
+# Short-Description: Bluetooth RFCOMM setup.
+# Description: Bluetooth RFCOMM setup. Sets up serial devices
+# over Bluetooth.
+### END INIT INFO
+
+# Source function library.
+. /etc/rc.d/init.d/functions
+
+[ -f /etc/sysconfig/network ] && . /etc/sysconfig/network
+
+[ "${NETWORKING}" = "yes" ] || exit 0
+
+start() 
+{
+        echo -n $"Starting rfcomm: "
+        rfcomm bind all
+	RETVAL=$?
+	echo
+	[ $RETVAL = 0 ] && touch /var/lock/subsys/rfcomm
+        return $RETVAL
+}
+
+stop() 
+{
+        echo -n $"Shutting down rfcomm: "
+	rfcomm release all
+	RETVAL=$?
+
+	rm -f  /var/lock/subsys/rfcomm
+        echo
+	return $RETVAL
+}
+
+# See how we were called.
+case "$1" in
+  start)
+	start
+        ;;
+  stop)
+	stop
+        ;;
+  force-reload|restart|reload)
+	stop
+	start
+	;;
+  try-restart|condrestart)
+	[ -e /var/lock/subsys/rfcomm ] && (stop; start)
+	;;
+  status)
+        RETVAL=1
+  	[ -e /var/lock/subsys/rfcomm ] && RETVAL=0
+	;;
+  *)
+        echo $"Usage: $0 {start|stop|status|restart|reload|condrestart}"
+        exit 3
+esac
+
+exit $RETVAL
diff --git a/SPECS/bluez.spec b/SPECS/bluez.spec
new file mode 100644
index 0000000..6d9dca9
--- /dev/null
+++ b/SPECS/bluez.spec
@@ -0,0 +1,848 @@
+Summary: Bluetooth utilities
+Name: bluez
+Version: 4.101
+Release: 9%{?dist}
+License: GPLv2+
+Group: Applications/System
+URL: http://www.bluez.org/
+
+Source: http://www.kernel.org/pub/linux/bluetooth/%{name}-%{version}.tar.gz
+Source1: bluez.gitignore
+Source3: dund.init
+Source4: dund.conf
+Source5: pand.init
+Source6: pand.conf
+Source7: rfcomm.init
+Source8: bluez-uinput.modules
+
+# https://bugzilla.redhat.com/show_bug.cgi?id=877998
+Patch1: 0001-hid2hci-change-subsystem-in-udev-rule-from-usb-to-us.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=983161
+Patch2: 0001-build-Enable-BIND_NOW.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=498756
+Patch4: 0001-Activate-the-Socket-Mobile-CF-kit.patch
+# http://thread.gmane.org/gmane.linux.bluez.kernel/2396
+Patch5: 0001-Add-sixaxis-cable-pairing-plugin.patch
+# PS3 BD Remote patches
+Patch6: 0001-input-Add-helper-function-to-request-disconnect.patch
+Patch7: 0002-fakehid-Disconnect-from-PS3-remote-after-10-mins.patch
+Patch8: 0003-fakehid-Use-the-same-constant-as-declared.patch
+# Upstream patches
+Patch9: 0001-audio-Permit-concurrent-use-of-AG-and-HF-roles.patch
+Patch10: 0001-Fix-GDBus-flags-after-conversion-to-macros.patch
+Patch11: 0001-input-Fix-not-adding-watches-when-io-channel-is-conn.patch
+Patch12: 0001-network-fix-network-Connect-method-parameters.patch
+Patch13: 0001-network-NULL-dereference-fix.patch
+# Ubuntu patches
+Patch14: 0001-work-around-Logitech-diNovo-Edge-keyboard-firmware-i.patch
+Patch15: 0001-Enable-the-Gateway-and-Source-audio-profiles-by-defa.patch
+
+BuildRequires: git
+BuildRequires: flex
+BuildRequires: dbus-devel >= 0.90
+BuildRequires: libusb-devel, glib2-devel, alsa-lib-devel
+BuildRequires: libsndfile-devel
+BuildRequires: libcap-ng-devel
+BuildRequires: readline-devel
+# For cable pairing
+BuildRequires: systemd-devel
+# For cups
+BuildRequires: cups-devel
+%ifnarch s390 s390x
+BuildRequires: libusbx-devel
+%endif
+
+# For rebuild
+BuildRequires: libtool autoconf automake
+
+Requires: bluez-libs = %{version}-%{release}
+Requires: systemd
+Requires: dbus >= 0.60
+Requires: hwdata >= 0.215
+%ifnarch s390 s390x
+Requires: dbus-bluez-pin-helper
+%endif
+Requires(preun): /bin/systemctl
+Requires(post): /bin/systemctl
+
+%description
+Utilities for use in Bluetooth applications:
+	- hcitool
+	- hciattach
+	- hciconfig
+	- bluetoothd
+	- l2ping
+	- start scripts (Red Hat)
+	- pcmcia configuration files
+
+The BLUETOOTH trademarks are owned by Bluetooth SIG, Inc., U.S.A.
+
+%package libs
+Summary: Libraries for use in Bluetooth applications
+Group: System Environment/Libraries
+
+%package libs-devel
+Summary: Development libraries for Bluetooth applications
+Group: Development/Libraries
+Requires: bluez-libs = %{version}-%{release}
+Requires: pkgconfig
+
+%package cups
+Summary: CUPS printer backend for Bluetooth printers
+Group: System Environment/Daemons
+Requires: bluez-libs = %{version}-%{release}
+Requires: cups
+
+%package alsa
+Summary: ALSA support for Bluetooth audio devices
+Group: System Environment/Daemons
+Requires: bluez-libs = %{version}-%{release}
+
+%package compat
+Summary: Compatibility utilities for Bluetooth devices
+Group: System Environment/Daemons
+Requires: bluez-libs = %{version}-%{release}
+Requires: bluez = %{version}-%{release}
+Requires(preun): /sbin/chkconfig, /sbin/service
+Requires(post): /sbin/chkconfig, /sbin/service
+
+%package hid2hci
+Summary: Put HID proxying bluetooth HCI's into HCI mode
+Group: System Environment/Daemons
+Requires: bluez-libs = %{version}-%{release}
+Requires: bluez = %{version}-%{release}
+
+%description cups
+This package contains the CUPS backend
+
+%description alsa
+This package contains ALSA support for Bluetooth audio devices
+
+%description libs
+Libraries for use in Bluetooth applications.
+
+%description libs-devel
+bluez-libs-devel contains development libraries and headers for
+use in Bluetooth applications.
+
+%description compat
+This package contains compatibility utilities for Bluetooth devices.
+This includes hidd, dund and pand.
+
+%description hid2hci
+Most allinone PC's and bluetooth keyboard / mouse sets which include a
+bluetooth dongle, ship with a so called HID proxying bluetooth HCI.
+The HID proxying makes the keyboard / mouse show up as regular USB HID
+devices (after connecting using the connect button on the device + keyboard),
+which makes them work without requiring any manual configuration.
+
+The bluez-hid2hci package contains the hid2hci utility and udev rules to
+automatically switch supported Bluetooth devices into regular HCI mode.
+
+Install this package if you want to use the bluetooth function of the HCI
+with other bluetooth devices like for example a mobile phone.
+
+Note that after installing this package you will first need to pair your
+bluetooth keyboard and mouse with the bluetooth adapter before you can use
+them again. Since you cannot use your bluetooth keyboard and mouse until
+they are paired, this will require the use of a regular (wired) USB keyboard
+and mouse.
+
+%prep
+
+%setup -q
+git init
+if [ -z "$GIT_COMMITTER_NAME" ]; then
+    git config user.email "bluez-owner@fedoraproject.org"
+    git config user.name "Fedora Bluez maintainers"
+fi
+cp %{SOURCE1} .gitignore
+git add .
+git commit -a -q -m "%{version} baseline."
+
+git am -p1 %{patches} < /dev/null
+
+%build
+libtoolize -f -c
+autoreconf -vif
+%configure --enable-cups --enable-dfutool --enable-tools --enable-bccmd --enable-hidd --enable-pand --enable-dund --enable-hid2hci --with-ouifile=/usr/share/hwdata/oui.txt --with-systemdsystemunitdir=/lib/systemd/system --enable-wiimote
+make V=1
+
+%install
+make install DESTDIR=$RPM_BUILD_ROOT
+/sbin/ldconfig -n $RPM_BUILD_ROOT/%{_libdir}
+# Remove autocrap and libtool droppings
+rm -f $RPM_BUILD_ROOT/%{_libdir}/*.la				\
+	$RPM_BUILD_ROOT/%{_libdir}/alsa-lib/*.la		\
+	$RPM_BUILD_ROOT/%{_libdir}/bluetooth/plugins/*.la
+
+for a in dund pand rfcomm ; do
+	install -D -m0755 $RPM_SOURCE_DIR/$a.init $RPM_BUILD_ROOT%{_sysconfdir}/rc.d/init.d/$a
+	if [ -e $RPM_SOURCE_DIR/$a.conf ] ; then
+		install -D -m0644 $RPM_SOURCE_DIR/$a.conf $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/$a
+	fi
+done
+
+# Remove the cups backend from libdir, and install it in /usr/lib whatever the install
+if test -d ${RPM_BUILD_ROOT}/usr/lib64/cups ; then
+	install -D -m0755 ${RPM_BUILD_ROOT}/usr/lib64/cups/backend/bluetooth ${RPM_BUILD_ROOT}%_cups_serverbin/backend/bluetooth
+	rm -rf ${RPM_BUILD_ROOT}%{_libdir}/cups
+fi
+
+rm -f ${RPM_BUILD_ROOT}/%{_sysconfdir}/udev/*.rules ${RPM_BUILD_ROOT}/lib/udev/rules.d/*.rules
+install -D -p -m0644 scripts/bluetooth-serial.rules ${RPM_BUILD_ROOT}/lib/udev/rules.d/97-bluetooth-serial.rules
+install -D -p -m0644 scripts/bluetooth-hid2hci.rules ${RPM_BUILD_ROOT}/lib/udev/rules.d/97-bluetooth-hid2hci.rules
+install -D -m0755 scripts/bluetooth_serial ${RPM_BUILD_ROOT}/lib/udev/bluetooth_serial
+
+install -D -m0755 %{SOURCE8} $RPM_BUILD_ROOT/%{_sysconfdir}/sysconfig/modules/bluez-uinput.modules
+
+install -d -m0755 $RPM_BUILD_ROOT/%{_localstatedir}/lib/bluetooth
+
+mkdir -p $RPM_BUILD_ROOT/%{_libdir}/bluetooth/
+
+install -D -p -m0644 audio/audio.conf ${RPM_BUILD_ROOT}/etc/bluetooth/
+
+%post libs -p /sbin/ldconfig
+
+%post
+if [ $1 -eq 1 ]; then
+	/bin/systemctl enable bluetooth.service >/dev/null 2>&1 || :
+fi
+
+%postun libs -p /sbin/ldconfig
+
+%preun
+if [ $1 -eq 0 ]; then
+        /bin/systemctl --no-reload disable bluetooth.service >/dev/null 2>&1 || :
+        /bin/systemctl stop bluetooth.service >/dev/null 2>&1 || :
+fi
+
+%postun
+/bin/systemctl daemon-reload >/dev/null 2>&1 || :
+if [ $1 -ge 1 ] ; then
+        /bin/systemctl try-restart bluetooth.service >/dev/null 2>&1 || :
+fi
+
+%triggerun -- bluez < 4.94-4
+/bin/systemctl --no-reload enable bluetooth.service >/dev/null 2>&1 || :
+
+%post compat
+/sbin/chkconfig --add dund
+/sbin/chkconfig --add pand
+/sbin/chkconfig --add rfcomm
+if [ "$1" -ge "1" ]; then
+	/sbin/service dund condrestart >/dev/null 2>&1 || :
+	/sbin/service pand condrestart >/dev/null 2>&1 || :
+	/sbin/service rfcomm condrestart >/dev/null 2>&1 || :
+fi
+exit 0
+
+%preun compat
+if [ "$1" = "0" ]; then
+	/sbin/service dund stop >/dev/null 2>&1 || :
+	/sbin/service pand stop >/dev/null 2>&1 || :
+	/sbin/service rfcomm stop >/dev/null 2>&1 || :
+	/sbin/chkconfig --del dund
+	/sbin/chkconfig --del pand
+	/sbin/chkconfig --del rfcomm
+fi
+
+%post hid2hci
+/sbin/udevadm trigger --subsystem-match=usb
+
+%files
+%defattr(-,root,root,-)
+%{_bindir}/ciptool
+%{_bindir}/dfutool
+%{_bindir}/hcitool
+%{_bindir}/l2ping
+%{_bindir}/rfcomm
+%{_bindir}/sdptool
+%{_bindir}/gatttool
+%{_sbindir}/*
+%{_mandir}/man1/ciptool.1.gz
+%{_mandir}/man1/dfutool.1.gz
+%{_mandir}/man1/hcitool.1.gz
+%{_mandir}/man1/rfcomm.1.gz
+%{_mandir}/man1/sdptool.1.gz
+%{_mandir}/man8/*
+%exclude %{_mandir}/man8/hid2hci.8*
+%dir %{_sysconfdir}/bluetooth/
+%config(noreplace) %{_sysconfdir}/bluetooth/main.conf
+%config(noreplace) %{_sysconfdir}/bluetooth/audio.conf
+%config(noreplace) %{_sysconfdir}/sysconfig/modules/bluez-uinput.modules
+%config %{_sysconfdir}/dbus-1/system.d/bluetooth.conf
+%{_libdir}/bluetooth/
+/lib/udev/bluetooth_serial
+/lib/udev/rules.d/97-bluetooth-serial.rules
+%{_localstatedir}/lib/bluetooth
+%{_datadir}/dbus-1/system-services/org.bluez.service
+/usr/lib/systemd/system/bluetooth.service
+
+%files libs
+%defattr(-,root,root,-)
+%{_libdir}/libbluetooth.so.*
+%doc AUTHORS COPYING INSTALL ChangeLog README
+
+%files libs-devel
+%defattr(-,root,root,-)
+%{_libdir}/libbluetooth.so
+%dir %{_includedir}/bluetooth
+%{_includedir}/bluetooth/*
+%{_libdir}/pkgconfig/bluez.pc
+
+%files cups
+%defattr(-,root,root,-)
+%_cups_serverbin/backend/bluetooth
+
+%files alsa
+%defattr(-,root,root,-)
+%{_libdir}/alsa-lib/*.so
+%{_datadir}/alsa/bluetooth.conf
+
+%files compat
+%defattr(-,root,root,-)
+%{_bindir}/dund
+%{_bindir}/pand
+%{_bindir}/hidd
+%config(noreplace) %{_sysconfdir}/bluetooth/rfcomm.conf
+%{_sysconfdir}/rc.d/init.d/dund
+%{_sysconfdir}/rc.d/init.d/rfcomm
+%{_sysconfdir}/rc.d/init.d/pand
+%config(noreplace) %{_sysconfdir}/sysconfig/dund
+%config(noreplace) %{_sysconfdir}/sysconfig/pand
+%{_mandir}/man1/dund.1.gz
+%{_mandir}/man1/hidd.1.gz
+%{_mandir}/man1/pand.1.gz
+
+%files hid2hci
+%defattr(-,root,root,-)
+/usr/lib/udev/hid2hci
+%{_mandir}/man8/hid2hci.8*
+/lib/udev/rules.d/97-bluetooth-hid2hci.rules
+%exclude /usr/lib/udev/rules.d/97-bluetooth-hid2hci.rules
+
+%changelog
+* Thu Nov 07 2013 Bastien Nocera <bnocera@redhat.com> 4.101-9
+- Add linker flags to BIND_NOW
+Resolves: #983161
+
+* Mon Jul 22 2013 Bastien Nocera <bnocera@redhat.com> 4.101-8
+- Remove GStreamer plugins, they're already in GStreamer 1.0
+
+* Tue Jun 25 2013 Bastien Nocera <bnocera@redhat.com> 4.101-7
+- Remove socket interface enablement for A2DP (#964031)
+
+* Mon Jan 28 2013 Peter Robinson <pbrobinson@fedoraproject.org> 4.101-6
+- Add -vif to autoreconf to fix build issues
+
+* Thu Jan 10 2013 Bastien Nocera <bnocera@redhat.com> 4.101-5
+- Use git to manage distro patches
+- Add numerous upstream and downstream patches (#892929)
+
+* Wed Nov 21 2012 Bastien Nocera <bnocera@redhat.com> 4.101-4
+- Clean up requires and build requires
+- Use CUPS macro (#772236)
+- Enable audio socket so a2dp works in PulseAudio again (#874015)
+- Fix hid2hci not working with recent kernels (#877998)
+
+* Wed Aug 15 2012 Bastien Nocera <bnocera@redhat.com> 4.101-3
+- Enable pairing Wiimote support (#847481)
+
+* Wed Jul 18 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4.101-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
+
+* Sun Jun 17 2012 Bastien Nocera <bnocera@redhat.com> 4.100-2
+- Add PS3 BD Remote patches (power saving)
+
+* Thu Jun 14 2012 Bastien Nocera <bnocera@redhat.com> 4.100-1
+- Update to 4.100
+
+* Fri Jun  1 2012 Peter Robinson <pbrobinson@fedoraproject.org> - 4.99-2
+- Add patch for udev change to fix FTBFS on rawhide
+- Drop sbc patch as fixed in gcc 4.7 final
+
+* Tue Mar 06 2012 Bastien Nocera <bnocera@redhat.com> 4.99-1
+- Update to 4.99
+
+* Tue Feb 28 2012 Petr Pisar <ppisar@redhat.com> - 4.98-3
+- Make headers compilable with g++ 4.7 (bug #791292)
+
+* Fri Feb 24 2012 Peter Robinson <pbrobinson@fedoraproject.org> 4.98-2
+- Add mmx patch to fix build of sbc component
+- clean up spec, drop ancient obsoletes
+
+* Fri Jan 13 2012 Bastien Nocera <bnocera@redhat.com> 4.98-1
+- Update to 4.98
+
+* Thu Jan 12 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4.97-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
+
+* Fri Dec 30 2011 Bastien Nocera <bnocera@redhat.com> 4.97-1
+- Update to 4.97
+
+* Mon Sep  5 2011 Hans de Goede <hdegoede@redhat.com> 4.96-3
+- Put hid2hci into its own (optional) subpackage, so that people who
+  just want to use their HID proxying HCI with the keyboard and mouse
+  it came with, will have things working out of the box.
+- Put udev rules in /lib/udev, where package installed udev rules belong
+
+* Mon Aug 29 2011 Hans de Goede <hdegoede@redhat.com> 4.96-2
+- hid2hci was recently removed from udev and added to bluez in 4.93,
+  udev in Fedora-16 no longer has hid2hci -> enable it in our bluez builds.
+  This fixes bluetooth not working on machines where the bluetooth hci
+  initially shows up as a hid device, such as with many Dell laptops.
+
+* Mon Aug 01 2011 Bastien Nocera <bnocera@redhat.com> 4.96-1
+- Update to 4.96
+
+* Tue Jul 05 2011 Bastien Nocera <bnocera@redhat.com> 4.95-1
+- Update to 4.95
+
+* Tue Jun 28 2011 Lennart Poettering <lpoetter@redhat.com> - 4.94-4
+- Enable bluetoothd on all upgrades from 4.87-6 and older, in order to fix up broken F15 installations
+
+* Thu Jun 23 2011 Bastien Nocera <bnocera@redhat.com> 4.94-3
+- Update patches to apply correctly
+- First compilable version with hostnamed support
+
+* Mon Jun 20 2011 Lennart Poettering <lpoetter@redhat.com> - 4.94-2
+- Enable bluetoothd by default
+- Follow-up on https://bugzilla.redhat.com/show_bug.cgi?id=694519 also fixing upgrades
+
+* Wed Jun 01 2011 Bastien Nocera <bnocera@redhat.com> 4.94-1
+- Update to 4.94
+
+* Wed May 25 2011 Bastien Nocera <bnocera@redhat.com> 4.93-1
+- Update to 4.93
+
+* Thu Apr  7 2011 Lennart Poettering <lpoetter@redhat.com> - 4.90-2
+- Update systemd patch to make it possible to disable bluez
+
+* Thu Mar 17 2011 Bastien Nocera <bnocera@redhat.com> 4.90-1
+- Update to 4.90
+
+* Mon Feb 21 2011 Bastien Nocera <bnocera@redhat.com> 4.89-1
+- Update to 4.89
+
+* Mon Feb 14 2011 Bastien Nocera <bnocera@redhat.com> 4.88-1
+- Update to 4.88
+
+* Mon Feb 07 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4.87-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
+
+* Wed Jan 26 2011 Bastien Nocera <bnocera@redhat.com> 4.87-1
+- Update to 4.87
+
+* Thu Jan 20 2011 Bastien Nocera <bnocera@redhat.com> 4.86-1
+- Update to 4.86
+
+* Thu Jan 13 2011 Bastien Nocera <bnocera@redhat.com> 4.85-1
+- Update to 4.85
+
+* Sun Dec 19 2010 Bastien Nocera <bnocera@redhat.com> 4.82-1
+- Update to 4.82
+
+* Wed Dec 01 2010 Bastien Nocera <bnocera@redhat.com> 4.81-1
+- Update to 4.81
+
+* Mon Nov 22 2010 Bastien Nocera <bnocera@redhat.com> 4.80-1
+- Update to 4.80
+
+* Tue Nov 09 2010 Bastien Nocera <bnocera@redhat.com> 4.79-1
+- Update to 4.79
+
+* Sat Nov 06 2010 Bastien Nocera <bnocera@redhat.com> 4.78-1
+- Update to 4.78
+
+* Wed Oct 27 2010 Bastien Nocera <bnocera@redhat.com> 4.77-1
+- Update to 4.77
+
+* Sat Oct 16 2010 Bastien Nocera <bnocera@redhat.com> 4.76-1
+- Update to 4.76
+
+* Tue Oct 05 2010 Bastien Nocera <bnocera@redhat.com> 4.74-1
+- Update to 4.74
+
+* Mon Oct 04 2010 Bastien Nocera <bnocera@redhat.com> 4.73-1
+- Update to 4.73
+
+* Wed Sep 29 2010 jkeating - 4.72-2
+- Rebuilt for gcc bug 634757
+
+* Wed Sep 22 2010 Bastien Nocera <bnocera@redhat.com> 4.72-1
+- Update to 4.72
+
+* Fri Sep 17 2010 Bill Nottingham <notting@redhat.com> 4.71-4
+- sync release number (but not package) with F-14
+
+* Tue Sep 14 2010 Bastien Nocera <bnocera@redhat.com> 4.71-3
+- systemd hookup and cleanups from Lennart
+
+* Thu Sep 09 2010 Bastien Nocera <bnocera@redhat.com> 4.71-1
+- Update to 4.71
+
+* Thu Aug 26 2010 Bastien Nocera <bnocera@redhat.com> 4.70-1
+- Update to 4.70
+
+* Sat Jul 31 2010 Orcan Ogetbil <oget[dot]fedora[at]gmail[dot]com> 4.69-4
+- Re-add Requires: dbus-bluez-pin-helper, since blueman is now in
+
+* Sat Jul 31 2010 Orcan Ogetbil <oget[dot]fedora[at]gmail[dot]com> 4.69-3
+- Comment out Requires: dbus-bluez-pin-helper for bootstrapping. Otherwise
+  it drags in the old blueman, built against python-2.6
+* Fri Jul 23 2010 Bastien Nocera <bnocera@redhat.com> 4.69-2
+- Don't allow installing bluez-compat on its own
+
+* Fri Jul 16 2010 Bastien Nocera <bnocera@redhat.com> 4.69-1
+- Update to 4.69
+
+* Sun Jul 11 2010 Dan Horák <dan[at]danny.cz> 4.66-3
+- don't require the pin helper on s390(x) now, we can disable the whole
+  bluetooth stack in the future
+
+* Mon Jun 21 2010 Bastien Nocera <bnocera@redhat.com> 4.66-2
+- Move hidd, pand and dund man pages to the -compat
+  sub-package (#593578)
+
+* Mon Jun 14 2010 Bastien Nocera <bnocera@redhat.com> 4.66-1
+- Update to 4.66
+
+* Mon May 24 2010 Bastien Nocera <bnocera@redhat.com> 4.65-1
+- Update to 4.65
+
+* Thu Apr 29 2010 Bastien Nocera <bnocera@redhat.com> 4.64-1
+- Update to 4.64
+
+* Mon Apr 12 2010 Bastien Nocera <bnocera@redhat.com> 4.63-3
+- And actually apply the aforementioned patch
+
+* Mon Apr 12 2010 Bastien Nocera <bnocera@redhat.com> 4.63-2
+- Fix pairing and using mice, due to recent BtIO changes
+
+* Fri Mar 26 2010 Bastien Nocera <bnocera@redhat.com> 4.63-1
+- Update to 4.63
+
+* Mon Mar 08 2010 Bastien Nocera <bnocera@redhat.com> 4.62-1
+- Update to 4.62
+
+* Mon Feb 15 2010 Bastien Nocera <bnocera@redhat.com> 4.61-1
+- Update to 4.61
+- Remove Wacom tablet enabler, now in the kernel
+- Fix linking with new DSO rules (#564799)
+
+* Mon Feb 15 2010 Bastien Nocera <bnocera@redhat.com> 4.60-2
+- Fix typo in init script (#558993)
+
+* Sun Jan 10 2010 Bastien Nocera <bnocera@redhat.com> 4.60-1
+- Update to 4.60
+
+* Fri Dec 25 2009 Bastien Nocera <bnocera@redhat.com> 4.59-1
+- Update to 4.59
+
+* Mon Nov 16 2009 Bastien Nocera <bnocera@redhat.com> 4.58-1
+- Update to 4.58
+
+* Mon Nov 02 2009 Bastien Nocera <bnocera@redhat.com> 4.57-2
+- Move the rfcomm.conf to the compat package, otherwise
+  the comments at the top of it are confusing
+
+* Sat Oct 31 2009 Bastien Nocera <bnocera@redhat.com> 4.57-1
+- Update to 4.57
+
+* Sat Oct 10 2009 Bastien Nocera <bnocera@redhat.com> 4.56-1
+- Update to 4.56
+
+* Fri Oct 09 2009 Bastien Nocera <bnocera@redhat.com> 4.55-2
+- Update cable pairing plugin to use libudev
+
+* Mon Oct 05 2009 Bastien Nocera <bnocera@redhat.com> 4.55-1
+- Update to 4.55
+- Add libcap-ng support to drop capabilities (#517660)
+
+* Thu Sep 24 2009 Bastien Nocera <bnocera@redhat.com> 4.54-1
+- Update to 4.54
+
+* Wed Sep 16 2009 Bastien Nocera <bnocera@redhat.com> 4.53-2
+- Update cable plugin for gudev changes
+
+* Thu Sep 10 2009 Bastien Nocera <bnocera@redhat.com> 4.53-1
+- Update to 4.53
+
+* Fri Sep 04 2009 Bastien Nocera <bnocera@redhat.com> 4.52-1
+- Update to 4.52
+
+* Thu Sep 03 2009 Bastien Nocera <bnocera@redhat.com> 4.51-1
+- Update to 4.51
+
+* Tue Sep 01 2009 Bastien Nocera <bnocera@redhat.com> 4.50-2
+- Remove obsoleted patches
+- Add another CUPS backend patch
+- Update cable pairing patch for new build system
+
+* Tue Sep 01 2009 Bastien Nocera <bnocera@redhat.com> 4.50-1
+- Update to 4.50
+
+* Tue Aug 25 2009 Karsten Hopp <karsten@redhat.com> 4.47-6
+- don't buildrequire libusb1 on s390*
+
+* Tue Aug 11 2009 Bastien Nocera <bnocera@redhat.com> 4.47-5
+- More upstream CUPS fixes
+
+* Tue Aug 11 2009 Bastien Nocera <bnocera@redhat.com> 4.47-4
+- Fix cups discovery the first time we discover a device
+
+* Mon Aug 10 2009 Ville Skyttä <ville.skytta@iki.fi> - 4.47-3
+- Use bzipped upstream tarball.
+
+* Wed Aug 05 2009 Bastien Nocera <bnocera@redhat.com> 4.47-2
+- Remove hid2hci calls, they're in udev now
+- Work-around udev bug, bluetoothd wasn't getting enabled
+  on coldplug
+
+* Sun Aug 02 2009 Bastien Nocera <bnocera@redhat.com> 4.47-1
+- Update to 4.47
+
+* Wed Jul 29 2009 Bastien Nocera <bnocera@redhat.com> 4.46-3
+- Add rfkill plugin to restore the state of the adapters
+  after coming back from a blocked adapter
+
+* Fri Jul 24 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4.46-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild
+
+* Sun Jul 19 2009 Bastien Nocera <bnocera@redhat.com> 4.46-1
+- Update to 4.46
+
+* Wed Jul 08 2009 Bastien Nocera <bnocera@redhat.com> 4.45-1
+- Update to 4.45
+
+* Tue Jul 07 2009 Bastien Nocera <bnocera@redhat.com> 4.44-1
+- Update to 4.44
+
+* Fri Jul 03 2009 Bastien Nocera <bnocera@redhat.com> 4.43-2
+- Up the required udev requires so bluetoothd gets started
+  on boot when an adapter is present
+
+* Fri Jul 03 2009 Bastien Nocera <bnocera@redhat.com> 4.43-1
+- Update to 4.43
+
+* Sun Jun 21 2009 Bastien Nocera <bnocera@redhat.com> 4.42-2
+- Update to 4.42
+
+* Thu Jun 11 2009 Bastien Nocera <bnocera@redhat.com> 4.41-2
+- Switch to on-demand start/stop using udev
+
+* Mon Jun 08 2009 Bastien Nocera <bnocera@redhat.com> 4.41-1
+- Update to 4.41
+
+* Fri Jun 05 2009 Bastien Nocera <bnocera@redhat.com> 4.40-2
+- Add patch to allow Sixaxis pairing
+
+* Tue May 19 2009 Bastien Nocera <bnocera@redhat.com> 4.40-1
+- Update to 4.40
+
+* Sat May 09 2009 Bastien Nocera <bnocera@redhat.com> 4.39-1
+- Update to 4.39
+
+* Tue May 05 2009 Petr Lautrbach <plautrba@redhat.com> 4.38-3
+- Start/stop the bluetooth service via udev (#484345)
+
+* Tue May 05 2009 Bastien Nocera <bnocera@redhat.com> 4.38-2
+- Add patch to activate the Socket Mobile CF kit (#498756)
+
+* Mon May 04 2009 Bastien Nocera <bnocera@redhat.com> 4.38-1
+- Update to 4.38
+
+* Wed Apr 29 2009 Bastien Nocera <bnocera@redhat.com> 4.37-2
+- Split off dund, pand, hidd, and rfcomm helper into a compat package
+  (#477890, #473892)
+
+* Thu Apr 23 2009 - Bastien Nocera <bnocera@redhat.com> - 4.37-1
+- Update to 4.37
+
+* Fri Apr 17 2009 - Bastien Nocera <bnocera@redhat.com> - 4.36-1
+- Update to 4.36
+
+* Sat Apr 11 2009 - Bastien Nocera <bnocera@redhat.com> - 4.35-1
+- Update to 4.35
+
+* Fri Apr 03 2009 - Bastien Nocera <bnocera@redhat.com> - 4.34-3
+- Avoid disconnecting audio devices straight after they're connected
+
+* Fri Apr 03 2009 - Bastien Nocera <bnocera@redhat.com> - 4.34-2
+- Don't crash when audio devices are registered and the adapter
+  is removed
+
+* Sun Mar 29 2009 - Bastien Nocera <bnocera@redhat.com> - 4.34-1
+- Update to 4.34
+
+* Tue Mar 24 2009 - Bastien Nocera <bnocera@redhat.com> - 4.33-11
+- Fix a possible crasher
+
+* Mon Mar 16 2009 - Bastien Nocera <bnocera@redhat.com> - 4.33-1
+- Update to 4.33
+
+* Sat Mar 14 2009 - Bastien Nocera <bnocera@redhat.com> - 4.32-10
+- Fix a couple of warnings in the CUPS/BlueZ 4.x patch
+
+* Fri Mar 13 2009 - Bastien Nocera <bnocera@redhat.com> - 4.32-9
+- Switch Wacom Bluetooth tablet to mode 2
+
+* Mon Mar 09 2009 - Bastien Nocera <bnocera@redhat.com> - 4.32-8
+- Port CUPS backend to BlueZ 4.x
+
+* Mon Mar 09 2009 - Bastien Nocera <bnocera@redhat.com> - 4.32-7
+- A (slightly) different fix for parsing to XML when it contains a NULL
+
+* Mon Mar 09 2009 - Bastien Nocera <bnocera@redhat.com> - 4.32-6
+- Fix sdp_copy_record(), so records are properly exported through D-Bus
+
+* Fri Mar 06 2009 - Bastien Nocera <bnocera@redhat.com> - 4.32-5
+- Fix SDP parsing to XML when it contains NULLs
+
+* Thu Mar 05 2009 - Bastien Nocera <bnocera@redhat.com> - 4.32-4
+- Work-around broken devices that export their names in ISO-8859-1
+  (#450081)
+
+* Thu Mar 05 2009 - Bastien Nocera <bnocera@redhat.com> - 4.32-3
+- Fix permissions on the udev rules (#479348)
+
+* Wed Mar 04 2009 - Bastien Nocera <bnocera@redhat.com> - 4.32-2
+- Own /usr/lib*/bluetooth and children (#474632)
+
+* Mon Mar 2 2009 Lennart Poettering <lpoetter@redhat.com> - 4.32-1
+- Update to 4.32
+
+* Thu Feb 26 2009 Lennart Poettering <lpoetter@redhat.com> - 4.31-1
+- Update to 4.31
+
+* Mon Feb 23 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4.30-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
+
+* Mon Feb 23 2009 - Bastien Nocera <bnocera@redhat.com> - 4.30-2
+- Fix the cups backend being a libtool stub
+
+* Thu Feb 12 2009 - Bastien Nocera <bnocera@redhat.com> - 4.30-1
+- Update to 4.30
+
+* Thu Feb 12 2009 Karsten Hopp <karsten@redhat.com> 4.29-3
+- disable 0001-Add-icon-for-other-audio-device.patch, already upstream
+
+* Thu Feb 12 2009 Karsten Hopp <karsten@redhat.com> 4.29-2
+- bluez builds fine on s390(x) and the packages are required to build
+  other packages, drop ExcludeArch
+
+* Mon Feb 09 2009 - Bastien Nocera <bnocera@redhat.com> - 4.29-1
+- Update to 4.29
+
+* Mon Feb 02 2009 - Bastien Nocera <bnocera@redhat.com> - 4.28-1
+- Update to 4.28
+
+* Mon Jan 19 2009 - Bastien Nocera <bnocera@redhat.com> - 4.27-1
+- Update to 4.27
+
+* Fri Jan 09 2009 - Bastien Nocera <bnocera@redhat.com> - 4.26-1
+- Update to 4.26
+
+* Sat Jan 03 2009 - Bastien Nocera <bnocera@redhat.com> - 4.25-1
+- Update to 4.25
+
+* Tue Dec 09 2008 - Bastien Nocera <bnocera@redhat.com> - 4.22-2
+- Fix D-Bus configuration for latest D-Bus (#475069)
+
+* Mon Dec 08 2008 - Bastien Nocera <bnocera@redhat.com> - 4.22-1
+- Update to 4.22
+
+* Mon Dec 01 2008 - Bastien Nocera <bnocera@redhat.com> - 4.21-1
+- Update to 4.21
+
+* Fri Nov 21 2008 - Bastien Nocera <bnocera@redhat.com> - 4.19-1
+- Update to 4.19
+
+* Mon Nov 17 2008 - Bastien Nocera <bnocera@redhat.com> - 4.18-1
+- Update to 4.18
+
+* Mon Oct 27 2008 - Bastien Nocera <bnocera@redhat.com> - 4.17-2
+- Own /var/lib/bluetooth (#468717)
+
+* Sun Oct 26 2008 - Bastien Nocera <bnocera@redhat.com> - 4.17-1
+- Update to 4.17
+
+* Tue Oct 21 2008 - Bastien Nocera <bnocera@redhat.com> - 4.16-1
+- Update to 4.16
+
+* Mon Oct 20 2008 - Bastien Nocera <bnocera@redhat.com> - 4.15-1
+- Update to 4.15
+
+* Fri Oct 17 2008 - Bastien Nocera <bnocera@redhat.com> - 4.14-2
+- Add script to autoload uinput on startup, so the PS3 remote
+  works out-of-the-box
+
+* Fri Oct 17 2008 - Bastien Nocera <bnocera@redhat.com> - 4.14-1
+- Update to 4.14
+
+* Tue Oct 14 2008 - Bastien Nocera <bnocera@redhat.com> - 4.13-3
+- Update udev rules (#246840)
+
+* Mon Oct 13 2008 - Bastien Nocera <bnocera@redhat.com> - 4.13-2
+- Fix PS3 BD remote input event generation
+
+* Fri Oct 10 2008 - Bastien Nocera <bnocera@redhat.com> - 4.13-1
+- Update to 4.13
+
+* Mon Oct 06 2008 - Bastien Nocera <bnocera@redhat.com> - 4.12-1
+- Update to 4.12
+
+* Sat Oct 04 2008 - Bastien Nocera <bnocera@redhat.com> - 4.11-1
+- Update to 4.11
+
+* Fri Oct 03 2008 - Bastien Nocera <bnocera@redhat.com> - 4.10-1
+- Update to 4.10
+
+* Mon Sep 29 2008 - Bastien Nocera <bnocera@redhat.com> - 4.9-1
+- Update to 4.9
+
+* Mon Sep 29 2008 - Bastien Nocera <bnocera@redhat.com> - 4.8-1
+- Update to 4.8
+
+* Fri Sep 26 2008 - Bastien Nocera <bnocera@redhat.com> - 4.7-1
+- Update to 4.7
+
+* Wed Sep 24 2008 - Bastien Nocera <bnocera@redhat.com> - 4.6-4
+- Fix patch application
+
+* Wed Sep 24 2008 - Bastien Nocera <bnocera@redhat.com> - 4.6-3
+- Add fuzz
+
+* Wed Sep 24 2008 - Bastien Nocera <bnocera@redhat.com> - 4.6-2
+- Fix possible crasher on resume from suspend
+
+* Sun Sep 14 2008 - David Woodhouse <David.Woodhouse@intel.com> - 4.6-1
+- Update to 4.6
+
+* Fri Sep 12 2008 - David Woodhouse <David.Woodhouse@intel.com> - 4.5-4
+- SDP browse fixes
+
+* Fri Sep 12 2008 - David Woodhouse <David.Woodhouse@intel.com> - 4.5-3
+- Bluez-alsa needs to provide/obsolete bluez-utils-alsa
+- Use versioned Obsoletes:
+
+* Fri Sep 12 2008 - David Woodhouse <David.Woodhouse@intel.com> - 4.5-2
+- Change main utils package name to 'bluez'; likewise its subpackages
+- Remove references to obsolete initscripts (hidd,pand,dund)
+
+* Fri Sep 12 2008 - Bastien Nocera <bnocera@redhat.com> - 4.5-1
+- Update to 4.5
+- Fix initscript to actually start bluetoothd by hand
+- Add chkconfig information to the initscript
+
+* Tue Sep 09 2008 - David Woodhouse <David.Woodhouse@intel.com> - 4.4-2
+- Fix rpmlint problems
+- Fix input device handling
+
+* Tue Sep 09 2008 - Bastien Nocera <bnocera@redhat.com> - 4.4-1
+- Update to 4.4
+- Update source address, and remove unneeded deps (thanks Marcel)
+
+* Mon Aug 11 2008 - Bastien Nocera <bnocera@redhat.com> - 4.1-1
+- Initial build