diff --git a/geant/gap_ansible/playbooks/l2circuit.yaml b/geant/gap_ansible/playbooks/l2circuit.yaml
index 5f20a0fdd5c5c13048364aa95e7fd86387d21bb6..2d537f026383cc23106de78b6deba82873e719f7 100644
--- a/geant/gap_ansible/playbooks/l2circuit.yaml
+++ b/geant/gap_ansible/playbooks/l2circuit.yaml
@@ -10,9 +10,36 @@
       ansible.builtin.include_vars:
         dir: /opt/ansible_inventory/geant_services/{{ subscription.product.product_type }}/{{ subscription.layer_2_circuit_service_type | upper | replace(' ', '_') }}
 
-    - name: Include l2circuit role
-      ansible.builtin.include_role:
-        name: l2circuits
-      loop: "{{ subscription.layer_2_circuit.layer_2_circuit_sides }}"
-      loop_control:
-        loop_var: l2c_side
+    - name: Configure L2circuit as Local cross connect
+      when: subscription.layer_2_circuit.layer_2_circuit_sides[0].sbp.edge_port.node.router_fqdn ==
+            subscription.layer_2_circuit.layer_2_circuit_sides[1].sbp.edge_port.node.router_fqdn
+      block:
+        - name: Set vars
+          ansible.builtin.set_fact:
+            local_cross_connect: true
+            l2c_side_b_lag: "{{ subscription.layer_2_circuit.layer_2_circuit_sides[1].sbp.edge_port.edge_port_name }}"
+            l2c_side_b_vlan: "{{ subscription.layer_2_circuit.layer_2_circuit_sides[1].sbp.vlan_id }}"
+            l2c_side_b_gs_id: "{{ subscription.layer_2_circuit.layer_2_circuit_sides[1].sbp.gs_id }}"
+            remote_partner_name: "{{ subscription.layer_2_circuit.layer_2_circuit_sides[1].sbp.edge_port.partner_name }}"
+
+        - name: Include l2circuits role
+          ansible.builtin.include_role:
+            name: l2circuits
+          vars:
+            l2c_side: "{{ subscription.layer_2_circuit.layer_2_circuit_sides[0] }}"
+
+
+    - name: Configure L2circuit on 2 different nodes
+      when: subscription.layer_2_circuit.layer_2_circuit_sides[0].sbp.edge_port.node.router_fqdn !=
+            subscription.layer_2_circuit.layer_2_circuit_sides[1].sbp.edge_port.node.router_fqdn
+      block:
+        - name: Set vars
+          ansible.builtin.set_fact:
+            local_cross_connect: false
+
+        - name: Include l2circuits role
+          ansible.builtin.include_role:
+            name: l2circuits
+          loop: "{{ subscription.layer_2_circuit.layer_2_circuit_sides }}"
+          loop_control:
+            loop_var: l2c_side
diff --git a/geant/gap_ansible/roles/l2circuits/tasks/merge_vars.yaml b/geant/gap_ansible/roles/l2circuits/tasks/merge_vars.yaml
index 589581022dc724248118bfdded36b6bff918968c..0cc0f1296fe6af19afa674d075377fc6a9029713 100644
--- a/geant/gap_ansible/roles/l2circuits/tasks/merge_vars.yaml
+++ b/geant/gap_ansible/roles/l2circuits/tasks/merge_vars.yaml
@@ -1,5 +1,6 @@
 ---
 - name: Load info for the remote l2circuit endpoint
+  when: not local_cross_connect
   ansible.builtin.set_fact:
     remote_side: "{{ subscription | community.general.json_query(qry) }}"
   vars:
@@ -11,12 +12,17 @@
   vars:
     qry: "layer_2_circuit.layer_2_circuit_sides[?sbp.edge_port.node.router_fqdn == '{{ inventory_hostname }}'] | [0]"
 
-- name: Set partner names for the l2circuit endpoints
+- name: Set partner names for the l2circuit Local endpoint
   ansible.builtin.set_fact:
     local_partner_name: "{{ local_side.sbp.edge_port.partner_name }}"
