diff --git a/software/ors-amarisoft/README.md b/software/ors-amarisoft/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..004f423479f58479b7128006ffc4525ae8ecbd6c
--- /dev/null
+++ b/software/ors-amarisoft/README.md
@@ -0,0 +1,85 @@
+# ORS Amarisoft software release
+
+How to deploy from scratch
+
+  1. Compile and install kernel module lte_trx_sdr by `# cd trx_sdr*/kernel/ && make && sh init.sh`
+  2. Make sure to have "create_tun = True" in /etc/opt/slapos/slapos.cfg
+  3. Install ors playbook
+  4. Deploy this SR
+
+## Generated buildout configurations and json input schemas
+
+Since there are many ors-amarisoft softwares releases and software types, the following files are
+generated with jinja2 templates with the render-templates script before being pushed to gitlab:
+
+ * instance-tdd1900-enb-epc-input-schema.json
+ * instance-tdd1900-enb-input-schema.json
+ * instance-tdd1900-gnb-epc-input-schema.json
+ * instance-tdd1900-gnb-input-schema.json
+ * instance-tdd2600-enb-epc-input-schema.json
+ * instance-tdd2600-enb-input-schema.json
+ * instance-tdd2600-gnb-epc-input-schema.json
+ * instance-tdd2600-gnb-input-schema.json
+ * instance-tdd3500-enb-epc-input-schema.json
+ * instance-tdd3500-enb-input-schema.json
+ * instance-tdd3500-gnb-epc-input-schema.json
+ * instance-tdd3500-gnb-input-schema.json
+ * instance-tdd3700-enb-epc-input-schema.json
+ * instance-tdd3700-enb-input-schema.json
+ * instance-tdd3700-gnb-epc-input-schema.json
+ * instance-tdd3700-gnb-input-schema.json
+ * software-tdd1900.cfg
+ * software-tdd1900.cfg.json
+ * software-tdd2600.cfg
+ * software-tdd2600.cfg.json
+ * software-tdd3500.cfg
+ * software-tdd3500.cfg.json
+ * software-tdd3700.cfg
+ * software-tdd3700.cfg.json
+
+These files should not be modified directly, and the render-templates scripts should be run along
+with update-hash before each commit.
+
+## Services
+
+instance.cfg is rather complicated because Amarisoft LTE stack consists of 4 binaries
+
+ * **lteenb** - eNodeB software is the server accepting connection from UI (user interfaces)
+ * **ltemme** - Mobile Management Entity in other words core network which handles orchestration of 
+   eNodeBs in case UI switches from one to another
+ * **lteims** - IP Multimedia System is another protocol such as LTE but designed for services over 
+   IP. Please read http://www.differencebetween.com/difference-between-lte-and-vs-ims-2/
+ * **ltembmsgw** - Multimedia Broadcast Multicast Services (Gateway) is technology which broadcast
+   the same multimedia content into multiple IP addresses at once to save bandwidth.
+ 
+Those binaries are started in foreground, originaly in screen. We don't want the binaries inside one
+screen because then we cannot easily control their resource usage. Thus we make 4 on-watch services.
+
+
+### MME
+
+Is the core network.  This binary keep track of UEs and to which eNodeB they are currently connected.
+It reroutes traffic when UE switches between eNodeBs.
+MME also serves as a service bus thus all services must register within MME. 
+
+
+### IMS
+
+Service connected into MME bus. IMS handles circuit-ish services over IP whereas LTE would have
+failed because it is intended as data-over-IP service.
+
+
+### MBMSGW
+
+MBMS Gateway is a standalone component connected to BMSC (Broadcast Multicast Service Centre), server 
+supporting streaming content from providers, which is another component inside our core network not
+provided by Amarisoft.
+MBMS Gateway is connected to MME which then manages MBMS sessions.
+
+## Gotchas!
+
+**trx_sdr.so** provided from archive MUST be placed next to `lteenb` binary. This library is the
+only one which does not follow standard `ld` path resolution.
+
+**rf_driver** has to be compiled and installed. Inside trx_sdr/kernel folder issue `# make` to compile the
+kernel module, and then `# ./init.sh` to create devices `/dev/sdr<N>` and insert compiled module.
diff --git a/software/ors-amarisoft/buildout.hash.cfg b/software/ors-amarisoft/buildout.hash.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..7fc912bb042d52e3161a19960dad629c8a3dcba8
--- /dev/null
+++ b/software/ors-amarisoft/buildout.hash.cfg
@@ -0,0 +1,63 @@
+# THIS IS NOT A BUILDOUT FILE, despite purposedly using a compatible syntax.
+# The only allowed lines here are (regexes):
+# - "^#" comments, copied verbatim
+# - "^[" section beginings, copied verbatim
+# - lines containing an "=" sign which must fit in the following categorie.
+#   - "^\s*filename\s*=\s*path\s*$" where "path" is relative to this file
+#     But avoid directories, they are not portable.
+#     Copied verbatim.
+#   - "^\s*hashtype\s*=.*" where "hashtype" is one of the values supported
+#     by the re-generation script.
+#     Re-generated.
+# - other lines are copied verbatim
+# Substitution (${...:...}), extension ([buildout] extends = ...) and
+# section inheritance (< = ...) are NOT supported (but you should really
+# not need these here).
+
+[template]
+filename = instance.cfg
+md5sum = 96a76300b2f714b6c47157920fe79a53
+
+[template-lte-enb-epc]
+_update_hash_filename_ = instance-enb-epc.jinja2.cfg
+md5sum = 762d55291e75e8b61e35f9f28d29915a
+
+[template-lte-enb]
+_update_hash_filename_ = instance-enb.jinja2.cfg
+md5sum = 77024b4bc87903f1a2ed86245e691800
+
+[template-lte-gnb-epc]
+_update_hash_filename_ = instance-gnb-epc.jinja2.cfg
+md5sum = e43a726dd3023a4bbaa474bb2d7a6ebe
+
+[template-lte-gnb]
+_update_hash_filename_ = instance-gnb.jinja2.cfg
+md5sum = 9ac219ea7c331bfc0e5ed3fd4c9991e2
+
+[template-lte-epc]
+_update_hash_filename_ = instance-epc.jinja2.cfg
+md5sum = ed7b80f6a613aea76cb60e6b66cc5bf6
+
+[ue_db.jinja2.cfg]
+filename = config/ue_db.jinja2.cfg
+md5sum = 4e4b40589ca0817d44f638c0612f0a04
+
+[enb.jinja2.cfg]
+filename = config/enb.jinja2.cfg
+md5sum = d841debc51d9f12555a47d1556a6a3c1
+
+[gnb.jinja2.cfg]
+filename = config/gnb.jinja2.cfg
+md5sum = da64ea9c5003f40987a8bba3f18e8839
+
+[ltelogs.jinja2.sh]
+filename = ltelogs.jinja2.sh
+md5sum = 1ba2e065bdf14a6411e95e80db17dcfd
+
+[mme.jinja2.cfg]
+filename = config/mme.jinja2.cfg
+md5sum = 518c71ce57204304b703b977c665a164
+
+[ims.jinja2.cfg]
+filename = config/ims.jinja2.cfg
+md5sum = e561ec26a70943c61557def1781cf65f
diff --git a/software/ors-amarisoft/config/enb.jinja2.cfg b/software/ors-amarisoft/config/enb.jinja2.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..46cbff2432ad658c89939da49534987954f423fe
--- /dev/null
+++ b/software/ors-amarisoft/config/enb.jinja2.cfg
@@ -0,0 +1,278 @@
+/* lteenb configuration file version 2021-09-18
+ * Copyright (C) 2015-2021 Amarisoft
+ */
+
+#define TDD                 1 // Values: 0 (FDD), 1(TDD)
+#define N_RB_DL             {{ slapparameter_dict.get('n_rb_dl', slap_configuration['configuration.default_lte_n_rb_dl']) }} // Values: 6 (1.4 MHz), 15 (3MHz), 25 (5MHz), 50 (10MHz), 75 (15MHz), 100 (20MHz)
+#define N_ANTENNA_DL        2 // Values: 1 (SISO), 2 (MIMO 2x2)
+#define N_ANTENNA_UL        2 // Values: 1, 2
+#define CHANNEL_SIM         0 // Values: 0 (channel simulator disabled), 1 (channel simulator enabled)
+
+{
+  /* Log filter: syntax: layer.field=value[,...]
+  
+     Possible layers are phy, mac, rlc, pdcp, rrc, nas, s1ap, x2ap, gtpu and
+     all. The 'all' layer is used to address all the layers at the
+     same time.
+
+     field values:
+
+     - 'level': the log level of each layer can be set to 'none',
+     'error', 'info' or 'debug'. Use 'debug' to log all the messages.
+     
+     - 'max_size': set the maximum size of the hex dump. 0 means no
+       hex dump. -1 means no limit.
+  */
+  log_options: "all.level=debug,all.max_size=32",
+  log_filename: "{{ directory['log'] }}/enb.log",
+
+  /* Enable remote API and Web interface */
+  com_addr: "[{{ slap_configuration['ipv6-random'] }}]:{{ slap_configuration['configuration.enb_ws_port'] }}",
+
+  /* RF driver configuration */
+  rf_driver: {
+      name: "sdr",
+      /* list of devices. 'dev0' is always the master. */
+      args: "dev0=/dev/sdr0",
+      /* synchronisation source: none, internal, gps, external (default = none) */
+      // sync: "gps",
+      rx_antenna:"tx_rx",
+  },
+  tx_gain: {{ slapparameter_dict.get('tx_gain', slap_configuration['configuration.default_lte_tx_gain']) }}, /* TX gain (in dB) */
+  rx_gain: {{ slapparameter_dict.get('rx_gain', slap_configuration['configuration.default_lte_rx_gain']) }}, /* RX gain (in dB) */
+
+#if CHANNEL_SIM == 1
+  rf_ports: [
+    {
+      channel_dl: {
+        type: "awgn",
+        noise_level: -30,
+      },
+    }
+  ],  
+#endif
+
+  mme_list: [ 
+    { 
+      /* address of MME for S1AP connection. Must be modified if the MME
+         runs on a different host. */
+      mme_addr: "127.0.1.100"
+    },
+  ],
+  /* GTP bind address (=address of the ethernet interface connected to
+     the MME). Must be modified if the MME runs on a different host. */
+  gtp_addr: "{{ slapparameter_dict.get('gtp_addr', '127.0.1.1') }}",
+
+  /* high 20 bits of SIB1.cellIdentifier */
+  enb_id: 0x1A2D0,
+
+  /* list of cells */
+  cell_list: [
+  {
+    /* Broadcasted PLMN identities */
+    plmn_list: [
+      "00101", 
+    ],
+
+    dl_earfcn: {{ slapparameter_dict.get('dl_earfcn', slap_configuration['configuration.default_dl_earfcn']) }},
+
+    n_id_cell: 1,
+    cell_id: 0x01,
+    tac: 0x0001,
+    root_sequence_index: 204, /* PRACH root sequence index */
+  },
+  ], /* cell_list */
+
+  /* default cell parameters */
+  cell_default: {
+    n_antenna_dl: N_ANTENNA_DL, /* number of DL antennas */
+    n_antenna_ul: N_ANTENNA_UL, /* number of UL antennas */
+    
+#if TDD == 1
+    uldl_config: 2, /* TDD only */
+    sp_config: 7, /* TDD only */
+#endif
+
+    n_rb_dl: N_RB_DL, /* Bandwidth: 25: 5 MHz, 50: 10 MHz, 75: 15 MHz, 100: 20 MHz */
+    cyclic_prefix: "normal",
+
+    phich_duration: "normal",
+    phich_resource: "1", /* ratio of NG */
+
+    /* SIB1 */
+    si_value_tag: 0, /* increment modulo 32 if SI is modified */
+    cell_barred: false, /* SIB1.cellBarred-r13 */
+    intra_freq_reselection: true, /* SIB1.intraFreqReselection */
+    q_rx_lev_min: -70, /* SIB1.q-RxLevMin */
+    p_max: 10, /* maximum power allowed for the UE (dBm) */
+    si_window_length: 40, /* ms */
+    sib_sched_list: [ 
+      {
+        filename: "{{ directory['software'] }}/enb/config/sib23.asn",
+        si_periodicity: 16, /* frames */
+      },
+    ],
+
+#if N_RB_DL == 6
+    si_coderate: 0.30,   /* maximum code rate for SI/RA/P-RNTI messages */
+#else
+    si_coderate: 0.20,   /* maximum code rate for SI/RA/P-RNTI messages */
+#endif
+    si_pdcch_format: 2, /* 2 or 3. Log2 of the number of CCEs for PDCCH
+                           for SI/RA/P-RNTI */
+
+    n_symb_cch: 0, /* number of symbols for CCH (0 = auto) */
+
+    /* PDSCH dedicated config (currently same for all UEs) */
+    pdsch_dedicated: {
+#if N_ANTENNA_DL == 4
+      p_a: -6,
+#elif N_ANTENNA_DL == 2
+      p_a: -3,
+#else
+      p_a: 0,
+#endif
+      p_b: -1, /* -1 means automatic */
+    },
+
+    /* If defined, force for number of CCEs for UE specific PDCCH to
+       2^pdcch_format. Otherwise it is computed from the reported
+       CQI. Range: 0 to 3. */
+#if N_RB_DL == 6
+    pdcch_format: 1,
+#else
+    pdcch_format: 2,
+#endif
+
+    /* if defined, force the PDSCH MCS for all UEs. Otherwise it is
+       computed from the reported CQI */ 
+    /* pdsch_mcs: 12, */
+
+#if N_RB_DL == 6
+    prach_config_index: 15, /* subframe 9 every 20 ms */
+#else
+    prach_config_index: 4, /* subframe 4 every 10 ms */
+#endif
+    prach_freq_offset: -1, /* -1 means automatic */
+
+    /* PUCCH dedicated config (currently same for all UEs) */
+    pucch_dedicated: {
+      n1_pucch_sr_count: 11, /* increase if more UEs are needed */
+      cqi_pucch_n_rb: 1, /* increase if more UEs are needed */
+#if TDD == 1
+      //tdd_ack_nack_feedback_mode: "bundling", /* TDD only */
+      tdd_ack_nack_feedback_mode: "multiplexing", /* TDD only */
+#endif
+    },
+
+    /* PUSCH dedicated config (currently same for all UEs) */
+    pusch_dedicated: {
+      beta_offset_ack_index: 9,
+      beta_offset_ri_index: 6,
+      beta_offset_cqi_index: 6,
+    },
+
+    pusch_hopping_offset: -1, /* -1 means automatic */
+
+    /* MCS for Msg3 (=CCCH RRC Connection Request) */
+    pusch_msg3_mcs: 0,
+
+    /* this CQI value is assumed when none is received from the UE */
+#if N_RB_DL == 6
+    initial_cqi: 5,
+#else
+    initial_cqi: 3,
+#endif
+
+    /* if defined, force the PUSCH MCS for all UEs. Otherwise it is
+       computed from the last received SRS/PUSCH. */ 
+    //  pusch_mcs: 18, 
+
+    dl_256qam: true,
+    ul_64qam: true,
+
+    /* Scheduling request period (ms). Must be >= 40 for HD-FDD */
+    sr_period: 20, 
+
+    /* CQI report config */
+    cqi_period: 40, /* period (ms). Must be >= 32 for HD-FDD */
+
+#if N_ANTENNA_DL >= 2
+    /* RI reporting is done with a period of m_ri * cqi_period. 
+       m_ri = 0 (default) disables RI reporting. */
+    m_ri: 8,
+    /* transmission mode */
+    transmission_mode: 3,
+#endif
+
+    /* SRS dedicated config. All UEs share these
+       parameters. srs_config_index and freq_domain_position are
+       allocated for each UE) */ 
+    srs_dedicated: {
+#if N_RB_DL == 6
+      srs_bandwidth_config: 7,
+      srs_bandwidth: 1,
+#elif N_RB_DL == 15
+      srs_bandwidth_config: 6,
+      srs_bandwidth: 1,
+#elif N_RB_DL == 25
+      srs_bandwidth_config: 3,
+      srs_bandwidth: 1,
+#elif N_RB_DL == 50
+      srs_bandwidth_config: 2,
+      srs_bandwidth: 2,
+#elif N_RB_DL == 75
+      srs_bandwidth_config: 2,
+      srs_bandwidth: 2,
+#else
+      srs_bandwidth_config: 2,
+      srs_bandwidth: 3,
+#endif
+      srs_subframe_config: 3, /* 0 - 15 */
+      srs_period: 40, /* period (ms). Must be >= 40 for HD-FDD */
+      srs_hopping_bandwidth: 0,
+    },
+
+    /* MAC configuration (same for all UEs) */
+    mac_config: {
+       ul_max_harq_tx: 5, /* max number of HARQ transmissions for uplink */
+       dl_max_harq_tx: 5, /* max number of HARQ transmissions for downlink */
+    },
+
+    /* CPU load limitation */
+    pusch_max_its: 6, /* max number of turbo decoder iterations */
+
+    /* dynamic power control */
+    dpc: true,
+    dpc_pusch_snr_target: 25,
+    dpc_pucch_snr_target: 20,
+
+    /* RRC/UP ciphering algorithm preference. EEA0 is always the last. */
+    cipher_algo_pref: [],
+    /* RRC integrity algorithm preference. EIA0 is always the last. */
+    integ_algo_pref: [2, 1],
+
+    /* (in ms) send RRC connection release after this time of network
+       inactivity */ 
+    inactivity_timer: 10000,
+
+    /* SRB configuration */
+    srb_config: [
+      {
+        id: 1,
+        maxRetxThreshold: 32,
+        t_Reordering: 45,
+        t_PollRetransmit: 60,
+      },
+      {
+        id: 2 ,
+        maxRetxThreshold: 32,
+        t_Reordering: 45,
+        t_PollRetransmit: 60,
+      }
+    ],
+
+    /* DRB configuration */
+    drb_config: "{{ directory['software'] }}/enb/config/drb.cfg",
+  },
+}
diff --git a/software/ors-amarisoft/config/gnb.jinja2.cfg b/software/ors-amarisoft/config/gnb.jinja2.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..879a6358d1649e1e49e15a1f0e363b5f75b2e048
--- /dev/null
+++ b/software/ors-amarisoft/config/gnb.jinja2.cfg
@@ -0,0 +1,624 @@
+/* lteenb configuration file version 2021-09-18
+ * Copyright (C) 2019-2021 Amarisoft
+ * NR SA FDD or TDD cell */
+
+
+#define NR_TDD               1  // Values: 0 (NR FDD), 1(NR TDD)
+#define FR2                  0  // Values: 0 (FR1), 1 (FR2)
+#define NR_TDD_CONFIG        2  // Values: FR1: 1, 2, 3, 4 (compatible with LTE TDD config 2) FR2: 10
+#define N_ANTENNA_DL         2  // Values: 1 (SISO), 2 (MIMO 2x2), 4 (MIMO 4x4)
+#define N_ANTENNA_UL         2  // Values: 1, 2, 4
+#define NR_BANDWIDTH         {{ slapparameter_dict.get('nr_bandwidth', slap_configuration['configuration.default_nr_bandwidth']) }} // NR cell bandwidth
+#define NR_LONG_PUCCH_FORMAT 2  // Values: 2, 3, 4
+
+/* define to 1 to enable periodic SRS with N_ANTENNA_UL ports. Uplink
+   SU-MIMO is also enabled if N_ANTENNA_UL >= 2. Not all UEs support
+   uplink SU-MIMO. */
+#define USE_SRS             0
+
+{
+  log_options: "all.level=debug,all.max_size=32",
+  log_filename: "{{ directory['log'] }}/gnb.log",
+
+  /* Enable remote API and Web interface */
+  com_addr: "[{{ slap_configuration['ipv6-random'] }}]:{{ slap_configuration['configuration.enb_ws_port'] }}",
+
+  rf_driver: {
+        name: "sdr",
+        /* list of devices. 'dev0' is always the master. */
+        args: "dev0=/dev/sdr0",
+        /* synchronisation source: none, internal, gps, external (default = none) */
+        // sync: "gps",
+        rx_antenna: "tx_rx",
+  },
+  tx_gain: {{ slapparameter_dict.get('tx_gain', slap_configuration['configuration.default_nr_tx_gain']) }}, /* TX gain (in dB) */
+  rx_gain: {{ slapparameter_dict.get('rx_gain', slap_configuration['configuration.default_nr_rx_gain']) }}, /* RX gain (in dB) */
+
+  amf_list: [
+    {
+      /* address of AMF for NGAP connection. Must be modified if the AMF runs on a different host. */
+      amf_addr: "127.0.1.100",
+    },
+  ],
+  /* GTP bind address (=address of the ethernet interface connected to
+     the AMF). Must be modified if the AMF runs on a different host. */
+  gtp_addr: "{{ slapparameter_dict.get('gtp_addr', '127.0.1.1') }}",
+
+  gnb_id_bits: 28,
+  gnb_id: 0x12345,
+
+  nr_support: true,
+
+  rf_ports: [
+    {
+#if FR2  
+      /* an external frequency translator must be used for FR2 */
+      rf_dl_freq: 3500, /* MHz */
+      rf_ul_freq: 3500, /* MHz */
+      
+      /* uncomment to have a higher per-UE bitrate at the expense of
+         higher gNB real time constraints. The default value is 4
+         ms. 1 ms gives the maximum per-UE bitrate. */
+//      rx_to_tx_latency: 1, /* ms */
+#endif
+    },
+  ],
+
+  /* list of cells */
+  cell_list: [],
+
+  nr_cell_list: [
+  {
+    rf_port: 0,
+    cell_id: 0x01,
+#if NR_TDD == 1
+#if FR2
+    band: 257,
+    dl_nr_arfcn: 2079167,  /* 28000.08 MHz */
+    subcarrier_spacing: 120, /* kHz */
+    ssb_pos_bitmap: "0100000000000000000000000000000000000000000000000000000000000000",
+#else
+    band: {{ slapparameter_dict.get('nr_band', slap_configuration['configuration.default_nr_band']) }},
+    dl_nr_arfcn: {{ slapparameter_dict.get('dl_nr_arfcn', slap_configuration['configuration.default_dl_nr_arfcn']) }},
+    subcarrier_spacing: 30, /* kHz */
+    ssb_pos_bitmap: "10000000",
+#endif    
+#else
+    band: 7,
+    dl_nr_arfcn: 536020,  /* 2680 MHz */
+    ssb_subcarrier_spacing: 15,
+    subcarrier_spacing: 30, /* kHz */
+    ssb_pos_bitmap: "1000",
+#endif
+  },
+  ], /* nr_cell_list */
+
+  nr_cell_default: {
+    bandwidth: NR_BANDWIDTH, /* MHz */
+    n_antenna_dl: N_ANTENNA_DL,
+    n_antenna_ul: N_ANTENNA_UL,
+
+    /* force the timing TA offset (optional) */
+//    n_timing_advance_offset: 39936,
+    /* subframe offset to align with the LTE TDD pattern (optional) */
+//    subframe_offset: 2,
+    
+#if NR_TDD == 1
+    tdd_ul_dl_config: {
+#if NR_TDD_CONFIG == 1
+      pattern1: {
+        period: 5, /* in ms */
+        dl_slots: 7,
+        dl_symbols: /* 6 */ 2,
+        ul_slots: 2,
+        ul_symbols: 2,
+      },
+#elif NR_TDD_CONFIG == 2
+      pattern1: {
+        period: 5, /* in ms */
+        dl_slots: 7,
+        dl_symbols: 6,
+        ul_slots: 2,
+        ul_symbols: 4,
+      },
+#elif NR_TDD_CONFIG == 3
+      pattern1: {
+        period: 5, /* in ms */
+        dl_slots: 6,
+        dl_symbols: 2,
+        ul_slots: 3,
+        ul_symbols: 2,
+      },
+#elif NR_TDD_CONFIG == 4
+      pattern1: {
+        period: 3, /* in ms */
+        dl_slots: 3,
+        dl_symbols: 6,
+        ul_symbols: 4,
+        ul_slots: 2,
+      },
+      pattern2: {
+        period: 2, /* in ms */
+        dl_slots: 4,
+        dl_symbols: 0,
+        ul_symbols: 0,
+        ul_slots: 0,
+      },
+#elif NR_TDD_CONFIG == 10
+      /* only for FR2 */
+      pattern1: {
+        period: 0.625, /* in ms */
+        dl_slots: 3,
+        dl_symbols: 10,
+        ul_slots: 1,
+        ul_symbols: 2,
+      },
+#endif
+    },
+#endif
+    ssb_period: 20, /* in ms */
+    n_id_cell: 500,
+
+    plmn_list: [ {
+      tac: 100,
+      plmn: "00101",
+      reserved: false,
+      nssai: [
+        {
+         sst: 1,
+        },
+        /*{
+         sst: 2,
+        },
+        {
+         sst: 3,
+         sd: 50,
+        },*/
+       ],
+      },
+    ],
+
+    /*sib_sched_list: [
+      {
+        filename: "{{ directory['software'] }}/enb/config/sib2_nr.asn",
+        si_periodicity: 16,
+      },
+      {
+        filename: "{{ directory['software'] }}/enb/config/sib3_nr.asn",
+        si_periodicity: 16,
+      },
+      {
+        filename: "{{ directory['software'] }}/enb/config/sib4_nr.asn",
+        si_periodicity: 32,
+      },
+    ],
+    sib9: {
+      si_periodicity: 32
+    },*/
+    si_window_length: 40,
+
+    cell_barred: false,
+    intra_freq_reselection: true,
+    q_rx_lev_min: -70,
+    q_qual_min: -20,
+    p_max: 10, /* dBm */
+
+    root_sequence_index: 1, /* PRACH root sequence index */
+
+    /* Scheduling request period (slots). */
+    sr_period: 40,
+
+    dmrs_type_a_pos: 2,
+
+    /* to limit the number of HARQ feedback in UL, use pdsch_harq_ack_max;
+       allows to workaround issues with SM-G977N for example */
+    //pdsch_harq_ack_max: 2,
+
+    prach: {
+#if NR_TDD == 1
+#if FR2
+      prach_config_index: 149, /* format C0, every 4 frames */
+      msg1_subcarrier_spacing: 120, /* kHz */
+#else
+#if NR_TDD_CONFIG == 4
+      prach_config_index: 156, /* format B4, subframe 2 */
+#else
+      prach_config_index: 160, /* format B4, subframe 9 */
+#endif
+      msg1_subcarrier_spacing: 30, /* kHz */
+#endif
+#else
+      prach_config_index: 16, /* subframe 1 every frame */
+#endif
+      msg1_fdm: 1,
+      msg1_frequency_start: -1,
+      zero_correlation_zone_config: 15,
+      preamble_received_target_power: -110, /* in dBm */
+      preamble_trans_max: 7,
+      power_ramping_step: 4, /* in dB */
+#if FR2
+      ra_response_window: 40, /* in slots */
+#else
+      ra_response_window: 20, /* in slots */
+#endif
+      restricted_set_config: "unrestricted_set",
+      ra_contention_resolution_timer: 64, /* in ms */
+      ssb_per_prach_occasion: 1,
+      cb_preambles_per_ssb: 8,
+    },
+
+    pdcch: {
+      search_space0_index: 0,
+
+      dedicated_coreset: {
+        rb_start: -1, /* -1 to have the maximum bandwidth */
+        l_crb: -1, /* -1 means all the bandwidth */
+        duration: 0, /* 0 means to automatically set it from the coreset bandwidth */
+        precoder_granularity: "sameAsREG_bundle",
+      },
+
+      css: {
+        n_candidates: [ 0, 0, 1, 0, 0 ],
+      },
+      rar_al_index: 2,
+      si_al_index: 2,
+
+      uss: {
+        n_candidates: [ 0, 2, 1, 0, 0 ],
+        dci_0_1_and_1_1: true,
+      },
+      al_index: 1,
+    },
+
+    pdsch: {
+      mapping_type: "typeA",
+      dmrs_add_pos: 1,
+      dmrs_type: 1,
+      dmrs_max_len: 1,
+      /* k0 delay in slots from DCI to PDSCH: automatic setting */
+      /* k1 delay in slots from PDSCH to PUCCH/PUSCH ACK/NACK: automatic setting */
+      mcs_table: "qam256",
+      rar_mcs: 2,
+      si_mcs: 6,
+      /* If defined, force the PDSCH MCS for all UEs. Otherwise it is computed
+       * based on DL channel quality estimation */
+      /* mcs: 24, */
+    },
+
+    csi_rs: {
+      nzp_csi_rs_resource: [
+        {
+          csi_rs_id: 0,
+#if N_ANTENNA_DL == 1
+          n_ports: 1,
+          frequency_domain_allocation: "row2",
+          bitmap: "100000000000",
+          cdm_type: "no_cdm",
+#elif N_ANTENNA_DL == 2
+          n_ports: 2,
+          frequency_domain_allocation: "other",
+          bitmap: "100000",
+          cdm_type: "fd_cdm2",
+#elif N_ANTENNA_DL == 4
+          n_ports: 4,
+          frequency_domain_allocation: "row4",
+          bitmap: "100",
+          cdm_type: "fd_cdm2",
+#elif N_ANTENNA_DL == 8
+          n_ports: 8,
+          frequency_domain_allocation: "other",
+          bitmap: "110011",
+          cdm_type: "fd_cdm2",
+#else
+#error unsupported number of DL antennas
+#endif
+          density: 1,
+          first_symb: 4,
+          rb_start: 0,
+          l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */
+          power_control_offset: 0, /* dB */
+          power_control_offset_ss: 0, /* dB */
+          period: 80,
+          offset: 1, /* != 0 to avoid collision with SSB */
+          qcl_info_periodic_csi_rs: 0,
+        },
+#if FR2 == 0
+#define USE_TRS
+#endif
+#ifdef USE_TRS
+        /* TRS : period of 40 ms, slots 1 & 2, symbols 4 and 8 */
+        {
+          csi_rs_id: 1,
+          n_ports: 1,
+          frequency_domain_allocation: "row1",
+          bitmap: "0001",
+          cdm_type: "no_cdm",
+          density: 3,
+          first_symb: 4,
+          rb_start: 0,
+          l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */
+          power_control_offset: 0, /* dB */
+          power_control_offset_ss: 0, /* dB */
+          period: 40,
+          offset: 11,
+          qcl_info_periodic_csi_rs: 0,
+        },
+        {
+          csi_rs_id: 2,
+          n_ports: 1,
+          frequency_domain_allocation: "row1",
+          bitmap: "0001",
+          cdm_type: "no_cdm",
+          density: 3,
+          first_symb: 8,
+          rb_start: 0,
+          l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */
+          power_control_offset: 0, /* dB */
+          power_control_offset_ss: 0, /* dB */
+          period: 40,
+          offset: 11,
+          qcl_info_periodic_csi_rs: 0,
+        },
+        {
+          csi_rs_id: 3,
+          n_ports: 1,
+          frequency_domain_allocation: "row1",
+          bitmap: "0001",
+          cdm_type: "no_cdm",
+          density: 3,
+          first_symb: 4,
+          rb_start: 0,
+          l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */
+          power_control_offset: 0, /* dB */
+          power_control_offset_ss: 0, /* dB */
+          period: 40,
+          offset: 12,
+          qcl_info_periodic_csi_rs: 0,
+        },
+        {
+          csi_rs_id: 4,
+          n_ports: 1,
+          frequency_domain_allocation: "row1",
+          bitmap: "0001",
+          cdm_type: "no_cdm",
+          density: 3,
+          first_symb: 8,
+          rb_start: 0,
+          l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */
+          power_control_offset: 0, /* dB */
+          power_control_offset_ss: 0, /* dB */
+          period: 40,
+          offset: 12,
+          qcl_info_periodic_csi_rs: 0,
+        },
+#endif
+      ],
+      nzp_csi_rs_resource_set: [
+        {
+          csi_rs_set_id: 0,
+          nzp_csi_rs_resources: [ 0 ],
+          repetition: false,
+        },
+#ifdef USE_TRS
+        {
+          csi_rs_set_id: 1,
+          nzp_csi_rs_resources: [ 1, 2, 3, 4 ],
+          repetition: false,
+          trs_info: true,
+        },
+#endif
+      ],
+      
+     csi_im_resource: [
+        {
+          csi_im_id: 0,
+          pattern: 1,
+          subcarrier_location: 8,
+          symbol_location: 8,
+          rb_start: 0,
+          l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */
+          period: 80,
+          offset: 1, /* != 0 to avoid collision with SSB */
+        },
+      ],
+      csi_im_resource_set: [
+        {
+          csi_im_set_id: 0,
+          csi_im_resources: [ 0 ],
+        }
+      ],
+      /* ZP CSI-RS to set the CSI-IM REs to zero */
+      zp_csi_rs_resource: [
+        {
+          csi_rs_id: 0,
+          frequency_domain_allocation: "row4",
+          bitmap: "100",
+          n_ports: 4,
+          cdm_type: "fd_cdm2",
+          first_symb: 8,
+          density: 1,
+          rb_start: 0,
+          l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */
+          period: 80,
+          offset: 1,
+        },
+      ],
+      p_zp_csi_rs_resource_set: [
+        {
+          zp_csi_rs_resources: [ 0 ],
+        },
+      ],
+
+      csi_resource_config: [
+        {
+          csi_rsc_config_id: 0,
+          nzp_csi_rs_resource_set_list: [ 0 ],
+          resource_type: "periodic",
+        },
+        {
+          csi_rsc_config_id: 1,
+          csi_im_resource_set_list: [ 0 ],
+          resource_type: "periodic",
+        },
+#ifdef USE_TRS
+        {
+          csi_rsc_config_id: 2,
+          nzp_csi_rs_resource_set_list: [ 1 ],
+          resource_type: "periodic",
+        },
+#endif
+      ],
+      csi_report_config: [
+        {
+          resources_for_channel_measurement: 0,
+          csi_im_resources_for_interference: 1,
+          report_config_type: "periodic",
+          period: 80,
+          report_quantity: "CRI_RI_PMI_CQI",
+#if N_ANTENNA_DL > 1    
+          codebook_config: {
+            codebook_type: "type1",
+            sub_type: "typeI_SinglePanel",
+#if N_ANTENNA_DL == 2
+#elif N_ANTENNA_DL == 4
+            n1: 2,
+            n2: 1,
+            codebook_mode: 1,
+#elif N_ANTENNA_DL == 8
+            n1: 4,
+            n2: 1,
+            codebook_mode: 1,
+#endif
+          },
+#endif
+          cqi_table: 2,
+          subband_size: "value1",
+        },
+      ],
+    },
+    
+    pucch: {
+      pucch_group_hopping: "neither",
+      hopping_id: -1, /* -1 = n_cell_id */
+      p0_nominal: -90,
+#if 0
+        pucch0: {
+          initial_cyclic_shift: 1,
+          n_symb: 1,
+        },
+#else
+        pucch1: {
+          n_cs: 3,
+          n_occ: 3,
+          freq_hopping: true,
+#if USE_SRS && NR_TDD == 0
+          n_symb: 13,
+#endif
+        },
+#endif
+#if NR_LONG_PUCCH_FORMAT == 2
+        pucch2: {
+          n_symb: 2,
+          n_prb: 1,
+          freq_hopping: true,
+          simultaneous_harq_ack_csi: false,
+          max_code_rate: 0.25,
+        },
+#elif NR_LONG_PUCCH_FORMAT == 3
+        pucch3: {
+          bpsk: false,
+          additional_dmrs: false,
+          freq_hopping: true,
+          n_prb: 1,
+          simultaneous_harq_ack_csi: true,
+          max_code_rate: 0.25,
+        },
+#elif NR_LONG_PUCCH_FORMAT == 4
+        pucch4: {
+          occ_len: 4,
+          bpsk: false,
+          additional_dmrs: false,
+          freq_hopping: true,
+          simultaneous_harq_ack_csi: true,
+          max_code_rate: 0.25,
+        },
+#endif
+    },
+
+#if USE_SRS
+    srs: {
+#if NR_TDD
+#if NR_TDD_CONFIG == 1 || NR_TDD_CONFIG == 2
+      srs_symbols: [ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0 ],
+#elif NR_TDD_CONFIG == 3
+      srs_symbols: [ 0, 0, 0, 0, 0, 0, 2, 0, 0, 0 ],
+#elif NR_TDD_CONFIG == 4
+      srs_symbols: [ 0, 0, 0, 4, 0, 0, 0, 0, 0, 0 ],
+#elif NR_TDD_CONFIG == 10
+      srs_symbols: [ 0, 0, 0, 2, 0 ],
+#endif
+#else
+      srs_symbols: [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0 ],
+#endif
+      srs_resource: [
+        {
+          srs_resource_id: 0,
+          n_ports: N_ANTENNA_UL,
+          resource_type: "periodic",
+          period: 80, /* in slots */
+        }
+      ],
+      srs_resource_set: [
+        {
+          srs_resource_id_list: [ 0 ],
+        },
+      ],
+    },
+#endif
+
+    pusch: {
+      mapping_type: "typeA",
+      n_symb: 14,
+      dmrs_add_pos: 1,
+      dmrs_type: 1,
+      dmrs_max_len: 1,
+      tf_precoding: false,
+      mcs_table: "qam256", /* without transform precoding */
+      mcs_table_tp: "qam256", /* with transform precoding */
+      ldpc_max_its: 5,
+      /* k2, msg3_k2 delay in slots from DCI to PUSCH: automatic setting */
+      p0_nominal_with_grant: -76,
+      msg3_mcs: 4,
+      msg3_delta_power: 0, /* in dB */
+      beta_offset_ack_index: 9,
+
+      /* if defined, force the PUSCH MCS for all UEs. Otherwise it is
+       computed from the last received PUSCH. */
+      /* mcs: 16, */
+    },
+
+    /* MAC configuration */
+    mac_config: {
+      msg3_max_harq_tx: 5,
+      ul_max_harq_tx: 5, /* max number of HARQ transmissions for uplink */
+      dl_max_harq_tx: 5, /* max number of HARQ transmissions for downlink */
+      ul_max_consecutive_retx: 30, /* disconnect UE if reached */
+      dl_max_consecutive_retx: 30, /* disconnect UE if reached */
+      periodic_bsr_timer: 20,
+      retx_bsr_timer: 320,
+      periodic_phr_timer: 500,
+      prohibit_phr_timer: 200,
+      phr_tx_power_factor_change: "dB3",
+      sr_prohibit_timer: 0, /* in ms, 0 to disable the timer */
+      sr_trans_max: 64,
+    },
+
+    cipher_algo_pref: [],
+    integ_algo_pref: [2, 1],
+
+    inactivity_timer: 10000,
+
+    drb_config: "{{ directory['software'] }}/enb/config/drb_nr.cfg",
+  },
+}
+
diff --git a/software/ors-amarisoft/config/ims.jinja2.cfg b/software/ors-amarisoft/config/ims.jinja2.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..d1fca55c5d35450a20ccb4f1129688f0e500a1e6
--- /dev/null
+++ b/software/ors-amarisoft/config/ims.jinja2.cfg
@@ -0,0 +1,78 @@
+/* lteims configuration file
+ * version 2021-09-18
+ * Copyright (C) 2015-2021 Amarisoft
+ */
+{
+    log_options: "all.level=debug,all.max_size=32",
+    log_filename: "{{ directory['log'] }}/ims.log",
+
+    /* SIP bind address */
+    //sip_addr: [
+    //    {addr: "192.168.4.1", bind_addr: "192.168.4.1", port_min: 10000, port_max: 20000},
+    //    "2001:468:3000:1::",
+    //    {addr: "192.168.5.1", bind_addr: "192.168.5.1", port_min: 10000, port_max: 20000},
+    //    "2001:468:4000:1::"
+    //],
+    /* SIP bind address */
+    sip_addr: [
+        {addr: "{{ slap_configuration['tun-ipv4-addr'] }}", bind_addr: "0.0.0.0", port_min: 10000, port_max: 20000},
+        {#" slap_configuration['tun-ipv6-addr'] ",#}
+    ],
+
+    mms_server_bind_addr: "{{ netaddr.IPAddress(netaddr.IPNetwork(slap_configuration['tun-ipv4-network']).first) + 1 }}:1111",
+
+    /* MME connection for SMS over SG */
+    sctp_addr: "{{ slap_configuration['configuration.ims_addr'] }}",
+
+    /* Cx connection */
+    cx_server_addr: "127.0.1.100",
+    cx_bind_addr: "{{ slap_configuration['configuration.ims_addr'] }}",
+
+    /* Rx connection */
+    rx_server_addr: "127.0.1.100",
+    rx_bind_addr: "{{ slap_configuration['configuration.ims_addr'] }}",
+
+    /* Remote API */
+    com_addr: "[{{ slap_configuration['ipv6-random'] }}]:{{ slap_configuration['configuration.ims_ws_port'] }}",
+
+    /* Global domain name (May be overriden for each user) */
+    domain: "{{ slap_configuration['configuration.domain'] }}",
+
+    include "{{ slap_configuration['ue_db_path'] }}",
+
+{# Example of of s6a connection #}
+{#  s6: { #}
+{#    server_addr: "", #}
+{#    bind_addr: "", #}
+{#    origin_realm: "", #}
+{#    origin_host: "", #}
+{#  }, #}
+
+    /* Echo phone number */
+    echo: [
+        "tel:666",
+        "tel:+666",
+        {impu: "tel:404", code: 404},     /* 404 test */
+        {impu: "urn:service:sos", anonymous: true, authentication: false}, /* Emergency call */
+        {impu: "urn:service:sos.police", anonymous: true, authentication: false}, /* Emergency call */
+    ],
+
+    /* Delay */
+    //sms_expires: 86400,
+    //binding_expires: 3600,
+
+    /* on: 3GPP mode allowed
+     * silent: 3GPP mode forced
+     * off: IETF mode
+     */
+    precondition: "on",
+    "100rel": true,
+
+    /* IPsec */
+    ipsec_aalg_list: ["hmac-md5-96", "hmac-sha-1-96"],
+    ipsec_ealg_list: ["null", "aes-cbc", "des-cbc", "des-ede3-cbc"],
+
+    mt_call_sdp_file: "{{ directory['software'] }}/mme/config/mt_call.sdp",
+
+    ue_db_filename: "{{ directory['var'] }}/lte_ue_ims.db",
+}
diff --git a/software/ors-amarisoft/config/mme.jinja2.cfg b/software/ors-amarisoft/config/mme.jinja2.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..a6d20237e28c75e3d0cec12a37e880c5fd16c555
--- /dev/null
+++ b/software/ors-amarisoft/config/mme.jinja2.cfg
@@ -0,0 +1,159 @@
+/* ltemme configuration file for ims
+ * version 2021-09-18
+ * Copyright (C) 2015-2021 Amarisoft
+ */
+{
+  /* Log filter: syntax: layer.field=value[,...]
+  
+     Possible layers are nas, ip, s1ap, gtpu and all. The 'all' layer
+     is used to address all the layers at the same time.
+
+     field values:
+
+     - 'level': the log level of each layer can be set to 'none',
+     'error', 'info' or 'debug'. Use 'debug' to log all the messages.
+     
+     - 'max_size': set the maximum size of the hex dump. 0 means no
+       hex dump. -1 means no limit.
+  */
+  log_options: "all.level=debug,all.max_size=32",
+  log_filename: "{{ directory['log'] }}/mme.log",
+
+  /* Enable remote API and Web interface */
+  com_addr: "[{{ slap_configuration['ipv6-random'] }}]:{{ slap_configuration['configuration.mme_ws_port'] }}",
+
+  /* bind address for GTP-U. Normally = address of the PC, here bound
+    on local interface to be able to run ltemme on the same PC as
+    lteenb. By default, the S1AP SCTP connection is bound on the same
+    address. */
+  gtp_addr: "127.0.1.100",
+
+  plmn: "00101",
+  mme_group_id: 32769,
+  mme_code: 1,
+
+  ims_vops_eps: true, /* IMS supported */
+  ims_vops_5gs_3gpp: true, /* IMS supported */
+  ims_vops_5gs_n3gpp: true, /* IMS supported */
+  //emc_bs: true, /* emergency calls supported */
+  //emc: 3, /* NR/E-UTRA connected to 5GCN emergency calls supported */
+  //emc_n3gpp: true, /* non-3GPP emergency calls supported */
+  emergency_number_list: [
+      /* Category bits: (Table 10.5.135d/3GPP TS 24.008)
+         Bit 1 Police
+         Bit 2 Ambulance
+         Bit 3 Fire Brigade
+         Bit 4 Marine Guard
+         Bit 5 Mountain Rescue
+      */    
+    { category: 0x1f, digits: "911" },
+    { category: 0x1f, digits: "112" },
+  ],
+
+  rx: {
+    qci: {audio: 1, video: 2},
+  },
+
+  /* network name and network short name sent in the EMM information
+     message to the UE */
+  network_name: "{{ slap_configuration['configuration.network_name'] }}",
+  network_short_name: "{{ slap_configuration['configuration.network_name'] }}",
+
+  /* Control Plane Cellular IoT EPS optimization support */
+  cp_ciot_opt: true,
+
+  /* DCNR support */
+  nr_support: true,
+
+  eps_5gs_interworking: "with_n26",
+
+
+  /* 15 bearers support */
+  fifteen_bearers: false,
+
+  ims_list: [
+    {
+      ims_addr: "{{ slap_configuration['configuration.ims_addr'] }}",
+      bind_addr: "{{  slap_configuration['configuration.ims_bind'] }}"
+    }
+  ],
+
+  /* AMF slices configuration */
+  /*nssai: [
+   {
+    sst: 1,
+   },
+   {
+    sst: 2,
+   },
+   {
+    sst: 3,
+    sd: 50,
+   }
+  ],*/
+
+  /* ePDG configuration */
+  //epdg: {
+  //  bind_addr: "127.0.1.100:500",
+  //  esp_duration: 900,
+  //  certificate: "epdg.pem",
+  //  /* required for some buggy Mediatek phones */
+  //  //omit_auth_in_first_auth_rsp: true
+  //},
+
+  /* Public Data Networks. The first one is the default. */
+  pdn_list: [
+    {
+      pdn_type: "ipv4",
+      tun_ifname: "{{ slap_configuration['tun-name'] }}",
+      access_point_name: ["default", "internet", "ims", "sos"],
+      first_ip_addr: "{{ netaddr.IPAddress(netaddr.IPNetwork(slap_configuration['tun-ipv4-network']).first) + 2 }}",
+      last_ip_addr: "{{ netaddr.IPAddress(netaddr.IPNetwork(slap_configuration['tun-ipv4-network']).last) - 1 }}",
+      ip_addr_shift: 2, /* difference between allocated IP addresses is 4 */
+      dns_addr: "8.8.8.8", /* Google DNS address */
+      // TODO: enable this instead of Google's DNS above
+      // dns_addr: "{{ slap_configuration['tun-ipv4-addr'] }}",
+      p_cscf_addr: ["{{ slap_configuration['tun-ipv4-addr'] }}"],
+
+      erabs: [
+        {
+          qci: 9,
+          priority_level: 15,
+          pre_emption_capability: "shall_not_trigger_pre_emption",
+          pre_emption_vulnerability: "not_pre_emptable",
+        },
+      ],
+    },
+  ],
+
+  /* Setup script for the network interface.
+     If no script is given, no network interface is created.
+     Script is called for each PDN with following parameters:
+        1) Interface name
+        2) PDN index
+        3) Access Point Name
+        4) IP version: 'ipv4' or 'ipv6'
+        5) IP address: first IP address for ipv4 and link local address for IPv6
+        6) First IP address
+        7) Last IP address
+  
+  SlapOS: We suplement the script by preparing the TUN interface in slapos format phase.
+  Gotcha: The script has to be presented
+  */
+  tun_setup_script: "{{ ifup_empty }}",
+  /* If true, inter-UE routing is done inside the MME (hence no IP
+     packet is output to the virtual network interface in case of
+     inter-UE communication). Otherwise, it is done by the Linux IP
+     layer. */
+  ue_to_ue_forwarding: false,
+
+  /* NAS ciphering algorithm preference. EEA0 is always the last. */
+  nas_cipher_algo_pref: [ ],
+  /* NAS integrity algorithm preference. EIA0 is always the last. */
+  nas_integ_algo_pref: [ 2, 1 ],
+
+  include "{{ slap_configuration['ue_db_path'] }}",
+
+  /* persistent user database */
+  ue_db_filename: "{{ directory['var'] }}/lte_ue.db"
+}
diff --git a/software/ors-amarisoft/config/ue_db.jinja2.cfg b/software/ors-amarisoft/config/ue_db.jinja2.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..89016508bd1932f5eea33eb141f5fbe26644d7b6
--- /dev/null
+++ b/software/ors-amarisoft/config/ue_db.jinja2.cfg
@@ -0,0 +1,113 @@
+ue_db: [{
+    sim_algo: "xor", /* USIM authentication algorithm: xor, milenage or tuak */
+    imsi: "001010123456789", /* Anritsu Test USIM */
+//    imsi: "001012345678901", /* Agilent or R&S Test USIM */
+    amf: 0x9001, /* Authentication Management Field */
+    sqn: "000000000000", /* Sequence Number */
+    K: "00112233445566778899aabbccddeeff", /* Anritsu Test USIM */
+//    K: "4147494C454E5420544543484E4F0000", /* Agilent Test USIM */
+//    K: "000102030405060708090A0B0C0D0E0F", /* R&S Test USIM */
+
+    impi: "001010123456789@ims.mnc001.mcc001.3gppnetwork.org",
+    impu: ["001010123456789", "tel:0600000000", "tel:600"],
+    domain: "ims.mnc001.mcc001.3gppnetwork.org",
+    multi_sim: true, /* Experimental */
+
+    /* For standard SIP client */
+    /*pwd:  "amarisoft",
+    authent_type: "MD5",*/
+}, {
+    sim_algo: "milenage",
+    imsi: "001010000000001",
+    opc: "000102030405060708090A0B0C0D0E0F",
+    amf: 0x9001,
+    sqn: "000000000000",
+    K: "00112233445566778899AABBCCDDEEFF",
+    impu: ["sip:impu01", "tel:0600000001"],
+    impi: "impi01@amarisoft.com",
+}, {
+    sim_algo: "milenage",
+    imsi: "001010000000002",
+    opc: "000102030405060708090A0B0C0D0E0F",
+    amf: 0x9001,
+    sqn: "000000000000",
+    K: "00112233445566778899AABBCCDDEEFF",
+    impu: ["sip:impu02", "tel:0600000002"],
+    impi: "impi02@amarisoft.com",
+}, {
+    sim_algo: "milenage",
+    imsi: "001010000000003",
+    opc: "000102030405060708090A0B0C0D0E0F",
+    amf: 0x9001,
+    sqn: "000000000000",
+    K: "00112233445566778899AABBCCDDEEFF",
+    impu: ["sip:impu03", "tel:0600000003"],
+    impi: "impi03@amarisoft.com",
+}, {
+    sim_algo: "milenage",
+    imsi: "001010000000004",
+    opc: "000102030405060708090A0B0C0D0E0F",
+    amf: 0x9001,
+    sqn: "000000000000",
+    K: "00112233445566778899AABBCCDDEEFF",
+    impu: "impu04",
+    impi: "impi04@amarisoft.com",
+}, {
+    sim_algo: "milenage",
+    imsi: "001010000000006",
+    opc: "000102030405060708090A0B0C0D0E0F",
+    amf: 0x9001,
+    sqn: "000000000000",
+    K: "00112233445566778899AABBCCDDEEFF",
+    impu: "impu06",
+    impi: "impi06@amarisoft.com",
+}, {
+    sim_algo: "milenage",
+    imsi: "001010000000007",
+    opc: "000102030405060708090A0B0C0D0E0F",
+    amf: 0x9001,
+    sqn: "000000000000",
+    K: "00112233445566778899AABBCCDDEEFF",
+    impu: "impu07",
+    impi: "impi07@amarisoft.com",
+}, {
+    sim_algo: "milenage",
+    imsi: "001010000000008",
+    opc: "000102030405060708090A0B0C0D0E0F",
+    amf: 0x9001,
+    sqn: "000000000000",
+    K: "00112233445566778899AABBCCDDEEFF",
+    impu: "impu08",
+    impi: "impi08@amarisoft.com",
+}, {
+    sim_algo: "milenage",
+    imsi: "001010000000009",
+    opc: "000102030405060708090A0B0C0D0E0F",
+    amf: 0x9001,
+    sqn: "000000000000",
+    K: "00112233445566778899AABBCCDDEEFF",
+    impu: "impu09",
+    impi: "impi09@amarisoft.com",
+}, {
+{% for slave_instance in slave_instance_list -%}
+{% if slave_instance.get('imsi', '') != '' %}
+    sim_algo: "{{ slave_instance.get('sim_algo', 'milenage') }}",
+    imsi: "{{ slave_instance.get('imsi', '') }}",
+    opc: "{{ slave_instance.get('opc', '') }}",
+    amf: {{ slave_instance.get('amf', '0x9001') }},
+    sqn: "{{ slave_instance.get('sqn', '000000000000') }}",
+    K: "{{ slave_instance.get('k', '') }}",
+    impu: "{{ slave_instance.get('impu', '') }}",
+    impi: "{{ slave_instance.get('impi', '') }}",
+}, {
+{% endif %}
+{% endfor -%}
+    sim_algo: "milenage",
+    imsi: "001010000000010",
+    opc: "000102030405060708090A0B0C0D0E0F",
+    amf: 0x9001,
+    sqn: "000000000000",
+    K: "00112233445566778899AABBCCDDEEFF",
+    impu: "impu10",
+    impi: "impi10@amarisoft.com",
+}]
diff --git a/software/ors-amarisoft/instance-enb-epc.jinja2.cfg b/software/ors-amarisoft/instance-enb-epc.jinja2.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..62c5ed21b0f2289043cd5650835653a03166d9e5
--- /dev/null
+++ b/software/ors-amarisoft/instance-enb-epc.jinja2.cfg
@@ -0,0 +1,78 @@
+[buildout]
+parts =
+  directory
+  lte-enb-request
+  lte-epc-request
+  publish-connection-information
+
+extends = {{ monitor_template }}
+
+eggs-directory = {{ eggs_directory }}
+develop-eggs-directory = {{ develop_eggs_directory }}
+offline = true
+
+[slap-configuration]
+recipe = slapos.cookbook:slapconfiguration.serialised
+computer = {{ slap_connection['computer-id'] }}
+partition = {{ slap_connection['partition-id'] }}
+url = {{ slap_connection['server-url'] }}
+key = {{ slap_connection['key-file'] }}
+cert = {{ slap_connection['cert-file'] }}
+
+[directory]
+recipe = slapos.cookbook:mkdirectory
+software = {{ buildout_directory }}
+home = ${buildout:directory}
+etc = ${:home}/etc
+var = ${:home}/var
+etc = ${:home}/etc
+bin = ${:home}/bin
+run = ${:var}/run
+script = ${:etc}/run
+service = ${:etc}/service
+promise = ${:etc}/promise
+log = ${:var}/log
+
+[request-common-base]
+recipe = slapos.cookbook:request.serialised
+software-url = {{ slap_connection['software-release-url'] }}
+server-url = {{ slap_connection['server-url'] }}
+computer-id = {{ slap_connection['computer-id'] }}
+partition-id = {{ slap_connection['partition-id'] }}
+key-file = {{ slap_connection['key-file'] }}
+cert-file = {{ slap_connection['cert-file'] }}
+
+config-monitor-password = ${monitor-htpasswd:passwd}
+return = monitor-base-url
+
+[lte-epc-request]
+<= request-common-base
+name = EPC
+software-type = epc
+config-name = epc
+
+[lte-enb-request]
+<= request-common-base
+name = eNB
+software-type = enb
+config-name = enb
+{% if slapparameter_dict.get("tx_gain", None) %}
+config-tx_gain = {{ dumps(slapparameter_dict["tx_gain"]) }}
+{% endif %}
+{% if slapparameter_dict.get("rx_gain", None) %}
+config-rx_gain = {{ dumps(slapparameter_dict["rx_gain"]) }}
+{% endif %}
+{% if slapparameter_dict.get("dl_earfcn", None) %}
+config-dl_earfcn = {{ dumps(slapparameter_dict["dl_earfcn"]) }}
+{% endif %}
+{% if slapparameter_dict.get("n_rb_dl", None) %}
+config-n_rb_dl = {{ dumps(slapparameter_dict["n_rb_dl"]) }}
+{% endif %}
+
+[monitor-base-url-dict]
+lte-epc-request =  ${lte-epc-request:connection-monitor-base-url}
+lte-enb-request =  ${lte-enb-request:connection-monitor-base-url}
+
+[publish-connection-information]
+recipe = slapos.cookbook:publish
+<= monitor-publish
diff --git a/software/ors-amarisoft/instance-enb-input-schema.jinja2.json b/software/ors-amarisoft/instance-enb-input-schema.jinja2.json
new file mode 100644
index 0000000000000000000000000000000000000000..7aff1f11a92f966a88b72c609200de78afb57d6f
--- /dev/null
+++ b/software/ors-amarisoft/instance-enb-input-schema.jinja2.json
@@ -0,0 +1,32 @@
+{
+    "type": "object",
+    "$schema": "http://json-schema.org/draft-04/schema",
+
+    "title": "Input Parameters",
+    "properties": {
+        "tx_gain": {
+            "title": "Tx gain",
+            "description": "Tx gain (in dB)",
+            "type": "number",
+            "default": {{ default_lte_tx_gain }}
+        },
+        "rx_gain": {
+            "title": "Rx gain",
+            "description": "Rx gain (in dB)",
+            "type": "number",
+            "default": {{ default_lte_rx_gain }}
+        },
+        "dl_earfcn": {
+            "title": "DL EARFCN",
+            "description": "Downlink E-UTRA Absolute Radio Frequency Channel Number of the cell",
+            "type": "number",
+            "default": {{ default_dl_earfcn }}
+        },
+        "n_rb_dl": {
+            "title": "DL RB",
+            "description": "number of DL resource blocks",
+            "type": "number",
+            "default": {{ default_lte_n_rb_dl }}
+        }
+    }
+}
diff --git a/software/ors-amarisoft/instance-enb.jinja2.cfg b/software/ors-amarisoft/instance-enb.jinja2.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..9e5d12101148f60902f54c85df804ac6842058ae
--- /dev/null
+++ b/software/ors-amarisoft/instance-enb.jinja2.cfg
@@ -0,0 +1,97 @@
+[buildout]
+parts =
+  directory
+  ltelogs
+  lte-enb-config
+  lte-enb-service
+  publish-connection-information
+
+extends = {{ monitor_template }}
+
+eggs-directory = {{ eggs_directory }}
+develop-eggs-directory = {{ develop_eggs_directory }}
+offline = true
+
+[slap-configuration]
+recipe = slapos.cookbook:slapconfiguration.serialised
+computer = {{ slap_connection['computer-id'] }}
+partition = {{ slap_connection['partition-id'] }}
+url = {{ slap_connection['server-url'] }}
+key = {{ slap_connection['key-file'] }}
+cert = {{ slap_connection['cert-file'] }}
+
+configuration.network_name = VIFIB
+configuration.domain = vifib.com
+configuration.mme_ws_port = 9000
+configuration.enb_ws_port = 9002
+configuration.ims_ws_port = 9003
+configuration.ims_addr = 127.0.0.1
+configuration.ims_bind = 127.0.0.2
+configuration.enb_addr = 127.0.1.1
+configuration.default_dl_earfcn = {{ default_dl_earfcn }}
+configuration.default_lte_dl_freq = {{ default_lte_dl_freq }}
+configuration.default_lte_band = {{ default_lte_band }}
+configuration.default_lte_n_rb_dl = {{ default_lte_n_rb_dl }}
+configuration.default_lte_tx_gain = {{ default_lte_tx_gain }}
+configuration.default_lte_rx_gain = {{ default_lte_rx_gain }}
+
+[directory]
+recipe = slapos.cookbook:mkdirectory
+software = {{ buildout_directory }}
+home = ${buildout:directory}
+etc = ${:home}/etc
+var = ${:home}/var
+etc = ${:home}/etc
+bin = ${:home}/bin
+run = ${:var}/run
+script = ${:etc}/run
+service = ${:etc}/service
+promise = ${:etc}/promise
+log = ${:var}/log
+
+[ltelogs]
+recipe = slapos.recipe.template:jinja2
+template = {{ ltelogs_template }}
+rendered = ${directory:home}/ltelogs.sh
+mode = 0775
+extensions = jinja2.ext.do
+context =
+  section directory directory
+
+### eNodeB (enb)
+[lte-enb-service]
+recipe = slapos.cookbook:wrapper
+init = ${ltelogs:rendered} ${directory:log}/enb.log; sleep 2
+command-line = {{ enb }}/lteenb ${directory:etc}/enb.cfg
+wrapper-path = ${directory:service}/lte-enb
+mode = 0775
+reserve-cpu = True
+pidfile = ${directory:run}/enb.pid
+hash-files =
+  ${lte-enb-config:rendered}
+environment =
+  LD_LIBRARY_PATH={{ openssl_location }}/lib
+  AMARISOFT_PATH=/opt/amarisoft/.amarisoft
+
+[config-base]
+recipe = slapos.recipe.template:jinja2
+mode = 0664
+extensions = jinja2.ext.do
+context =
+  section directory directory
+  section slap_configuration slap-configuration
+  key slapparameter_dict slap-configuration:configuration
+  import  netaddr netaddr
+
+[lte-enb-config]
+<= config-base
+template = {{ enb_template }}
+rendered = ${directory:etc}/enb.cfg
+
+[publish-connection-information]
+recipe = slapos.cookbook:publish.serialised
+monitor-base-url = ${monitor-instance-parameter:monitor-base-url}
+
+[monitor-instance-parameter]
+monitor-title = {{ slapparameter_dict['name'] | string }}
+password = {{ slapparameter_dict['monitor-password'] | string }}
diff --git a/software/ors-amarisoft/instance-epc-input-schema.json b/software/ors-amarisoft/instance-epc-input-schema.json
new file mode 100644
index 0000000000000000000000000000000000000000..7214e8c88939fc6052a98095782f48421efcbb6c
--- /dev/null
+++ b/software/ors-amarisoft/instance-epc-input-schema.json
@@ -0,0 +1,8 @@
+{
+    "type": "object",
+    "$schema": "http://json-schema.org/draft-04/schema",
+
+    "title": "EPC Input Parameters",
+    "properties": {
+    }
+}
diff --git a/software/ors-amarisoft/instance-epc-slave-input-schema.json b/software/ors-amarisoft/instance-epc-slave-input-schema.json
new file mode 100644
index 0000000000000000000000000000000000000000..5c02748211cd2a9a7ca8c10d2ba113381be9da8a
--- /dev/null
+++ b/software/ors-amarisoft/instance-epc-slave-input-schema.json
@@ -0,0 +1,65 @@
+{
+    "type": "object",
+    "$schema": "http://json-schema.org/draft-04/schema",
+    "title": "EPC SIM Card Parameters",
+    "required": [
+      "sim_algo",
+      "imsi",
+      "opc",
+      "amf",
+      "sqn",
+      "k",
+      "impu",
+      "impi"
+    ],
+    "properties": {
+        "sim_algo": {
+            "title": "Sim Algorithm",
+            "description": "xor, milenage or tuak. Set the USIM authentication algorithm.",
+            "type": "string",
+            "default": "milenage"
+        },
+        "imsi": {
+            "title": "IMSI",
+            "description": "IMSI",
+            "type": "string",
+            "default": ""
+        },
+        "opc": {
+            "title": "OPC",
+            "description": "Operator key preprocessed with the user secret key (as a 16 byte hexadecimal string). When the Milenage authentication algorithm is used, opc must be set.",
+            "type": "string",
+            "default": ""
+        },
+        "amf": {
+            "title": "AMF",
+            "description": "Range: 0 to 65535. Set the Authentication Management Field.",
+            "type": "string",
+            "default": "0x9001"
+        },
+        "sqn": {
+            "title": "SQN",
+            "description": "Optional String (6 byte hexadecimal string). Set the initial sequence number. For the XOR algorithm, the actual value does not matter. For the Milenage or TUAK algorithm, a sequence number resynchronization is initiated if the sequence number does not match the one stored in the USIM.",
+            "type": "string",
+            "default": "000000000000"
+        },
+        "k": {
+            "title": "K",
+            "description": "Set the user secret key (as a 16 bytes hexadecimal string, or eventually 32 bytes hexadecimal string for TUAK).",
+            "type": "string",
+            "default": ""
+        },
+        "impu": {
+            "title": "IMPU",
+            "description": "sip URI or a telephone number. Note that sip URI must not include hostname. If IMPU does not start by a scheme, it is assumed to be a sip URI.",
+            "type": "string",
+            "default": ""
+        },
+        "impi": {
+            "title": "IMPI",
+            "description": "Defines user IMPI. Must be fully filled with hostname if necessary.",
+            "type": "string",
+            "default": ""
+        }
+    }
+}
diff --git a/software/ors-amarisoft/instance-epc.jinja2.cfg b/software/ors-amarisoft/instance-epc.jinja2.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..d595b5d7344eaed9755f62341aff4c7024e28114
--- /dev/null
+++ b/software/ors-amarisoft/instance-epc.jinja2.cfg
@@ -0,0 +1,138 @@
+{{ generated_file_message }}
+[buildout]
+parts =
+  directory
+#  publish-connection-parameter
+  ltelogs
+  lte-mme-config
+  lte-mme-service
+  lte-ims-config
+  lte-ims-service
+  monitor-base
+  publish-connection-information
+
+extends = {{ monitor_template }}
+
+eggs-directory = {{ eggs_directory }}
+develop-eggs-directory = {{ develop_eggs_directory }}
+offline = true
+
+[slap-configuration]
+recipe = slapos.cookbook:slapconfiguration.serialised
+computer = {{ slap_connection['computer-id'] }}
+partition = {{ slap_connection['partition-id'] }}
+url = {{ slap_connection['server-url'] }}
+key = {{ slap_connection['key-file'] }}
+cert = {{ slap_connection['cert-file'] }}
+
+configuration.network_name = VIFIB
+configuration.domain = vifib.com
+configuration.log_size = 50M
+configuration.mme_ws_port = 9000
+configuration.enb_ws_port = 9002
+configuration.ims_ws_port = 9003
+configuration.mme_addr = 127.0.1.100
+configuration.ims_addr = 127.0.0.1
+configuration.ims_bind = 127.0.0.2
+configuration.enb_addr = 127.0.1.1
+
+ue_db_path = {{ ue_db_path }}
+
+[directory]
+recipe = slapos.cookbook:mkdirectory
+software = {{ buildout_directory }}
+home = ${buildout:directory}
+etc = ${:home}/etc
+var = ${:home}/var
+etc = ${:home}/etc
+bin = ${:home}/bin
+run = ${:var}/run
+script = ${:etc}/run
+service = ${:etc}/service
+promise = ${:etc}/promise
+log = ${:var}/log
+
+[ltelogs]
+recipe = slapos.recipe.template:jinja2
+template = {{ ltelogs_template }}
+rendered = ${directory:home}/ltelogs.sh
+mode = 0775
+extensions = jinja2.ext.do
+context =
+  section directory directory
+
+### IMS
+[lte-ims-service]
+recipe = slapos.cookbook:wrapper
+init = ${ltelogs:rendered} ${directory:log}/ims.log; sleep 1
+command-line = {{ mme }}/lteims ${directory:etc}/ims.cfg
+wrapper-path = ${directory:service}/lte-ims
+mode = 0775
+pidfile = ${directory:run}/ims.pid
+hash-files =
+  ${lte-ims-config:rendered}
+  {{ ue_db_path }}
+environment = AMARISOFT_PATH=/opt/amarisoft/.amarisoft
+
+### MME
+[lte-mme-service]
+recipe = slapos.cookbook:wrapper
+init = ${ltelogs:rendered} ${directory:log}/mme.log
+command-line = {{ mme }}/ltemme ${directory:etc}/mme.cfg
+wrapper-path = ${directory:service}/lte-mme
+mode = 0775
+pidfile = ${directory:run}/mme.pid
+hash-files =
+  ${lte-mme-config:rendered}
+  {{ ue_db_path }}
+environment =
+  LD_LIBRARY_PATH={{ openssl_location }}/lib:{{ nghttp2_location }}/lib
+  AMARISOFT_PATH=/opt/amarisoft/.amarisoft
+
+### EMPTY mme-ifup script
+[lte-mme-ifup-empty]
+recipe = slapos.cookbook:wrapper
+wrapper-path = ${directory:bin}/mme-ifup-empty
+command-line = echo Using interface
+mode = 775
+
+[config-base]
+recipe = slapos.recipe.template:jinja2
+mode = 0664
+extensions = jinja2.ext.do
+context =
+  section directory directory
+  section slap_configuration slap-configuration
+  key slapparameter_dict slap-configuration:configuration
+  import  netaddr netaddr
+
+[lte-ims-config]
+<= config-base
+template = {{ ims_template }}
+rendered = ${directory:etc}/ims.cfg
+
+[lte-mme-config]
+<= config-base
+template = {{ mme_template }}
+rendered = ${directory:etc}/mme.cfg
+context =
+  section directory directory
+  section slap_configuration slap-configuration
+  key slapparameter_dict slap-configuration:configuration
+  import  netaddr netaddr
+  key ifup_empty lte-mme-ifup-empty:wrapper-path
+
+[publish-connection-information]
+recipe = slapos.cookbook:publish.serialised
+
+{% if slapparameter_dict.get("monitor-password", None) %}
+monitor-base-url = ${monitor-instance-parameter:monitor-base-url}
+{% else %}
+monitor-setup-url = https://monitor.app.officejs.com/#page=settings_configurator&url=${monitor-publish-parameters:monitor-url}&username=${monitor-publish-parameters:monitor-user}&password=${monitor-publish-parameters:monitor-password}
+{% endif %}
+
+{% if slapparameter_dict.get("monitor-password", None) %}
+[monitor-instance-parameter]
+monitor-title = {{ slapparameter_dict['name'] }}
+password = {{ slapparameter_dict['monitor-password'] }}
+{% endif %}
diff --git a/software/ors-amarisoft/instance-gnb-epc.jinja2.cfg b/software/ors-amarisoft/instance-gnb-epc.jinja2.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..050c88c259aa25e3fefd6e6e48e9a7915c1e6138
--- /dev/null
+++ b/software/ors-amarisoft/instance-gnb-epc.jinja2.cfg
@@ -0,0 +1,81 @@
+[buildout]
+parts =
+  directory
+  lte-gnb-request
+  lte-epc-request
+  publish-connection-information
+
+extends = {{ monitor_template }}
+
+eggs-directory = {{ eggs_directory }}
+develop-eggs-directory = {{ develop_eggs_directory }}
+offline = true
+
+[slap-configuration]
+recipe = slapos.cookbook:slapconfiguration.serialised
+computer = {{ slap_connection['computer-id'] }}
+partition = {{ slap_connection['partition-id'] }}
+url = {{ slap_connection['server-url'] }}
+key = {{ slap_connection['key-file'] }}
+cert = {{ slap_connection['cert-file'] }}
+
+[directory]
+recipe = slapos.cookbook:mkdirectory
+software = {{ buildout_directory }}
+home = ${buildout:directory}
+etc = ${:home}/etc
+var = ${:home}/var
+etc = ${:home}/etc
+bin = ${:home}/bin
+run = ${:var}/run
+script = ${:etc}/run
+service = ${:etc}/service
+promise = ${:etc}/promise
+log = ${:var}/log
+
+[request-common-base]
+recipe = slapos.cookbook:request.serialised
+software-url = {{ slap_connection['software-release-url'] }}
+server-url = {{ slap_connection['server-url'] }}
+computer-id = {{ slap_connection['computer-id'] }}
+partition-id = {{ slap_connection['partition-id'] }}
+key-file = {{ slap_connection['key-file'] }}
+cert-file = {{ slap_connection['cert-file'] }}
+
+config-monitor-password = ${monitor-htpasswd:passwd}
+return = monitor-base-url
+
+[lte-epc-request]
+<= request-common-base
+name = EPC
+software-type = epc
+config-name = epc
+
+[lte-gnb-request]
+<= request-common-base
+name = gNB
+software-type = gnb
+config-name = gnb
+{% if slapparameter_dict.get("tx_gain", None) %}
+config-tx_gain = {{ dumps(slapparameter_dict["tx_gain"]) }}
+{% endif %}
+{% if slapparameter_dict.get("rx_gain", None) %}
+config-rx_gain = {{ dumps(slapparameter_dict["rx_gain"]) }}
+{% endif %}
+{% if slapparameter_dict.get("dl_nr_arfcn", None) %}
+config-dl_nr_arfcn = {{ dumps(slapparameter_dict["dl_nr_arfcn"]) }}
+{% endif %}
+{% if slapparameter_dict.get("nr_band", None) %}
+config-nr_band = {{ dumps(slapparameter_dict["nr_band"]) }}
+{% endif %}
+{% if slapparameter_dict.get("nr_bandwidth", None) %}
+config-nr_bandwidth = {{ dumps(slapparameter_dict["nr_bandwidth"]) }}
+{% endif %}
+
+[monitor-base-url-dict]
+lte-epc-request =  ${lte-epc-request:connection-monitor-base-url}
+lte-gnb-request =  ${lte-gnb-request:connection-monitor-base-url}
+
+[publish-connection-information]
+recipe = slapos.cookbook:publish
+<= monitor-publish
diff --git a/software/ors-amarisoft/instance-gnb-input-schema.jinja2.json b/software/ors-amarisoft/instance-gnb-input-schema.jinja2.json
new file mode 100644
index 0000000000000000000000000000000000000000..ec48d6cbdab47f021502659a0296877076d1a4c1
--- /dev/null
+++ b/software/ors-amarisoft/instance-gnb-input-schema.jinja2.json
@@ -0,0 +1,38 @@
+{
+    "type": "object",
+    "$schema": "http://json-schema.org/draft-04/schema",
+
+    "title": "Input Parameters",
+    "properties": {
+        "tx_gain": {
+            "title": "Tx gain",
+            "description": "Tx gain (in dB)",
+            "type": "number",
+            "default": {{ default_nr_tx_gain }}
+        },
+        "rx_gain": {
+            "title": "Rx gain",
+            "description": "Rx gain (in dB)",
+            "type": "number",
+            "default": {{ default_nr_rx_gain }}
+        },
+        "dl_nr_arfcn": {
+            "title": "DL NR ARFCN",
+            "description": "Downlink NR Absolute Radio Frequency Channel Number of the cell",
+            "type": "number",
+            "default": {{ default_dl_nr_arfcn }}
+        },
+        "nr_band": {
+            "title": "NR band",
+            "description": "NR band number",
+            "type": "number",
+            "default": {{ default_nr_band }}
+        },
+        "nr_bandwidth": {
+            "title": "Bandwidth",
+            "description": "Downlink Bandwidth (in MHz)",
+            "type": "number",
+            "default": {{ default_nr_bandwidth }}
+        }
+    }
+}
diff --git a/software/ors-amarisoft/instance-gnb.jinja2.cfg b/software/ors-amarisoft/instance-gnb.jinja2.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..392db812cf7d8a2e060fd0e62501d09ad08376eb
--- /dev/null
+++ b/software/ors-amarisoft/instance-gnb.jinja2.cfg
@@ -0,0 +1,97 @@
+[buildout]
+parts =
+  directory
+  ltelogs
+  lte-gnb-config
+  lte-enb-service
+  publish-connection-information
+
+extends = {{ monitor_template }}
+
+eggs-directory = {{ eggs_directory }}
+develop-eggs-directory = {{ develop_eggs_directory }}
+offline = true
+
+[slap-configuration]
+recipe = slapos.cookbook:slapconfiguration.serialised
+computer = {{ slap_connection['computer-id'] }}
+partition = {{ slap_connection['partition-id'] }}
+url = {{ slap_connection['server-url'] }}
+key = {{ slap_connection['key-file'] }}
+cert = {{ slap_connection['cert-file'] }}
+
+configuration.network_name = VIFIB
+configuration.domain = vifib.com
+configuration.mme_ws_port = 9000
+configuration.enb_ws_port = 9002
+configuration.ims_ws_port = 9003
+configuration.ims_addr = 127.0.0.1
+configuration.ims_bind = 127.0.0.2
+configuration.enb_addr = 127.0.1.1
+configuration.default_dl_nr_arfcn = {{ default_dl_nr_arfcn }}
+configuration.default_nr_band = {{ default_nr_band }}
+configuration.default_nr_dl_freq = {{ default_nr_dl_freq }}
+configuration.default_nr_bandwidth = {{ default_nr_bandwidth }}
+configuration.default_nr_tx_gain = {{ default_nr_tx_gain }}
+configuration.default_nr_rx_gain = {{ default_nr_rx_gain }}
+
+[directory]
+recipe = slapos.cookbook:mkdirectory
+software = {{ buildout_directory }}
+home = ${buildout:directory}
+etc = ${:home}/etc
+var = ${:home}/var
+etc = ${:home}/etc
+bin = ${:home}/bin
+run = ${:var}/run
+script = ${:etc}/run
+service = ${:etc}/service
+promise = ${:etc}/promise
+log = ${:var}/log
+
+[ltelogs]
+recipe = slapos.recipe.template:jinja2
+template = {{ ltelogs_template }}
+rendered = ${directory:home}/ltelogs.sh
+mode = 0775
+extensions = jinja2.ext.do
+context =
+  section directory directory
+
+### eNodeB (enb)
+[lte-enb-service]
+recipe = slapos.cookbook:wrapper
+init = ${ltelogs:rendered} ${directory:log}/enb.log; sleep 2
+command-line = {{ enb }}/lteenb ${directory:etc}/gnb.cfg
+wrapper-path = ${directory:service}/lte-enb
+mode = 0775
+reserve-cpu = True
+pidfile = ${directory:run}/enb.pid
+hash-files =
+  ${lte-gnb-config:rendered}
+environment =
+  LD_LIBRARY_PATH={{ openssl_location }}/lib
+  AMARISOFT_PATH=/opt/amarisoft/.amarisoft
+
+[config-base]
+recipe = slapos.recipe.template:jinja2
+mode = 0664
+extensions = jinja2.ext.do
+context =
+  section directory directory
+  section slap_configuration slap-configuration
+  key slapparameter_dict slap-configuration:configuration
+  import  netaddr netaddr
+
+[lte-gnb-config]
+<= config-base
+template = {{ gnb_template }}
+rendered = ${directory:etc}/gnb.cfg
+
+[publish-connection-information]
+recipe = slapos.cookbook:publish.serialised
+monitor-base-url = ${monitor-instance-parameter:monitor-base-url}
+
+[monitor-instance-parameter]
+monitor-title = {{ slapparameter_dict['name'] | string }}
+password = {{ slapparameter_dict['monitor-password'] | string }}
diff --git a/software/ors-amarisoft/instance-tdd1900-enb-epc-input-schema.json b/software/ors-amarisoft/instance-tdd1900-enb-epc-input-schema.json
new file mode 100644
index 0000000000000000000000000000000000000000..f4991139d968c980e48830a55202abf4eaad4fa2
--- /dev/null
+++ b/software/ors-amarisoft/instance-tdd1900-enb-epc-input-schema.json
@@ -0,0 +1,32 @@
+{
+    "type": "object",
+    "$schema": "http://json-schema.org/draft-04/schema",
+
+    "title": "Input Parameters",
+    "properties": {
+        "tx_gain": {
+            "title": "Tx gain",
+            "description": "Tx gain (in dB)",
+            "type": "number",
+            "default": 70
+        },
+        "rx_gain": {
+            "title": "Rx gain",
+            "description": "Rx gain (in dB)",
+            "type": "number",
+            "default": 30
+        },
+        "dl_earfcn": {
+            "title": "DL EARFCN",
+            "description": "Downlink E-UTRA Absolute Radio Frequency Channel Number of the cell",
+            "type": "number",
+            "default": 38350
+        },
+        "n_rb_dl": {
+            "title": "DL RB",
+            "description": "number of DL resource blocks",
+            "type": "number",
+            "default": 100
+        }
+    }
+}
\ No newline at end of file
diff --git a/software/ors-amarisoft/instance-tdd1900-enb-input-schema.json b/software/ors-amarisoft/instance-tdd1900-enb-input-schema.json
new file mode 100644
index 0000000000000000000000000000000000000000..f4991139d968c980e48830a55202abf4eaad4fa2
--- /dev/null
+++ b/software/ors-amarisoft/instance-tdd1900-enb-input-schema.json
@@ -0,0 +1,32 @@
+{
+    "type": "object",
+    "$schema": "http://json-schema.org/draft-04/schema",
+
+    "title": "Input Parameters",
+    "properties": {
+        "tx_gain": {
+            "title": "Tx gain",
+            "description": "Tx gain (in dB)",
+            "type": "number",
+            "default": 70
+        },
+        "rx_gain": {
+            "title": "Rx gain",
+            "description": "Rx gain (in dB)",
+            "type": "number",
+            "default": 30
+        },
+        "dl_earfcn": {
+            "title": "DL EARFCN",
+            "description": "Downlink E-UTRA Absolute Radio Frequency Channel Number of the cell",
+            "type": "number",
+            "default": 38350
+        },
+        "n_rb_dl": {
+            "title": "DL RB",
+            "description": "number of DL resource blocks",
+            "type": "number",
+            "default": 100
+        }
+    }
+}
\ No newline at end of file
diff --git a/software/ors-amarisoft/instance-tdd1900-gnb-epc-input-schema.json b/software/ors-amarisoft/instance-tdd1900-gnb-epc-input-schema.json
new file mode 100644
index 0000000000000000000000000000000000000000..44a6875e1805f0664149f29b28f9d2136ff2922e
--- /dev/null
+++ b/software/ors-amarisoft/instance-tdd1900-gnb-epc-input-schema.json
@@ -0,0 +1,38 @@
+{
+    "type": "object",
+    "$schema": "http://json-schema.org/draft-04/schema",
+
+    "title": "Input Parameters",
+    "properties": {
+        "tx_gain": {
+            "title": "Tx gain",
+            "description": "Tx gain (in dB)",
+            "type": "number",
+            "default": 70
+        },
+        "rx_gain": {
+            "title": "Rx gain",
+            "description": "Rx gain (in dB)",
+            "type": "number",
+            "default": 50
+        },
+        "dl_nr_arfcn": {
+            "title": "DL NR ARFCN",
+            "description": "Downlink NR Absolute Radio Frequency Channel Number of the cell",
+            "type": "number",
+            "default": 378000
+        },
+        "nr_band": {
+            "title": "NR band",
+            "description": "NR band number",
+            "type": "number",
+            "default": 39
+        },
+        "nr_bandwidth": {
+            "title": "Bandwidth",
+            "description": "Downlink Bandwidth (in MHz)",
+            "type": "number",
+            "default": 40
+        }
+    }
+}
\ No newline at end of file
diff --git a/software/ors-amarisoft/instance-tdd1900-gnb-input-schema.json b/software/ors-amarisoft/instance-tdd1900-gnb-input-schema.json
new file mode 100644
index 0000000000000000000000000000000000000000..44a6875e1805f0664149f29b28f9d2136ff2922e
--- /dev/null
+++ b/software/ors-amarisoft/instance-tdd1900-gnb-input-schema.json
@@ -0,0 +1,38 @@
+{
+    "type": "object",
+    "$schema": "http://json-schema.org/draft-04/schema",
+
+    "title": "Input Parameters",
+    "properties": {
+        "tx_gain": {
+            "title": "Tx gain",
+            "description": "Tx gain (in dB)",
+            "type": "number",
+            "default": 70
+        },
+        "rx_gain": {
+            "title": "Rx gain",
+            "description": "Rx gain (in dB)",
+            "type": "number",
+            "default": 50
+        },
+        "dl_nr_arfcn": {
+            "title": "DL NR ARFCN",
+            "description": "Downlink NR Absolute Radio Frequency Channel Number of the cell",
+            "type": "number",
+            "default": 378000
+        },
+        "nr_band": {
+            "title": "NR band",
+            "description": "NR band number",
+            "type": "number",
+            "default": 39
+        },
+        "nr_bandwidth": {
+            "title": "Bandwidth",
+            "description": "Downlink Bandwidth (in MHz)",
+            "type": "number",
+            "default": 40
+        }
+    }
+}
\ No newline at end of file
diff --git a/software/ors-amarisoft/instance-tdd2600-enb-epc-input-schema.json b/software/ors-amarisoft/instance-tdd2600-enb-epc-input-schema.json
new file mode 100644
index 0000000000000000000000000000000000000000..1712077cd83b1d83f31c4f41e0baa29fd16dad4d
--- /dev/null
+++ b/software/ors-amarisoft/instance-tdd2600-enb-epc-input-schema.json
@@ -0,0 +1,32 @@
+{
+    "type": "object",
+    "$schema": "http://json-schema.org/draft-04/schema",
+
+    "title": "Input Parameters",
+    "properties": {
+        "tx_gain": {
+            "title": "Tx gain",
+            "description": "Tx gain (in dB)",
+            "type": "number",
+            "default": 70
+        },
+        "rx_gain": {
+            "title": "Rx gain",
+            "description": "Rx gain (in dB)",
+            "type": "number",
+            "default": 30
+        },
+        "dl_earfcn": {
+            "title": "DL EARFCN",
+            "description": "Downlink E-UTRA Absolute Radio Frequency Channel Number of the cell",
+            "type": "number",
+            "default": 38050
+        },
+        "n_rb_dl": {
+            "title": "DL RB",
+            "description": "number of DL resource blocks",
+            "type": "number",
+            "default": 100
+        }
+    }
+}
\ No newline at end of file
diff --git a/software/ors-amarisoft/instance-tdd2600-enb-input-schema.json b/software/ors-amarisoft/instance-tdd2600-enb-input-schema.json
new file mode 100644
index 0000000000000000000000000000000000000000..1712077cd83b1d83f31c4f41e0baa29fd16dad4d
--- /dev/null
+++ b/software/ors-amarisoft/instance-tdd2600-enb-input-schema.json
@@ -0,0 +1,32 @@
+{
+    "type": "object",
+    "$schema": "http://json-schema.org/draft-04/schema",
+
+    "title": "Input Parameters",
+    "properties": {
+        "tx_gain": {
+            "title": "Tx gain",
+            "description": "Tx gain (in dB)",
+            "type": "number",
+            "default": 70
+        },
+        "rx_gain": {
+            "title": "Rx gain",
+            "description": "Rx gain (in dB)",
+            "type": "number",
+            "default": 30
+        },
+        "dl_earfcn": {
+            "title": "DL EARFCN",
+            "description": "Downlink E-UTRA Absolute Radio Frequency Channel Number of the cell",
+            "type": "number",
+            "default": 38050
+        },
+        "n_rb_dl": {
+            "title": "DL RB",
+            "description": "number of DL resource blocks",
+            "type": "number",
+            "default": 100
+        }
+    }
+}
\ No newline at end of file
diff --git a/software/ors-amarisoft/instance-tdd2600-gnb-epc-input-schema.json b/software/ors-amarisoft/instance-tdd2600-gnb-epc-input-schema.json
new file mode 100644
index 0000000000000000000000000000000000000000..3d653dd6ab0d4080f45aee827ebc0bf29e4f2cce
--- /dev/null
+++ b/software/ors-amarisoft/instance-tdd2600-gnb-epc-input-schema.json
@@ -0,0 +1,38 @@
+{
+    "type": "object",
+    "$schema": "http://json-schema.org/draft-04/schema",
+
+    "title": "Input Parameters",
+    "properties": {
+        "tx_gain": {
+            "title": "Tx gain",
+            "description": "Tx gain (in dB)",
+            "type": "number",
+            "default": 70
+        },
+        "rx_gain": {
+            "title": "Rx gain",
+            "description": "Rx gain (in dB)",
+            "type": "number",
+            "default": 50
+        },
+        "dl_nr_arfcn": {
+            "title": "DL NR ARFCN",
+            "description": "Downlink NR Absolute Radio Frequency Channel Number of the cell",
+            "type": "number",
+            "default": 520000
+        },
+        "nr_band": {
+            "title": "NR band",
+            "description": "NR band number",
+            "type": "number",
+            "default": 38
+        },
+        "nr_bandwidth": {
+            "title": "Bandwidth",
+            "description": "Downlink Bandwidth (in MHz)",
+            "type": "number",
+            "default": 40
+        }
+    }
+}
\ No newline at end of file
diff --git a/software/ors-amarisoft/instance-tdd2600-gnb-input-schema.json b/software/ors-amarisoft/instance-tdd2600-gnb-input-schema.json
new file mode 100644
index 0000000000000000000000000000000000000000..3d653dd6ab0d4080f45aee827ebc0bf29e4f2cce
--- /dev/null
+++ b/software/ors-amarisoft/instance-tdd2600-gnb-input-schema.json
@@ -0,0 +1,38 @@
+{
+    "type": "object",
+    "$schema": "http://json-schema.org/draft-04/schema",
+
+    "title": "Input Parameters",
+    "properties": {
+        "tx_gain": {
+            "title": "Tx gain",
+            "description": "Tx gain (in dB)",
+            "type": "number",
+            "default": 70
+        },
+        "rx_gain": {
+            "title": "Rx gain",
+            "description": "Rx gain (in dB)",
+            "type": "number",
+            "default": 50
+        },
+        "dl_nr_arfcn": {
+            "title": "DL NR ARFCN",
+            "description": "Downlink NR Absolute Radio Frequency Channel Number of the cell",
+            "type": "number",
+            "default": 520000
+        },
+        "nr_band": {
+            "title": "NR band",
+            "description": "NR band number",
+            "type": "number",
+            "default": 38
+        },
+        "nr_bandwidth": {
+            "title": "Bandwidth",
+            "description": "Downlink Bandwidth (in MHz)",
+            "type": "number",
+            "default": 40
+        }
+    }
+}
\ No newline at end of file
diff --git a/software/ors-amarisoft/instance-tdd3500-enb-epc-input-schema.json b/software/ors-amarisoft/instance-tdd3500-enb-epc-input-schema.json
new file mode 100644
index 0000000000000000000000000000000000000000..8aeb3b72e3907f6eba496005eca9e0fe35556a4b
--- /dev/null
+++ b/software/ors-amarisoft/instance-tdd3500-enb-epc-input-schema.json
@@ -0,0 +1,32 @@
+{
+    "type": "object",
+    "$schema": "http://json-schema.org/draft-04/schema",
+
+    "title": "Input Parameters",
+    "properties": {
+        "tx_gain": {
+            "title": "Tx gain",
+            "description": "Tx gain (in dB)",
+            "type": "number",
+            "default": 70
+        },
+        "rx_gain": {
+            "title": "Rx gain",
+            "description": "Rx gain (in dB)",
+            "type": "number",
+            "default": 30
+        },
+        "dl_earfcn": {
+            "title": "DL EARFCN",
+            "description": "Downlink E-UTRA Absolute Radio Frequency Channel Number of the cell",
+            "type": "number",
+            "default": 42590
+        },
+        "n_rb_dl": {
+            "title": "DL RB",
+            "description": "number of DL resource blocks",
+            "type": "number",
+            "default": 100
+        }
+    }
+}
\ No newline at end of file
diff --git a/software/ors-amarisoft/instance-tdd3500-enb-input-schema.json b/software/ors-amarisoft/instance-tdd3500-enb-input-schema.json
new file mode 100644
index 0000000000000000000000000000000000000000..8aeb3b72e3907f6eba496005eca9e0fe35556a4b
--- /dev/null
+++ b/software/ors-amarisoft/instance-tdd3500-enb-input-schema.json
@@ -0,0 +1,32 @@
+{
+    "type": "object",
+    "$schema": "http://json-schema.org/draft-04/schema",
+
+    "title": "Input Parameters",
+    "properties": {
+        "tx_gain": {
+            "title": "Tx gain",
+            "description": "Tx gain (in dB)",
+            "type": "number",
+            "default": 70
+        },
+        "rx_gain": {
+            "title": "Rx gain",
+            "description": "Rx gain (in dB)",
+            "type": "number",
+            "default": 30
+        },
+        "dl_earfcn": {
+            "title": "DL EARFCN",
+            "description": "Downlink E-UTRA Absolute Radio Frequency Channel Number of the cell",
+            "type": "number",
+            "default": 42590
+        },
+        "n_rb_dl": {
+            "title": "DL RB",
+            "description": "number of DL resource blocks",
+            "type": "number",
+            "default": 100
+        }
+    }
+}
\ No newline at end of file
diff --git a/software/ors-amarisoft/instance-tdd3500-gnb-epc-input-schema.json b/software/ors-amarisoft/instance-tdd3500-gnb-epc-input-schema.json
new file mode 100644
index 0000000000000000000000000000000000000000..aa0dc0ba9f3193880b0bbdc1c5dbe79eddb8524c
--- /dev/null
+++ b/software/ors-amarisoft/instance-tdd3500-gnb-epc-input-schema.json
@@ -0,0 +1,38 @@
+{
+    "type": "object",
+    "$schema": "http://json-schema.org/draft-04/schema",
+
+    "title": "Input Parameters",
+    "properties": {
+        "tx_gain": {
+            "title": "Tx gain",
+            "description": "Tx gain (in dB)",
+            "type": "number",
+            "default": 70
+        },
+        "rx_gain": {
+            "title": "Rx gain",
+            "description": "Rx gain (in dB)",
+            "type": "number",
+            "default": 50
+        },
+        "dl_nr_arfcn": {
+            "title": "DL NR ARFCN",
+            "description": "Downlink NR Absolute Radio Frequency Channel Number of the cell",
+            "type": "number",
+            "default": 632628
+        },
+        "nr_band": {
+            "title": "NR band",
+            "description": "NR band number",
+            "type": "number",
+            "default": 78
+        },
+        "nr_bandwidth": {
+            "title": "Bandwidth",
+            "description": "Downlink Bandwidth (in MHz)",
+            "type": "number",
+            "default": 40
+        }
+    }
+}
\ No newline at end of file
diff --git a/software/ors-amarisoft/instance-tdd3500-gnb-input-schema.json b/software/ors-amarisoft/instance-tdd3500-gnb-input-schema.json
new file mode 100644
index 0000000000000000000000000000000000000000..aa0dc0ba9f3193880b0bbdc1c5dbe79eddb8524c
--- /dev/null
+++ b/software/ors-amarisoft/instance-tdd3500-gnb-input-schema.json
@@ -0,0 +1,38 @@
+{
+    "type": "object",
+    "$schema": "http://json-schema.org/draft-04/schema",
+
+    "title": "Input Parameters",
+    "properties": {
+        "tx_gain": {
+            "title": "Tx gain",
+            "description": "Tx gain (in dB)",
+            "type": "number",
+            "default": 70
+        },
+        "rx_gain": {
+            "title": "Rx gain",
+            "description": "Rx gain (in dB)",
+            "type": "number",
+            "default": 50
+        },
+        "dl_nr_arfcn": {
+            "title": "DL NR ARFCN",
+            "description": "Downlink NR Absolute Radio Frequency Channel Number of the cell",
+            "type": "number",
+            "default": 632628
+        },
+        "nr_band": {
+            "title": "NR band",
+            "description": "NR band number",
+            "type": "number",
+            "default": 78
+        },
+        "nr_bandwidth": {
+            "title": "Bandwidth",
+            "description": "Downlink Bandwidth (in MHz)",
+            "type": "number",
+            "default": 40
+        }
+    }
+}
\ No newline at end of file
diff --git a/software/ors-amarisoft/instance-tdd3700-enb-epc-input-schema.json b/software/ors-amarisoft/instance-tdd3700-enb-epc-input-schema.json
new file mode 100644
index 0000000000000000000000000000000000000000..86964358ddf5d1c9ddca7de8355a8bd93765db37
--- /dev/null
+++ b/software/ors-amarisoft/instance-tdd3700-enb-epc-input-schema.json
@@ -0,0 +1,32 @@
+{
+    "type": "object",
+    "$schema": "http://json-schema.org/draft-04/schema",
+
+    "title": "Input Parameters",
+    "properties": {
+        "tx_gain": {
+            "title": "Tx gain",
+            "description": "Tx gain (in dB)",
+            "type": "number",
+            "default": 70
+        },
+        "rx_gain": {
+            "title": "Rx gain",
+            "description": "Rx gain (in dB)",
+            "type": "number",
+            "default": 30
+        },
+        "dl_earfcn": {
+            "title": "DL EARFCN",
+            "description": "Downlink E-UTRA Absolute Radio Frequency Channel Number of the cell",
+            "type": "number",
+            "default": 44590
+        },
+        "n_rb_dl": {
+            "title": "DL RB",
+            "description": "number of DL resource blocks",
+            "type": "number",
+            "default": 100
+        }
+    }
+}
\ No newline at end of file
diff --git a/software/ors-amarisoft/instance-tdd3700-enb-input-schema.json b/software/ors-amarisoft/instance-tdd3700-enb-input-schema.json
new file mode 100644
index 0000000000000000000000000000000000000000..86964358ddf5d1c9ddca7de8355a8bd93765db37
--- /dev/null
+++ b/software/ors-amarisoft/instance-tdd3700-enb-input-schema.json
@@ -0,0 +1,32 @@
+{
+    "type": "object",
+    "$schema": "http://json-schema.org/draft-04/schema",
+
+    "title": "Input Parameters",
+    "properties": {
+        "tx_gain": {
+            "title": "Tx gain",
+            "description": "Tx gain (in dB)",
+            "type": "number",
+            "default": 70
+        },
+        "rx_gain": {
+            "title": "Rx gain",
+            "description": "Rx gain (in dB)",
+            "type": "number",
+            "default": 30
+        },
+        "dl_earfcn": {
+            "title": "DL EARFCN",
+            "description": "Downlink E-UTRA Absolute Radio Frequency Channel Number of the cell",
+            "type": "number",
+            "default": 44590
+        },
+        "n_rb_dl": {
+            "title": "DL RB",
+            "description": "number of DL resource blocks",
+            "type": "number",
+            "default": 100
+        }
+    }
+}
\ No newline at end of file
diff --git a/software/ors-amarisoft/instance-tdd3700-gnb-epc-input-schema.json b/software/ors-amarisoft/instance-tdd3700-gnb-epc-input-schema.json
new file mode 100644
index 0000000000000000000000000000000000000000..0c508567e0f544b955fff351879b2208cb53fc10
--- /dev/null
+++ b/software/ors-amarisoft/instance-tdd3700-gnb-epc-input-schema.json
@@ -0,0 +1,38 @@
+{
+    "type": "object",
+    "$schema": "http://json-schema.org/draft-04/schema",
+
+    "title": "Input Parameters",
+    "properties": {
+        "tx_gain": {
+            "title": "Tx gain",
+            "description": "Tx gain (in dB)",
+            "type": "number",
+            "default": 70
+        },
+        "rx_gain": {
+            "title": "Rx gain",
+            "description": "Rx gain (in dB)",
+            "type": "number",
+            "default": 50
+        },
+        "dl_nr_arfcn": {
+            "title": "DL NR ARFCN",
+            "description": "Downlink NR Absolute Radio Frequency Channel Number of the cell",
+            "type": "number",
+            "default": 646666
+        },
+        "nr_band": {
+            "title": "NR band",
+            "description": "NR band number",
+            "type": "number",
+            "default": 78
+        },
+        "nr_bandwidth": {
+            "title": "Bandwidth",
+            "description": "Downlink Bandwidth (in MHz)",
+            "type": "number",
+            "default": 40
+        }
+    }
+}
\ No newline at end of file
diff --git a/software/ors-amarisoft/instance-tdd3700-gnb-input-schema.json b/software/ors-amarisoft/instance-tdd3700-gnb-input-schema.json
new file mode 100644
index 0000000000000000000000000000000000000000..0c508567e0f544b955fff351879b2208cb53fc10
--- /dev/null
+++ b/software/ors-amarisoft/instance-tdd3700-gnb-input-schema.json
@@ -0,0 +1,38 @@
+{
+    "type": "object",
+    "$schema": "http://json-schema.org/draft-04/schema",
+
+    "title": "Input Parameters",
+    "properties": {
+        "tx_gain": {
+            "title": "Tx gain",
+            "description": "Tx gain (in dB)",
+            "type": "number",
+            "default": 70
+        },
+        "rx_gain": {
+            "title": "Rx gain",
+            "description": "Rx gain (in dB)",
+            "type": "number",
+            "default": 50
+        },
+        "dl_nr_arfcn": {
+            "title": "DL NR ARFCN",
+            "description": "Downlink NR Absolute Radio Frequency Channel Number of the cell",
+            "type": "number",
+            "default": 646666
+        },
+        "nr_band": {
+            "title": "NR band",
+            "description": "NR band number",
+            "type": "number",
+            "default": 78
+        },
+        "nr_bandwidth": {
+            "title": "Bandwidth",
+            "description": "Downlink Bandwidth (in MHz)",
+            "type": "number",
+            "default": 40
+        }
+    }
+}
\ No newline at end of file
diff --git a/software/ors-amarisoft/instance.cfg b/software/ors-amarisoft/instance.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..bb205a78acf00fd05630c9bb48790acdfa770fd1
--- /dev/null
+++ b/software/ors-amarisoft/instance.cfg
@@ -0,0 +1,117 @@
+[buildout]
+parts =
+  switch-softwaretype
+
+eggs-directory = ${buildout:eggs-directory}
+develop-eggs-directory = ${buildout:develop-eggs-directory}
+offline = true
+
+[slap-configuration]
+recipe = slapos.cookbook:slapconfiguration.serialised
+computer = $${slap-connection:computer-id}
+partition = $${slap-connection:partition-id}
+url = $${slap-connection:server-url}
+key = $${slap-connection:key-file}
+cert = $${slap-connection:cert-file}
+
+[jinja2-template-base]
+recipe = slapos.recipe.template:jinja2
+rendered = $${buildout:directory}/$${:filename}
+extra-context =
+context =
+    import json_module json
+    key eggs_directory buildout:eggs-directory
+    key develop_eggs_directory buildout:develop-eggs-directory
+    raw buildout_directory ${buildout:directory}
+    section slap_connection slap-connection
+    key slapparameter_dict slap-configuration:configuration
+    $${:extra-context}
+
+[switch-softwaretype]
+recipe = slapos.cookbook:switch-softwaretype
+enb-epc = dynamic-template-lte-enb-epc:rendered
+gnb-epc = dynamic-template-lte-gnb-epc:rendered
+enb = dynamic-template-lte-enb:rendered
+gnb = dynamic-template-lte-gnb:rendered
+epc = dynamic-template-lte-epc:rendered
+RootSoftwareInstance = $${:enb-epc}
+
+[dynamic-template-lte-enb-epc]
+< = jinja2-template-base
+template = ${template-lte-enb-epc:target}
+filename = instance-lte-enb-epc.cfg
+extensions = jinja2.ext.do
+extra-context =
+    raw monitor_template ${monitor2-template:rendered}
+ 
+[dynamic-template-lte-gnb-epc]
+< = jinja2-template-base
+template = ${template-lte-gnb-epc:target}
+filename = instance-lte-gnb-epc.cfg
+extensions = jinja2.ext.do
+extra-context =
+    raw monitor_template ${monitor2-template:rendered}
+ 
+[dynamic-template-lte-enb]
+< = jinja2-template-base
+template = ${template-lte-enb:target}
+filename = instance-lte-enb.cfg
+extensions = jinja2.ext.do
+extra-context =
+    raw monitor_template ${monitor2-template:rendered}
+    raw enb   ${enb:destination}
+    raw enb_template   ${enb.jinja2.cfg:target}
+    raw ltelogs_template   ${ltelogs.jinja2.sh:target}
+    raw openssl_location ${openssl:location}
+    raw default_dl_earfcn ${enb:default-dl-earfcn}
+    raw default_lte_dl_freq ${enb:default-lte-dl-freq}
+    raw default_lte_band ${enb:default-lte-band}
+    raw default_lte_n_rb_dl ${enb:default-lte-n-rb-dl}
+    raw default_lte_tx_gain ${enb:default-lte-tx-gain}
+    raw default_lte_rx_gain ${enb:default-lte-rx-gain}
+    raw min_frequency ${enb:min-frequency}
+    raw max_frequency ${enb:max-frequency}
+
+[dynamic-template-lte-gnb]
+< = jinja2-template-base
+template = ${template-lte-gnb:target}
+filename = instance-lte-gnb.cfg
+extensions = jinja2.ext.do
+extra-context =
+    raw monitor_template ${monitor2-template:rendered}
+    raw enb   ${enb:destination}
+    raw gnb_template   ${gnb.jinja2.cfg:target}
+    raw ltelogs_template   ${ltelogs.jinja2.sh:target}
+    raw openssl_location ${openssl:location}
+    raw default_dl_nr_arfcn ${enb:default-dl-nr-arfcn}
+    raw default_nr_band ${enb:default-nr-band}
+    raw default_nr_dl_freq ${enb:default-nr-dl-freq}
+    raw default_nr_bandwidth ${enb:default-nr-bandwidth}
+    raw default_nr_tx_gain ${enb:default-nr-tx-gain}
+    raw default_nr_rx_gain ${enb:default-nr-rx-gain}
+    raw min_frequency ${enb:min-frequency}
+    raw max_frequency ${enb:max-frequency}
+
+[dynamic-template-lte-epc]
+< = jinja2-template-base
+template = ${template-lte-epc:target}
+filename = instance-lte-epc.cfg
+extensions = jinja2.ext.do
+extra-context =
+    raw monitor_template ${monitor2-template:rendered}
+    raw mme   ${mme:destination}
+    raw mme_template   ${mme.jinja2.cfg:target}
+    raw ims_template   ${ims.jinja2.cfg:target}
+    raw ltelogs_template   ${ltelogs.jinja2.sh:target}
+    raw openssl_location ${openssl:location}
+    raw nghttp2_location ${nghttp2:location}
+    key ue_db_path ue-db-config:rendered
+
+[ue-db-config]
+recipe = slapos.recipe.template:jinja2
+template = ${ue_db.jinja2.cfg:target}
+filename = ue_db.cfg
+extensions = jinja2.ext.do
+rendered = $${buildout:directory}/$${:filename}
+context =
+    key slave_instance_list slap-configuration:slave-instance-list
diff --git a/software/ors-amarisoft/ltelogs.jinja2.sh b/software/ors-amarisoft/ltelogs.jinja2.sh
new file mode 100755
index 0000000000000000000000000000000000000000..4027f53673a9e0ae3e1e42133cd56ed692705a40
--- /dev/null
+++ b/software/ors-amarisoft/ltelogs.jinja2.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+# Copyright (C) 2012-2015 Amarisoft
+# LTE system logger version 2016-10-13
+
+# Path for multi environment support
+export PATH="$PATH:/bin/:/usr/bin/:/usr/local/bin"
+
+while [ "$1" != "" ] ; do
+
+    if [ -e "$1" ] ; then
+        # Avoid storing logs with comments only
+        HAS_LOG=$(grep -v -l "#" $1)
+        if [ "$HAS_LOG" != "" ] ; then
+            DATE=$(date -u +%Y%m%d.%H:%M:%S | sed -e "s/ /-/g")
+            FILE=$(basename $1)
+            mv $1 "{{ directory['log'] }}/${FILE}.${DATE}"
+        else
+            rm -f $1
+        fi
+    fi
+    shift
+done
+
diff --git a/software/ors-amarisoft/render-templates b/software/ors-amarisoft/render-templates
new file mode 100755
index 0000000000000000000000000000000000000000..acef6e6196b01f264279a26ecbdc5cf97e7082f6
--- /dev/null
+++ b/software/ors-amarisoft/render-templates
@@ -0,0 +1,123 @@
+#!/usr/bin/env python3
+
+from jinja2 import Template
+import os
+
+# Values: 6 (1.4 MHz), 15 (3MHz), 25 (5MHz), 50 (10MHz), 75 (15MHz), 100 (20MHz)
+LTE_N_RB_DL=100
+LTE_TX_GAIN=70
+LTE_RX_GAIN=30
+
+NR_BANDWIDTH=40
+NR_TX_GAIN=70
+NR_RX_GAIN=50
+
+global_context = {
+        'generated_file_message': "// This file was generated using a jinja2 template and the render-templates script, don't modify directly."
+}
+
+rf_mode_context_list = [
+        {
+            'rf_mode': 'tdd1900',
+
+            'default_dl_earfcn': 38350,
+            'default_lte_dl_freq': 1890.0,
+            'default_lte_band': 39,
+            'default_lte_n_rb_dl': LTE_N_RB_DL,
+            'default_lte_tx_gain': LTE_TX_GAIN,
+            'default_lte_rx_gain': LTE_RX_GAIN,
+
+            'default_dl_nr_arfcn': 378000,
+            'default_nr_band': 39,
+            'default_nr_dl_freq': 1890.0,
+            'default_nr_bandwidth': NR_BANDWIDTH,
+            'default_nr_tx_gain': NR_TX_GAIN,
+            'default_nr_rx_gain': NR_RX_GAIN,
+
+            'min_frequency': 1880.0,
+            'max_frequency': 1920,
+        }, {
+            'rf_mode': 'tdd2600',
+
+            'default_dl_earfcn': 38050,
+            'default_lte_dl_freq': 2600.0,
+            'default_lte_band': 38,
+            'default_lte_n_rb_dl': LTE_N_RB_DL,
+            'default_lte_tx_gain': LTE_TX_GAIN,
+            'default_lte_rx_gain': LTE_RX_GAIN,
+
+            'default_dl_nr_arfcn': 520000,
+            'default_nr_band': 38,
+            'default_nr_dl_freq': 2600.0,
+            'default_nr_bandwidth': NR_BANDWIDTH,
+            'default_nr_tx_gain': NR_TX_GAIN,
+            'default_nr_rx_gain': NR_RX_GAIN,
+
+            'min_frequency': 2570,
+            'max_frequency': 2620,
+        }, {
+            'rf_mode': 'tdd3500',
+
+            'default_dl_earfcn': 42590,
+            'default_lte_dl_freq': 3500.0,
+            'default_lte_band': 42,
+            'default_lte_n_rb_dl': LTE_N_RB_DL,
+            'default_lte_tx_gain': LTE_TX_GAIN,
+            'default_lte_rx_gain': LTE_RX_GAIN,
+
+            'default_dl_nr_arfcn': 632628,
+            'default_nr_band': 78,
+            'default_nr_dl_freq': 3489.42,
+            'default_nr_bandwidth': NR_BANDWIDTH,
+            'default_nr_tx_gain': NR_TX_GAIN,
+            'default_nr_rx_gain': NR_RX_GAIN,
+
+            'min_frequency': 3400,
+            'max_frequency': 3600,
+        }, {
+            'rf_mode': 'tdd3700',
+
+            'default_dl_earfcn': 44590,
+            'default_lte_dl_freq': 3700.0,
+            'default_lte_band': 43,
+            'default_lte_n_rb_dl': LTE_N_RB_DL,
+            'default_lte_tx_gain': LTE_TX_GAIN,
+            'default_lte_rx_gain': LTE_RX_GAIN,
+
+            'default_dl_nr_arfcn': 646666,
+            'default_nr_band': 78,
+            'default_nr_dl_freq': 3699.99,
+            'default_nr_bandwidth': NR_BANDWIDTH,
+            'default_nr_tx_gain': NR_TX_GAIN,
+            'default_nr_rx_gain': NR_RX_GAIN,
+
+            'min_frequency': 3600,
+            'max_frequency': 3800,
+        }
+]
+
+with open('software.cfg.jinja2.json', 'r') as f:
+    software_json_template = Template(f.read())
+with open('instance-enb-input-schema.jinja2.json', 'r') as f:
+    instance_enb_json_template = Template(f.read())
+with open('instance-gnb-input-schema.jinja2.json', 'r') as f:
+    instance_gnb_json_template = Template(f.read())
+with open('software.jinja2.cfg', 'r') as f:
+    software_template = Template(f.read())
+
+for rf_mode_context in rf_mode_context_list:
+    with open('software-{}.cfg.json'.format(rf_mode_context['rf_mode']),
+              'w+') as f:
+        f.write(software_json_template.render(**rf_mode_context, **global_context))
+    with open('software-{}.cfg'.format(rf_mode_context['rf_mode']),
+              'w+') as f:
+        f.write(software_template.render(**rf_mode_context, **global_context))
+    for software_type in ['enb', 'enb-epc', 'gnb', 'gnb-epc']:
+        with open('instance-{}-{}-input-schema.json'.format(
+                    rf_mode_context['rf_mode'],
+                    software_type),
+                  'w+') as f:
+            if software_type in ['enb', 'enb-epc']:
+                f.write(instance_enb_json_template.render(**rf_mode_context, **global_context))
+            else:
+                f.write(instance_gnb_json_template.render(**rf_mode_context, **global_context))
diff --git a/software/ors-amarisoft/software-tdd1900.cfg b/software/ors-amarisoft/software-tdd1900.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..fcb5f9952ece22413d28be1d21f647c7aa06cc00
--- /dev/null
+++ b/software/ors-amarisoft/software-tdd1900.cfg
@@ -0,0 +1,22 @@
+// This file was generated using a jinja2 template and the render-templates script, don't modify directly.
+[buildout]
+extends =
+  software.cfg
+
+[enb]
+default-dl-earfcn = 38350
+default-lte-dl-freq = 1890.0
+default-lte-band = 39
+default-lte-n-rb-dl = 100
+default-lte-tx-gain = 70
+default-lte-rx-gain = 30
+
+default-dl-nr-arfcn = 378000
+default-nr-band = 39
+default-nr-dl-freq = 1890.0
+default-nr-bandwidth = 40
+default-nr-tx-gain = 70
+default-nr-rx-gain = 50
+
+min-frequency = 1880.0
+max-frequency = 1920
\ No newline at end of file
diff --git a/software/ors-amarisoft/software-tdd1900.cfg.json b/software/ors-amarisoft/software-tdd1900.cfg.json
new file mode 100644
index 0000000000000000000000000000000000000000..1bd16a56c44762c1995f0a6262d94afb6501eada
--- /dev/null
+++ b/software/ors-amarisoft/software-tdd1900.cfg.json
@@ -0,0 +1,56 @@
+{
+    "name": "ORS Amarisoft",
+    "description": "4G and 5G amarisoft stack for ORS",
+    "serialisation": "xml",
+    "software-type": {
+        "enb": {
+             "title": "eNB",
+             "software-type": "enb",
+             "description": "eNodeB Configuration",
+             "request": "instance-tdd1900-enb-input-schema.json",
+             "response": "instance-tdd1900-enb-schema.json",
+             "index": 0
+         },
+        "enb-epc": {
+             "title": "eNB and EPC",
+             "software-type": "enb-epc",
+             "description": "eNodeB and EPC Configuration",
+             "request": "instance-tdd1900-enb-epc-input-schema.json",
+             "response": "instance-tdd1900-enb-epc-schema.json",
+             "index": 1
+         },
+        "gnb": {
+             "title": "gNB",
+             "software-type": "gnb",
+             "description": "gNodeB Configuration",
+             "request": "instance-tdd1900-gnb-input-schema.json",
+             "response": "instance-tdd1900-gnb-schema.json",
+             "index": 2
+         },
+        "gnb-epc": {
+             "title": "gNB and EPC",
+             "software-type": "gnb-epc",
+             "description": "gNodeB and EPC Configuration",
+             "request": "instance-tdd1900-gnb-epc-input-schema.json",
+             "response": "instance-tdd1900-gnb-epc-schema.json",
+             "index": 3
+         },
+        "epc": {
+             "title": "EPC",
+             "software-type": "epc",
+             "description": "EPC Configuration",
+             "request": "instance-epc-input-schema.json",
+             "response": "instance-epc-schema.json",
+             "index": 4
+         },
+        "epc-slave": {
+             "title": "Sim Card",
+             "description": "EPC Configuration",
+             "software-type": "epc",
+             "request": "instance-epc-slave-input-schema.json",
+             "response": "instance-epc-slave-schema.json",
+             "shared": true,
+             "index": 5
+         }
+    }
+}
\ No newline at end of file
diff --git a/software/ors-amarisoft/software-tdd2600.cfg b/software/ors-amarisoft/software-tdd2600.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..95679b2292db342d3566c0dc9d815d48edbd6759
--- /dev/null
+++ b/software/ors-amarisoft/software-tdd2600.cfg
@@ -0,0 +1,22 @@
+// This file was generated using a jinja2 template and the render-templates script, don't modify directly.
+[buildout]
+extends =
+  software.cfg
+
+[enb]
+default-dl-earfcn = 38050
+default-lte-dl-freq = 2600.0
+default-lte-band = 38
+default-lte-n-rb-dl = 100
+default-lte-tx-gain = 70
+default-lte-rx-gain = 30
+
+default-dl-nr-arfcn = 520000
+default-nr-band = 38
+default-nr-dl-freq = 2600.0
+default-nr-bandwidth = 40
+default-nr-tx-gain = 70
+default-nr-rx-gain = 50
+
+min-frequency = 2570
+max-frequency = 2620
\ No newline at end of file
diff --git a/software/ors-amarisoft/software-tdd2600.cfg.json b/software/ors-amarisoft/software-tdd2600.cfg.json
new file mode 100644
index 0000000000000000000000000000000000000000..a30b83e9ecbed12cd259ce24e1c3b5de971c5ec4
--- /dev/null
+++ b/software/ors-amarisoft/software-tdd2600.cfg.json
@@ -0,0 +1,56 @@
+{
+    "name": "ORS Amarisoft",
+    "description": "4G and 5G amarisoft stack for ORS",
+    "serialisation": "xml",
+    "software-type": {
+        "enb": {
+             "title": "eNB",
+             "software-type": "enb",
+             "description": "eNodeB Configuration",
+             "request": "instance-tdd2600-enb-input-schema.json",
+             "response": "instance-tdd2600-enb-schema.json",
+             "index": 0
+         },
+        "enb-epc": {
+             "title": "eNB and EPC",
+             "software-type": "enb-epc",
+             "description": "eNodeB and EPC Configuration",
+             "request": "instance-tdd2600-enb-epc-input-schema.json",
+             "response": "instance-tdd2600-enb-epc-schema.json",
+             "index": 1
+         },
+        "gnb": {
+             "title": "gNB",
+             "software-type": "gnb",
+             "description": "gNodeB Configuration",
+             "request": "instance-tdd2600-gnb-input-schema.json",
+             "response": "instance-tdd2600-gnb-schema.json",
+             "index": 2
+         },
+        "gnb-epc": {
+             "title": "gNB and EPC",
+             "software-type": "gnb-epc",
+             "description": "gNodeB and EPC Configuration",
+             "request": "instance-tdd2600-gnb-epc-input-schema.json",
+             "response": "instance-tdd2600-gnb-epc-schema.json",
+             "index": 3
+         },
+        "epc": {
+             "title": "EPC",
+             "software-type": "epc",
+             "description": "EPC Configuration",
+             "request": "instance-epc-input-schema.json",
+             "response": "instance-epc-schema.json",
+             "index": 4
+         },
+        "epc-slave": {
+             "title": "Sim Card",
+             "description": "EPC Configuration",
+             "software-type": "epc",
+             "request": "instance-epc-slave-input-schema.json",
+             "response": "instance-epc-slave-schema.json",
+             "shared": true,
+             "index": 5
+         }
+    }
+}
\ No newline at end of file
diff --git a/software/ors-amarisoft/software-tdd3500.cfg b/software/ors-amarisoft/software-tdd3500.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..5658089ffa337411696b283cce901b02b7ed17cc
--- /dev/null
+++ b/software/ors-amarisoft/software-tdd3500.cfg
@@ -0,0 +1,22 @@
+// This file was generated using a jinja2 template and the render-templates script, don't modify directly.
+[buildout]
+extends =
+  software.cfg
+
+[enb]
+default-dl-earfcn = 42590
+default-lte-dl-freq = 3500.0
+default-lte-band = 42
+default-lte-n-rb-dl = 100
+default-lte-tx-gain = 70
+default-lte-rx-gain = 30
+
+default-dl-nr-arfcn = 632628
+default-nr-band = 78
+default-nr-dl-freq = 3489.42
+default-nr-bandwidth = 40
+default-nr-tx-gain = 70
+default-nr-rx-gain = 50
+
+min-frequency = 3400
+max-frequency = 3600
\ No newline at end of file
diff --git a/software/ors-amarisoft/software-tdd3500.cfg.json b/software/ors-amarisoft/software-tdd3500.cfg.json
new file mode 100644
index 0000000000000000000000000000000000000000..5311a9a148ec5c16514ff6870e0c9442322ef54c
--- /dev/null
+++ b/software/ors-amarisoft/software-tdd3500.cfg.json
@@ -0,0 +1,56 @@
+{
+    "name": "ORS Amarisoft",
+    "description": "4G and 5G amarisoft stack for ORS",
+    "serialisation": "xml",
+    "software-type": {
+        "enb": {
+             "title": "eNB",
+             "software-type": "enb",
+             "description": "eNodeB Configuration",
+             "request": "instance-tdd3500-enb-input-schema.json",
+             "response": "instance-tdd3500-enb-schema.json",
+             "index": 0
+         },
+        "enb-epc": {
+             "title": "eNB and EPC",
+             "software-type": "enb-epc",
+             "description": "eNodeB and EPC Configuration",
+             "request": "instance-tdd3500-enb-epc-input-schema.json",
+             "response": "instance-tdd3500-enb-epc-schema.json",
+             "index": 1
+         },
+        "gnb": {
+             "title": "gNB",
+             "software-type": "gnb",
+             "description": "gNodeB Configuration",
+             "request": "instance-tdd3500-gnb-input-schema.json",
+             "response": "instance-tdd3500-gnb-schema.json",
+             "index": 2
+         },
+        "gnb-epc": {
+             "title": "gNB and EPC",
+             "software-type": "gnb-epc",
+             "description": "gNodeB and EPC Configuration",
+             "request": "instance-tdd3500-gnb-epc-input-schema.json",
+             "response": "instance-tdd3500-gnb-epc-schema.json",
+             "index": 3
+         },
+        "epc": {
+             "title": "EPC",
+             "software-type": "epc",
+             "description": "EPC Configuration",
+             "request": "instance-epc-input-schema.json",
+             "response": "instance-epc-schema.json",
+             "index": 4
+         },
+        "epc-slave": {
+             "title": "Sim Card",
+             "description": "EPC Configuration",
+             "software-type": "epc",
+             "request": "instance-epc-slave-input-schema.json",
+             "response": "instance-epc-slave-schema.json",
+             "shared": true,
+             "index": 5
+         }
+    }
+}
\ No newline at end of file
diff --git a/software/ors-amarisoft/software-tdd3700.cfg b/software/ors-amarisoft/software-tdd3700.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..b8eab320daaebb9aa59ab710590300b5ee600ec1
--- /dev/null
+++ b/software/ors-amarisoft/software-tdd3700.cfg
@@ -0,0 +1,22 @@
+// This file was generated using a jinja2 template and the render-templates script, don't modify directly.
+[buildout]
+extends =
+  software.cfg
+
+[enb]
+default-dl-earfcn = 44590
+default-lte-dl-freq = 3700.0
+default-lte-band = 43
+default-lte-n-rb-dl = 100
+default-lte-tx-gain = 70
+default-lte-rx-gain = 30
+
+default-dl-nr-arfcn = 646666
+default-nr-band = 78
+default-nr-dl-freq = 3699.99
+default-nr-bandwidth = 40
+default-nr-tx-gain = 70
+default-nr-rx-gain = 50
+
+min-frequency = 3600
+max-frequency = 3800
\ No newline at end of file
diff --git a/software/ors-amarisoft/software-tdd3700.cfg.json b/software/ors-amarisoft/software-tdd3700.cfg.json
new file mode 100644
index 0000000000000000000000000000000000000000..0686d27f83642d65574f9ac2beca77b8c422a175
--- /dev/null
+++ b/software/ors-amarisoft/software-tdd3700.cfg.json
@@ -0,0 +1,56 @@
+{
+    "name": "ORS Amarisoft",
+    "description": "4G and 5G amarisoft stack for ORS",
+    "serialisation": "xml",
+    "software-type": {
+        "enb": {
+             "title": "eNB",
+             "software-type": "enb",
+             "description": "eNodeB Configuration",
+             "request": "instance-tdd3700-enb-input-schema.json",
+             "response": "instance-tdd3700-enb-schema.json",
+             "index": 0
+         },
+        "enb-epc": {
+             "title": "eNB and EPC",
+             "software-type": "enb-epc",
+             "description": "eNodeB and EPC Configuration",
+             "request": "instance-tdd3700-enb-epc-input-schema.json",
+             "response": "instance-tdd3700-enb-epc-schema.json",
+             "index": 1
+         },
+        "gnb": {
+             "title": "gNB",
+             "software-type": "gnb",
+             "description": "gNodeB Configuration",
+             "request": "instance-tdd3700-gnb-input-schema.json",
+             "response": "instance-tdd3700-gnb-schema.json",
+             "index": 2
+         },
+        "gnb-epc": {
+             "title": "gNB and EPC",
+             "software-type": "gnb-epc",
+             "description": "gNodeB and EPC Configuration",
+             "request": "instance-tdd3700-gnb-epc-input-schema.json",
+             "response": "instance-tdd3700-gnb-epc-schema.json",
+             "index": 3
+         },
+        "epc": {
+             "title": "EPC",
+             "software-type": "epc",
+             "description": "EPC Configuration",
+             "request": "instance-epc-input-schema.json",
+             "response": "instance-epc-schema.json",
+             "index": 4
+         },
+        "epc-slave": {
+             "title": "Sim Card",
+             "description": "EPC Configuration",
+             "software-type": "epc",
+             "request": "instance-epc-slave-input-schema.json",
+             "response": "instance-epc-slave-schema.json",
+             "shared": true,
+             "index": 5
+         }
+    }
+}
\ No newline at end of file
diff --git a/software/ors-amarisoft/software.cfg b/software/ors-amarisoft/software.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..3c725487e0dd2cb920f2c184376a6548794efb9f
--- /dev/null
+++ b/software/ors-amarisoft/software.cfg
@@ -0,0 +1,145 @@
+[buildout]
+extends =
+  buildout.hash.cfg
+  ../../stack/slapos.cfg
+  ../../stack/monitor/buildout.cfg
+  ../../component/logrotate/buildout.cfg
+  ../../component/nghttp2/buildout.cfg
+
+parts +=
+  template
+  slapos-cookbook
+  ltelogs.jinja2.sh
+# copy all configs by default
+  mme.jinja2.cfg
+  ims.jinja2.cfg
+  enb.jinja2.cfg
+  gnb.jinja2.cfg
+  ue_db.jinja2.cfg
+# sdr driver is dependent on ENB thus should be added explicitely by software.cfg
+  sdr-driver
+  lteenb-cap-sys-nice
+  lteenb-avx2-cap-sys-nice
+# unimplemented parts - the http monitor and better log handling using logrotate
+#  apache-php
+#  logrotate
+
+[template]
+recipe = slapos.recipe.template
+url = ${:_profile_base_location_}/${:filename}
+output = ${buildout:directory}/template.cfg
+mode = 0644
+
+[download-base]
+recipe = slapos.recipe.build:download
+url = ${:_profile_base_location_}/${:_update_hash_filename_}
+
+[template-lte-enb-epc]
+<= download-base
+
+[template-lte-gnb-epc]
+<= download-base
+
+[template-lte-enb]
+<= download-base
+
+[template-lte-gnb]
+<= download-base
+
+[template-lte-epc]
+<= download-base
+
+[amarisoft]
+recipe = slapos.recipe.build
+path = /opt/amarisoft/lte
+init = 
+  import os
+  options['lte-version'] = os.readlink("%(path)s" % options)[:-1]
+
+[copy-to-instance]
+recipe  = slapos.recipe.build:download
+url     = ${:_profile_base_location_}/${:_buildout_section_name_}
+
+[copy-config-to-instance]
+recipe  = slapos.recipe.build:download
+url     = ${:_profile_base_location_}/config/${:_buildout_section_name_}
+
+[unpack-to-instance]
+recipe = slapos.recipe.build:download-unpacked
+url = ${amarisoft:path}/lte${:_buildout_section_name_}-linux-${amarisoft:lte-version}.tar.gz
+destination = ${buildout:directory}/${:_buildout_section_name_}
+strip-top-level-dir = true
+ignore-existing = true
+on-update = true
+
+[enb.jinja2.cfg]
+<= copy-config-to-instance
+filename = enb.jinja2.cfg
+[gnb.jinja2.cfg]
+<= copy-config-to-instance
+filename = gnb.jinja2.cfg
+[ltelogs.jinja2.sh]
+<= copy-to-instance
+filename = ltelogs.jinja2.sh
+[ue_db.jinja2.cfg]
+<= copy-config-to-instance
+filename = ue_db.jinja2.cfg
+[mme.jinja2.cfg]
+<= copy-config-to-instance
+filename = mme.jinja2.cfg
+[ims.jinja2.cfg]
+<= copy-config-to-instance
+filename = ims.jinja2.cfg
+
+[sdr]
+<= unpack-to-instance
+url = ${amarisoft:path}/trx_${:_buildout_section_name_}-linux-${amarisoft:lte-version}.tar.gz
+destination = ${enb:destination}/x86_64
+md5sum = ${trx_sdr-linux:md5sum}
+
+[sdr-driver]
+# move trx_sdr.so next to lteenb binary
+recipe = plone.recipe.command
+command = cp -p ${sdr:destination}/trx_sdr.so ${enb:destination}
+
+[enb]
+<= unpack-to-instance
+md5sum = ${lteenb-linux:md5sum}
+[mme]
+<= unpack-to-instance
+md5sum = ${ltemme-linux:md5sum}
+
+[lteenb-linux]
+filename = ${amarisoft:lte-version}/lteenb-linux-${amarisoft:lte-version}.tar.gz
+md5sum = 842b1526073472a30cb0b286d3b1528c
+[ltemme-linux]
+filename = ${amarisoft:lte-version}/ltemme-linux-${amarisoft:lte-version}.tar.gz
+md5sum = 9d7917f90c7c7b2a8ba624d874595351
+[ltewww-linux]
+filename = ${amarisoft:lte-version}/ltewww-linux-${amarisoft:lte-version}.tar.gz
+md5sum = 416b6167f70b12910fbbb9293038554c
+[trx_sdr-linux]
+filename = ${amarisoft:lte-version}/trx_sdr-linux-${amarisoft:lte-version}.tar.gz
+md5sum = e6960e3460f1a32c2436f36b2082995d
+
+[base-lteenb-cap-sys-nice]
+recipe = plone.recipe.command
+command =
+  getcap ${amarisoft:path}/${:binary} | grep cap_sys_nice+ep && exit 0;
+  # Make a copy or restore the copy, as patchelf will irreversibly change the md5sum
+  stat ${enb:destination}/${:binary}-unpriviledged ||
+    cp ${enb:destination}/${:binary} ${enb:destination}/${:binary}-unpriviledged &&
+    cp ${enb:destination}/${:binary}-unpriviledged ${enb:destination}/${:binary}
+  sudo -n ${amarisoft:path}/../give-cap-sys-nice-lteenb ${enb:destination}/${:binary} || true;
+update-command = ${:command}
+
+[lteenb-avx2-cap-sys-nice]
+<= base-lteenb-cap-sys-nice
+binary=lteenb
+
+[lteenb-cap-sys-nice]
+<= base-lteenb-cap-sys-nice
+binary=lteenb-avx2
+
+[versions]
+slapos.recipe.template = 4.2
diff --git a/software/ors-amarisoft/software.cfg.jinja2.json b/software/ors-amarisoft/software.cfg.jinja2.json
new file mode 100644
index 0000000000000000000000000000000000000000..262c544c67235d279ce230ecf824532caf997c04
--- /dev/null
+++ b/software/ors-amarisoft/software.cfg.jinja2.json
@@ -0,0 +1,56 @@
+{
+    "name": "ORS Amarisoft",
+    "description": "4G and 5G amarisoft stack for ORS",
+    "serialisation": "xml",
+    "software-type": {
+        "enb": {
+             "title": "eNB",
+             "software-type": "enb",
+             "description": "eNodeB Configuration",
+             "request": "instance-{{ rf_mode }}-enb-input-schema.json",
+             "response": "instance-{{ rf_mode }}-enb-schema.json",
+             "index": 0
+         },
+        "enb-epc": {
+             "title": "eNB and EPC",
+             "software-type": "enb-epc",
+             "description": "eNodeB and EPC Configuration",
+             "request": "instance-{{ rf_mode }}-enb-epc-input-schema.json",
+             "response": "instance-{{ rf_mode }}-enb-epc-schema.json",
+             "index": 1
+         },
+        "gnb": {
+             "title": "gNB",
+             "software-type": "gnb",
+             "description": "gNodeB Configuration",
+             "request": "instance-{{ rf_mode }}-gnb-input-schema.json",
+             "response": "instance-{{ rf_mode }}-gnb-schema.json",
+             "index": 2
+         },
+        "gnb-epc": {
+             "title": "gNB and EPC",
+             "software-type": "gnb-epc",
+             "description": "gNodeB and EPC Configuration",
+             "request": "instance-{{ rf_mode }}-gnb-epc-input-schema.json",
+             "response": "instance-{{ rf_mode }}-gnb-epc-schema.json",
+             "index": 3
+         },
+        "epc": {
+             "title": "EPC",
+             "software-type": "epc",
+             "description": "EPC Configuration",
+             "request": "instance-epc-input-schema.json",
+             "response": "instance-epc-schema.json",
+             "index": 4
+         },
+        "epc-slave": {
+             "title": "Sim Card",
+             "description": "EPC Configuration",
+             "software-type": "epc",
+             "request": "instance-epc-slave-input-schema.json",
+             "response": "instance-epc-slave-schema.json",
+             "shared": true,
+             "index": 5
+         }
+    }
+}
diff --git a/software/ors-amarisoft/software.jinja2.cfg b/software/ors-amarisoft/software.jinja2.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..c4a354bdc84398b1cb82d9eaa251ea713c96d36e
--- /dev/null
+++ b/software/ors-amarisoft/software.jinja2.cfg
@@ -0,0 +1,22 @@
+{{ generated_file_message }}
+[buildout]
+extends =
+  software.cfg
+
+[enb]
+default-dl-earfcn = {{ default_dl_earfcn }}
+default-lte-dl-freq = {{ default_lte_dl_freq }}
+default-lte-band = {{ default_lte_band }}
+default-lte-n-rb-dl = {{ default_lte_n_rb_dl }}
+default-lte-tx-gain = {{ default_lte_tx_gain }}
+default-lte-rx-gain = {{ default_lte_rx_gain }}
+
+default-dl-nr-arfcn = {{ default_dl_nr_arfcn }}
+default-nr-band = {{ default_nr_band }}
+default-nr-dl-freq = {{ default_nr_dl_freq }}
+default-nr-bandwidth = {{ default_nr_bandwidth }}
+default-nr-tx-gain = {{ default_nr_tx_gain }}
+default-nr-rx-gain = {{ default_nr_rx_gain }}
+
+min-frequency = {{ min_frequency }}
+max-frequency = {{ max_frequency }}