diff --git a/api/_auth.php b/api/_auth.php
index 6b9b4b7..7e7ca13 100644
--- a/api/_auth.php
+++ b/api/_auth.php
@@ -4,6 +4,18 @@ require_once("_db.php"); //("api/_db.php");
 
 
 
+// End currently active session
+function EndSession () {
+	session_unset();
+	session_destroy();
+	if (isset($_COOKIE["PHPSESSID"])) {
+		unset($_COOKIE["PHPSESSID"]);
+		setcookie("PHPSESSID", "", time() - 3600, "/");
+	}
+}
+
+
+
 //session_start();
 // This ^ should be placed at login stage
 
@@ -15,23 +27,14 @@ if (isset($_SESSION["userid"])) {
 	$s->bind_param("s", $_SESSION["userid"]);
 	$s->execute();
 	if (!(bool)$s->get_result()->fetch_assoc()) { // If not, then destroy session
-		session_unset();
-		session_destroy();
+		EndSession();
 		echo "user id does not exist";
 		die("user id used in session does not exist");
 	}
 	$LOGGED_IN = true;
 } else {
-	// ATTENTION: idk will this work, but this can be theoretically unsafe or cause fault
-
 	if (session_status()) {
-		session_unset();
-		session_destroy();
-	}
-
-	if (isset($_COOKIE["PHPSESSID"])) {
-		unset($_COOKIE["PHPSESSID"]);
-		setcookie("PHPSESSID", "", time() - 3600, "/");
+		EndSession();
 	}
 }
 
diff --git a/api/_errors.php b/api/_errors.php
index 867a2a2..5a8bdfe 100644
--- a/api/_errors.php
+++ b/api/_errors.php
@@ -2,6 +2,7 @@
 
 // Internal errors
 $Err_Int_JSONEncode     = "int.jsonencode";     // Failed to encode JSON data
+$Err_Int_Unexpected     = "int.unexpected";     // Unexpected result
 
 // Request data parsing errors
 $Err_RDP_InvalidID      = "rdp.invalidid";      // Requested ID of resource is invalid
@@ -11,5 +12,5 @@ $Err_RDP_InvalidArgs    = "rdp.invalidargs";    // Invalid arguments supplied to
 $Err_DP_IDNotFound      = "dp.idnotfound";      // Resource not found by requested ID
 $Err_DP_AlreadyLoggedIn = "dp.alreadyloggedin"; // User already logged into account
 $Err_DP_RegClosed       = "dp.regclosed";       // Registration is closed
-$Err_DP_NotEnoughRole = "dp.notenoughrole"
+$Err_DP_NotEnoughRole   = "dp.notenoughrole";   // Power level is not enough for performing action
 ?>
\ No newline at end of file
diff --git a/api/user/create.php b/api/user/create.php
index aba94d8..2039f8f 100644
--- a/api/user/create.php
+++ b/api/user/create.php
@@ -69,9 +69,11 @@ if (ThisFileIsRequested(__FILE__)) {
 			ReturnJSONError($Err_RDP_InvalidArgs, "only allowed symbols are: " . $Config["registration"]["allowed_syms"]);
 		}
 
+		// Check if login already exists
 		if (User_LoginExist($login))
 			ReturnJSONError($Err_RDP_InvalidArgs, "login already exists");
 
+		// Create account
 		$result = User_Create($login, $password, $email, $invite);
 		ReturnJSONData(["success" => $result]);
 	} else { // Not enough arguments
diff --git a/api/user/delete.php b/api/user/delete.php
index 8af9ef7..e020a7b 100644
--- a/api/user/delete.php
+++ b/api/user/delete.php
@@ -3,32 +3,36 @@ require_once("../_auth.php");
 require_once("../_utils.php");
 require_once("./index.php");
 
-function User_Delete($id){
-  global $db;
-  $s = $db->prepare("delete from users where id = $id");
-  $s->bind_param("s",$id);
-  return $s->execute() !== false;
+
+
+// Delete existing account
+function User_Delete ($id) {
+	global $db;
+	$s = $db->prepare("delete from users where id = $id");
+	$s->bind_param("s", $id);
+	return $s->execute() !== false;
 }
 
+
+
 if (ThisFileIsRequested(__FILE__)) {
 	require_once("../_json.php");
 	
-if (isset($_REQUEST["id"])) {
+	if (isset($_REQUEST["id"]) && $LOGGED_IN) {
 		if (!ctype_digit($_REQUEST["id"]))
 			ReturnJSONError($Err_RDP_InvalidID, "id must be numeric");
-     if(!User_HasRole("admin")){
-	    ReturnJSONError($Err_DP_NotEnoughRole,"You need to be admin to delete other accounts");
-	  }
 		$UserID = intval($_REQUEST["id"]);
+	} elseif (!isset($_REQUEST["id"]) && $LOGGED_IN) {
+		$UserID = $_SESSION["userid"];
 	} else {
-		if ($LOGGED_IN)
-			$UserID = $_SESSION["userid"];
-		else
-			ReturnJSONError($Err_RDP_InvalidID, "id must be specified or valid session must be provided");
-	}
-	  $result = User_Delete($UserID);
-	  session_unset();
-	  session_destroy();
-    ReturnJSONData(["success" => $result]);
+		ReturnJSONError($Err_RDP_InvalidID, "valid session must be provided");
 	}
+
+	if (!User_HasRole($_SESSION["userid"], "admin") && $_SESSION["userid"] !== $UserID)
+		ReturnJSONError($Err_DP_NotEnoughRole, "you need to be admin to delete other accounts");
+
+	$result = User_Delete($UserID);
+	EndSession();
+	ReturnJSONData(["success" => $result]);
+}
 ?>
\ No newline at end of file
diff --git a/api/user/index.php b/api/user/index.php
index e85b47d..fa0e109 100644
--- a/api/user/index.php
+++ b/api/user/index.php
@@ -17,7 +17,7 @@ function User_LoginExist ($login): bool {
 }
 
 // Check if user has specified role
-function User_HasRole ($id, $role): bool {
+function User_HasRole ($id, $role) {
 	global $db;
 
 	$s = $db->prepare("SELECT * FROM users WHERE id = ?");
@@ -32,6 +32,7 @@ function User_HasRole ($id, $role): bool {
 	if ($d["role"] == $role) {
 		return true;
 	}
+
 	return false;
 }
 
diff --git a/docs/API.md b/docs/API.md
index 184d3f4..efb67f1 100644
--- a/docs/API.md
+++ b/docs/API.md
@@ -29,7 +29,7 @@ Files starting from "_" ("_example.php") are intended for internal use only.
 - [ ] user/list.php (GET/POST):            get list of all users
 - [ ] user/create.php (POST):              create new user account
 - [ ] user/edit.php (POST):                edit user profile
-- [ ] user/delete.php (POST):              delete user account
+- [x] user/delete.php (POST):              delete user account
 
 - [ ] post/ (GET/POST):                    get single post by id
 - [ ] post/search.php (GET/POST):          get list of posts matching the criteria