+
+- name: Set partner names for the l2circuit Remote endpoint
+  when: not local_cross_connect
+  ansible.builtin.set_fact:
     remote_partner_name: "{{ remote_side.sbp.edge_port.partner_name }}"
 
 - name: Calculate SDP to use locally
+  when: not local_cross_connect
   ansible.builtin.set_fact:
     sdp_id: "{{ remote_side.sbp.edge_port.node.router_lo_ipv4_address |
       replace(sdp_prefix_regex, '') | replace('.', '') + l2circuits_sdp_type }}"
diff --git a/geant/gap_ansible/roles/l2circuits/templates/juniper/deploy/l2circuit.j2 b/geant/gap_ansible/roles/l2circuits/templates/juniper/deploy/l2circuit.j2
index a642a9b38d7f66e40a4feea304b2460d4a060159..10c3fac616d8bd950426a3da36912b0c71104bab 100644
--- a/geant/gap_ansible/roles/l2circuits/templates/juniper/deploy/l2circuit.j2
+++ b/geant/gap_ansible/roles/l2circuits/templates/juniper/deploy/l2circuit.j2
@@ -9,7 +9,12 @@ set interfaces {{ l2circuits_lag_name }} unit {{ l2circuits_vlan }} output-vlan-
 set interfaces {{ l2circuits_lag_name }} unit {{ l2circuits_vlan }} vlan-id-range {{ subscription.layer_2_circuit.vlan_range_lower_bound }}-{{ subscription.layer_2_circuit.vlan_range_upper_bound }}
 {% endif %}
 
+{% if not local_cross_connect %}
 set protocols l2circuit neighbor {{ remote_side.sbp.edge_port.node.router_lo_ipv4_address }} interface {{ l2circuits_lag_name }}.{{ l2circuits_vlan }} virtual-circuit-id {{ l2circuits_l2c_vcid }}
 set protocols l2circuit neighbor {{ remote_side.sbp.edge_port.node.router_lo_ipv4_address }} interface {{ l2circuits_lag_name }}.{{ l2circuits_vlan }} control-word
 set protocols l2circuit neighbor {{ remote_side.sbp.edge_port.node.router_lo_ipv4_address }} interface {{ l2circuits_lag_name }}.{{ l2circuits_vlan }} mtu {{ service_mtu.juniper }}
+{% else %}
+set protocols l2circuit local-switching interface {{ l2circuits_lag_name }}.{{ l2circuits_vlan }} end-interface {{ l2c_side_b_lag }}.{{ l2c_side_b_vlan }}
+set protocols l2circuit local-switching interface {{ l2circuits_lag_name }}.{{ l2circuits_vlan }} ignore-mtu-mismatch
+{% endif %}
 
diff --git a/geant/gap_ansible/roles/l2circuits/templates/juniper/terminate/l2circuit.j2 b/geant/gap_ansible/roles/l2circuits/templates/juniper/terminate/l2circuit.j2
index 067d5114c8b73e46dc1024830a521029491f3168..701610d6666950572d0accf645e90f83633ba8e9 100644
--- a/geant/gap_ansible/roles/l2circuits/templates/juniper/terminate/l2circuit.j2
+++ b/geant/gap_ansible/roles/l2circuits/templates/juniper/terminate/l2circuit.j2
@@ -1,2 +1,7 @@
+{% if not local_cross_connect %}
 delete protocols l2circuit neighbor {{ remote_side.sbp.edge_port.node.router_lo_ipv4_address }} interface {{ l2circuits_lag_name }}.{{ l2circuits_vlan }}
 delete interfaces {{ l2circuits_lag_name }} unit {{ l2circuits_vlan }}
