diff --git a/kernels_cleaner.py b/kernels_cleaner.py
index 315ea0a9e6b7cc7be7a4f4bcea3c87b0ec6f16db..14466b2aa6cf5b51771553e18bad97dafdda4643 100755
--- a/kernels_cleaner.py
+++ b/kernels_cleaner.py
@@ -32,10 +32,10 @@ def clean_kernels():
         log(RED + 'Failed to get sudo right.' + DEFAULT, error=True)
         return 1
     # list installed kernels
-    p = subprocess.Popen('sudo dpkg --get-selections | grep linux', stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
+    p = subprocess.Popen('sudo dpkg --get-selections| grep -v -- -generic | grep linux', stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
     out, err = p.communicate()
-    out = str(out, 'utf-8') if out else ''
-    err = str(err, 'utf-8') if err else ''
+    out = out.decode('utf-8') if out else ''
+    err = err.decode('utf-8') if err else ''
     if p.returncode != 0:
         log(RED + 'Failed to list kernels.' + DEFAULT + '\nOut: ' + out + '\nErr: ' + err, error=True)
         return 1
@@ -55,8 +55,8 @@ def clean_kernels():
     # get current kernel
     p = subprocess.Popen('uname -a', stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
     out, err = p.communicate()
-    out = str(out, 'utf-8') if out else ''
-    err = str(err, 'utf-8') if err else ''
+    out = out.decode('utf-8') if out else ''
+    err = err.decode('utf-8') if err else ''
     if p.returncode != 0:
         log(RED + 'Failed to get current kernel.' + DEFAULT + '\nOut: ' + out + '\nErr: ' + err, error=True)
         return 1