diff --git a/themes/engines/phptemplate/phptemplate.engine b/themes/engines/phptemplate/phptemplate.engine
index 669b27ada9a..5b39ab22945 100644
--- a/themes/engines/phptemplate/phptemplate.engine
+++ b/themes/engines/phptemplate/phptemplate.engine
@@ -143,7 +143,9 @@ function phptemplate_features() {
 
 /**
  * Prepare the values passed to the theme_page function to be passed
- * into a pluggable template engine.
+ * into a pluggable template engine. Uses the arg() function to
+ * generate a series of page template files suggestions based on the
+ * current path. If none are found, the default page.tpl.php is used.
  */
 function phptemplate_page($content) {
 
@@ -220,6 +222,16 @@ function phptemplate_page($content) {
     $variables['node'] = node_load(arg(1));
   }
 
+  // Build a list of suggested template files in order of specificity. One
+  // suggestion is made for every element of the current path, though
+  // numeric elements are not carried to subsequent suggestions. For example,
+  // http://www.example.com/node/1/edit would result in the following
+  // suggestions:
+  //
+  // page-node-edit.tpl.php
+  // page-node-1.tpl.php
+  // page-node.tpl.php
+  // page.tpl.php
   $i = 0;
   $suggestion = 'page';
   $suggestions = array($suggestion);
@@ -300,10 +312,17 @@ function phptemplate_comment($comment, $links = 0) {
 
 /**
  * Prepare the values passed to the theme_block function to be passed
- * into a pluggable template engine.
+ * into a pluggable template engine. Uses block properties to generate a
+ * series of template file suggestions. If none are found, the default
+ * block.tpl.php is used.
  */
 function phptemplate_block($block) {
-  return _phptemplate_callback('block', array('block' => $block));
+  $suggestions[] = 'block';
+  $suggestions[] = 'block-' . $block->region;
+  $suggestions[] = 'block-' . $block->module;
+  $suggestions[] = 'block-' . $block->module . '-' . $block->delta;
+
+  return _phptemplate_callback('block', array('block' => $block), $suggestions);
 }
 
 /**