diff --git a/boost_expire.module b/boost_expire.module
index be90748..ea6feea 100644
--- a/boost_expire.module
+++ b/boost_expire.module
@@ -7,9 +7,35 @@
  */
 
 /**
+ * Implements hook_permission().
+ */
+function boost_expire_permission() {
+  return array(
+    'clear boost caches' => array(
+      'title' => t('Clear Boost caches'),
+      'description' => t('Allow users to clear Boost caches.'),
+    ),
+  );
+}
+
+/**
  * Implements hook_menu().
  */
 function boost_expire_menu() {
+  $items['boost_expire/all'] = array(
+    'title' => 'Boost Expire Cache Management',
+    'page callback' => 'boost_expire_clear_cache',
+    'access arguments' => array('clear boost cache'),
+    'type' => MENU_CALLBACK,
+  );
+  $items['boost_expire/%'] = array(
+    'title' => 'Boost Expire Cache Management',
+    'page callback' => 'boost_expire_clear_cache',
+    'page arguments' => array(1),
+    'access arguments' => array('clear boost cache'),
+    'type' => MENU_CALLBACK,
+  );
+
   $items['admin/config/system/boost_expire'] = array(
     'title' => 'Boost Expire',
     'description' => 'Configuration for Boost Expire.',
@@ -26,28 +52,78 @@ function boost_expire_menu() {
  * Implements hook_node_insert().
  */
 function boost_expire_node_insert($node) {
-  boost_expire_flush_boost_cache(array('scope' => 'all'));
+  boost_expire_flush_boost_cache(array('scope' => 'node/' . $node->nid));
 }
 
 /**
  * Implements hook_node_update().
  */
 function boost_expire_node_update($node) {
-  boost_expire_flush_boost_cache(array('scope' => 'all'));
+  boost_expire_flush_boost_cache(array('scope' => 'node/' . $node->nid));
 }
 
 /**
  * Implements hook_comment_insert().
  */
 function boost_expire_comment_insert($node) {
-  boost_expire_flush_boost_cache(array('scope' => 'all'));
+  boost_expire_flush_boost_cache(array('scope' => 'node/' . $node->nid));
 }
 
 /**
  * Implements hook_comment_update().
  */
 function boost_expire_comment_update($node) {
-  boost_expire_flush_boost_cache(array('scope' => 'all'));
+  boost_expire_flush_boost_cache(array('scope' => 'node/' . $node->nid));
+}
+
+/**
+ * Implements hook_block_info().
+ */
+function boost_expire_block_info() {
+  $blocks['boost_expire_manage_caches'] = array(
+    'info' => t('Boost Cache Expiration'),
+  );
+  return $blocks;
+}
+
+/**
+ * Implements hook_block_view().
+ */
+function boost_expire_block_view($delta = '') {
+  $block = array();
+  switch ($delta) {
+    case 'boost_expire_manage_caches':
+      if (user_access('clear boost caches')) {
+        $block['subject'] = t('Boost Cache Expiration');
+        $block['content'] = theme('item_list', array(
+          'type' => 'ul',
+          'items' => array(
+            l('Clear entire Boost cache' , 'boost_expire/all'),
+            l('Clear Boost cache for this page' , 'boost_expire/' . current_path()),
+          ),
+        ));
+      }
+      break;
+  }
+  return $block;
+}
+
+/**
+ * Page callback for clearing Boost cache.
+ */
+function boost_expire_clear_cache($arg = NULL) {
+  // If no argument, flush the entire Boost cache.
+  if (empty($arg) {
+    $result = boost_expire_flush_boost_cache(array('scope' => 'all'));
+    drupal_set_message(t('Boost cache cleared.'));
+  }
+  // Otherwise, flush a particular page's cache.
+  else {
+    // Remove 'boost_expire/' from the current path to get a path to clear.
+    $path_to_clear = preg_replace('/boost_expire\//', '', current_path());
+    boost_expire_flush_boost_cache(array('scope' => $path_to_clear));
+    drupal_set_message(t('Current page cleared from boost cache.'));
+  }
 }
 
 /**
@@ -62,8 +138,10 @@ function boost_expire_comment_update($node) {
  * to constantly hit the 'clear all caches' button or wait for cron expiration.
  *
  * @param $options
- *   Associative array of options for this flush. Currently, only supported
- *   option is 'scope' => 'all'.
+ *   Associative array of options for this flush:
+ *   - scope: If set to 'all', entire Boost cache will be cleared. Otherwise,
+ *     set this value to a path cached by Boost, and the corresponding cache
+ *     file for that path will be deleted.
  */
 function boost_expire_flush_boost_cache($options = array()) {
   global $_boost, $base_path, $base_root;
@@ -92,10 +170,10 @@ function boost_expire_flush_boost_cache($options = array()) {
     $_boost['base_dir'] = boost_get_normal_cache_dir() . '/' . $parts['host'] . $base_path;
   }
 
-  // Borrow some logic from boost_flush_caches() to clear all the contents of
-  // the boost directory for this site.
-  if (!empty($options['scope']) && $options['scope'] == 'all') {
-    if (isset($_boost['base_dir'])) {
+  if (!empty($options['scope']) && isset($_boost['base_dir'])) {
+    // Borrow some logic from boost_flush_caches() to clear all the contents of
+    // the boost directory for this site.
+    if ($options['scope'] == 'all') {
       $count = _boost_rmdir($_boost['base_dir'], TRUE);
       $count = empty($count) ? 0 : $count;
 
@@ -104,7 +182,46 @@ function boost_expire_flush_boost_cache($options = array()) {
         watchdog('boost_expire', 'Flushed all files (%count) from static page cache.', array('%count' => $count), WATCHDOG_NOTICE);
       }
     }
+    // If the scope is not 'all', clear the cache for the current page.
+    else {
+      $count = boost_expire_flush_boost_page($_boost['base_dir'], $options['scope']);
+      if (variable_get('boost_expire_log_flushes', 1) && $count) {
+        watchdog('boost_expire', 'Flushed current page (%path) from static page cache.', array('%path' => $options['scope']), WATCHDOG_NOTICE);
+      }
+    }
+  }
+}
+
+/**
+ * Function to clear the current page from Boost's static cache.
+ *
+ * @param $base_dir
+ *   Path to Boost's base directory.
+ * @param $path
+ *   Path of the page to be expired.
+ *
+ * @return $count
+ *   Count of deleted files. Normally either 0 (if the file didn't exist) or 1.
+ */
+function boost_expire_flush_boost_page($base_dir, $path) {
+  $result = 0;
+
+  // TODO - $path doesn't work with url like node?page=1
+  // Special handling for front page.
+  if ($path == variable_get('site_frontpage', 'node')) {
+    $file_to_del = $base_dir . '_.html';
+  }
+  // Node page
+  else {
+    $file_to_del = $base_dir . $path . '_.html';
   }
+
+  // Delete the corresponding cached file, if it exists.
+  if (file_exists($file_to_del)) {
+    $result = unlink($file_to_del);
+  }
+
+  return $result;
 }
 
 /**
