diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 0000000..08cd9ac
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1,5 @@
+# These are supported funding model platforms
+
+ko_fi: dudochkin
+liberapay: dudochkin
+open_collective: dudochkin
\ No newline at end of file
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 0000000..c8f5856
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,18 @@
+---
+name: Bug report
+about: About unexpected behaviors
+title: "[BUG] "
+labels: bug
+assignees: ''
+
+---
+
+**Describe the bug**
+Describe what is expected, what you actually get.
+It would be nice to have screenshot or result image uploaded  
+
+**To Reproduce**
+Some minimal reproduce code is highly recommended
+
+**Version Information**
+Please give us what version you are using. If you are pulling `UX Dataflow` directly from git repo, please mention this as well
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 0000000..3cb1229
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,17 @@
+---
+name: Feature request
+about: Suggest an idea to UX Dataflow maintainers
+title: "[Feature Request]"
+labels: feature request
+assignees: ''
+
+---
+
+### What is the feature ?
+*Detailed feature descrption*
+
+### (Optional) Why this feature is useful and how people would use the feature ?
+*Explain why this feature is important*
+
+### (Optional) Additional Information
+*More details are appreciated:)*
diff --git a/.github/ISSUE_TEMPLATE/general-questions.md b/.github/ISSUE_TEMPLATE/general-questions.md
new file mode 100644
index 0000000..96d4e89
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/general-questions.md
@@ -0,0 +1,10 @@
+---
+name: General Questions
+about: Any other issues
+title: ''
+labels: ''
+assignees: ''
+
+---
+
+
diff --git a/.github/codecov.yml b/.github/codecov.yml
new file mode 100644
index 0000000..f2cf6e4
--- /dev/null
+++ b/.github/codecov.yml
@@ -0,0 +1,9 @@
+comment:
+  layout: "diff, flags, files"
+  require_changes: true
+
+coverage:
+  status:
+    project:
+      default:
+        informational: true
diff --git a/.github/workflows/audit.yaml b/.github/workflows/audit.yaml
new file mode 100644
index 0000000..e0c79d5
--- /dev/null
+++ b/.github/workflows/audit.yaml
@@ -0,0 +1,17 @@
+name: Security audit
+on:
+  pull_request:
+  push:
+    branches:
+      - master
+  schedule:
+    - cron: '0 0 * * 0'
+
+jobs:
+  security_audit:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v2
+      - uses: actions-rs/audit-check@v1
+        with:
+          token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/coverage.yaml b/.github/workflows/coverage.yaml
new file mode 100644
index 0000000..b9cf34a
--- /dev/null
+++ b/.github/workflows/coverage.yaml
@@ -0,0 +1,49 @@
+name: Coverage
+
+#on:
+#  push:
+#    branches:
+#      - main
+#  pull_request:
+
+on: [push, pull_request]
+
+env:
+  CARGO_TERM_COLOR: always
+  RUST_BACKTRACE: full
+
+jobs:
+  coverage:
+    name: Coverage
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout repository
+        uses: actions/checkout@v2
+
+      - name: Install Rust
+        uses: actions-rs/toolchain@v1
+        with:
+          toolchain: nightly
+          profile: minimal
+          default: true
+
+      - name: Restore cache
+        uses: Swatinem/rust-cache@v1
+
+      - name: Run cargo-tarpaulin
+        uses: actions-rs/tarpaulin@v0.1
+        with:
+          args: '--all-features --run-types Doctests,Tests'
+          timeout: 120
+
+      - name: Upload to codecov.io
+        uses: codecov/codecov-action@239febf655bba88b16ff5dea1d3135ea8663a1f9
+        with:
+          token: ${{ secrets.CODECOV_TOKEN }}
+
+      - name: Archive code coverage results
+        uses: actions/upload-artifact@v2
+        with:
+          name: code-coverage-report
+          path: cobertura.xml
+          retention-days: 30
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
new file mode 100644
index 0000000..6893c69
--- /dev/null
+++ b/.github/workflows/tests.yml
@@ -0,0 +1,27 @@
+name: Tests
+
+on: [push, pull_request]
+
+jobs:
+  build:
+
+    runs-on: ubuntu-latest
+
+    steps:
+    - uses: actions/checkout@v1
+    - name: Build
+      run: cargo build --verbose
+    - name: Run tests
+      run: cargo test --verbose
+
+  clippy_check:
+
+    runs-on: ubuntu-latest
+
+    steps:
+      - uses: actions/checkout@v1
+      - run: rustup component add clippy
+      - uses: actions-rs/clippy-check@v1
+        with:
+          token: ${{ secrets.GITHUB_TOKEN }}
+          args: --all-features
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 42ebc7d..1350b5a 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -13,6 +13,10 @@ available for creating polished solutions for your application's target users.
 
 ## How to Contribute
 
