diff --git a/api/index.php b/api/index.php
index d85a1103c06b248399f0778018309f4bd4ec129f..430082f169f15835807ce0c0db26a725065d780d 100644
--- a/api/index.php
+++ b/api/index.php
@@ -23,7 +23,7 @@
 
 	if (!empty($_REQUEST["sid"])) {
 		session_id($_REQUEST["sid"]);
-		@session_start();
+		session_start();
 	}
 
 	startup_gettext();
diff --git a/classes/api.php b/classes/api.php
index 7ca8ec8baff3f0f4ed522c5bae0d53848fd16b39..3c6795327b0b62842fc11402159af68b27dc6697 100755
--- a/classes/api.php
+++ b/classes/api.php
@@ -59,8 +59,12 @@ class API extends Handler {
 	}
 
 	function login() {
-		@session_destroy();
-		@session_start();
+
+		if (session_status() == PHP_SESSION_ACTIVE) {
+			session_destroy();
+		}
+
+		session_start();
 
 		$login = clean($_REQUEST["user"]);
 		$password = clean($_REQUEST["password"]);
diff --git a/classes/handler/public.php b/classes/handler/public.php
index cc5d3507959f8070ed28bc9f49632874f1cb5bd9..bf0160db6d738973177d840c200314eef8eeab2d 100755
--- a/classes/handler/public.php
+++ b/classes/handler/public.php
@@ -390,7 +390,8 @@ class Handler_Public extends Handler {
 			} else {
 
 				// start an empty session to deliver login error message
-				@session_start();
+				if (session_status() != PHP_SESSION_ACTIVE)
+					session_start();
 
 				if (!isset($_SESSION["login_error_msg"]))
 					$_SESSION["login_error_msg"] = __("Incorrect username or password");
diff --git a/classes/userhelper.php b/classes/userhelper.php
index d46d75bf4c4655a2c03adcac12384f80cd7c5042..8d9d483a8a279efd4143ecc03551f3454322c526 100644
--- a/classes/userhelper.php
+++ b/classes/userhelper.php
@@ -87,7 +87,9 @@ class UserHelper {
 		$pdo = Db::pdo();
 
 		if (Config::get(Config::SINGLE_USER_MODE)) {
-			@session_start();
+			if (session_status() != PHP_SESSION_ACTIVE)
+					session_start();
+
 			self::authenticate("admin", null);
 			startup_gettext();
 			self::load_user_plugins($_SESSION["uid"]);
diff --git a/include/functions.php b/include/functions.php
index 9b56613837f809d065fbc1c8908b3f371716f869..746f8d39e44985f7630e5e68b3646f1332883afc 100644
--- a/include/functions.php
+++ b/include/functions.php
@@ -305,22 +305,14 @@
 		return $s ? 1 : 0;
 	}
 
-	// Session caching removed due to causing wrong redirects to upgrade
-	// script when get_schema_version() is called on an obsolete session
-	// created on a previous schema version.
-	function get_schema_version($nocache = false) {
-		global $schema_version;
-
+	function get_schema_version() {
 		$pdo = Db::pdo();
 
-		if (!$schema_version && !$nocache) {
-			$row = $pdo->query("SELECT schema_version FROM ttrss_version")->fetch();
-			$version = $row["schema_version"];
-			$schema_version = $version;
-			return $version;
-		} else {
-			return $schema_version;
-		}
+		$row = $pdo->query("SELECT schema_version FROM ttrss_version")->fetch();
+		$version = $row["schema_version"];
+		$schema_version = $version;
+
+		return $version;
 	}
 
 	function file_is_locked($filename) {
diff --git a/include/sessions.php b/include/sessions.php
index d4f21d8cdbcea2e4d9e78f5dec6fe8d02a0ecf92..23815e18216dc45cf51acc0939c2481e63fb335a 100644
--- a/include/sessions.php
+++ b/include/sessions.php
@@ -152,6 +152,7 @@
 
 	if (!defined('NO_SESSION_AUTOSTART')) {
 		if (isset($_COOKIE[session_name()])) {
-			@session_start();
+			if (session_status() != PHP_SESSION_ACTIVE)
+					session_start();
 		}
 	}