diff --git a/src/main/java/com/googlesource/gerrit/plugins/depends/on/InDependsOnOperator.java b/src/main/java/com/googlesource/gerrit/plugins/depends/on/InDependsOnOperator.java
new file mode 100644
index 0000000..c89d241
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/depends/on/InDependsOnOperator.java
@@ -0,0 +1,81 @@
+// Copyright (C) 2022 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.googlesource.gerrit.plugins.depends.on;
+
+import com.google.gerrit.entities.Change;
+import com.google.gerrit.exceptions.StorageException;
+import com.google.gerrit.index.query.PostFilterPredicate;
+import com.google.gerrit.index.query.Predicate;
+import com.google.gerrit.index.query.QueryParseException;
+import com.google.gerrit.server.query.change.ChangeData;
+import com.google.gerrit.server.query.change.ChangeQueryBuilder;
+import com.google.gerrit.server.query.change.ChangeQueryBuilder.ChangeOperatorFactory;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.stream.Collectors;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Singleton
+public class InDependsOnOperator implements ChangeOperatorFactory {
+  private static final Logger log = LoggerFactory.getLogger(InDependsOnOperator.class);
+
+  public class InDependsOnPredicate extends PostFilterPredicate<ChangeData> {
+    protected final Set<Change.Id> dependentChanges;
+
+    public InDependsOnPredicate(String value) {
+      super(InDependsOnOperator.FIELD, value);
+      Change.Id change = Change.Id.tryParse(value).get();
+      dependentChanges =
+          changeMessageStore.load(Change.Id.tryParse(value).get()).stream()
+              .map(d -> d.id())
+              .collect(Collectors.toSet());
+    }
+
+    @Override
+    public int getCost() {
+      return 1;
+    }
+
+    @Override
+    public boolean match(ChangeData changeData) throws StorageException {
+      return dependentChanges.contains(changeData.getId());
+    }
+  }
+
+  public static final String FIELD = "in";
+  protected final ChangeMessageStore changeMessageStore;
+
+  @Inject
+  public InDependsOnOperator(ChangeMessageStore changeMessageStore) {
+    this.changeMessageStore = changeMessageStore;
+  }
+
+  @Override
+  public Predicate<ChangeData> create(ChangeQueryBuilder builder, String value)
+      throws QueryParseException {
+    try {
+      return new InDependsOnPredicate(value);
+    } catch (NumberFormatException ex) {
+      throw new QueryParseException("Error in operator " + FIELD + ":" + value, ex);
+    } catch (StorageException ex) {
+      String message = "Error in operator " + FIELD + ":" + value;
+      log.error(message, ex);
+      throw new QueryParseException(message, ex);
+    }
+  }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/depends/on/Module.java b/src/main/java/com/googlesource/gerrit/plugins/depends/on/Module.java
index 10f0e1e..7736734 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/depends/on/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/depends/on/Module.java
@@ -18,6 +18,7 @@
 import com.google.gerrit.extensions.registration.DynamicSet;
 import com.google.gerrit.server.DynamicOptions.DynamicBean;
 import com.google.gerrit.server.events.EventListener;
+import com.google.gerrit.server.query.change.ChangeQueryBuilder.ChangeOperatorFactory;
 import com.google.gerrit.server.restapi.change.GetChange;
 import com.google.gerrit.server.restapi.change.QueryChanges;
 import com.google.gerrit.sshd.commands.Query;
@@ -26,6 +27,9 @@
 public class Module extends AbstractModule {
   @Override
   protected void configure() {
+    bind(ChangeOperatorFactory.class)
+        .annotatedWith(Exports.named(InDependsOnOperator.FIELD))
+        .to(InDependsOnOperator.class);
     DynamicSet.bind(binder(), EventListener.class).to(CoreListener.class);
     bind(DynamicBean.class)
         .annotatedWith(Exports.named(GetChange.class))
diff --git a/src/main/resources/Documentation/change-search-operators.md b/src/main/resources/Documentation/change-search-operators.md
new file mode 100644
index 0000000..2c18f6d
--- /dev/null
+++ b/src/main/resources/Documentation/change-search-operators.md
@@ -0,0 +1,11 @@
+Search Operators
+================
+
+**in_@PLUGIN@:<change>**
+
+: Returns "Depends-on" change dependencies specified in the comments of the provided change.
+
+**Operational Notes**:
+
+To use any operator of @PLUGIN@ plugin, change operator aliasing is needed since query parser
+cannot parse dash(-) in an operator.
diff --git a/test/docker/gerrit/Dockerfile b/test/docker/gerrit/Dockerfile
index 47e1636..dd42d7f 100755
--- a/test/docker/gerrit/Dockerfile
+++ b/test/docker/gerrit/Dockerfile
@@ -6,6 +6,8 @@
 USER root
 
 COPY artifacts/bin/ /tmp/
+COPY start.sh /
 RUN { [ -e /tmp/gerrit.war ] && cp /tmp/gerrit.war "$GERRIT_SITE/bin/gerrit.war" ; } || true
 
 USER gerrit
+ENTRYPOINT /start.sh
diff --git a/test/docker/gerrit/start.sh b/test/docker/gerrit/start.sh
new file mode 100755
index 0000000..c97894d
--- /dev/null
+++ b/test/docker/gerrit/start.sh
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+
+git config -f "$GERRIT_SITE/etc/gerrit.config" \
+    operator-alias.change.independson "in_depends-on"
+
+echo "Initializing Gerrit site ..."
+java -jar "$GERRIT_SITE/bin/gerrit.war" init -d "$GERRIT_SITE" --batch
+
+echo "Running Gerrit ..."
+exec "$GERRIT_SITE"/bin/gerrit.sh run
diff --git a/test/docker/run_tests/start.sh b/test/docker/run_tests/start.sh
index 8aea640..fdc3f32 100755
--- a/test/docker/run_tests/start.sh
+++ b/test/docker/run_tests/start.sh
@@ -36,4 +36,4 @@
 password $HTTP_PASSWD
 EOT
 
-./test_dependson.sh --server "$GERRIT_HOST" --project "$TEST_PROJECT"
+./test_plugin.sh --server "$GERRIT_HOST" --project "$TEST_PROJECT"
diff --git a/test/test_independson_operator.sh b/test/test_independson_operator.sh
new file mode 100755
index 0000000..858be00
--- /dev/null
+++ b/test/test_independson_operator.sh
@@ -0,0 +1,132 @@
+#!/usr/bin/env bash
+
+# This test relies on change operator aliasing for "in_depends-on" operator
+# since query parser is not able to parse dash(-) in depends-on
+# operator.
+# This test assumes that change operator aliasing for "in_depends-on" operator
+# is configured as follows :
+#
+#  [operator-alias "change"]
+#      independson = in_depends-on
+
+# run a gerrit ssh command
+gssh() { ssh -x -p "$PORT" "$SERVER" "$@" ; 2>&1 ; } # [args]...
+
+query() { gssh gerrit query --format=json "$@" | head -1 ; }
+
+q() { "$@" > /dev/null 2>&1 ; } # cmd [args...]  # quiet a command
+
+die() { echo -e "$@" ; exit 1 ; } # error_message
+
+mygit() { git -C "$REPO_DIR" "$@" ; } # [args...]
+
+# > uuid
+gen_uuid() { uuidgen | sha1sum | awk '{print $1}' ; }
+
+gen_commit_msg() { # msg > commit_msg
+    local msg=$1
+    echo "$msg
+
+Change-Id: I$(gen_uuid)"
+}
+
+get_change_num() { # < gerrit_push_response > changenum
+    local url=$(awk '$NF ~ /\[NEW\]/ { print $2 }')
+    echo "${url##*\/}" | tr -d -c '[:digit:]'
+}
+
+create_change() { # branch file [commit_message] > changenum
+    local branch=$1 tmpfile=$2 msg=$3 out rtn
+    local content=$RANDOM dest=refs/for/$branch
+
+    out=$(mygit fetch "$GITURL" "$branch" 2>&1) ||\
+       die "Failed to fetch $branch: $out"
+    out=$(mygit checkout FETCH_HEAD 2>&1) ||\
+       die "Failed to checkout $branch: $out"
+
+    echo -e "$content" > "$tmpfile"
+
+    out=$(mygit add "$tmpfile" 2>&1) || die "Failed to git add: $out"
+
+    msg=$(gen_commit_msg "Add $tmpfile")
+
+    out=$(mygit commit -m "$msg" 2>&1) ||\
+        die "Failed to commit change: $out"
+    [ -n "$VERBOSE" ] && echo "  commit:$out" >&2
+
+    out=$(mygit push "$GITURL" "HEAD:$dest" 2>&1) ||\
+        die "Failed to push change: $out"
+    out=$(echo "$out" | get_change_num) ; rtn=$? ; echo "$out"
+    [ -n "$VERBOSE" ] && echo "  change:$out" >&2
+    return $rtn
+}
+
+# ------------------------- Usage ---------------------------
+
+usage() { # [error_message]
+    cat <<-EOF
+Usage: $MYPROG [-s|--server <server>] [-p|--project <project>]
+             [-r|--srcref <ref branch>] [-h|--help]
+
+       -h|--help                 usage/help
+       -s|--server <server>      server to use for the test (default: localhost)
+       -p|--project <project>    git project to use (default: project0)
+       -r|--srcref <ref branch>  reference branch used to create changes (default: master)
+EOF
+
+    [ -n "$1" ] && echo -e '\n'"ERROR: $1"
+    exit 1
+}
+
+parseArgs() {
+    SERVER="localhost"
+    PROJECT="tools/test/project0"
+    SRC_REF_BRANCH="master"
+    while (( "$#" )) ; do
+        case "$1" in
+            --server|-s)  shift; SERVER=$1 ;;
+            --project|-p) shift; PROJECT=$1 ;;
+            --srcref|-r)  shift; SRC_REF_BRANCH=$1 ;;
+            --help|-h)    usage ;;
+            --verbose|-v) VERBOSE=$1 ;;
+            *)            usage "invalid argument '$1'" ;;
+        esac
+        shift
+    done
+
+    [ -n "$SERVER" ]     || usage "server not set"
+    [ -n "$PROJECT" ]    || usage "project not set"
+    [ -n "$SRC_REF_BRANCH" ] || usage "source ref branch not set"
+}
+
+MYPROG=$(basename "$0")
+MYDIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
+
+source "$MYDIR/lib_result.sh"
+PORT=29418
+
+parseArgs "$@"
+
+TEST_DIR="$MYDIR/../target/test"
+rm -rf "$TEST_DIR"
+mkdir -p "$TEST_DIR"
+
+GITURL=ssh://"$SERVER:$PORT/$PROJECT"
+
+SRC_REF="$SRC_REF_BRANCH"
+echo "$SRC_REF_BRANCH" | grep -q '^refs/' || SRC_REF=refs/heads/"$SRC_REF_BRANCH"
+
+REPO_DIR="$TEST_DIR/"repo
+q git init "$REPO_DIR"
+FILE_A="$REPO_DIR"/fileA
+
+# ------------------------- Depends-on Test ---------------------------
+DEPENDENT_CHANGE=$(create_change "$SRC_REF_BRANCH" "$FILE_A") || \
+    die "Failed to create change on project: $PROJECT branch: $SRC_REF_BRANCH"
+CHANGE=$(create_change "$SRC_REF_BRANCH" "$FILE_A") || \
+    die "Failed to create change on project: $PROJECT branch: $SRC_REF_BRANCH"
+gssh gerrit review --message \'"Depends-on: $DEPENDENT_CHANGE"\' "$CHANGE",1
+EXPECTED="$(query "$DEPENDENT_CHANGE" | jq --raw-output '.number')"
+ACTUAL="$(query "independson:$CHANGE" | jq --raw-output '.number')"
+result_out "independson operator" "$EXPECTED" "$ACTUAL"
+exit $RESULT
diff --git a/test/test_plugin.sh b/test/test_plugin.sh
new file mode 100755
index 0000000..1e51096
--- /dev/null
+++ b/test/test_plugin.sh
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+
+readlink -f / &> /dev/null || readlink() { greadlink "$@" ; } # for MacOS
+CUR_DIR=$(dirname -- "$(readlink -f -- "$0")")
+
+RESULT=0
+"$CUR_DIR"/test_dependson.sh "$@" || RESULT=1
+"$CUR_DIR"/test_independson_operator.sh "$@" || RESULT=1
+
+exit $RESULT
\ No newline at end of file
