diff --git a/include/s6a/s6a_fd.h b/include/s6a/s6a_fd.h
new file mode 100644
index 0000000..2bc716a
--- /dev/null
+++ b/include/s6a/s6a_fd.h
@@ -0,0 +1,333 @@
+/*
+ * Copyright (c) 2003-2018, Great Software Laboratory Pvt. Ltd.
+ * Copyright (c) 2017 Intel Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __S6A_FD_H__
+#define __S6A_FD_H__
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <stdbool.h>
+#include <ctype.h>
+#include <freeDiameter/freeDiameter-host.h>
+#include <freeDiameter/libfdproto.h>
+#include <freeDiameter/libfdcore.h>
+
+#include "err_codes.h"
+#include "s6a.h"
+
+/*Update location request(ULR) flag bitfields*/
+/* Single-Registration-Indication  -------1*/
+#define ULR_FLAG_SINGLE_REG_IND (1)
+/*S6a/S6d-Indicator:               ------1-*/
+#define ULR_FLAG_S6AS6D_IND (1<<1)
+/*Skip-Subscriber-Data:            -----1--*/
+#define ULR_FLAGS_SKIP_SUB_DATA (1<<2)
+/*GPRS-Subscription-Data-Indicator:----1---*/
+#define ULR_FLAGS_GPRS_SUBS_DATA_IBND (1<<3)
+/*Node-Type-Indicator:             ---1----*/
+#define ULR_FLAGS_NODE_TYPE_IIND (1<<4)
+/*Initial-Attach-Indicator:        --1-----*/
+#define ULR_FLAG_INIT_ATCH_IND (1<<5)
+/*PS-LCS-Not-Supported-By-UE:      -1------*/
+#define ULR_FLAG_PS_LCS_NOT_SUPPORTED_BY_UE (1<<6)
+/*SMS-Only-Indication:             1-------*/
+#define ULR_FLAG_SMS_ONLY_IND (1<<7)
+
+#define S6A_RAT_EUTRAN 1004
+
+#define FD_DICT_SEARCH(dict, cond, id, obj) \
+	CHECK_FCT_DO(fd_dict_search(fd_g_config->cnf_dict, dict, cond,\
+		(void*)id, &obj, ENOENT),\
+		return S6A_FD_DICTSRCH_FAILED)
+
+/**
+ * @brief Freediameter result
+ */
+struct fd_result {
+	bool present;
+	unsigned int vendor_id;
+	unsigned int result_code;
+};
+
+/**
+ * @brief Freediameter disctionary objects user in s6a transactions
+ */
+struct fd_dict_objects {
+	/*s6a and app id*/
+	struct dict_object *vendor_id;
+	struct dict_object *s6a_app;
+
+	/*Message types*/
+	struct dict_object *AIR; /*Authentication-Information-Request*/
+	struct dict_object *AIA; /*Authentication-information-Answer*/
+	struct dict_object *ULR; /*Update-Location-Request*/
+	struct dict_object *ULA; /*Update-Location-Answer*/
+	struct dict_object *PUR; /*Purge-Request*/
+	struct dict_object *PUA; /*Purge-Answer*/
+	//NI Detach
+	struct dict_object *CLR; /*Cancel-Location-Request*/
+	struct dict_object *CLA; /*Cancel-Location-Answer*/
+	//NI Detach
+	
+	/*common s6a requst header*/
+	struct dict_object *auth_app_id;
+	struct dict_object *sess_id;
+	struct dict_object *org_host;	//NI Detach
+	struct dict_object *org_realm;	//NI Detach
+	struct dict_object *dest_host;
+	struct dict_object *dest_realm;
+	struct dict_object *auth_sess_state;
+	struct dict_object *res_code;
+	struct dict_object *exp_res;
+	struct dict_object *user_name;
+
+	/*AIR elements*/
+	struct dict_object *visited_PLMN_id;
+	struct dict_object *req_EUTRAN_auth_info;
+	struct dict_object *no_of_req_vectors;
+	struct dict_object *immediate_resp_pref;
+
+	/*AIA elements*/
+	struct dict_object *auth_info;
+	struct dict_object *E_UTRAN_vector;
+	struct dict_object *RAND;
+	struct dict_object *XRES;
+	struct dict_object *AUTN;
+	struct dict_object *KASME;
+
+	/*ULR elements*/
+	struct dict_object *RAT_type;
+	struct dict_object *ULR_flags;
+
+	/*ULA elements*/
+	struct dict_object *ULA_flags;
+	struct dict_object *subscription_data;
+	struct dict_object *subscriber_status;
+	struct dict_object *MSISDN;
+	struct dict_object *net_access_mode;
+	struct dict_object *access_restriction_data;
+	struct dict_object *AMBR;
+	struct dict_object *max_req_bandwidth_UL;
+	struct dict_object *max_req_bandwidth_DL;
+	struct dict_object *APN_config_profile;
+	struct dict_object *ctx_id;
+	struct dict_object *additional_ctx_id;
+	struct dict_object *all_APN_configs_included_ind;
+	struct dict_object *APN_config;
+	struct dict_object *PDN_type;
+	struct dict_object *PDN_GW_alloc_type;
+	struct dict_object *specific_APN_info;
+	struct dict_object *non_IP_PDN_type_ind;
+	struct dict_object *non_IP_data_delivery_mech;
+	struct dict_object *SCEF_ID;
+	struct dict_object *priority_Level;
+	struct dict_object *location_area_id;
+	struct dict_object *tracking_area_id;
+	struct dict_object *subsc_periodic_RAU_TAU_tmr;
+
+	/*PUR elements*/
+	struct dict_object *PUR_flags;
+	struct dict_object *reg_subs_zone_code;
+
+	//NI Detach
+	/*CLR elements*/
+	struct dict_object *cancellation_type;
+};
+
+/**
+ * @brief Freediameter dictionary data storage
+ */
+struct fd_dict_data {
+	/* S6A AVP data */
+	struct dict_application_data app_s6a_data;
+	struct dict_vendor_data vendor_data;
+
+	/*Common s6a elements*/
+	struct dict_avp_data res_code;
+	struct dict_avp_data exp_res;
+	struct dict_avp_data exp_res_code;
+	struct dict_avp_data vendor_specific_app_id;
+	struct dict_avp_data auth_app_id;
+	struct dict_avp_data acct_app_id;
+	struct dict_avp_data vendor_id;
+	struct dict_avp_data sess_id;
+	struct dict_avp_data auth_sess_state;
+	struct dict_avp_data org_host;
+	struct dict_avp_data org_realm;
+	struct dict_avp_data dest_host;
+	struct dict_avp_data dest_realm;
+	struct dict_avp_data user_name;
+	struct dict_avp_data visited_PLMN_id;
+	struct dict_avp_data req_EUTRAN_auth_info;
+	struct dict_avp_data no_of_req_vectors;
+	struct dict_avp_data immediate_resp_pref;
+
+	/*AIA data*/
+	struct dict_avp_data auth_info;
+	struct dict_avp_data E_UTRAN_vector;
+	struct dict_avp_data RAND;
+	struct dict_avp_data XRES;
+	struct dict_avp_data AUTN;
+	struct dict_avp_data KASME;
+
+	/*ULR data*/
+	struct dict_avp_data RAT_type;
+	struct dict_avp_data ULR_flags;
+
+	/*ULA data*/
+	struct dict_avp_data ULA_flags;
+	struct dict_avp_data subscription_data;
+	struct dict_avp_data subscriber_status;
+	struct dict_avp_data MSISDN;
+	struct dict_avp_data net_access_mode;
+	struct dict_avp_data access_restriction_data;
+	struct dict_avp_data AMBR;
+	struct dict_avp_data max_req_bandwidth_UL;
+	struct dict_avp_data max_req_bandwidth_DL;
+	struct dict_avp_data APN_config_profile;
+	struct dict_avp_data ctx_id;
+	struct dict_avp_data additional_ctx_id;
+	struct dict_avp_data all_APN_configs_included_ind;
+	struct dict_avp_data APN_config;
+	struct dict_avp_data PDN_type;
+	struct dict_avp_data PDN_GW_alloc_type;
+	struct dict_avp_data specific_APN_info;
+	struct dict_avp_data non_IP_PDN_type_ind;
+	struct dict_avp_data non_IP_data_delivery_mech;
+	struct dict_avp_data SCEF_ID;
+	struct dict_avp_data priority_Level;
+	struct dict_avp_data location_area_id;
+	struct dict_avp_data tracking_area_id;
+	struct dict_avp_data subsc_periodic_RAU_TAU_tmr;
+
+	/*PUR flags*/
+	struct dict_avp_data PUR_flags;
+	struct dict_avp_data reg_subs_zone_code;
+
+	//NI Detach
+	/*CLR Data*/
+	struct dict_avp_data cancellation_type;
+};
+
+/**
+ * @brief Initialize freediameter parser, callbacks, dictionary etc.
+ * @params none
+ * @return int as success/fail
+ */
+int
+s6a_fd_init();
+
+/**
+ * @brief Initialize freediameter dictionary
+ * @param none
+ * @return int as success/fail
+ */
+int
+s6a_fd_objs_init();
+
+/**
+ * @brief Initialize freediameter dictionary data objects
+ * @param none
+ * @return int as success/fail
+ */
+int
+s6a_fd_data_init();
+
+/**
+ * @brief Initialize freediameter API callbacks for response handling
+ * @param none
+ * @return int as success/fail
+ */
+int
+s6a_fd_cb_reg();
+
+/**
+ * @brief extract ue index from session id of freediameter
+ * @param[in] sid - session id
+ * @param[in] sidlen - Session Id length
+ * @return UE index extracted out of session id
+ */
+int
+get_ue_idx_from_fd_resp(unsigned char *sid, int sidlen);
+
+/**
+ * @brief Cression session id, append ue index to session id
+ * @param[in, out] s6a_sess - session information
+ * @param[in] ue_idx to append to session id
+ * @return int as success/fail
+ */
+short
+create_fd_sess_id(struct s6a_sess_info *s6a_sess, int ue_idx);
+
+int
+aia_resp_callback(struct msg **msg, struct avp *avp, struct session *sess,
+		void *data, enum disp_action *act);
+
+int
+ula_resp_callback(struct msg **msg, struct avp *avp, struct session *sess,
+		void *data, enum disp_action *act);
+
+//NI Detach
+int
+clr_resp_callback(struct msg **msg, struct avp *avp, struct session *sess,
+		void *data, enum disp_action *act);
+
+
+#if 0
+int
+purge_resp_callback(struct msg **msg, struct avp *avp, struct session *sess,
+		void *data, enum disp_action *act);
+#endif
+
+/**
+ * @brief Dumo freediameter message on console
+ * @param msg - Freediameter message structure
+ * @return void
+ */
+void
+dump_fd_msg(struct msg *msg);
+
+/**
+ * brief add AVl object to freediameter message
+ * @param[in] avp value to add
+ * @param[in] ditionary object for reference
+ * @param[out] frediameter message where avp is added
+ * @return int as success/fail
+ */
+int
+add_fd_msg(union avp_value *val, struct dict_object * obj,
+struct msg **msg_buf);
+
+void
+handle_perf_hss_aia(int ue_idx, struct hss_aia_msg *aia);
+
+void
+handle_perf_hss_ula(int ue_idx, struct hss_ula_msg *ula);
+
+void
+handle_perf_hss_purge_resp(int ue_idx);
+
+//NI Detach
+void 
+handle_perf_hss_clr(int ue_idx, struct hss_clr_msg *clr);
+
+short
+parse_fd_result(struct avp *avp, struct fd_result *res);
+
+#endif /* __S6A_FD_H__ */
