diff --git a/openair2/X2AP/x2ap_common.c b/openair2/X2AP/x2ap_common.c
new file mode 100755
index 0000000000000000000000000000000000000000..652173be1305ff737c5c0c0478267371aea7a58c
--- /dev/null
+++ b/openair2/X2AP/x2ap_common.c
@@ -0,0 +1,158 @@
+/*******************************************************************************
+
+  Eurecom OpenAirInterface
+  Copyright(c) 1999 - 2012 Eurecom
+
+  This program is free software; you can redistribute it and/or modify it
+  under the terms and conditions of the GNU General Public License,
+  version 2, as published by the Free Software Foundation.
+
+  This program is distributed in the hope 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.
+
+  The full GNU General Public License is included in this distribution in
+  the file called "COPYING".
+
+  Contact Information
+  Openair Admin: openair_admin@eurecom.fr
+  Openair Tech : openair_tech@eurecom.fr
+  Forums       : http://forums.eurecom.fr/openairinterface
+  Address      : EURECOM, Campus SophiaTech, 450 Route des Chappes
+                 06410 Biot FRANCE
+
+*******************************************************************************/
+
+/*! \file x2ap_common.c
+ * \brief x2ap procedures for both eNB and MME
+ * \author Sebastien ROUX <sebastien.roux@eurecom.fr>
+ * \date 2012
+ * \version 0.1
+ */
+
+#include <stdint.h>
+
+#include "x2ap_common.h"
+
+int asn_debug = 0;
+int asn1_xer_print = 0;
+
+ssize_t x2ap_generate_initiating_message(
+    uint8_t               **buffer,
+    uint32_t               *length,
+    e_ProcedureCode         procedureCode,
+    Criticality_t           criticality,
+    asn_TYPE_descriptor_t  *td,
+    void                   *sptr) {
+
+    X2AP_PDU_t pdu;
+    ssize_t    encoded;
+
+    memset(&pdu, 0, sizeof(X2AP_PDU_t));
+
+    pdu.present = X2AP_PDU_PR_initiatingMessage;
+    pdu.choice.initiatingMessage.procedureCode = procedureCode;
+    pdu.choice.initiatingMessage.criticality   = criticality;
+    ANY_fromType_aper(&pdu.choice.initiatingMessage.value, td, sptr);
+
+    if (asn1_xer_print)
+        xer_fprint(stdout,&asn_DEF_X2AP_PDU,(void*)&pdu);
+
+    if ((encoded = aper_encode_to_new_buffer(&asn_DEF_X2AP_PDU, 0, &pdu, (void**)buffer)) < 0) {
+        return -1;
+    }
+
+    *length = encoded;
+    return encoded;
+}
+
+ssize_t x2ap_generate_successfull_outcome(
+    uint8_t               **buffer,
+    uint32_t               *length,
+    e_ProcedureCode         procedureCode,
+    Criticality_t           criticality,
+    asn_TYPE_descriptor_t  *td,
+    void                   *sptr) {
+
+    X2AP_PDU_t pdu;
+    ssize_t    encoded;
+
+    memset(&pdu, 0, sizeof(X2AP_PDU_t));
+
+    pdu.present = X2AP_PDU_PR_successfulOutcome;
+    pdu.choice.successfulOutcome.procedureCode = procedureCode;
+    pdu.choice.successfulOutcome.criticality   = criticality;
+    ANY_fromType_aper(&pdu.choice.successfulOutcome.value, td, sptr);
+
+    if ((encoded = aper_encode_to_new_buffer(&asn_DEF_X2AP_PDU, 0, &pdu, (void**)buffer)) < 0) {
+        return -1;
+    }
+
+    *length = encoded;
+
+    return encoded;
+}
+
+ssize_t x2ap_generate_unsuccessfull_outcome(
+    uint8_t               **buffer,
+    uint32_t               *length,
+    e_ProcedureCode         procedureCode,
+    Criticality_t           criticality,
+    asn_TYPE_descriptor_t  *td,
+    void                   *sptr) {
+
+    X2AP_PDU_t pdu;
+    ssize_t    encoded;
+
+    memset(&pdu, 0, sizeof(X2AP_PDU_t));
+
+    pdu.present = X2AP_PDU_PR_unsuccessfulOutcome;
+    pdu.choice.successfulOutcome.procedureCode = procedureCode;
+    pdu.choice.successfulOutcome.criticality   = criticality;
+    ANY_fromType_aper(&pdu.choice.successfulOutcome.value, td, sptr);
+
+    if ((encoded = aper_encode_to_new_buffer(&asn_DEF_X2AP_PDU, 0, &pdu, (void**)buffer)) < 0) {
+        return -1;
+    }
+
+    *length = encoded;
+
+    return encoded;
+}
+
+IE_t *x2ap_new_ie(
+    ProtocolIE_ID_t        id,
+    Criticality_t          criticality,
+    asn_TYPE_descriptor_t *type,
+    void                  *sptr) {
+
+    IE_t *buff;
+
+    if ((buff = malloc(sizeof(IE_t))) == NULL) {
+        // Possible error on malloc
+        return NULL;
+    }
+    memset((void*)buff, 0, sizeof(IE_t));
+
+    buff->id = id;
+    buff->criticality = criticality;
+
+    ANY_fromType_aper(&buff->value, type, sptr);
+
+    if (asn1_xer_print)
+        if (xer_fprint(stdout, &asn_DEF_IE, buff) < 0) {
+            free(buff);
+            return NULL;
+        }
+
+    return buff;
+}
+
+void x2ap_handle_criticality(e_Criticality criticality) {
+    
+}
diff --git a/openair2/X2AP/x2ap_common.h b/openair2/X2AP/x2ap_common.h
new file mode 100755
index 0000000000000000000000000000000000000000..b2fb45ca4fe79198b640bfa685a2808c38ed4c19
--- /dev/null
+++ b/openair2/X2AP/x2ap_common.h
@@ -0,0 +1,348 @@
+/*******************************************************************************
+
+  Eurecom OpenAirInterface
+  Copyright(c) 1999 - 2012 Eurecom
+
+  This program is free software; you can redistribute it and/or modify it
+  under the terms and conditions of the GNU General Public License,
+  version 2, as published by the Free Software Foundation.
+
+  This program is distributed in the hope 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.
+
+  The full GNU General Public License is included in this distribution in
+  the file called "COPYING".
+
+  Contact Information
+  Openair Admin: openair_admin@eurecom.fr
+  Openair Tech : openair_tech@eurecom.fr
+  Forums       : http://forums.eurecom.fr/openairinterface
+  Address      : EURECOM, Campus SophiaTech, 450 Route des Chappes
+                 06410 Biot FRANCE
+
+*******************************************************************************/
+
+#if HAVE_CONFIG_H_
+# include "config.h"
+#endif
+
+#include "Criticality.h"
+#include "Presence.h"
+#include "PrivateIE-ID.h"
+#include "ProcedureCode.h"
+#include "ProtocolIE-ID.h"
+#include "TriggeringMessage.h"
+#include "IE-Extensions.h"
+#include "ActivatedCellList.h"
+#include "AS-SecurityInformation.h"
+#include "AllocationAndRetentionPriority.h"
+#include "BitRate.h"
+#include "BroadcastPLMNs-Item.h"
+#include "CapacityValue.h"
+#include "CellCapacityClassValue.h"
+#include "Cause.h"
+#include "CauseMisc.h"
+#include "CauseProtocol.h"
+#include "CauseRadioNetwork.h"
+#include "CauseTransport.h"
+#include "Cell-Size.h"
+#include "CellToReport-List.h"
+#include "CellToReport-Item.h"
+#include "CellMeasurementResult-List.h"
+#include "CellMeasurementResult-Item.h"
+//#include "CellInformation.h"
+#include "CellInformation-List.h"
+#include "CellInformation-Item.h"
+#include "CellType.h"
+#include "CompositeAvailableCapacityGroup.h"
+#include "CompositeAvailableCapacity.h"
+#include "COUNTvalue.h"
+#include "CriticalityDiagnostics.h"
+#include "CriticalityDiagnostics-IE-List.h"
+#include "CRNTI.h"
+#include "CyclicPrefixDL.h"
+#include "CyclicPrefixUL.h"
+#include "DeactivationIndication.h"
+#include "DL-Forwarding.h"
+#include "E-RAB-Item.h"
+#include "E-RABs-Admitted-List.h"
+#include "E-RABs-Admitted-Item.h"
+//#include "E-RABNotAdmittedItem.h"
+#include "E-RABs-ToBeSetup-List.h"
+#include "E-RABs-ToBeSetup-Item.h"
+#include "E-RABs-SubjectToStatusTransfer-List.h"
+#include "E-RABs-SubjectToStatusTransfer-Item.h"
+#include "EARFCN.h"
+#include "FDD-Info.h"
+#include "TDD-Info.h"
+#include "EUTRA-Mode-Info.h"
+#include "ECGI.h"
+#include "ENB-ID.h"
+#include "EncryptionAlgorithms.h"
+#include "EPLMNs.h"
+#include "E-RAB-ID.h"
+#include "E-RAB-Level-QoS-Parameters.h"
+#include "E-RAB-List.h"
+//#include "E-RAB-ItemIEs.h"
+#include "EUTRANCellIdentifier.h"
+#include "EUTRANTraceID.h"
+#include "EventType.h"
+#include "ForbiddenInterRATs.h"
+#include "ForbiddenTAs.h"
+#include "ForbiddenTAs-Item.h"
+#include "ForbiddenTACs.h"
+#include "ForbiddenLAs.h"
+#include "ForbiddenLAs-Item.h"
+#include "ForbiddenLACs.h"
+#include "Fourframes.h"
+#include "GBR-QosInformation.h"
+#include "GlobalENB-ID.h"
+#include "GTPtunnelEndpoint.h"
+#include "GTP-TEI.h"
+#include "GUGroupIDList.h"
+#include "GU-Group-ID.h"
+#include "GUMMEI.h"
+#include "HandoverReportType.h"
+#include "HandoverRestrictionList.h"
+#include "HFN.h"
+#include "HWLoadIndicator.h"
+#include "IntegrityProtectionAlgorithms.h"
+#include "InterfacesToTrace.h"
+#include "Key-eNodeB-Star.h"
+#include "LAC.h"
+#include "LastVisitedCell-Item.h"
+#include "LastVisitedEUTRANCellInformation.h"
+#include "LastVisitedUTRANCellInformation.h"
+#include "LastVisitedGERANCellInformation.h"
+#include "LoadIndicator.h"
+#include "LocationReportingInformation.h"
+#include "MME-Group-ID.h"
+#include "MME-Code.h"
+#include "Measurement-ID.h"
+#include "MBSFN-Subframe-Infolist.h"
+#include "MBSFN-Subframe-Info.h"
+#include "MobilityParametersModificationRange.h"
+#include "MobilityParametersInformation.h"
+#include "Neighbour-Information.h"
+#include "Neighbour-Information.h"
+#include "NextHopChainingCount.h"
+#include "Number-of-Antennaports.h"
+#include "Oneframe.h"
+#include "PDCP-SN.h"
+#include "PCI.h"
+#include "PLMN-Identity.h"
+#include "PRACH-Configuration.h"
+#include "Pre-emptionCapability.h"
+#include "Pre-emptionVulnerability.h"
+#include "PriorityLevel.h"
+#include "QCI.h"
+#include "ReceiveStatusofULPDCPSDUs.h"
+#include "Registration-Request.h"
+#include "RelativeNarrowbandTxPower.h"
+#include "ReportArea.h"
+#include "ReportingPeriodicity.h"
+#include "ReportCharacteristics.h"
+#include "RNTP-Threshold.h"
+#include "RRC-Context.h"
+#include "RadioResourceStatus.h"
+#include "DL-GBR-PRB-usage.h"
+#include "UL-GBR-PRB-usage.h"
+#include "DL-non-GBR-PRB-usage.h"
+#include "UL-non-GBR-PRB-usage.h"
+#include "DL-Total-PRB-usage.h"
+#include "UL-Total-PRB-usage.h"
+#include "RadioframeAllocationPeriod.h"
+#include "RadioframeAllocationOffset.h"
+#include "S1TNLLoadIndicator.h"
+#include "ServedCellsToActivate.h"
+#include "ServedCellsToActivate-Item.h"
+#include "ServedCellsToModify.h"
+#include "ServedCellsToModify-Item.h"
+#include "Old-ECGIs.h"
+#include "ServedCells.h"
+#include "ServedCell-Information.h"
+#include "ShortMAC-I.h"
+#include "SRVCCOperationPossible.h"
+#include "SubframeAssignment.h"
+#include "SpecialSubframe-Info.h"
+#include "SpecialSubframePatterns.h"
+#include "SubscriberProfileIDforRFP.h"
+#include "SubframeAllocation.h"
+#include "TAC.h"
+#include "TargeteNBtoSource-eNBTransparentContainer.h"
+#include "TimeToWait.h"
+#include "Time-UE-StayedInCell.h"
+#include "TraceActivation.h"
+#include "TraceCollectionEntityIPAddress.h"
+#include "TraceDepth.h"
+#include "Transmission-Bandwidth.h"
+#include "TransportLayerAddress.h"
+#include "TypeOfError.h"
+#include "UE-HistoryInformation.h"
+#include "UE-S1AP-ID.h"
+#include "UE-X2AP-ID.h"
+#include "UEAggregateMaximumBitRate.h"
+#include "UESecurityCapabilities.h"
+#include "UE-ContextInformation.h"
+#include "UL-InterferenceOverloadIndication.h"
+#include "UL-InterferenceOverloadIndication-Item.h"
+#include "UL-HighInterferenceIndicationInfo.h"
+#include "UL-HighInterferenceIndicationInfo-Item.h"
+#include "UL-HighInterferenceIndication.h"
+#include "UE-RLF-Report-Container.h"
+#include "IE.h"
+#include "X2AP-PDU.h"
+#include "InitiatingMessage.h"
+#include "SuccessfulOutcome.h"
+#include "UnsuccessfulOutcome.h"
+#include "HandoverRequest.h"
+#include "HandoverRequestAcknowledge.h"
+//#include "HandoverPreparation.h"
+#include "HandoverPreparationFailure.h"
+#include "SNStatusTransfer.h"
+#include "UEContextRelease.h"
+#include "HandoverCancel.h"
+#include "HandoverReport.h"
+#include "ErrorIndication.h"
+#include "ResetRequest.h"
+#include "ResetResponse.h"
+#include "X2SetupRequest.h"
+#include "X2SetupResponse.h"
+#include "X2SetupFailure.h"
+#include "LoadInformation.h"
+#include "ENBConfigurationUpdate.h"
+#include "ENBConfigurationUpdateAcknowledge.h"
+#include "ENBConfigurationUpdateFailure.h"
+#include "ResourceStatusRequest.h"
+#include "ResourceStatusResponse.h"
+#include "ResourceStatusFailure.h"
+#include "ResourceStatusUpdate.h"
+#include "RLFIndication.h"
+#include "PrivateMessage.h"
+#include "MobilityChangeRequest.h"
+#include "MobilityChangeAcknowledge.h"
+#include "MobilityChangeFailure.h"
+#include "CellActivationRequest.h"
+#include "CellActivationResponse.h"
+#include "CellActivationFailure.h"
+
+#ifndef X2AP_COMMON_H_
+#define X2AP_COMMON_H_
+
+/** @defgroup _x2ap_impl_ X2AP Layer Reference Implementation
+ * @ingroup _ref_implementation_
+ * @{
+ */
+
+/* Checking version of ASN1C compiler */
+#if (ASN1C_ENVIRONMENT_VERSION < 923)
+# error "You are compiling x2ap with the wrong version of ASN1C"
+#endif
+
+#ifndef X2AP_PORT
+# define X2AP_PORT 36422
+#endif
+
+#define TRUE 1
+#define FALSE 0
+
+extern int asn_debug;
+extern int asn1_xer_print;
+
+#if defined(ENB_MODE)
+# include "log.h"
+# define X2AP_ERROR(x, args...) LOG_E(X2AP, x, ##args)
+# define X2AP_WARN(x, args...)  LOG_W(X2AP, x, ##args)
+# define X2AP_DEBUG(x, args...) LOG_D(X2AP, x, ##args)
+#else
+# define X2AP_ERROR(x, args...) do { fprintf(stdout, "[X2AP][E]"x, ##args); } while(0)
+# define X2AP_WARN(x, args...)  do { fprintf(stdout, "[X2AP][W]"x, ##args); } while(0)
+# define X2AP_DEBUG(x, args...) do { fprintf(stdout, "[X2AP][D]"x, ##args); } while(0)
+#endif
+
+//Forward declaration
+struct x2ap_message_s;
+
+/** \brief Function callback prototype.
+ **/
+typedef int (*x2ap_message_decoded_callback)(
+    uint32_t assocId,
+    uint32_t stream,
+    struct x2ap_message_s *message);
+
+/** \brief Encode a successfull outcome message
+ \param buffer pointer to buffer in which data will be encoded
+ \param length pointer to the length of buffer
+ \param procedureCode Procedure code for the message
+ \param criticality Criticality of the message
+ \param td ASN1C type descriptor of the sptr
+ \param sptr Deferenced pointer to the structure to encode
+ @returns size in bytes encded on success or 0 on failure
+ **/
+ssize_t x2ap_generate_successfull_outcome(
+    uint8_t               **buffer,
+    uint32_t               *length,
+    e_ProcedureCode         procedureCode,
+    Criticality_t           criticality,
+    asn_TYPE_descriptor_t  *td,
+    void                   *sptr);
+
+/** \brief Encode an initiating message
+ \param buffer pointer to buffer in which data will be encoded
+ \param length pointer to the length of buffer
+ \param procedureCode Procedure code for the message
+ \param criticality Criticality of the message
+ \param td ASN1C type descriptor of the sptr
+ \param sptr Deferenced pointer to the structure to encode
+ @returns size in bytes encded on success or 0 on failure
+ **/
+ssize_t x2ap_generate_initiating_message(
+    uint8_t               **buffer,
+    uint32_t               *length,
+    e_ProcedureCode         procedureCode,
+    Criticality_t           criticality,
+    asn_TYPE_descriptor_t  *td,
+    void                   *sptr);
+
+/** \brief Encode an unsuccessfull outcome message
+ \param buffer pointer to buffer in which data will be encoded
+ \param length pointer to the length of buffer
+ \param procedureCode Procedure code for the message
+ \param criticality Criticality of the message
+ \param td ASN1C type descriptor of the sptr
+ \param sptr Deferenced pointer to the structure to encode
+ @returns size in bytes encded on success or 0 on failure
+ **/
+ssize_t x2ap_generate_unsuccessfull_outcome(
+    uint8_t               **buffer,
+    uint32_t               *length,
+    e_ProcedureCode         procedureCode,
+    Criticality_t           criticality,
+    asn_TYPE_descriptor_t  *td,
+    void                   *sptr);
+
+/** \brief Generate a new IE
+ \param id Protocol ie id of the IE
+ \param criticality Criticality of the IE
+ \param type ASN1 type descriptor of the IE value
+ \param sptr Structure to be encoded in the value field
+ @returns a pointer to the newly created IE structure or NULL in case of failure
+ **/
+IE_t *x2ap_new_ie(ProtocolIE_ID_t        id,
+                  Criticality_t          criticality,
+                  asn_TYPE_descriptor_t *type,
+                  void                  *sptr);
+
+/** \brief Handle criticality
+ \param criticality Criticality of the IE
+ @returns void
+ **/
+void x2ap_handle_criticality(e_Criticality criticality);
+
+#endif /* X2AP_COMMON_H_ */