+We believe the wider community can create better code. The first tool for improving the community is to tell the developers about the project by giving it a star. More stars - more members.
+
+[![](https://dudochkin-victor.github.io/assets/star-me-wide.svg)](https://github.com/angular-rust/ux-dataflow)
+
 ### Join the Community
 
 The first step to improving Angular Rust is to join the community and help grow it! You can find the community on:
@@ -23,10 +27,6 @@ The first step to improving Angular Rust is to join the community and help grow
  [![](https://img.shields.io/badge/Medium-12100E?style=for-the-badge&logo=medium&logoColor=white)](https://medium.com/@angular.rust) 
  [![](https://img.shields.io/gitter/room/angular_rust/angular_rust?style=for-the-badge)](https://gitter.im/angular_rust/community)
 
-We believe the wider community can create better code. The first tool for improving the community is to tell the developers about the project by giving it a star. More stars - more members.
-
- ![Star a repo](https://dudochkin-victor.github.io/assets/star-me-wide.svg)
-
 Once you've joined, there are many ways to contribute to Angular Rust:
 
 * Report bugs (via GitHub)
diff --git a/Cargo.toml b/Cargo.toml
index a51b9e6..527d842 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 name = "ux-dataflow"
-version = "0.1.1"
-authors = ["Victor Dudochkin <dudochkin.victor@gmail.com>", "Maksim Makarov <pr0n1x@yandex.ru>"]
+version = "0.1.2"
+authors = ["Victor Dudochkin <dudochkin.victor@gmail.com>"]
 readme = "README.md"
 homepage = "https://angular-rust.github.io/ux-dataflow"
 repository = "https://github.com/angular-rust/ux-dataflow"
diff --git a/README.md b/README.md
index 9e9bf3f..741a5bc 100644
--- a/README.md
+++ b/README.md
@@ -1,13 +1,14 @@
 <div align="center">
 
-![Star a repo](https://dudochkin-victor.github.io/assets/ux-dataflow/logo-wide.svg)
+[![](https://dudochkin-victor.github.io/assets/ux-dataflow/logo-wide.svg)](#top)
 # UX Dataflow
 
 [![API Docs][docrs-badge]][docrs-url]
 [![Crates.io][crates-badge]][crates-url]
+[![Code coverage][codecov-badge]][codecov-url]
+[![Tests][tests-badge]][tests-url]
 [![MPL-2.0 licensed][license-badge]][license-url]
 [![Gitter chat][gitter-badge]][gitter-url]
-[![Rustc Version 1.45+][rust-badge]][rust-url]
 [![loc][loc-badge]][loc-url]
 </div>
 
@@ -17,11 +18,13 @@
 [crates-url]: https://crates.io/crates/ux-dataflow
 [license-badge]: https://img.shields.io/badge/license-MPL--2.0-blue.svg?style=flat-square
 [license-url]: https://github.com/angular-rust/ux-dataflow/blob/master/LICENSE
-[gitter-badge]: https://img.shields.io/gitter/room/angular_rust/angular_rust.svg?style=flat-square
+[gitter-badge]: https://img.shields.io/gitter/room/angular_rust/community.svg?style=flat-square
 [gitter-url]: https://gitter.im/angular_rust/community
-[rust-badge]: https://img.shields.io/badge/rustc-1.45-lightgrey.svg?style=flat-square
-[rust-url]: https://blog.rust-lang.org/2020/07/16/Rust-1.45.0.html
-[loc-badge]: https://tokei.rs/b1/github/angular-rust/ux-dataflow?category=code
+[tests-badge]: https://img.shields.io/github/workflow/status/angular-rust/ux-dataflow/Tests?label=tests&logo=github&style=flat-square
+[tests-url]: https://github.com/angular-rust/ux-dataflow/actions/workflows/tests.yml
+[codecov-badge]: https://img.shields.io/codecov/c/github/angular-rust/ux-dataflow?logo=codecov&style=flat-square&token=M7BW7mahNb
+[codecov-url]: https://codecov.io/gh/angular-rust/ux-dataflow
+[loc-badge]: https://img.shields.io/tokei/lines/github/angular-rust/ux-dataflow?style=flat-square
 [loc-url]: https://github.com/angular-rust/ux-dataflow
 
 **UX Dataflow** is a streaming capable data multiplexer that allows you to aggregate data and then process it using a Chain of Responsibility design pattern.
@@ -32,7 +35,9 @@ But during the development process, it became clear that a data processing mecha
 
 **UX Dataflow** is part of the Angular Rust framework.
 
-Angular Rust is a high productivity, `platform-agnostic` frontend framework for the [Rust language](https://www.rust-lang.org/). It now supports desktop and web development. Angular Rust currently uses GTK for desktop development and WebAssembly for web development. We are planning to add support for mobile development.
+**Angular Rust** is a high productivity, `platform-agnostic` frontend framework for the [Rust language](https://www.rust-lang.org/). It now supports desktop and web development. Angular Rust currently uses Clutter for desktop development and WebAssembly for web development. We are planning to add support for mobile development.
+
+![Angular Rust structure](https://dudochkin-victor.github.io/assets/angular-rust/structure.svg)
 
 ## Features
 
@@ -46,7 +51,7 @@ Angular Rust is a high productivity, `platform-agnostic` frontend framework for
 
 ## Quick Start
 
-Install Angular Rust:
+Install UX Dataflow:
 
 	cargo add ux-dataflow
 
@@ -70,11 +75,11 @@ Install Angular Rust:
 
 We believe the wider community can create better code. The first tool for improving the community is to tell the developers about the project by giving it a star. More stars - more members.
 
- ![Star a repo](https://dudochkin-victor.github.io/assets/star-me-wide.svg)
+  [![](https://dudochkin-victor.github.io/assets/star-me-wide.svg)](https://github.com/angular-rust/ux-dataflow#top)
  
 Angular Rust is a community effort and we welcome all kinds of contributions, big or small, from developers of all backgrounds. We want the Angular Rust community to be a fun and friendly place, so please review our [Code of Conduct](CODE_OF_CONDUCT.md) to learn what behavior will not be tolerated.
 
-## New to Angular Rust?
+### New to Angular Rust?
 
 Start learning about the framework by helping us improve our [documentation](https://angular-rust.github.io/). Pull requests which improve test coverage are also very welcome.
 
diff --git a/src/collumn.rs b/src/collumn.rs
index 2d71aae..e18e8f3 100644
--- a/src/collumn.rs
+++ b/src/collumn.rs
@@ -15,7 +15,7 @@ impl<'a> DataColumn<'a> {
     }
 }
 
-// pub struct DataColumnCollection<M, D> 
+// pub struct DataColumnCollection<M, D>
 // where
 //     M: fmt::Display,
 // {
@@ -23,12 +23,12 @@ impl<'a> DataColumn<'a> {
 //     // table: DataTable<'a, M, D>,
 // }
 
-// impl<M, D> DataColumnCollection<M, D> 
+// impl<M, D> DataColumnCollection<M, D>
 // where
 //     M: fmt::Display,
 // {
 //     pub fn new(table: &DataTable<M, D>) -> Self {
-      
+
 //         Self {
 //             // base: Default::default(),
 //             // table
@@ -36,7 +36,7 @@ impl<'a> DataColumn<'a> {
 //     }
 // }
 
-// impl<'a, M, D> DataCollectionBase<DataColumn<'a>> for DataColumnCollection<M, D> 
+// impl<'a, M, D> DataCollectionBase<DataColumn<'a>> for DataColumnCollection<M, D>
 // where
 //     M: fmt::Display,
 // {
@@ -166,4 +166,4 @@ impl<'a> DataColumn<'a> {
 //     // fn add2(&self, name: String, dtype: Type) {
 //     //     // add(DataColumn(name, dtype));
 //     // }
-// }
\ No newline at end of file
+// }
diff --git a/src/lib.rs b/src/lib.rs
index 2c8580a..cb290c6 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -2,6 +2,8 @@
 #![allow(unused_imports)]
 #![allow(dead_code)]
 
+#![doc(html_logo_url = "https://dudochkin-victor.github.io/assets/ux-dataflow/logo.svg")]
+
 use intmap::IntMap;
 use std::{collections::HashMap, fmt};
 
@@ -10,8 +12,8 @@ pub mod collumn;
 pub mod row;
 
 #[derive(Clone, Debug)]
-pub struct Channel<'a> {
-    pub name: &'a str,
+pub struct Channel {
+    pub name: String,
     pub tag: u8,
     pub visible: bool,
 }
@@ -95,12 +97,12 @@ impl fmt::Display for DataCollectionChangeRecord {
 pub trait TableEntity {}
 
 #[derive(Clone)]
-pub struct DataStream<'a, M, D>
+pub struct DataStream<M, D>
 where
     M: fmt::Display,
     D: fmt::Display + Copy,
 {
-    pub meta: Vec<Channel<'a>>,
+    pub meta: Vec<Channel>,
     // data is renamed to frames
     pub frames: Vec<DataFrame<M, D>>,
     // column_index_by_name: HashMap<String, usize>,
@@ -111,7 +113,7 @@ where
     // rowsChangeController: StreamController<DataCollectionChangeRecord>,
 }
 
-impl<'a, M, D> Default for DataStream<'a, M, D>
+impl<M, D> Default for DataStream<M, D>
 where
     M: fmt::Display,
     D: fmt::Display + Copy,
@@ -124,7 +126,7 @@ where
     }
 }
 
-impl<'a, M, D> DataStream<'a, M, D>
+impl<M, D> DataStream<M, D>
 where
     M: fmt::Display,
     D: fmt::Display + Copy,
@@ -140,7 +142,7 @@ where
     /// All values in each column are expected to be of the same type,
     /// and all rows are expected to have the same length.
     // data is optional
-    pub fn new(meta: Vec<Channel<'a>>, frames: Vec<DataFrame<M, D>>) -> Self {
+    pub fn new(meta: Vec<Channel>, frames: Vec<DataFrame<M, D>>) -> Self {
         // let data_table = DataTable {
         //     // column_index_by_name: Default::default(),
         //     // columns: None,
diff --git a/src/row.rs b/src/row.rs
index a4611be..934dd45 100644
--- a/src/row.rs
+++ b/src/row.rs
@@ -11,7 +11,7 @@ impl<T> TableEntity for DataRow<T> {}
 
 impl<T> DataRow<T> {
     /// Converts a column index or name to an index.
-    fn to_index(column_index_or_name: i64) -> i64 {
+    fn to_index(&self, column_index_or_name: i64) -> i64 {
         // if (columnIndexOrName is int) return columnIndexOrName;
         // return table.columnIndexByName[columnIndexOrName];
         unimplemented!()
@@ -217,4 +217,4 @@ impl<T> DataRow<T> {
 //     // fn insertAll(index: i64, iterable: Iterable) {
 //     //     // self.base.insertAll(index, iterable.map(toDataRow));
 //     // }
-// }
\ No newline at end of file
+// }
