diff --git a/NEWS b/NEWS
index e442195b..a3e5c93a 100644
--- a/NEWS
+++ b/NEWS
@@ -15,6 +15,7 @@
  * Better handling of broken MPEG audio frames.
  * Fixed crash when calling File::properties() after strip().
  * Fixed crash when parsing certain MPEG files.
+ * Fixed crash when saving Ogg files.
  * Fixed possible file corruptions when saving ASF files.
  * Fixed possible file corruptions when saving FLAC files.
  * Fixed possible file corruptions when saving MP4 files.
diff --git a/taglib/ogg/oggfile.cpp b/taglib/ogg/oggfile.cpp
index 47ff95f3..ea78f25e 100644
--- a/taglib/ogg/oggfile.cpp
+++ b/taglib/ogg/oggfile.cpp
@@ -271,30 +271,14 @@ void Ogg::File::writePacket(unsigned int i, const ByteVector &packet)
 
   // Write the pages.
 
+  ByteVector data;
+  for(it = pages.begin(); it != pages.end(); ++it)
+    data.append((*it)->render());
+
   const long long originalOffset = firstPage->fileOffset();
   const long long originalLength = lastPage->fileOffset() + lastPage->size() - originalOffset;
 
-  long long writtenLength = 0;
-
-  for(it = pages.begin(); it != pages.end(); ++it) {
-    const ByteVector data = (*it)->render();
-
-    size_t replace;
-
-    if(writtenLength + data.size() <= originalLength)
-      replace = data.size();
-    else if(writtenLength <= originalLength)
-      replace = static_cast<size_t>(originalLength - writtenLength);
-    else
-      replace = 0;
-
-    insert(data, originalOffset + writtenLength, replace);
-
-    writtenLength += data.size();
-  }
-
-  if(writtenLength < originalLength)
-    removeBlock(originalOffset + writtenLength, static_cast<size_t>(originalLength - writtenLength));
+  insert(data, originalOffset, static_cast<size_t>(originalLength));
 
   // Renumber the following pages if the pages have been split or merged.
 
@@ -302,7 +286,7 @@ void Ogg::File::writePacket(unsigned int i, const ByteVector &packet)
     = pages.back()->pageSequenceNumber() - lastPage->pageSequenceNumber();
 
   if(numberOfNewPages != 0) {
-    long long pageOffset = originalOffset + writtenLength;
+    long long pageOffset = originalOffset + data.size();
 
     while(true) {
       Page page(this, pageOffset);