diff --git a/Cargo.lock b/Cargo.lock
index 4283424..6f08ff8 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -488,9 +488,42 @@ version = "0.1.0"
 dependencies = [
  "bitvec",
  "gtk4",
+ "libadwaita",
  "tokio",
 ]
 
+[[package]]
+name = "libadwaita"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91b4990248b9e1ec5e72094a2ccaea70ec3809f88f6fd52192f2af306b87c5d9"
+dependencies = [
+ "gdk-pixbuf",
+ "gdk4",
+ "gio",
+ "glib",
+ "gtk4",
+ "libadwaita-sys",
+ "libc",
+ "pango",
+]
+
+[[package]]
+name = "libadwaita-sys"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23a748e4e92be1265cd9e93d569c0b5dfc7814107985aa6743d670ab281ea1a8"
+dependencies = [
+ "gdk4-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "gtk4-sys",
+ "libc",
+ "pango-sys",
+ "system-deps",
+]
+
 [[package]]
 name = "libc"
 version = "0.2.150"
diff --git a/Cargo.toml b/Cargo.toml
index 60ff8f1..d4a05dc 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -6,6 +6,7 @@ edition = "2021"
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 
 [dependencies]
+adw = { version = "0.6.0", package = "libadwaita", features = ["v1_4"] }
 bitvec = "1.0.1"
 gtk4 = "0.8.1"
 tokio = { version = "1.0.0", features = ["rt", "rt-multi-thread", "macros"] }
diff --git a/src/main.rs b/src/main.rs
index e7f1f66..c765aaf 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -14,7 +14,7 @@ use view::view::*;
 
 fn main() {
 
-    let app = Application::builder()
+    let app = adw::Application::builder()
         .application_id("com.github.gtk-rs.examples.basic")
         .build();
 
diff --git a/src/view/components/mod.rs b/src/view/components/mod.rs
index 2eb2f35..bef511c 100644
--- a/src/view/components/mod.rs
+++ b/src/view/components/mod.rs
@@ -1,3 +1,4 @@
-pub mod wrapper;
-pub mod switch;
 pub mod tabs;
+pub mod pages;
+pub mod switch;
+pub mod wrapper;
diff --git a/src/view/components/pages.rs b/src/view/components/pages.rs
new file mode 100644
index 0000000..95d9bdb
--- /dev/null
+++ b/src/view/components/pages.rs
@@ -0,0 +1,88 @@
+use gtk4 as gtk;
+
+use gtk::{Stack, StackSidebar, Box};
+use gtk4::{Orientation, StackSwitcher, StackTransitionType, Widget};
+use gtk4::prelude::{BoxExt, IsA};
+
+pub struct Pages{
+    all_pages: Box
+}
+
+pub struct PagesBuilder{
+    pages_content: Stack,
+}
+
+impl Pages {
+    pub fn builder() -> PagesBuilder{
+        PagesBuilder {
+            pages_content: Stack::new(),
+        }
+    }
+
+    pub fn get(self) -> Box {
+        self.all_pages
+    }
+}
+
+impl PagesBuilder {
+
+    fn append_page_private(
+        &mut self,
+        page_name: &str,
+        page_title: &str,
+        content: &impl IsA<Widget>
+    ) {
+        self.pages_content.add_titled(content, Some(page_name), page_title);
+    }
+
+    pub fn set_transition(
+        mut self,
+        type_transition : StackTransitionType,
+        duration: u32
+    ) -> Self {
+        self.pages_content.set_transition_type(type_transition);
+        self.pages_content.set_transition_duration(duration);
+
+        self
+    }
+
+    pub fn add_page(
+        mut self,
+        page_name: &str,
+        page_title: &str,
+        content: &impl IsA<Widget>
+    ) -> Self {
+        self.append_page_private(page_name, page_title, content);
+        self
+    }
+
+    pub fn add_pages(
+        mut self,
+        pages: Vec<(&str, &str, &impl IsA<Widget>)>,
+    ) -> Self {
+        pages.iter()
+            .for_each(|(name, title, content)| {
+                self.append_page_private(*name, *title, *content);
+            });
+
+        self
+    }
+
+    pub fn build(&self, spacing: i32) -> Pages {
+        let stack_sidebar = StackSidebar::new();
+        let stack_switcher = StackSwitcher::new();
+
+        stack_sidebar.set_stack(&self.pages_content);
+        stack_switcher.set_stack(Some(&self.pages_content));
+
+        let wrapper = Box::new(Orientation::Horizontal, spacing);
+
+        wrapper.append(&stack_sidebar);
+        wrapper.append(&self.pages_content);
+
+        Pages{
+            all_pages: wrapper
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/src/view/components/tabs.rs b/src/view/components/tabs.rs
index 12b4157..326527f 100644
--- a/src/view/components/tabs.rs
+++ b/src/view/components/tabs.rs
@@ -24,7 +24,6 @@ impl Tabs {
     pub fn get(self) -> Notebook {
         self.tabs_wrapper
     }
-
 }
 
 impl TabsBuilder {
diff --git a/src/view/view.rs b/src/view/view.rs
index 0f5c988..ba09ad5 100644
--- a/src/view/view.rs
+++ b/src/view/view.rs
@@ -1,6 +1,7 @@
 use gtk4 as gtk;
 
 use gtk::{*, prelude::*};
+use gtk4::StackTransitionType::SlideLeftRight;
 
 use crate::{
     model::model::*,
@@ -22,6 +23,7 @@ use crate::{
         },
     }
 };
+use crate::view::components::pages::Pages;
 
 pub fn laboratory_work_first_section(wrapper: &Box) -> (){
 
@@ -152,7 +154,7 @@ pub fn laboratory_work_first_section(wrapper: &Box) -> (){
 
 }
 
-pub fn ui(application: &Application) {
+pub fn ui(application: &adw::Application) {
 
     let mutual_wrapper = Wrapper::row_builder()
         .set_align(Alignment::new(Align::Fill, Align::Fill))
@@ -170,12 +172,13 @@ pub fn ui(application: &Application) {
 
     second_wrapper.append(&Label::new(Some("Код Хафмана")));
 
-    let notebook = Tabs::builder()
-        .add_tabs(
-            vec!["Код Хэмминга", "Код Хафмана"],
-            vec![mutual_wrapper, second_wrapper]
-        )
-        .build("Tabs")
+    let pages = Pages::builder()
+        .set_transition(SlideLeftRight, 200)
+        .add_pages(vec![
+            ("Код Хэмминга", "Код Хэмминга", &mutual_wrapper),
+            ("Код Хафмана", "Код Хафмана", &second_wrapper)
+        ])
+        .build(5)
         .get();
 
     let window = ApplicationWindow::builder()
@@ -183,7 +186,7 @@ pub fn ui(application: &Application) {
         .width_request(650)
         .height_request(400)
         .application(application)
-        .child(&notebook)
+        .child(&pages)
         .build();
 
     window.show();