diff --git a/store/files.go b/store/files.go
index 801b1afd83fe1e6074ba4066e9d83b0c82e20f57..2afd4a7bc8e75427dca92e1caa283fc90776be94 100644
--- a/store/files.go
+++ b/store/files.go
@@ -58,69 +58,76 @@ func (st *Store) GetFile(show string, id uint64) (file *File, err error) {
 	return
 }
 
-func (st *Store) UpdateFile(show string, id uint64, file File) (*File, error) {
+func (st *Store) UpdateFile(show string, id uint64, file File) (out *File, err error) {
 	tx := st.db.Begin()
 	defer func() {
 		if r := recover(); r != nil {
 			tx.Rollback()
-			// TODO: make sure to return non-nil err !!!
+			if err == nil {
+				err = fmt.Errorf("runtime panic: %+v", r)
+			}
 		}
 	}()
-	if err := tx.Error; err != nil {
-		return nil, err
+	if err = tx.Error; err != nil {
+		return
 	}
 
 	// make sure the file exists and actually belongs to <show> since permissions are enforced
 	// based on show membership
-	if err := tx.Where("show_name = ?", show).First(&File{}, id).Error; err != nil {
+	if err = tx.Where("show_name = ?", show).First(&File{}, id).Error; err != nil {
 		tx.Rollback()
-		return nil, err
+		return
 	}
 
 	file.ID = id
 	file.ShowName = show
-	err := tx.Save(&file).Error
-	if err != nil {
+	if err = tx.Save(&file).Error; err != nil {
 		tx.Rollback()
-		return nil, err
+		return
 	}
-	return &file, tx.Commit().Error
+	err = tx.Commit().Error
+	out = &file
+	return
 }
 
-func (st *Store) UpdateFileMetadata(show string, id uint64, metadata map[string]string) (*File, error) {
+func (st *Store) UpdateFileMetadata(show string, id uint64, metadata map[string]string) (file *File, err error) {
 	tx := st.db.Begin()
 	defer func() {
 		if r := recover(); r != nil {
 			tx.Rollback()
-			// TODO: make sure to return non-nil err !!!
+			if err == nil {
+				err = fmt.Errorf("runtime panic: %+v", r)
+			}
 		}
 	}()
-	if err := tx.Error; err != nil {
-		return nil, err
+	if err = tx.Error; err != nil {
+		return
 	}
 
-	file := &File{ID: id}
+	file = &File{ID: id}
 	// make sure the file exists and actually belongs to <show> since permissions are enforced
 	// based on show membership
-	if err := tx.Where("show_name = ?", show).First(&file).Error; err != nil {
+	if err = tx.Where("show_name = ?", show).First(&file).Error; err != nil {
 		tx.Rollback()
-		return nil, err
+		return
 	}
 	if file.Source.Import.State != ImportDone {
 		tx.Rollback()
-		return nil, ErrFileImportNotDone
+		err = ErrFileImportNotDone
+		return
 	}
 
-	fields, err := st.metadataFieldsToFile(show, id, metadata)
-	if err != nil {
+	var fields map[string]interface{}
+	if fields, err = st.metadataFieldsToFile(show, id, metadata); err != nil {
 		tx.Rollback()
-		return nil, err
+		return
 	}
-	if err := tx.Model(&file).Where("show_name = ?", show).Update(fields).Error; err != nil {
+	if err = tx.Model(&file).Where("show_name = ?", show).Update(fields).Error; err != nil {
 		tx.Rollback()
-		return nil, err
+		return
 	}
-	return file, tx.Commit().Error
+	err = tx.Commit().Error
+	return
 }
 
 func (st *Store) updateFile(show string, id uint64, values ...interface{}) (file *File, err error) {