diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/file/DeclarationAssembler.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/file/DeclarationAssembler.java
index 2cea656..0b38335 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/file/DeclarationAssembler.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/file/DeclarationAssembler.java
@@ -31,18 +31,10 @@
  */
 public class DeclarationAssembler {
   private final DeclarationConsumer declarationConsumer;
-  private final SeparatorFinder separatorFinder;
 
-  /**
-   * @param declarationConsumer delegate declaration consumer for actual processing / parsing
-   * @param separatorFinder callback used to determine if two fragments should be separate
-   *     declarations (in the Ninja case, if the new line starts with a space, it should be treated
-   *     as a part of the previous declaration, i.e. the separator is longer then one symbol).
-   */
-  public DeclarationAssembler(
-      DeclarationConsumer declarationConsumer, SeparatorFinder separatorFinder) {
+  /** @param declarationConsumer delegate declaration consumer for actual processing / parsing */
+  public DeclarationAssembler(DeclarationConsumer declarationConsumer) {
     this.declarationConsumer = declarationConsumer;
-    this.separatorFinder = separatorFinder;
   }
 
   /**
@@ -113,7 +105,8 @@
     int previousEnd = 0;
     for (Range<Integer> range : interestingRanges) {
       int idx =
-          separatorFinder.findNextSeparator(merged, range.lowerEndpoint(), range.upperEndpoint());
+          NinjaSeparatorFinder.findNextSeparator(
+              merged, range.lowerEndpoint(), range.upperEndpoint());
       if (idx >= 0) {
         // There should always be a previous fragment, as we are checking non-intersecting ranges,
         // starting from the connection point between first and second fragments.
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/file/FileFragmentSplitter.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/file/FileFragmentSplitter.java
index d782abc..6db928e 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/file/FileFragmentSplitter.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/file/FileFragmentSplitter.java
@@ -30,18 +30,14 @@
 public class FileFragmentSplitter implements Callable<List<FileFragment>> {
   private final FileFragment fileFragment;
   private final DeclarationConsumer consumer;
-  private final SeparatorFinder separatorFinder;
 
   /**
    * @param fileFragment {@link FileFragment}, fragment of which should be splitted
    * @param consumer declaration consumer
-   * @param separatorFinder finds declaration separators
    */
-  public FileFragmentSplitter(
-      FileFragment fileFragment, DeclarationConsumer consumer, SeparatorFinder separatorFinder) {
+  public FileFragmentSplitter(FileFragment fileFragment, DeclarationConsumer consumer) {
     this.fileFragment = fileFragment;
     this.consumer = consumer;
-    this.separatorFinder = separatorFinder;
   }
 
   /**
@@ -55,7 +51,7 @@
     List<FileFragment> fragments = Lists.newArrayList();
     int start = 0;
     while (true) {
-      int end = separatorFinder.findNextSeparator(fileFragment, start, -1);
+      int end = NinjaSeparatorFinder.findNextSeparator(fileFragment, start, -1);
       if (end < 0) {
         break;
       }
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/file/NinjaSeparatorFinder.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/file/NinjaSeparatorFinder.java
index 2d11ce4..af88b14 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/file/NinjaSeparatorFinder.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/file/NinjaSeparatorFinder.java
@@ -18,7 +18,7 @@
 import com.google.common.base.Preconditions;
 
 /**
- * Implementation of {@link SeparatorFinder} for Ninja files.
+ * Finds the border between two different Ninja declarations.
  *
  * <p>The Ninja declaration consists of several text lines; if the line is a part of the previous
  * declaration, it starts with some amount of spaces or tabs. If the line is the beginning of the
@@ -28,9 +28,7 @@
  * <p>We support '\r\n' separators in Ninja files and throw {@link IncorrectSeparatorException} in
  * case an incorrect separator '\r' is used.
  */
-public class NinjaSeparatorFinder implements SeparatorFinder {
-  public static final NinjaSeparatorFinder INSTANCE = new NinjaSeparatorFinder();
-
+public class NinjaSeparatorFinder {
   private static final byte DOLLAR_BYTE = '$';
   private static final byte LINEFEED_BYTE = '\r';
   private static final byte NEWLINE_BYTE = '\n';
@@ -39,8 +37,7 @@
 
   private NinjaSeparatorFinder() {}
 
-  @Override
-  public int findNextSeparator(FileFragment fragment, int startingFrom, int untilExcluded)
+  public static int findNextSeparator(FileFragment fragment, int startingFrom, int untilExcluded)
       throws IncorrectSeparatorException {
     Preconditions.checkState(startingFrom < fragment.length());
     Preconditions.checkState(untilExcluded < 0 || untilExcluded <= fragment.length());
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/file/ParallelFileProcessing.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/file/ParallelFileProcessing.java
index dd9da72..f18d0ab 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/file/ParallelFileProcessing.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/file/ParallelFileProcessing.java
@@ -25,26 +25,23 @@
 
 /**
  * Parallel file processing implementation. See comment to {@link #processFile(ReadableByteChannel,
- * BlockParameters, Supplier, ListeningExecutorService, SeparatorFinder)}.
+ * BlockParameters, Supplier, ListeningExecutorService)}.
  */
 public class ParallelFileProcessing {
   private final ReadableByteChannel channel;
   private final BlockParameters parameters;
   private final Supplier<DeclarationConsumer> tokenConsumerFactory;
   private final ListeningExecutorService executorService;
-  private final SeparatorFinder predicate;
 
   private ParallelFileProcessing(
       ReadableByteChannel channel,
       BlockParameters parameters,
       Supplier<DeclarationConsumer> tokenConsumerFactory,
-      ListeningExecutorService executorService,
-      SeparatorFinder predicate) {
+      ListeningExecutorService executorService) {
     this.channel = channel;
     this.parameters = parameters;
     this.tokenConsumerFactory = tokenConsumerFactory;
     this.executorService = executorService;
-    this.predicate = predicate;
   }
 
   /**
@@ -89,11 +86,9 @@
       ReadableByteChannel channel,
       BlockParameters parameters,
       Supplier<DeclarationConsumer> tokenConsumerFactory,
-      ListeningExecutorService executorService,
-      SeparatorFinder predicate)
+      ListeningExecutorService executorService)
       throws GenericParsingException, IOException, InterruptedException {
-    new ParallelFileProcessing(
-            channel, parameters, tokenConsumerFactory, executorService, predicate)
+    new ParallelFileProcessing(channel, parameters, tokenConsumerFactory, executorService)
         .processFileImpl();
   }
 
@@ -102,8 +97,7 @@
       // Return immediately, if the file is empty.
       return;
     }
-    DeclarationAssembler assembler =
-        new DeclarationAssembler(tokenConsumerFactory.get(), predicate);
+    DeclarationAssembler assembler = new DeclarationAssembler(tokenConsumerFactory.get());
 
     CollectingListFuture<List<FileFragment>, GenericParsingException> future =
         new CollectingListFuture<>(GenericParsingException.class);
@@ -151,7 +145,7 @@
       }
       DeclarationConsumer consumer = tokenConsumerFactory.get();
       FileFragment fragment = new FileFragment(bb, offset, from, to);
-      FileFragmentSplitter tokenizer = new FileFragmentSplitter(fragment, consumer, predicate);
+      FileFragmentSplitter tokenizer = new FileFragmentSplitter(fragment, consumer);
       future.add(executorService.submit(tokenizer));
       from = to;
     }
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/file/SeparatorFinder.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/file/SeparatorFinder.java
deleted file mode 100644
index e95e241..0000000
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/file/SeparatorFinder.java
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2019 The Bazel Authors. All rights reserved.
-//
-// 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.google.devtools.build.lib.bazel.rules.ninja.file;
-
-/** Interface for determining where the byte sequence should be split into parts. */
-public interface SeparatorFinder {
-
-  /**
-   * Returns the index of the end of the next separator (separator can be of two symbols, \r\n), or
-   * -1 if the fragment does not contain any separators.
-   *
-   * @param fragment fragment to search in
-   * @param startingFrom index to start search from
-   * @param untilExcluded index to stop search before (excluded from search).
-   * @throws IncorrectSeparatorException if the incorrect separator value (\r) is used
-   */
-  int findNextSeparator(FileFragment fragment, int startingFrom, int untilExcluded)
-      throws IncorrectSeparatorException;
-}
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/pipeline/NinjaPipeline.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/pipeline/NinjaPipeline.java
index d45aaf6..14397ed 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/pipeline/NinjaPipeline.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/pipeline/NinjaPipeline.java
@@ -26,7 +26,6 @@
 import com.google.devtools.build.lib.bazel.rules.ninja.file.CollectingListFuture;
 import com.google.devtools.build.lib.bazel.rules.ninja.file.FileFragment;
 import com.google.devtools.build.lib.bazel.rules.ninja.file.GenericParsingException;
-import com.google.devtools.build.lib.bazel.rules.ninja.file.NinjaSeparatorFinder;
 import com.google.devtools.build.lib.bazel.rules.ninja.file.ParallelFileProcessing;
 import com.google.devtools.build.lib.bazel.rules.ninja.file.ParallelFileProcessing.BlockParameters;
 import com.google.devtools.build.lib.bazel.rules.ninja.lexer.NinjaLexer;
@@ -215,8 +214,7 @@
                   pieces.add(parseResult);
                   return new NinjaParser(NinjaPipeline.this, parseResult, path.getBaseName());
                 },
-                service,
-                NinjaSeparatorFinder.INSTANCE);
+                service);
             return NinjaFileParseResult.merge(pieces);
           }
         });
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/DeclarationAssemblerTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/DeclarationAssemblerTest.java
index f345b7d..40610e2 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/DeclarationAssemblerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/DeclarationAssemblerTest.java
@@ -24,7 +24,6 @@
 import com.google.devtools.build.lib.bazel.rules.ninja.file.DeclarationAssembler;
 import com.google.devtools.build.lib.bazel.rules.ninja.file.FileFragment;
 import com.google.devtools.build.lib.bazel.rules.ninja.file.GenericParsingException;
-import com.google.devtools.build.lib.bazel.rules.ninja.file.NinjaSeparatorFinder;
 import com.google.devtools.build.lib.util.Pair;
 import java.io.IOException;
 import java.nio.ByteBuffer;
@@ -73,8 +72,7 @@
             fragment -> {
               offsetStringPairList.add(
                   new Pair<>(fragment.getFragmentOffset(), fragment.toString()));
-            },
-            NinjaSeparatorFinder.INSTANCE);
+            });
 
     assembler.wrapUp(
         Lists.newArrayList(
@@ -98,8 +96,7 @@
             fragment -> {
               list.add(fragment.toString());
               assertThat(fragment.getFileOffset()).isAnyOf(0L, (long) chars1.length);
-            },
-            NinjaSeparatorFinder.INSTANCE);
+            });
 
     assembler.wrapUp(
         Lists.newArrayList(
@@ -118,8 +115,7 @@
             fragment -> {
               list.add(fragment.toString());
               assertThat(fragment.getFileOffset()).isEqualTo(0);
-            },
-            NinjaSeparatorFinder.INSTANCE);
+            });
 
     byte[] chars = s.getBytes(StandardCharsets.ISO_8859_1);
     ByteBuffer bytes = ByteBuffer.wrap(chars);
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/FileFragmentSplitterTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/FileFragmentSplitterTest.java
index 885debd..41d08c3 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/FileFragmentSplitterTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/FileFragmentSplitterTest.java
@@ -23,7 +23,6 @@
 import com.google.devtools.build.lib.bazel.rules.ninja.file.DeclarationConsumer;
 import com.google.devtools.build.lib.bazel.rules.ninja.file.FileFragment;
 import com.google.devtools.build.lib.bazel.rules.ninja.file.FileFragmentSplitter;
