--- recipe.module.orig	2007-10-17 12:39:34.000000000 -0500
+++ recipe.module	2008-03-11 13:42:59.000000000 -0500
@@ -16,14 +16,6 @@ function recipe_perm() {
   return array(t('create recipes'), t('edit own recipes'));
 }
 
-/**
- * Implementation of hook_load().
- */
-function recipe_load($node) {
-  $recipe = db_fetch_object(db_query('SELECT * FROM {recipe} WHERE nid = %d', $node->nid));
-  $recipe->ingredients = recipe_load_ingredients($node);
-  return $recipe;
-}
 
 /**
  * Implementation of hook_link().
@@ -78,13 +70,22 @@ function recipe_help($section) {
 }
 
 /**
+ * Implementation of hook_load().
+ */
+function recipe_load($node) {
+  $recipe = db_fetch_object(db_query('SELECT * FROM {recipe} WHERE vid = %d', $node->vid));
+  $recipe->ingredients = recipe_load_ingredients($node);
+  return $recipe;
+}
+
+/**
  * Implementation of hook_insert().
  *
  * As a new node is being inserted into the database, we need to do our own
  * database inserts.
  */
 function recipe_insert($node) {
-  db_query("INSERT INTO {recipe} (nid, source, yield, notes, instructions, preptime) VALUES (%d, '%s', '%s', '%s', '%s', '%d')", $node->nid, $node->source, $node->yield, $node->notes, $node->instructions, $node->preptime);
+  db_query("INSERT INTO {recipe} (vid, nid, source, yield, notes, instructions, preptime) VALUES (%d, %d, '%s', '%s', '%s', '%s', '%d')", $node->vid, $node->nid, $node->source, $node->yield, $node->notes, $node->instructions, $node->preptime);
   recipe_save_ingredients($node);
 }
 
@@ -95,8 +96,13 @@ function recipe_insert($node) {
  * database updates.
  */
 function recipe_update($node) {
-  db_query("UPDATE {recipe} SET source = '%s', yield = '%s', notes = '%s', instructions = '%s', preptime = '%d' WHERE nid = %d", $node->source, $node->yield, $node->notes, $node->instructions, $node->preptime, $node->nid);
-  recipe_save_ingredients($node);
+  if ($node->revision) {
+    recipe_insert($node);
+  }
+  else {
+    db_query("UPDATE {recipe} SET source = '%s', yield = '%s', notes = '%s', instructions = '%s', preptime = '%d' WHERE vid = %d", $node->source, $node->yield, $node->notes, $node->instructions, $node->preptime, $node->vid);
+    recipe_save_ingredients($node);
+  }
 }
 
 /**
@@ -110,6 +116,18 @@ function recipe_delete($node) {
 }
 
 /**
+ * Implementation of hook_nodeapi().
+ */
+function recipe_nodeapi($node, $op, $teaser, $page) {
+  switch ($op) {
+    case 'delete revision':
+      db_query("DELETE FROM {recipe} WHERE vid = %d", $node->vid);
+      db_query("DELETE FROM {recipe_node_ingredient} WHERE vid = %d", $node->vid);
+    break; 
+  }
+}
+
+/**
  * Implementation of hook_form().
  */
 function recipe_form(&$node) {
@@ -708,13 +726,13 @@ function recipe_save_ingredients($node) 
   foreach ($changes->add as $ingredient) {
     $ingredient->id = recipe_ingredient_id_from_name($ingredient->name);
     $ingredient->quantity = recipe_ingredient_quantity_from_fraction($ingredient->quantity);
-    db_query("INSERT INTO {recipe_node_ingredient} (nid,ingredient_id,quantity,unit_id) VALUES (%d,%d,%f,%d)", $node->nid, $ingredient->id, $ingredient->quantity, $ingredient->unit_id);
+    db_query("INSERT INTO {recipe_node_ingredient} (vid, nid,ingredient_id,quantity,unit_id) VALUES (%d,%d,%d,%f,%d)",$node->vid, $node->nid, $ingredient->id, $ingredient->quantity, $ingredient->unit_id);
   }
 
   foreach ($changes->update as $ingredient) {
     $ingredient->id = recipe_ingredient_id_from_name($ingredient->name);
     $ingredient->quantity = recipe_ingredient_quantity_from_fraction($ingredient->quantity);
-    db_query("UPDATE {recipe_node_ingredient} SET quantity='%f', unit_id='%d' WHERE nid='%d' AND  ingredient_id='%d'", $ingredient->quantity, $ingredient->unit_id, $node->nid, $ingredient->id);
+    db_query("UPDATE {recipe_node_ingredient} SET quantity='%f', unit_id='%d' WHERE nid='%d' AND  ingredient_id='%d' AND vid=%d", $ingredient->quantity, $ingredient->unit_id, $node->nid, $ingredient->id, $node->nid);
   }
 }
 
@@ -788,12 +806,16 @@ function recipe_load_ingredients($node) 
     ri.ingredient_id = i.id
     AND ri.unit_id = u.id
     AND ri.nid=%d
+    AND ri.vid=%d
   ORDER BY
-	ri.id', $node->nid);
+	ri.id', $node->nid, $node->vid);
+
   $ingredients = array();
+
   while ($ingredient = db_fetch_object($rs)) {
     $ingredients[] = $ingredient;
   }
+
   return $ingredients;
 }
 
