diff --git a/include/re_bfcp.h b/include/re_bfcp.h
new file mode 100644
index 0000000..cfeefd1
--- /dev/null
+++ b/include/re_bfcp.h
@@ -0,0 +1,286 @@
+/**
+ * @file re_bfcp.h Interface to Binary Floor Control Protocol (BFCP)
+ *
+ * Copyright (C) 2010 Creytiv.com
+ */
+
+
+/** BFCP Versions */
+enum {
+	BFCP_VER1 = 1,
+	BFCP_VER2 = 2,
+};
+
+/** BFCP Primitives */
+enum bfcp_prim {
+	BFCP_FLOOR_REQUEST        =  1,
+	BFCP_FLOOR_RELEASE        =  2,
+	BFCP_FLOOR_REQUEST_QUERY  =  3,
+	BFCP_FLOOR_REQUEST_STATUS =  4,
+	BFCP_USER_QUERY           =  5,
+	BFCP_USER_STATUS          =  6,
+	BFCP_FLOOR_QUERY          =  7,
+	BFCP_FLOOR_STATUS         =  8,
+	BFCP_CHAIR_ACTION         =  9,
+	BFCP_CHAIR_ACTION_ACK     = 10,
+	BFCP_HELLO                = 11,
+	BFCP_HELLO_ACK            = 12,
+	BFCP_ERROR                = 13,
+	BFCP_FLOOR_REQ_STATUS_ACK = 14,
+	BFCP_FLOOR_STATUS_ACK     = 15,
+	BFCP_GOODBYE              = 16,
+	BFCP_GOODBYE_ACK          = 17,
+};
+
+/** BFCP Attributes */
+enum bfcp_attrib {
+	BFCP_BENEFICIARY_ID     =  1,
+	BFCP_FLOOR_ID           =  2,
+	BFCP_FLOOR_REQUEST_ID   =  3,
+	BFCP_PRIORITY           =  4,
+	BFCP_REQUEST_STATUS     =  5,
+	BFCP_ERROR_CODE         =  6,
+	BFCP_ERROR_INFO         =  7,
+	BFCP_PART_PROV_INFO     =  8,
+	BFCP_STATUS_INFO        =  9,
+	BFCP_SUPPORTED_ATTRS    = 10,
+	BFCP_SUPPORTED_PRIMS    = 11,
+	BFCP_USER_DISP_NAME     = 12,
+	BFCP_USER_URI           = 13,
+	/* grouped: */
+	BFCP_BENEFICIARY_INFO   = 14,
+	BFCP_FLOOR_REQ_INFO     = 15,
+	BFCP_REQUESTED_BY_INFO  = 16,
+	BFCP_FLOOR_REQ_STATUS   = 17,
+	BFCP_OVERALL_REQ_STATUS = 18,
+
+	/** Mandatory Attribute */
+	BFCP_MANDATORY          = 1<<7,
+	/** Encode Handler */
+	BFCP_ENCODE_HANDLER     = 1<<8,
+};
+
+/** BFCP Request Status */
+enum bfcp_reqstat {
+	BFCP_PENDING   = 1,
+	BFCP_ACCEPTED  = 2,
+	BFCP_GRANTED   = 3,
+	BFCP_DENIED    = 4,
+	BFCP_CANCELLED = 5,
+	BFCP_RELEASED  = 6,
+	BFCP_REVOKED   = 7
+};
+
+/** BFCP Error Codes */
+enum bfcp_err {
+	BFCP_CONF_NOT_EXIST         = 1,
+	BFCP_USER_NOT_EXIST         = 2,
+	BFCP_UNKNOWN_PRIM           = 3,
+	BFCP_UNKNOWN_MAND_ATTR      = 4,
+	BFCP_UNAUTH_OPERATION       = 5,
+	BFCP_INVALID_FLOOR_ID       = 6,
+	BFCP_FLOOR_REQ_ID_NOT_EXIST = 7,
+	BFCP_MAX_FLOOR_REQ_REACHED  = 8,
+	BFCP_USE_TLS                = 9,
+	BFCP_PARSE_ERROR            = 10,
+	BFCP_USE_DTLS               = 11,
+	BFCP_UNSUPPORTED_VERSION    = 12,
+	BFCP_BAD_LENGTH             = 13,
+	BFCP_GENERIC_ERROR          = 14,
+};
+
+/** BFCP Priority */
+enum bfcp_priority {
+	BFCP_PRIO_LOWEST  = 0,
+	BFCP_PRIO_LOW     = 1,
+	BFCP_PRIO_NORMAL  = 2,
+	BFCP_PRIO_HIGH    = 3,
+	BFCP_PRIO_HIGHEST = 4
+};
+
+/** BFCP Transport */
+enum bfcp_transp {
+	BFCP_UDP,
+	BFCP_DTLS,
+};
+
+/** BFCP Request Status */
+struct bfcp_reqstatus {
+	enum bfcp_reqstat status;
+	uint8_t qpos;
+};
+
+/** BFCP Error Code */
+struct bfcp_errcode {
+	enum bfcp_err code;
+	uint8_t *details;  /* optional */
+	size_t len;
+};
+
+/** BFCP Supported Attributes */
+struct bfcp_supattr {
+	enum bfcp_attrib *attrv;
+	size_t attrc;
+};
+
+/** BFCP Supported Primitives */
+struct bfcp_supprim {
+	enum bfcp_prim *primv;
+	size_t primc;
+};
+
+/** BFCP Attribute */
+struct bfcp_attr {
+	struct le le;
+	struct list attrl;
+	enum bfcp_attrib type;
+	bool mand;
+	union bfcp_union {
+		/* generic types */
+		char *str;
+		uint16_t u16;
+
+		/* actual attributes */
+		uint16_t beneficiaryid;
+		uint16_t floorid;
+		uint16_t floorreqid;
+		enum bfcp_priority priority;
+		struct bfcp_reqstatus reqstatus;
+		struct bfcp_errcode errcode;
+		char *errinfo;
+		char *partprovinfo;
+		char *statusinfo;
+		struct bfcp_supattr supattr;
+		struct bfcp_supprim supprim;
+		char *userdname;
+		char *useruri;
+		uint16_t reqbyid;
+	} v;
+};
+
+/** BFCP unknown attributes */
+struct bfcp_unknown_attr {
+	uint8_t typev[16];
+	size_t typec;
+};
+
+/** BFCP Message */
+struct bfcp_msg {
+	struct bfcp_unknown_attr uma;
+	struct sa src;
+	uint8_t ver;
+	unsigned r:1;
+	unsigned f:1;
+	enum bfcp_prim prim;
+	uint16_t len;
+	uint32_t confid;
+	uint16_t tid;
+	uint16_t userid;
+	struct list attrl;
+};
+
+struct tls;
+struct bfcp_conn;
+
+
+/**
+ * Defines the BFCP encode handler
+ *
+ * @param mb  Mbuf to encode into
+ * @param arg Handler argument
+ *
+ * @return 0 if success, otherwise errorcode
+ */
+typedef int (bfcp_encode_h)(struct mbuf *mb, void *arg);
+
+/** BFCP Encode */
+struct bfcp_encode {
+	bfcp_encode_h *ench;
+	void *arg;
+};
+
+
+/**
+ * Defines the BFCP attribute handler
+ *
+ * @param attr BFCP attribute
+ * @param arg  Handler argument
+ *
+ * @return True to stop processing, false to continue
+ */
+typedef bool (bfcp_attr_h)(const struct bfcp_attr *attr, void *arg);
+
+
+/**
+ * Defines the BFCP receive handler
+ *
+ * @param msg BFCP message
+ * @param arg Handler argument
+ */
+typedef void (bfcp_recv_h)(const struct bfcp_msg *msg, void *arg);
+
+
+/**
+ * Defines the BFCP response handler
+ *
+ * @param err Error code
+ * @param msg BFCP message
+ * @param arg Handler argument
+ */
+typedef void (bfcp_resp_h)(int err, const struct bfcp_msg *msg, void *arg);
+
+
+/* attr */
+int bfcp_attrs_vencode(struct mbuf *mb, unsigned attrc, va_list *ap);
+int bfcp_attrs_encode(struct mbuf *mb, unsigned attrc, ...);
+struct bfcp_attr *bfcp_attr_subattr(const struct bfcp_attr *attr,
+				    enum bfcp_attrib type);
+struct bfcp_attr *bfcp_attr_subattr_apply(const struct bfcp_attr *attr,
+					  bfcp_attr_h *h, void *arg);
+int bfcp_attr_print(struct re_printf *pf, const struct bfcp_attr *attr);
+const char *bfcp_attr_name(enum bfcp_attrib type);
+const char *bfcp_reqstatus_name(enum bfcp_reqstat status);
+const char *bfcp_errcode_name(enum bfcp_err code);
+
+
+/* msg */
+int bfcp_msg_vencode(struct mbuf *mb, uint8_t ver, bool r, enum bfcp_prim prim,
+		     uint32_t confid, uint16_t tid, uint16_t userid,
+		     unsigned attrc, va_list *ap);
+int bfcp_msg_encode(struct mbuf *mb, uint8_t ver, bool r, enum bfcp_prim prim,
+		    uint32_t confid, uint16_t tid, uint16_t userid,
+		    unsigned attrc, ...);
+int bfcp_msg_decode(struct bfcp_msg **msgp, struct mbuf *mb);
+struct bfcp_attr *bfcp_msg_attr(const struct bfcp_msg *msg,
+				enum bfcp_attrib type);
+struct bfcp_attr *bfcp_msg_attr_apply(const struct bfcp_msg *msg,
+				      bfcp_attr_h *h, void *arg);
+int bfcp_msg_print(struct re_printf *pf, const struct bfcp_msg *msg);
+const char *bfcp_prim_name(enum bfcp_prim prim);
+
+
+/* conn */
+int bfcp_listen(struct bfcp_conn **bcp, enum bfcp_transp tp, struct sa *laddr,
+		struct tls *tls, bfcp_recv_h *recvh, void *arg);
+void *bfcp_sock(const struct bfcp_conn *bc);
+
+
+/* request */
+int bfcp_request(struct bfcp_conn *bc, const struct sa *dst, uint8_t ver,
+		 enum bfcp_prim prim, uint32_t confid, uint16_t userid,
+		 bfcp_resp_h *resph, void *arg, unsigned attrc, ...);
+
+
+/* notify */
+int bfcp_notify(struct bfcp_conn *bc, const struct sa *dst, uint8_t ver,
+		enum bfcp_prim prim, uint32_t confid, uint16_t userid,
+		unsigned attrc, ...);
+
+
+/* reply */
+int bfcp_reply(struct bfcp_conn *bc, const struct bfcp_msg *req,
+	       enum bfcp_prim prim, unsigned attrc, ...);
+int bfcp_edreply(struct bfcp_conn *bc, const struct bfcp_msg *req,
+		 enum bfcp_err code, const uint8_t *details, size_t len);
+int bfcp_ereply(struct bfcp_conn *bc, const struct bfcp_msg *req,
+		enum bfcp_err code);
