diff --git a/entries/static/entries/js/unification.js b/entries/static/entries/js/unification.js
index 512cd6292d42ced11533aa0ddcbee837a23d3a75..9dd53ad6cff611cdac66f4a4db47609d163dc3e7 100644
--- a/entries/static/entries/js/unification.js
+++ b/entries/static/entries/js/unification.js
@@ -1,46 +1,5 @@
 "use strict";
 
-function get_unified_frame(unified_frame_id, related) {
-    check_import_status();
-    clear_entry();
-    show_entry_spinners();
-    //const data = { 'forms' : serialize_forms($('#main-form')), 'entry' : entry_id };
-    const data = { 'unified_frame_id' : unified_frame_id, 'no_filters' : related };
-    $.ajax({
-        type     : 'post',
-        url      : '/' + lang + '/unifier/get_unified_frame/',
-        dataType : 'json',
-        data     : data,
-        timeout  : 60000,
-        success  : function(response) {
-            curr_entry = unified_frame_id;
-            curr_no_filters = related;
-            clear_info();
-            curr_alternations = response.alternations;
-            curr_realisation_phrases = response.realisation_phrases;
-            curr_realisation_descriptions = response.realisation_descriptions;
-            curr_examples = response.examples;
-            curr_examples_by_id = Object();
-            for (let i in curr_examples) {
-                curr_examples_by_id[curr_examples[i].id] = curr_examples[i];
-            }
-            // show_syntax(response.subentries);
-            show_unified_frame(response.unified_frame, response.frames)
-            show_unified_frame_lexical_units(response.frames)
-            fulfill_slowal_frames_arguments_with_empty_elems(response.unified_frame, response.frames)
-            show_semantics_unified_view(response.frames, response.subentries);
-            // show_unmatched_examples();
-
-            // tooltips with meaning gloss
-            activate_tooltips($('#semantics-frames-pane'));
-            update_last_visited(response.last_visited);
-        },
-        error: function(request, errorType, errorMessage) {
-            show_error(errorType + ' (' + errorMessage + ')');
-        }
-    });
-}
-
 
 function slowal_frames2selecional_preferencies(unified_frame, slowal_frames) {
     const unified_argument_2_selecional_preferencies = {}
diff --git a/entries/static/entries/js/utils.js b/entries/static/entries/js/utils.js
index 694904e3a929fa26be0780e87fb24e0f8dd2a6b7..18faac7196d0a272d84bdb8e8c1f34d0ebbf219a 100644
--- a/entries/static/entries/js/utils.js
+++ b/entries/static/entries/js/utils.js
@@ -30,13 +30,3 @@ function normalizeFormData(data) {
         }
     }
 }
-
-function indexOfId(array, id) {
-    var i;
-    for (i = 0; i < array.length; i++) {
-        if (array[i].id == id) {
-            return i;
-        }
-    }
-    return -1;
-}
diff --git a/entries/templates/entries_base.html b/entries/templates/entries_base.html
index 2df1529b641a36758ffc1203af32ba0a50385d8d..b46559a6c66c07047c2d29e5564328bc95d7595a 100644
--- a/entries/templates/entries_base.html
+++ b/entries/templates/entries_base.html
@@ -22,7 +22,6 @@
     <script type="text/javascript" src="https://cdn.datatables.net/v/bs4/dt-1.12.1/sc-2.0.3/datatables.min.js"></script>
     <script type="text/javascript" src="https://cdn.datatables.net/plug-ins/1.12.1/features/scrollResize/dataTables.scrollResize.min.js"></script>
     <script src="{% static 'common/js/csrf.js' %}"></script>
-    <!--script src="{% static 'entries/js/panels.js' %}"></script-->
     <script src="{% static 'entries/js/forms.js' %}"></script>
     <script src="{% static 'entries/js/utils.js' %}"></script>
     <script src="{% static 'entries/js/entries.js' %}"></script>
