diff --git a/importer/helpers/helpers.go b/importer/helpers/helpers.go
index caface2f13abfcb8eebfa64340fe6aae9cd256a6..58007daa760bb3eb8df5d40ef18792c8f35bda06 100644
--- a/importer/helpers/helpers.go
+++ b/importer/helpers/helpers.go
@@ -105,7 +105,7 @@ func (n *UnixfsNode) GetChild(ctx context.Context, i int, ds dag.DAGService) (*U
 // the passed in DagBuilderHelper is used to store the child node an
 // pin it locally so it doesnt get lost
 func (n *UnixfsNode) AddChild(child *UnixfsNode, db *DagBuilderHelper) error {
-	n.ufmt.AddBlockSize(child.ufmt.FileSize())
+	n.ufmt.AddBlockSize(child.DataSize())
 
 	childnode, err := child.GetDagNode()
 	if err != nil {
@@ -137,6 +137,13 @@ func (n *UnixfsNode) SetData(data []byte) {
 	n.ufmt.Data = data
 }
 
+func (n *UnixfsNode) DataSize() uint64 {
+	if n.raw {
+		return uint64(len(n.rawnode.RawData()))
+	}
+	return n.ufmt.FileSize()
+}
+
 // getDagNode fills out the proper formatting for the unixfs node
 // inside of a DAG node and returns the dag node
 func (n *UnixfsNode) GetDagNode() (node.Node, error) {
diff --git a/test/sharness/t0040-add-and-cat.sh b/test/sharness/t0040-add-and-cat.sh
index adc930ec301b798144c795e490d0e747500dd8b4..6ace9a55bbcc10ea99bccf4b2fb9093137285f4b 100755
--- a/test/sharness/t0040-add-and-cat.sh
+++ b/test/sharness/t0040-add-and-cat.sh
@@ -87,6 +87,9 @@ test_add_cat_file() {
 }
 
 test_add_cat_5MB() {
+	ADD_FLAGS="$1"
+	EXP_HASH="$2"
+
     test_expect_success "generate 5MB file using go-random" '
     	random 5242880 41 >mountdir/bigfile
     '
@@ -98,17 +101,16 @@ test_add_cat_5MB() {
     '
 
     test_expect_success "'ipfs add bigfile' succeeds" '
-    	ipfs add mountdir/bigfile >actual ||
+    	ipfs add $ADD_FLAGS mountdir/bigfile >actual ||
 		test_fsh cat daemon_err
     '
 
     test_expect_success "'ipfs add bigfile' output looks good" '
-    	HASH="QmSr7FqYkxYWGoSfy8ZiaMWQ5vosb18DQGCzjwEQnVHkTb" &&
-    	echo "added $HASH bigfile" >expected &&
+    	echo "added $EXP_HASH bigfile" >expected &&
     	test_cmp expected actual
     '
     test_expect_success "'ipfs cat' succeeds" '
-    	ipfs cat "$HASH" >actual
+    	ipfs cat "$EXP_HASH" >actual
     '
 
     test_expect_success "'ipfs cat' output looks good" '
@@ -116,7 +118,7 @@ test_add_cat_5MB() {
     '
 
     test_expect_success FUSE "cat ipfs/bigfile succeeds" '
-    	cat "ipfs/$HASH" >actual
+    	cat "ipfs/$EXP_HASH" >actual
     '
 
     test_expect_success FUSE "cat ipfs/bigfile looks good" '
@@ -380,7 +382,9 @@ test_expect_success "go-random is installed" '
     type random
 '
 
-test_add_cat_5MB
+test_add_cat_5MB "" "QmSr7FqYkxYWGoSfy8ZiaMWQ5vosb18DQGCzjwEQnVHkTb"
+
+test_add_cat_5MB --raw-leaves "QmefsDaD3YVphd86mxjJfPLceKv8by98aB6J6sJxK13xS2"
 
 test_add_cat_expensive
 
diff --git a/unixfs/io/dagreader.go b/unixfs/io/dagreader.go
index 4eb3e04c61d3c358c01c3cc551fa7bd360cfe9ad..44945dd31153d4f7984ed011ac4460af8d6fbf99 100644
--- a/unixfs/io/dagreader.go
+++ b/unixfs/io/dagreader.go
@@ -129,33 +129,36 @@ func (dr *DagReader) precalcNextBuf(ctx context.Context) error {
 	}
 	dr.linkPosition++
 
-	nxtpb, ok := nxt.(*mdag.ProtoNode)
-	if !ok {
-		return mdag.ErrNotProtobuf
-	}
-
-	pb := new(ftpb.Data)
-	err = proto.Unmarshal(nxtpb.Data(), pb)
-	if err != nil {
-		return fmt.Errorf("incorrectly formatted protobuf: %s", err)
-	}
+	switch nxt := nxt.(type) {
+	case *mdag.ProtoNode:
+		pb := new(ftpb.Data)
+		err = proto.Unmarshal(nxt.Data(), pb)
+		if err != nil {
+			return fmt.Errorf("incorrectly formatted protobuf: %s", err)
+		}
 
-	switch pb.GetType() {
-	case ftpb.Data_Directory:
-		// A directory should not exist within a file
-		return ft.ErrInvalidDirLocation
-	case ftpb.Data_File:
-		dr.buf = NewDataFileReader(dr.ctx, nxtpb, pb, dr.serv)
-		return nil
-	case ftpb.Data_Raw:
-		dr.buf = NewRSNCFromBytes(pb.GetData())
+		switch pb.GetType() {
+		case ftpb.Data_Directory:
+			// A directory should not exist within a file
+			return ft.ErrInvalidDirLocation
+		case ftpb.Data_File:
+			dr.buf = NewDataFileReader(dr.ctx, nxt, pb, dr.serv)
+			return nil
+		case ftpb.Data_Raw:
+			dr.buf = NewRSNCFromBytes(pb.GetData())
+			return nil
+		case ftpb.Data_Metadata:
+			return errors.New("shouldnt have had metadata object inside file")
+		case ftpb.Data_Symlink:
+			return errors.New("shouldnt have had symlink inside file")
+		default:
+			return ft.ErrUnrecognizedType
+		}
+	case *mdag.RawNode:
+		dr.buf = NewRSNCFromBytes(nxt.RawData())
 		return nil
-	case ftpb.Data_Metadata:
-		return errors.New("shouldnt have had metadata object inside file")
-	case ftpb.Data_Symlink:
-		return errors.New("shouldnt have had symlink inside file")
 	default:
-		return ft.ErrUnrecognizedType
+		return errors.New("unrecognized node type in DagReader")
 	}
 }