diff --git a/flac/flacfile.cpp b/flac/flacfile.cpp
index b8315ee4..81e60e6f 100644
--- a/flac/flacfile.cpp
+++ b/flac/flacfile.cpp
@@ -122,8 +122,13 @@ FLAC::Properties *FLAC::File::audioProperties() const
 }
 
 
-void FLAC::File::save()
+bool FLAC::File::save()
 {
+  if(readOnly()) {
+    debug("FLAC::File::save() - Cannot save to a read only file.");
+    return false;
+  }
+
   // Create new vorbis comments
 
   if(!d->comment) {
@@ -214,6 +219,7 @@ void FLAC::File::save()
     writeBlock(d->ID3v1Tag->render());
   }
 
+  return true;
 }
 
 ID3v2::Tag *FLAC::File::ID3v2Tag(bool create)
diff --git a/flac/flacfile.h b/flac/flacfile.h
index 2a0ca015..9fef9039 100644
--- a/flac/flacfile.h
+++ b/flac/flacfile.h
@@ -108,8 +108,10 @@ namespace TagLib {
        * Save the file.  This will primarily save the XiphComment, but
        * will also keep any old ID3-tags up to date. If the file
        * has no XiphComment, one will be constructed from the ID3-tags.
+       *
+       * This returns true if the save was successful.
        */
-      virtual void save();
+      virtual bool save();
 
       /*!
        * Returns a pointer to the ID3v2 tag of the file.
diff --git a/ogg/flac/oggflacfile.cpp b/ogg/flac/oggflacfile.cpp
index fe7b0d05..9f8fd7cf 100644
--- a/ogg/flac/oggflacfile.cpp
+++ b/ogg/flac/oggflacfile.cpp
@@ -87,7 +87,7 @@ Properties *Ogg::FLAC::File::audioProperties() const
 }
 
 
-void Ogg::FLAC::File::save()
+bool Ogg::FLAC::File::save()
 {
   d->xiphCommentData = d->comment->render();
 
@@ -110,7 +110,7 @@ void Ogg::FLAC::File::save()
 
   setPacket(d->commentPacket, v);
 
-  Ogg::File::save();
+  return Ogg::File::save();
 }
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/ogg/flac/oggflacfile.h b/ogg/flac/oggflacfile.h
index 5ef7f8a4..1804e118 100644
--- a/ogg/flac/oggflacfile.h
+++ b/ogg/flac/oggflacfile.h
@@ -83,8 +83,9 @@ namespace TagLib {
 
       /*!
        * Save the file.  This will primarily save and update the XiphComment.
+       * Returns true if the save is successful.
        */
-      virtual void save();
+      virtual bool save();
 
       /*!
        * Returns the length of the audio-stream, used by FLAC::Properties for