diff --git a/plugins/af_psql_trgm/init.php b/plugins/af_psql_trgm/init.php
index 20e3981cef67d58d2f720c9b09f904741f18fa7c..a38386d5bc0f6f673825f12b5a11b49e17fdc279 100644
--- a/plugins/af_psql_trgm/init.php
+++ b/plugins/af_psql_trgm/init.php
@@ -3,6 +3,8 @@ class Af_Psql_Trgm extends Plugin {
 
 	/* @var PluginHost $host */
 	private $host;
+	private $default_similarity = 0.75;
+	private $default_min_length = 32;
 
 	function about() {
 		return array(1.0,
@@ -37,7 +39,6 @@ class Af_Psql_Trgm extends Plugin {
 		$host->add_hook($host::HOOK_PREFS_EDIT_FEED, $this);
 		$host->add_hook($host::HOOK_PREFS_SAVE_FEED, $this);
 		$host->add_hook($host::HOOK_ARTICLE_BUTTON, $this);
-
 	}
 
 	function get_js() {
@@ -124,7 +125,7 @@ class Af_Psql_Trgm extends Plugin {
 		if ($args != "prefFeeds") return;
 
 		print "<div dojoType=\"dijit.layout.AccordionPane\"
-			title=\"<i class='material-icons'>extension</i> ".__('Mark similar articles as read')."\">";
+			title=\"<i class='material-icons'>extension</i> ".__('Mark similar articles as read (af_psql_trgm)')."\">";
 
 		if (DB_TYPE != "pgsql") {
 			print_error("Database type not supported.");
@@ -132,17 +133,14 @@ class Af_Psql_Trgm extends Plugin {
 
 			$res = $this->pdo->query("select 'similarity'::regproc");
 
-			if (!$res->fetch()) {
+			if (!$res || !$res->fetch()) {
 				print_error("pg_trgm extension not found.");
 			}
 
-			$similarity = $this->host->get($this, "similarity");
-			$min_title_length = $this->host->get($this, "min_title_length");
+			$similarity = $this->host->get($this, "similarity", $this->default_similarity);
+			$min_title_length = $this->host->get($this, "min_title_length", $this->default_min_length);
 			$enable_globally = $this->host->get($this, "enable_globally");
 
-			if (!$similarity) $similarity = '0.75';
-			if (!$min_title_length) $min_title_length = '32';
-
 			print "<form dojoType=\"dijit.form.Form\">";
 
 			print "<script type=\"dojo/method\" event=\"onSubmit\" args=\"evt\">
@@ -197,10 +195,10 @@ class Af_Psql_Trgm extends Plugin {
 			print_button("submit", __("Save"), "class='alt-primary'");
 			print "</form>";
 
-			$enabled_feeds = $this->host->get($this, "enabled_feeds");
-			if (!array($enabled_feeds)) $enabled_feeds = array();
+			/* cleanup */
+			$enabled_feeds = $this->filter_unknown_feeds(
+				$this->get_stored_array("enabled_feeds"));
 
-			$enabled_feeds = $this->filter_unknown_feeds($enabled_feeds);
 			$this->host->set($this, "enabled_feeds", $enabled_feeds);
 
 			if (count($enabled_feeds) > 0) {
@@ -221,14 +219,11 @@ class Af_Psql_Trgm extends Plugin {
 	}
 
 	function hook_prefs_edit_feed($feed_id) {
-		print "<header>".__("Similarity (pg_trgm)")."</header>";
+		print "<header>".__("Similarity (af_psql_trgm)")."</header>";
 		print "<section>";
 
-		$enabled_feeds = $this->host->get($this, "enabled_feeds");
-		if (!array($enabled_feeds)) $enabled_feeds = array();
-
-		$key = array_search($feed_id, $enabled_feeds);
-		$checked = $key !== false ? "checked" : "";
+		$enabled_feeds = $this->get_stored_array("enabled_feeds");
+		$checked = in_array($feed_id, $enabled_feeds) ? "checked" : "";
 
 		print "<fieldset>";
 
@@ -241,8 +236,7 @@ class Af_Psql_Trgm extends Plugin {
 	}
 
 	function hook_prefs_save_feed($feed_id) {
-		$enabled_feeds = $this->host->get($this, "enabled_feeds");
-		if (!is_array($enabled_feeds)) $enabled_feeds = array();
+		$enabled_feeds = $this->get_stored_array("enabled_feeds");
 
 		$enable = checkbox_to_sql_bool($_POST["trgm_similarity_enabled"]);
 		$key = array_search($feed_id, $enabled_feeds);
@@ -265,29 +259,39 @@ class Af_Psql_Trgm extends Plugin {
 		if (DB_TYPE != "pgsql") return $article;
 
 		$res = $this->pdo->query("select 'similarity'::regproc");
-		if (!$res->fetch()) return $article;
+		if (!$res || !$res->fetch()) return $article;
 
 		$enable_globally = $this->host->get($this, "enable_globally");
 
-		if (!$enable_globally) {
-			$enabled_feeds = $this->host->get($this, "enabled_feeds");
-			$key = array_search($article["feed"]["id"], $enabled_feeds);
-			if ($key === false) return $article;
+		if (!$enable_globally &&
+				!in_array($article["feed"]["id"],
+					$this->get_stored_array("enabled_feeds"))) {
+
+			return $article;
 		}
 
-		$similarity = (float) $this->host->get($this, "similarity");
-		if ($similarity < 0.01) return $article;
+		$similarity = (float) $this->host->get($this, "similarity", $this->default_similarity);
 
-		$min_title_length = (int) $this->host->get($this, "min_title_length");
-		if (mb_strlen($article["title"]) < $min_title_length) return $article;
+		if ($similarity < 0.01) {
+			Debug::log("af_psql_trgm: similarity is set too low ($similarity)", Debug::$LOG_EXTENDED);
+			return $article;
+		}
+
+		$min_title_length = (int) $this->host->get($this, "min_title_length", $this->default_min_length);
+
+		if (mb_strlen($article["title"]) < $min_title_length) {
+			Debug::log("af_psql_trgm: article title is too short (min: $min_title_length)", Debug::$LOG_EXTENDED);
+			return $article;
+		}
 
 		$owner_uid = $article["owner_uid"];
 		$entry_guid = $article["guid_hashed"];
 		$title_escaped = $article["title"];
 
 		// trgm does not return similarity=1 for completely equal strings
+		// this seems to be no longer the case (fixed in upstream?)
 
-		$sth = $this->pdo->prepare("SELECT COUNT(id) AS nequal
+		/* $sth = $this->pdo->prepare("SELECT COUNT(id) AS nequal
 		  FROM ttrss_entries, ttrss_user_entries WHERE ref_id = id AND
 		  date_entered >= NOW() - interval '3 days' AND
 		  title = ? AND
@@ -303,7 +307,7 @@ class Af_Psql_Trgm extends Plugin {
 		if ($nequal != 0) {
 			$article["force_catchup"] = true;
 			return $article;
-		}
+		} */
 
 		$sth = $this->pdo->prepare("SELECT MAX(SIMILARITY(title, ?)) AS ms
 		  FROM ttrss_entries, ttrss_user_entries WHERE ref_id = id AND
@@ -315,14 +319,15 @@ class Af_Psql_Trgm extends Plugin {
 		$row = $sth->fetch();
 		$similarity_result = $row['ms'];
 
-		Debug::log("af_psql_trgm: similarity result: $similarity_result", Debug::$LOG_EXTENDED);
+		Debug::log("af_psql_trgm: similarity result for $title_escaped: $similarity_result", Debug::$LOG_EXTENDED);
 
 		if ($similarity_result >= $similarity) {
+			Debug::log("af_psql_trgm: marking article as read ($similarity_result >= $similarity)", Debug::$LOG_EXTENDED);
+
 			$article["force_catchup"] = true;
 		}
 
 		return $article;
-
 	}
 
 	function api_version() {
@@ -345,4 +350,13 @@ class Af_Psql_Trgm extends Plugin {
 		return $tmp;
 	}
 
+	private function get_stored_array($name) {
+		$tmp = $this->host->get($this, $name);
+
+		if (!is_array($tmp)) $tmp = [];
+
+		return $tmp;
+	}
+
+
 }