diff --git a/README.md b/README.md
index db3799fba03997b195485d9ded899f3d901dca37..284bd5b7b8cc06ca170e1c037ff8994c96780dfa 100644
--- a/README.md
+++ b/README.md
@@ -118,7 +118,7 @@ Note: Upstart/SysV init based OS types are not supported.
   - [etcd](https://github.com/coreos/etcd) v3.3.12
   - [docker](https://www.docker.com/) v18.06 (see note)
   - [containerd](https://containerd.io/) v1.2.13
-  - [cri-o](http://cri-o.io/) v1.14.0 (experimental: see [CRI-O Note](docs/cri-o.md). Only on centos based OS)
+  - [cri-o](http://cri-o.io/) v1.17 (experimental: see [CRI-O Note](docs/cri-o.md). Only on fedora, ubuntu and centos based OS)
 - Network Plugin
   - [cni-plugins](https://github.com/containernetworking/plugins) v0.8.5
   - [calico](https://github.com/projectcalico/calico) v3.13.2
diff --git a/roles/container-engine/cri-o/defaults/main.yml b/roles/container-engine/cri-o/defaults/main.yml
index 429168ecf0ee8f77614836d542bcf0b5f9d5ff33..dd75ec4fe13d3463d955802b4052434da291574b 100644
--- a/roles/container-engine/cri-o/defaults/main.yml
+++ b/roles/container-engine/cri-o/defaults/main.yml
@@ -5,4 +5,4 @@ crio_seccomp_profile: "/etc/crio/seccomp.json"
 
 crio_cgroup_manager: "{{ kubelet_cgroup_driver | default('cgroupfs') }}"
 
-crio_runc_path: "/usr/sbin/runc"
\ No newline at end of file
+crio_runc_path: "/usr/sbin/runc"
diff --git a/roles/container-engine/cri-o/tasks/crio_repo.yml b/roles/container-engine/cri-o/tasks/crio_repo.yml
new file mode 100644
index 0000000000000000000000000000000000000000..9518e00ecc85484dc3b26c928baab655b0a2cb39
--- /dev/null
+++ b/roles/container-engine/cri-o/tasks/crio_repo.yml
@@ -0,0 +1,34 @@
+---
+
+- name: Add CRI-O kubic repo key
+  apt_key:
+    url: "https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/x{{ ansible_distribution }}_{{ ansible_distribution_version }}/Release.key"
+    state: present
+  when: ansible_distribution in ["Ubuntu"]
+
+- name: Add CRI-O kubic repo
+  apt_repository:
+    repo: "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/x{{ ansible_distribution }}_{{ ansible_distribution_version }}/ /"
+    state: present
+    filename: devel:kubic:libcontainers:stable
+  when: ansible_distribution in ["Ubuntu"]
+
+- name: Add CRI-O OpenShift Origin repository
+  yum_repository:
+    name: origin
+    description: OpenShift Origin Repo
+    baseurl: "{{ crio_rhel_repo_base_url }}"
+    gpgcheck: no
+  when: ansible_distribution in ["CentOS","RedHat","OracleLinux"] and not is_ostree
+
+- name: Enable modular repos for crio
+  ini_file:
+    path: "/etc/yum.repos.d/{{ item }}.repo"
+    section: "{{ item }}"
+    option: enabled
+    value: 1
+  become: true
+  when: ansible_distribution in ["Fedora"]
+  loop:
+    - "fedora-updates-modular"
+    - "fedora-modular"
diff --git a/roles/container-engine/cri-o/tasks/main.yaml b/roles/container-engine/cri-o/tasks/main.yaml
index c6ed04088bf8b8498c1a32e20d02f32ed294582a..6ffc259e41f6ae77d21c09581c60eea7bbd398ec 100644
--- a/roles/container-engine/cri-o/tasks/main.yaml
+++ b/roles/container-engine/cri-o/tasks/main.yaml
@@ -27,28 +27,9 @@
   tags:
     - facts
 
-- name: Add OpenShift Origin repository
-  yum_repository:
-    name: origin
-    description: OpenShift Origin Repo
-    baseurl: "{{ crio_rhel_repo_base_url }}"
-    gpgcheck: no
-  when: ansible_distribution in ["CentOS","RedHat","OracleLinux"] and not is_ostree
-
-- name: Add CRI-O PPA
-  apt_repository:
-    repo: ppa:projectatomic/ppa
-    state: present
-  when: ansible_distribution in ["Ubuntu"]
-
-- include_tasks: "crictl.yml"
+- import_tasks: "crio_repo.yml"
 
-- name: Install crictl
-  unarchive:
-    src: "{{ local_release_dir }}/crictl-{{ crictl_version }}-linux-{{ image_arch }}.tar.gz"
-    dest: "/usr/local/bin"
-    mode: 0755
-    remote_src: yes
+- import_tasks: "crictl.yml"
 
 - name: Make sure needed folders exist in the system
   with_items:
@@ -73,20 +54,6 @@
   register: need_bootstrap_crio
   when: is_ostree
 
-- name: Enable modular repos for crio
-  ini_file:
-    path: "/etc/yum.repos.d/{{ item }}.repo"
-    section: "{{ item }}"
-    option: enabled
-    value: 1
-  become: true
-  when:
-    - is_ostree
-    - not need_bootstrap_crio.stat.exists
-  loop:
-    - "fedora-updates-modular"
-    - "fedora-modular"
-
 - name: Install cri-o packages with osttree
   command: "rpm-ostree install {{ crio_packages|join(' ') }}"
   when:
diff --git a/roles/container-engine/cri-o/vars/ubuntu.yml b/roles/container-engine/cri-o/vars/ubuntu.yml
index bed9659ab63cae3659a52dbda7a9f07a828c7d97..3bccbe3efb346c9e9cef614a738fe868c01717bb 100644
--- a/roles/container-engine/cri-o/vars/ubuntu.yml
+++ b/roles/container-engine/cri-o/vars/ubuntu.yml
@@ -1,6 +1,11 @@
 ---
+crio_kubic_versions:
+  "1.18": "1.17"
+  "1.17": "1.17"
+  "1.16": "1.16"
+
 crio_packages:
-  - "cri-o-1.15"
+  - "cri-o-{{ crio_kubic_versions[ kube_version | regex_replace('^v(?P<major>\\d+).(?P<minor>\\d+).(?P<patch>\\d+)$', '\\g<major>.\\g<minor>') ] | default('1.17') }}"
 
 crio_conmon: /usr/bin/conmon
 crio_seccomp_profile: ""