diff --git a/entries/templates/test.html b/entries/templates/test.html
deleted file mode 100644
index c3c96aaf6ff5973fc2d3e7260cd688dc917ea496..0000000000000000000000000000000000000000
--- a/entries/templates/test.html
+++ /dev/null
@@ -1,23 +0,0 @@
-{% load static %}
-
-<!doctype html>
-
-{% load static %}
-
-<html lang="pl">
-<head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
-    <link rel="icon" href="{% static 'common/favicon.ico' %}">
-    <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/smoothness/jquery-ui.css">
-    <link rel="stylesheet" type="text/css" href="https://bootswatch.com/4/lux/bootstrap.min.css">
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
-    <!--might be needed for resizeable panels, causes errors if included after Popper-->
-    <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
-    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
-    <script src="{% static 'entries/js/entries.js' %}"></script>
-</head>
-
-<body>
-    <input class="regex-autocomplete" data-autocomplete="phrasetype">
-</body>
diff --git a/entries/views.py b/entries/views.py
index 075096de395fa27c66541a5d3f9ce30e9783c9a4..5430b0109f26927229d996ab1e9025de26be55b6 100644
--- a/entries/views.py
+++ b/entries/views.py
@@ -47,10 +47,6 @@ from .phrase_descriptions.descriptions import position_prop_description
 
 MAX_LAST_VISITED = 10
 
-# TODO remove!!!
-#def test(request):
-#    return render(request, 'test.html', {})
-
 @login_required
 def entries(request):
     # TODO make this automatic by subclassing/configuring session object
