more fixes for level 2 functions exposed by unit tests
diff --git a/src/libFLAC/metadata.c b/src/libFLAC/metadata.c
index 0baa30f..3bc7d84 100644
--- a/src/libFLAC/metadata.c
+++ b/src/libFLAC/metadata.c
@@ -995,7 +995,7 @@
 					chain_delete_node_(chain, chain->tail);
 					FLAC__ASSERT(chain->current_length == chain->initial_length);
 				}
-				else if(chain->tail->data->length <= delta) {
+				else if(chain->tail->data->length >= delta) {
 					chain->tail->data->length -= delta;
 					chain->current_length -= delta;
 					FLAC__ASSERT(chain->current_length == chain->initial_length);
@@ -1019,7 +1019,15 @@
 	if(preserve_file_stats)
 		set_file_stats_(chain->filename, &stats);
 
-	chain->initial_length = chain->current_length;
+	/* recompute lengths and offsets if necessary */
+	if(chain->initial_length != chain->current_length) {
+		const FLAC__MetaData_Node *node;
+		chain->initial_length = chain->current_length;
+		chain->last_offset = chain->first_offset;
+		for(node = chain->head; node; node = node->next)
+			chain->last_offset += (4 + node->data->length); /*@@@ MAGIC NUMBER 4 = metadata header bytes */
+	}
+
 	return true;
 }