-import com.google.devtools.build.lib.bazel.rules.ninja.file.NinjaSeparatorFinder;
 import java.nio.ByteBuffer;
 import java.nio.charset.StandardCharsets;
 import java.util.List;
@@ -50,8 +49,7 @@
     byte[] chars = String.join("\n", list).getBytes(StandardCharsets.ISO_8859_1);
     ByteBuffer buffer = ByteBuffer.wrap(chars);
     FileFragment fragment = new FileFragment(buffer, offsetValue, 0, chars.length);
-    FileFragmentSplitter tokenizer =
-        new FileFragmentSplitter(fragment, consumer, NinjaSeparatorFinder.INSTANCE);
+    FileFragmentSplitter tokenizer = new FileFragmentSplitter(fragment, consumer);
     List<FileFragment> edges = tokenizer.call();
     assertThat(result).containsExactly("two\n");
     assertThat(
@@ -73,8 +71,7 @@
     DeclarationConsumer consumer = fragment -> result.add(fragment.toString());
 
     FileFragment fragment = new FileFragment(bytes, 0, 0, chars.length);
-    FileFragmentSplitter tokenizer =
-        new FileFragmentSplitter(fragment, consumer, NinjaSeparatorFinder.INSTANCE);
+    FileFragmentSplitter tokenizer = new FileFragmentSplitter(fragment, consumer);
     List<FileFragment> edges = tokenizer.call();
     assertThat(result).containsExactly("two\n\ttwo-detail\n");
     assertThat(
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaSeparatorFinderTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaSeparatorFinderTest.java
index ab1efd6..207408e 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaSeparatorFinderTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/NinjaSeparatorFinderTest.java
@@ -64,14 +64,14 @@
     FileFragment fragment = new FileFragment(buffer, 0, 0, buffer.limit());
     assertThrows(
         IncorrectSeparatorException.class,
-        () -> NinjaSeparatorFinder.INSTANCE.findNextSeparator(fragment, 0, -1));
+        () -> NinjaSeparatorFinder.findNextSeparator(fragment, 0, -1));
   }
 
   private static void doTestIsSeparator(String s, int expected) throws IncorrectSeparatorException {
     byte[] bytes = s.getBytes(StandardCharsets.ISO_8859_1);
     ByteBuffer buffer = ByteBuffer.wrap(bytes);
     FileFragment fragment = new FileFragment(buffer, 0, 0, buffer.limit());
-    int result = NinjaSeparatorFinder.INSTANCE.findNextSeparator(fragment, 0, -1);
+    int result = NinjaSeparatorFinder.findNextSeparator(fragment, 0, -1);
     assertThat(result).isEqualTo(expected);
   }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/ParallelFileProcessingTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/ParallelFileProcessingTest.java
index b1cb73f..7a3c755 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/ParallelFileProcessingTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/ninja/ParallelFileProcessingTest.java
@@ -27,7 +27,6 @@
 import com.google.devtools.build.lib.bazel.rules.ninja.file.DeclarationConsumer;
 import com.google.devtools.build.lib.bazel.rules.ninja.file.FileFragment;
 import com.google.devtools.build.lib.bazel.rules.ninja.file.GenericParsingException;
-import com.google.devtools.build.lib.bazel.rules.ninja.file.NinjaSeparatorFinder;
 import com.google.devtools.build.lib.bazel.rules.ninja.file.ParallelFileProcessing;
 import com.google.devtools.build.lib.bazel.rules.ninja.file.ParallelFileProcessing.BlockParameters;
 import com.google.devtools.build.lib.concurrent.ExecutorUtil;
@@ -143,8 +142,7 @@
           channel,
           parameters != null ? parameters : new BlockParameters(file.length()),
           factory,
-          service,
-          NinjaSeparatorFinder.INSTANCE);
+          service);
     } finally {
       ExecutorUtil.interruptibleShutdown(service);
     }