+{% else %}
+delete protocols l2circuit local-switching interface {{ l2circuits_lag_name }}.{{ l2circuits_vlan }} ignore-mtu-mismatch
+delete protocols l2circuit local-switching interface {{ l2circuits_lag_name }}.{{ l2circuits_vlan }} end-interface {{ l2c_side_b_lag }}.{{ l2c_side_b_vlan }}
+{% endif %}
diff --git a/geant/gap_ansible/roles/l2circuits/templates/nokia/deploy/l2circuit.j2 b/geant/gap_ansible/roles/l2circuits/templates/nokia/deploy/l2circuit.j2
index 6d8567baa8cf3029c5f4a7bb51f3f5ccd8d77ab5..55bb35731a1669f695539f873cf0ee497abb6bdd 100644
--- a/geant/gap_ansible/roles/l2circuits/templates/nokia/deploy/l2circuit.j2
+++ b/geant/gap_ansible/roles/l2circuits/templates/nokia/deploy/l2circuit.j2
@@ -14,16 +14,20 @@
         </connection-profile>
 {% endif %}
 
+{% set csn = '#'+l2circuits_custom_service_name|replace(' ', '_') if l2circuits_custom_service_name|length > 0 %}
+
+
         <service xmlns="urn:nokia.com:sros:ns:yang:sr:conf" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nokia-attr="urn:nokia.com:sros:ns:yang:sr:attributes">
             <epipe alu:operation="replace">
-            <service-name >EPIPE:{{ l2circuits_custom_service_name | replace(' ', '_') }}:{{ l2circuits_l2c_vcid }}</service-name>
+            <service-name>EPIPE:{{ l2circuits_custom_service_name | replace(' ', '_') }}:{{ l2circuits_l2c_vcid }}</service-name>
                 <admin-state>enable</admin-state>
-                <description>SRV_L2CIRCUIT CUSTOMER {{ local_partner_name | upper }} {{ remote_partner_name | upper }} #{{ l2circuits_custom_service_name | replace(' ', '_') }} ${{ local_side.sbp.gs_id }}</description>
+                <description>SRV_L2CIRCUIT CUSTOMER {{ local_partner_name | upper }} {{ remote_partner_name | upper }} {{ csn | replace(' ', '_') if csn is defined }} ${{ local_side.sbp.gs_id }}</description>
                 <service-id>{{ l2circuits_l2c_vcid }}</service-id>
                 <customer>1</customer>
-                <vpn-id>{{ l2circuits_l2c_vcid }}</vpn-id>
                 <service-mtu>{{ service_mtu.nokia }}</service-mtu>
+                {% if not local_cross_connect %}
                 <ignore-l2vpn-mtu-mismatch>false</ignore-l2vpn-mtu-mismatch>
+                <vpn-id>{{ l2circuits_l2c_vcid }}</vpn-id>
                 <spoke-sdp>
                   <sdp-bind-id>{{ sdp_id }}:{{ l2circuits_l2c_vcid }}</sdp-bind-id>
                     <admin-state>enable</admin-state>
@@ -33,6 +37,7 @@
                         <signaling>true</signaling>
                     </pw-status>
                 </spoke-sdp>
+                {% endif %}
                 <sap>
                     <description>{{ local_partner_name | upper }}:{{ l2circuits_vlan }}:{{ local_side.sbp.gs_id }}</description>
                     {% if l2circuits_l2c_type == 'Ethernet' %}
@@ -42,6 +47,17 @@
                     {% endif %}
                     <admin-state>enable</admin-state>
                 </sap>
+                {% if local_cross_connect %}
+                <sap>
+                    <description>{{ remote_partner_name | upper }}:{{ l2c_side_b_vlan }}:{{ l2c_side_b_gs_id }}</description>
+                    {% if l2circuits_l2c_type == 'Ethernet' %}
+                    <sap-id>{{ l2c_side_b_lag }}:{{ l2c_side_b_vlan }}</sap-id>
+                    {% else %}
+                    <sap-id>{{ l2c_side_b_lag }}:cp-{{ l2c_side_b_vlan }}</sap-id>
+                    {% endif %}
+                    <admin-state>enable</admin-state>
+                </sap>
+                {% endif %}
             </epipe>
         </service>