diff --git a/sway/criteria.c b/sway/criteria.c
index fd1ea64b..5c305193 100644
--- a/sway/criteria.c
+++ b/sway/criteria.c
@@ -204,7 +204,12 @@ static char *generate_regex(regex_t **regex, char *value) {
 	return NULL;
 }
 
-// Pouplate list with crit_tokens extracted from criteria string, returns error
+// Test whether the criterion corresponds to the currently focused window
+static bool crit_is_focused(const char *value) {
+	return !strcmp(value, "focused") || !strcmp(value, "__focused__");
+}
+
+// Populate list with crit_tokens extracted from criteria string, returns error
 // string or NULL if successful.
 char *extract_crit_tokens(list_t *tokens, const char * const criteria) {
 	int argc;
@@ -220,7 +225,7 @@ char *extract_crit_tokens(list_t *tokens, const char * const criteria) {
 		if ((error = parse_criteria_name(&token->type, name))) {
 			free_crit_token(token);
 			goto ect_cleanup;
-		} else if (token->type == CRIT_URGENT || strcmp(value, "focused") == 0) {
+		} else if (token->type == CRIT_URGENT || crit_is_focused(value)) {
 			sway_log(L_DEBUG, "%s -> \"%s\"", name, value);
 			list_add(tokens, token);
 		} else if((error = generate_regex(&token->regex, value))) {
@@ -249,7 +254,7 @@ static bool criteria_test(swayc_t *cont, list_t *tokens) {
 		case CRIT_CLASS:
 			if (!cont->class) {
 				// ignore
-			} else if (strcmp(crit->raw, "focused") == 0) {
+			} else if (crit_is_focused(crit->raw)) {
 				swayc_t *focused = get_focused_view(&root_container);
 				if (focused->class && strcmp(cont->class, focused->class) == 0) {
 					matches++;
@@ -280,7 +285,7 @@ static bool criteria_test(swayc_t *cont, list_t *tokens) {
 		case CRIT_TITLE:
 			if (!cont->name) {
 				// ignore
-			} else if (strcmp(crit->raw, "focused") == 0) {
+			} else if (crit_is_focused(crit->raw)) {
 				swayc_t *focused = get_focused_view(&root_container);
 				if (focused->name && strcmp(cont->name, focused->name) == 0) {
 					matches++;
@@ -300,7 +305,7 @@ static bool criteria_test(swayc_t *cont, list_t *tokens) {
 			swayc_t *cont_ws = swayc_parent_by_type(cont, C_WORKSPACE);
 			if (!cont_ws || !cont_ws->name) {
 				// ignore
-			} else if (strcmp(crit->raw, "focused") == 0) {
+			} else if (crit_is_focused(crit->raw)) {
 				swayc_t *focused_ws = swayc_active_workspace();
 				if (focused_ws->name && strcmp(cont_ws->name, focused_ws->name) == 0) {
 					matches++;