diff --git a/opf.go b/opf.go
index 8b6457de27a6c49b241c9e2fa8aa9683b1394191..28c9cb63e4091a99ce61865c55dbc385bbd41be9 100644
--- a/opf.go
+++ b/opf.go
@@ -4,7 +4,6 @@ import (
 	"encoding/xml"
 	"errors"
 	"io"
-	"os"
 	"path/filepath"
 	"strings"
 )
@@ -67,8 +66,8 @@ func opfParse(r io.Reader) (*Metadata, error) {
 	return opf.Meta.ToMetadata(), nil
 }
 
-func opfOpen(path string) (*Metadata, error) {
-	file, err := os.Open(path)
+func opfOpen(storage *FileStorage, path string) (*Metadata, error) {
+	file, err := storage.Open(path)
 	if err != nil {
 		return nil, err
 	}
@@ -88,7 +87,7 @@ func (p *opfProvider) Lookup(storage *FileStorage, path, filetype string) (*Meta
 		replaceExt(path, ".opf"),
 	}
 	for _, opfpath := range paths {
-		if m, err := opfOpen(storage.Abs(opfpath)); err == nil {
+		if m, err := opfOpen(storage, opfpath); err == nil {
 			return m, err
 		}
 	}
diff --git a/sync.go b/sync.go
index 6a49f53bc4c200203e1ef519b9c4be0bb96c146e..db4b959f7fada0d51b0b7c42a9fe90879af968c8 100644
--- a/sync.go
+++ b/sync.go
@@ -9,7 +9,6 @@ import (
 	"mime/multipart"
 	"net/http"
 	"net/url"
-	"os"
 	"path/filepath"
 	"strings"
 	"sync"
@@ -91,8 +90,8 @@ func (r *remoteServer) DiffRequest(diffreq *diffRequest) (*diffResponse, error)
 	return &diffresp, nil
 }
 
-func addFilePart(w *multipart.Writer, varname, filename, mimeFilename string) error {
-	file, err := os.Open(filename)
+func addFilePart(w *multipart.Writer, varname string, storage *FileStorage, filename, mimeFilename string) error {
+	file, err := storage.Open(filename)
 	if err != nil {
 		return err
 	}
@@ -128,14 +127,14 @@ func (r *remoteServer) SendBook(book *Book, storage *FileStorage, files []*File)
 	for i, f := range files {
 		varname := fmt.Sprintf("book%d", i)
 		filename := fmt.Sprintf("%d%s", book.Id, f.FileType)
-		if err := addFilePart(w, varname, storage.Abs(f.Path), filename); err != nil {
+		if err := addFilePart(w, varname, storage, f.Path, filename); err != nil {
 			w.Close()
 			return err
 		}
 	}
 
 	if book.CoverPath != "" {
-		if err := addFilePart(w, "cover", storage.Abs(book.CoverPath), "cover.jpg"); err != nil {
+		if err := addFilePart(w, "cover", storage, book.CoverPath, "cover.jpg"); err != nil {
 			w.Close()
 			return err
 		}