diff --git a/src/Commands/StaticCommands.php b/src/Commands/StaticCommands.php
index 6a4cd22..19bd989 100644
--- a/src/Commands/StaticCommands.php
+++ b/src/Commands/StaticCommands.php
@@ -93,7 +93,7 @@ class StaticCommands extends DrushCommands {
 
     $paths = $this->static->getPaths($options['partial']);
     $this->io()->writeln('Generating static HTML...');
-    $this->exportPaths($paths, [], $options['process-count'], TRUE, $options['uri']);
+    $this->exportPaths($paths, [], $options['process-count'], TRUE, $options['uri'], $options['partial']);
     $this->io()->success('Exported static HTML and related assets.');
 
     $this->cache->commit();
@@ -117,18 +117,20 @@ class StaticCommands extends DrushCommands {
    * @option process-count Limits the number of pages that will process at the same time.
    * @option show-progress Whether or not a progress bar should be shown. Defaults to FALSE.
    * @option return-json Whether or not paths that need invoking should be returned as JSON. Defaults to FALSE.
+   * @option partial If only a partial export is desired. Defaults to FALSE.
    */
   public function exportPath($path, array $options = [
     'process-count' => self::PROCESS_COUNT,
     'show-progress' => FALSE,
     'return-json' => FALSE,
+    'partial' => FALSE,
   ]) {
-    $invoke_paths = $this->static->requestPath($path);
+    $invoke_paths = $this->static->requestPath($path, $options['partial']);
     if ($options['return-json']) {
       $this->io()->write(json_encode($invoke_paths, JSON_PRETTY_PRINT));
     }
     else {
-      $this->exportPaths($invoke_paths, [$path], $options['process-count'], $options['show-progress'], $options['uri']);
+      $this->exportPaths($invoke_paths, [$path], $options['process-count'], $options['show-progress'], $options['uri'], $options['partial']);
     }
   }
 
@@ -145,8 +147,10 @@ class StaticCommands extends DrushCommands {
    *   Whether or not a progress bar should be shown.
    * @param string $uri
    *   The URI of the site, probably passed by -l or --uri.
+   * @param bool $partial
+   *   Whether or not this is a partial build.
    */
-  protected function exportPaths(array $paths, array $old_paths, $process_count, $show_progress, $uri) {
+  protected function exportPaths(array $paths, array $old_paths, $process_count, $show_progress, $uri, $partial) {
     $paths = $this->static->exportPaths($paths);
 
     if (empty($paths)) {
@@ -160,7 +164,11 @@ class StaticCommands extends DrushCommands {
 
     $commands = [];
     foreach ($paths as $path) {
-      $commands[] = drush_build_drush_command() . ' tome:static-export-path --return-json ' . escapeshellarg($path) . ' --process-count=' . escapeshellarg($process_count) . ' --uri=' . escapeshellarg($uri);
+      $command = drush_build_drush_command() . ' tome:static-export-path --return-json ' . escapeshellarg($path) . ' --process-count=' . escapeshellarg($process_count) . ' --uri=' . escapeshellarg($uri);
+      if ($partial) {
+        $command .= ' --partial';
+      }
+      $commands[] = $command;
     }
 
     $show_progress && $this->io()->progressStart(count($paths));
@@ -183,7 +191,7 @@ class StaticCommands extends DrushCommands {
     }
     if (count($invoke_paths)) {
       $this->io()->writeln('Processing related assets and paths...');
-      $this->exportPaths($invoke_paths, $old_paths, $process_count, $show_progress, $uri);
+      $this->exportPaths($invoke_paths, $old_paths, $process_count, $show_progress, $uri, $partial);
     }
   }
 
diff --git a/src/StaticGenerator.php b/src/StaticGenerator.php
index 5d2f32e..5dd742c 100644
--- a/src/StaticGenerator.php
+++ b/src/StaticGenerator.php
@@ -133,7 +133,7 @@ class StaticGenerator implements StaticGeneratorInterface {
   /**
    * {@inheritdoc}
    */
-  public function requestPath($path) {
+  public function requestPath($path, $partial = FALSE) {
     $invoke_paths = [];
 
     $request = Request::create($path, 'GET', [], [], [], $this->currentRequest->server->all());
@@ -159,6 +159,13 @@ class StaticGenerator implements StaticGeneratorInterface {
       $this->cache->add($request, $response);
     }
 
+    if ($partial) {
+      $invoke_paths = array_filter($invoke_paths, function ($invoke_path) {
+        $request = Request::create($invoke_path, 'GET', [], [], [], $this->currentRequest->server->all());
+        return !$this->cache->isCached($request);
+      });
+    }
+
     return $invoke_paths;
   }
 
diff --git a/src/StaticGeneratorInterface.php b/src/StaticGeneratorInterface.php
index 68739c8..068c817 100644
--- a/src/StaticGeneratorInterface.php
+++ b/src/StaticGeneratorInterface.php
@@ -31,11 +31,13 @@ interface StaticGeneratorInterface {
    *
    * @param string $path
    *   A path to export, i.e. /node/1.
+   * @param bool $partial
+   *   Whether only paths that are not already generated should be returned.
    *
    * @return string[]
    *   An array of paths that should be passed to ::exportPaths.
    */
-  public function requestPath($path);
+  public function requestPath($path, $partial = FALSE);
 
   /**
    * Exports multiple paths.
diff --git a/tests/src/Kernel/StaticGeneratorTest.php b/tests/src/Kernel/StaticGeneratorTest.php
index 51fa862..c2b4a16 100644
--- a/tests/src/Kernel/StaticGeneratorTest.php
+++ b/tests/src/Kernel/StaticGeneratorTest.php
@@ -112,6 +112,8 @@ class StaticGeneratorTest extends TestBase {
    * @covers \Drupal\tome\StaticCache::isCached
    */
   public function testCache() {
+    $this->enableModules(['tome_test']);
+
     /** @var \Drupal\tome\StaticGenerator $static */
     $static = \Drupal::service('tome.static');
     /** @var \Drupal\tome\StaticCache $cache */
@@ -157,6 +159,15 @@ class StaticGeneratorTest extends TestBase {
     new Settings($settings);
 
     $this->assertContains($path, $static->getPaths(TRUE));
+
+    $invoke_paths = $static->requestPath('/tome-test/pager-page');
+    $this->assertContains('/tome-test/pager-page?page=0', $invoke_paths);
+    $static->requestPath('/tome-test/pager-page?page=0');
+
+    $cache->commit();
+
+    $invoke_paths = $static->requestPath('/tome-test/pager-page', TRUE);
+    $this->assertNotContains('/tome-test/pager-page?page=0', $invoke_paths);
   }
 
 }