diff --git a/frontend/src/components/unification/Unification/LexicalUnitEdit.vue b/frontend/src/components/unification/Unification/LexicalUnitEdit.vue
index 948de34d7545667f528127f8bc677f5286c9ff4b..6db0f6bab5e21eb94f95ca6bc7c1f2bd1778eb1b 100644
--- a/frontend/src/components/unification/Unification/LexicalUnitEdit.vue
+++ b/frontend/src/components/unification/Unification/LexicalUnitEdit.vue
@@ -28,7 +28,7 @@ Object.assign(LexicalUnitEdit, {
       active_unified_frame_argument: null,
       slowal_frames2selecional_preferencies_mapping: {},
       lexical_units: [],
-      img_prefix: String,
+      img_prefix: window.STATIC_URL,
       frames: [],
       right_pane_tabs: [
         {id: 'schemata', label: gettext('Schematy')},
diff --git a/frontend/src/components/unification/Unification/Unification.vue b/frontend/src/components/unification/Unification/Unification.vue
new file mode 100644
index 0000000000000000000000000000000000000000..926824132d8e764fd7a0e554ff4c370be9639133
--- /dev/null
+++ b/frontend/src/components/unification/Unification/Unification.vue
@@ -0,0 +1,76 @@
+<script>
+import UnificationSwitchableList from "./UnificationSwitchableList.vue";
+import UnificationRightPane from "./UnificationRightPane.vue";
+
+export default {
+  data () {
+    return {
+      entryId: null,
+      lexicalUnitId: null,
+      unifiedFrameId: null,
+      gettext: window.gettext,
+      unificationEntriesListRefreshKey: 1,
+    };
+  },
+  components: {UnificationSwitchableList, UnificationRightPane},
+  methods: {
+    lexicalUnitSelected (entryId, lexicalUnitId) {
+      this.entryId = entryId;
+      this.lexicalUnitId = lexicalUnitId;
+    },
+    unifiedFrameSelected (unifiedFrameId, entryId, lexicalUnitId) {
+      this.unifiedFrameId = unifiedFrameId;
+      this.entryId = entryId;
+      this.lexicalUnitId = lexicalUnitId;
+    },
+    refreshEntriesList() {
+      this.unificationEntriesListRefreshKey++;
+    }
+  },
+  setup() {
+    const lexicalUnit = new URL(location.href).searchParams.get('lexical_unit_id');
+    const entryId = new URL(location.href).searchParams.get('entry_id');
+    return {
+      initialLexicalUnitId: parseInt(lexicalUnit),
+      initialEntryId: parseInt(entryId),
+    };
+  },
+  mounted () {
+    this.unifiedFrameSelected(window.initialUnifiedFrameId);
+    $('#entries-list').length && Split(['#entries-list', '#entry-display'], {
+      sizes: [20, 80],
+      gutterSize: 4,
+      minSize: 10,
+      elementStyle: (dimension, size, gutterSize) => {
+        return {
+          'flex-basis': 'calc(' + size + '% - ' + gutterSize + 'px)'
+        }
+      },
+    });
+  },
+};
+</script>
+
+<template>
+  <div id="entries-list" class="col h-100 w-100 pr-0 overflow-hidden">
+    <div id="entries-list-div" class="col p-0 h-100 w-100 overflow-hidden">
+      <unification-switchable-list
+          :unificationEntriesListRefreshKey="unificationEntriesListRefreshKey"
+          :initialLexicalUnitId="lexicalUnitId ? lexicalUnitId : initialLexicalUnitId"
+          :initialEntryId="entryId ? entryId : initialEntryId"
+          @lexical-unit-selected="lexicalUnitSelected"
+          @unified-frame-selected="unifiedFrameSelected"
+      />
+    </div>
+  </div>
+  <div id="entry-display" class="col h-100 p-0 overflow-hidden">
+    <unification-right-pane
+        ref="unificationRightPane"
+        :entryId="entryId"
+        :lexicalUnitId="lexicalUnitId"
+        :initialUnifiedFrameId="unifiedFrameId"
+        @refresh-entries-list="refreshEntriesList"
+    />
+  </div>
+</template>
+
diff --git a/frontend/src/components/unification/shared/frame-components/ExamplesComponent.vue b/frontend/src/components/unification/shared/frame-components/ExamplesComponent.vue
index 6e9b4ea1ec4e5cf550564c6d16f83741c4f167cd..8327a47583a297a049600290da0d0926b63c25e9 100644
--- a/frontend/src/components/unification/shared/frame-components/ExamplesComponent.vue
+++ b/frontend/src/components/unification/shared/frame-components/ExamplesComponent.vue
@@ -13,7 +13,7 @@ export default {
   components: { InfoTooltip },
   data() {
     return {
-      img_prefix: String
+      img_prefix: window.STATIC_URL
     }
   },
   emits: ['exampleSelected'],
@@ -87,4 +87,4 @@ export default {
     </tbody>
   </table>
   <p v-else class="mx-1 my-1" id="semantics-no-examples" style="display: none;">Brak przykładów</p>
-</template>
\ No newline at end of file
+</template>
diff --git a/frontend/src/components/unification/shared/frame-components/SemanticsSchemataComponent.vue b/frontend/src/components/unification/shared/frame-components/SemanticsSchemataComponent.vue
index ce3604aafa0603f899bb618a450a3cb062b9e614..b6bfb59cfb59c49b8ebb222b6751e65c01a6b70a 100644
--- a/frontend/src/components/unification/shared/frame-components/SemanticsSchemataComponent.vue
+++ b/frontend/src/components/unification/shared/frame-components/SemanticsSchemataComponent.vue
@@ -14,7 +14,7 @@ export default {
   emits: ['schemataSelected'],
   data() {
     return {
-      img_prefix: String
+      img_prefix: window.STATIC_URL
     }
   },
   methods: {
diff --git a/frontend/src/components/unification/shared/frame-components/SlowalFrameComponent.vue b/frontend/src/components/unification/shared/frame-components/SlowalFrameComponent.vue
index 12a62831f13702a151b9709ae32bed7b59e9f354..88361c58740e99354d1eed2797eab543f702853e 100644
--- a/frontend/src/components/unification/shared/frame-components/SlowalFrameComponent.vue
+++ b/frontend/src/components/unification/shared/frame-components/SlowalFrameComponent.vue
@@ -10,7 +10,7 @@ export default {
   emits: ['frameSelectionChanged'],
   data() {
     return {
-      img_prefix: String,
+      img_prefix: window.STATIC_URL,
     }
   },
   methods: {
diff --git a/frontend/src/main.js b/frontend/src/main.js
index 309a1cbddbf44f7c4f33072a9279bab2e5f0154e..f0fbbbc5d721560d7c8e27ab8478693c56b03d01 100644
--- a/frontend/src/main.js
+++ b/frontend/src/main.js
@@ -16,5 +16,12 @@ const router = createRouter({
 });
 
 const app = createApp(App);
+let mounted = false;
 app.use(router);
-app.mount('#vue-app');
+
+window.update_entries = function () {
+  if (!mounted) {
+    app.mount('#vue-app');
+    mounted = true;
+  }
+}