diff --git a/chunk/server.go b/chunk/server.go
index c35d761..315ec00 100644
--- a/chunk/server.go
+++ b/chunk/server.go
@@ -1,6 +1,8 @@
 package chunk
 
+import "bytes"
 import "context"
+import "io"
 import "sync"
 
 import "pcloud/api"
@@ -15,7 +17,7 @@
 
 func (s *ChunkServer) ListChunks(
 	ctx context.Context,
-	request *api.ListChunksRequest) (*api.ListChunksResponse, error) {
+	req *api.ListChunksRequest) (*api.ListChunksResponse, error) {
 	resp := api.ListChunksResponse{}
 	s.chunks.Range(func(k, v interface{}) bool {
 		resp.ChunkId = append(resp.ChunkId, k.(string))
@@ -26,16 +28,34 @@
 
 func (s *ChunkServer) ReadChunk(
 	ctx context.Context,
-	request *api.ReadChunkRequest) (*api.ReadChunkResponse, error) {
-	if data, ok := s.chunks.Load(request.ChunkId); ok {
-		return &api.ReadChunkResponse{Data: data.([]byte)}, nil
+	req *api.ReadChunkRequest) (resp *api.ReadChunkResponse, err error) {
+	if value, ok := s.chunks.Load(req.ChunkId); ok {
+		chunk := value.(Chunk)
+		src := chunk.ReadSeeker()
+		if req.Offset != 0 {
+			_, err = src.Seek(int64(req.Offset), io.SeekStart)
+			if err != nil {
+				return
+			}
+		}
+		var dst bytes.Buffer
+		if req.NumBytes != 0 {
+			_, err = io.CopyN(&dst, src, int64(req.NumBytes))
+		} else {
+			_, err = io.Copy(&dst, src)
+		}
+		if err == nil {
+			resp = &api.ReadChunkResponse{Data: dst.Bytes()}
+		}
 	}
-	return nil, nil
+	return
 }
 
 func (s *ChunkServer) StoreChunk(
 	ctx context.Context,
-	request *api.StoreChunkRequest) (*api.StoreChunkResponse, error) {
-	s.chunks.Store(request.ChunkId, request.Data)
+	req *api.StoreChunkRequest) (*api.StoreChunkResponse, error) {
+	data := req.Data
+	chunk := NewInMemoryChunk(&data)
+	s.chunks.Store(req.ChunkId, chunk)
 	return &api.StoreChunkResponse{}, nil
 }
