diff --git a/app/build.gradle b/app/build.gradle
index 9d288c86..2f4d9f5a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -57,7 +57,7 @@ android {
 }
 
 dependencies {
-    implementation 'com.simplemobiletools:commons:5.31.0'
+    implementation 'com.simplemobiletools:commons:5.31.13'
     implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
     implementation 'androidx.documentfile:documentfile:1.0.1'
 
diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/notes/pro/activities/MainActivity.kt
index 2182001d..a9249eea 100644
--- a/app/src/main/kotlin/com/simplemobiletools/notes/pro/activities/MainActivity.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/notes/pro/activities/MainActivity.kt
@@ -1,9 +1,12 @@
 package com.simplemobiletools.notes.pro.activities
 
 import android.app.Activity
+import android.content.Context
 import android.content.Intent
 import android.net.Uri
 import android.os.Bundle
+import android.print.PrintAttributes
+import android.print.PrintManager
 import android.text.method.ArrowKeyMovementMethod
 import android.text.method.LinkMovementMethod
 import android.util.TypedValue
@@ -12,6 +15,9 @@ import android.view.Gravity
 import android.view.Menu
 import android.view.MenuItem
 import android.view.inputmethod.EditorInfo
+import android.webkit.WebResourceRequest
+import android.webkit.WebView
+import android.webkit.WebViewClient
 import android.widget.ImageView
 import android.widget.TextView
 import com.simplemobiletools.commons.dialogs.ConfirmationAdvancedDialog
@@ -175,6 +181,7 @@ class MainActivity : SimpleActivity() {
             R.id.import_folder -> openFolder()
             R.id.export_as_file -> tryExportAsFile()
             R.id.export_all_notes -> tryExportAllNotes()
+            R.id.print -> printText()
             R.id.delete_note -> displayDeleteNotePrompt()
             R.id.settings -> startActivity(Intent(applicationContext, SettingsActivity::class.java))
             R.id.about -> launchAbout()
@@ -842,6 +849,32 @@ class MainActivity : SimpleActivity() {
         }
     }
 
+    private fun printText() {
+        try {
+            val webView = WebView(this)
+            webView.webViewClient = object : WebViewClient() {
+                override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest) = false
+
+                override fun onPageFinished(view: WebView, url: String) {
+                    createWebPrintJob(view)
+                }
+            }
+
+            webView.loadData(getPrintableText(), "text/plain", "UTF-8")
+        } catch (e: Exception) {
+            showErrorToast(e)
+        }
+    }
+
+    private fun createWebPrintJob(webView: WebView) {
+        val jobName = mCurrentNote.title
+        val printAdapter = webView.createPrintDocumentAdapter(jobName)
+
+        (getSystemService(Context.PRINT_SERVICE) as? PrintManager)?.apply {
+            print(jobName, printAdapter, PrintAttributes.Builder().build())
+        }
+    }
+
     private fun getPagerAdapter() = view_pager.adapter as NotesPagerAdapter
 
     private fun getCurrentNoteText() = getPagerAdapter().getCurrentNoteViewText(view_pager.currentItem)
@@ -854,6 +887,18 @@ class MainActivity : SimpleActivity() {
         }
     }
 
+    private fun getPrintableText(): String {
+        return if (mCurrentNote.type == NoteType.TYPE_TEXT.value) {
+            getCurrentNoteText() ?: ""
+        } else {
+            var printableText = ""
+            getPagerAdapter().getNoteChecklistRawItems(view_pager.currentItem)?.forEach {
+                printableText += "${it.title}\n\n"
+            }
+            printableText
+        }
+    }
+
     private fun addTextToCurrentNote(text: String) = getPagerAdapter().appendText(view_pager.currentItem, text)
 
     private fun saveCurrentNote(force: Boolean) {
diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/NotesPagerAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/NotesPagerAdapter.kt
index 9e4180fe..051ebe1b 100644
--- a/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/NotesPagerAdapter.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/NotesPagerAdapter.kt
@@ -63,6 +63,8 @@ class NotesPagerAdapter(fm: FragmentManager, val notes: List<Note>, val activity
 
     fun saveAllFragmentTexts() = fragments.values.forEach { (it as? TextFragment)?.saveText(false) }
 
+    fun getNoteChecklistRawItems(position: Int) = (fragments[position] as? ChecklistFragment)?.items
+
     fun getNoteChecklistItems(position: Int) = (fragments[position] as? ChecklistFragment)?.checklistItems
 
     fun undo(position: Int) = (fragments[position] as? TextFragment)?.undo()
diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/pro/fragments/ChecklistFragment.kt b/app/src/main/kotlin/com/simplemobiletools/notes/pro/fragments/ChecklistFragment.kt
index 6dd056fd..6d311844 100644
--- a/app/src/main/kotlin/com/simplemobiletools/notes/pro/fragments/ChecklistFragment.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/notes/pro/fragments/ChecklistFragment.kt
@@ -26,11 +26,11 @@ import kotlinx.android.synthetic.main.fragment_checklist.view.*
 class ChecklistFragment : NoteFragment(), ChecklistItemsListener {
 
     private var noteId = 0L
-    private var items = ArrayList<ChecklistItem>()
     private var note: Note? = null
 
     lateinit var view: ViewGroup
 
+    var items = ArrayList<ChecklistItem>()
     val checklistItems get(): String = Gson().toJson(items)
 
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
diff --git a/app/src/main/res/menu/menu.xml b/app/src/main/res/menu/menu.xml
index b6e49a5a..6e04cb02 100644
--- a/app/src/main/res/menu/menu.xml
+++ b/app/src/main/res/menu/menu.xml
@@ -57,6 +57,10 @@
         android:id="@+id/export_all_notes"
         android:title="@string/export_all_notes"
         app:showAsAction="never"/>
+    <item
+        android:id="@+id/print"
+        android:title="@string/print"
+        app:showAsAction="never"/>
     <item
         android:id="@+id/delete_note"
         android:icon="@drawable/ic_delete_vector"