diff --git a/cmd/sb/commands/dump.go b/cmd/sb/commands/dump.go
index 324dc3b..a2b0cfd 100644
--- a/cmd/sb/commands/dump.go
+++ b/cmd/sb/commands/dump.go
@@ -11,10 +11,6 @@
 	"v.io/v23/context"
 	"v.io/v23/syncbase"
 	"v.io/x/lib/cmdline"
-
-	// TODO(zsterling): This is a temporary hack-around to avoid a permissions issue.
-	// Investigate why this is needed and how to get rid of it.
-	_ "v.io/x/ref/cmd/sb/internal/demodb"
 )
 
 var cmdDump = &cmdline.Command{
diff --git a/cmd/sb/internal/writer/writer.go b/cmd/sb/internal/writer/writer.go
index 71c66b6..88a15c0 100644
--- a/cmd/sb/internal/writer/writer.go
+++ b/cmd/sb/internal/writer/writer.go
@@ -51,7 +51,7 @@
 		row := make([]string, len(columnNames))
 		columnCount := rs.ResultCount()
 		for i := 0; i != columnCount; i++ {
-			var column interface{}
+			var column *vdl.Value
 			if err := rs.Result(i, &column); err != nil {
 				return err
 			}
@@ -61,7 +61,7 @@
 			if justification[i] == Unknown {
 				justification[i] = getJustification(column)
 			}
-			columnStr := toStringRaw(column, false)
+			columnStr := toString(column, false)
 			row[i] = columnStr
 			columnLen := utf8.RuneCountInString(columnStr)
 			if columnLen > columnWidths[i] {
@@ -107,11 +107,11 @@
 	io.WriteString(out, "-+\n")
 }
 
-func getJustification(val interface{}) Justification {
-	switch val.(type) {
+func getJustification(val *vdl.Value) Justification {
+	switch val.Kind() {
 	// TODO(kash): Floating point numbers should have the decimal point line up.
-	case bool, uint8, uint16, uint32, uint64, int8, int16, int32, int64,
-		float32, float64, complex64, complex128, int, uint, uintptr:
+	case vdl.Bool, vdl.Byte, vdl.Uint16, vdl.Uint32, vdl.Uint64, vdl.Int8,
+		vdl.Int16, vdl.Int32, vdl.Int64, vdl.Float32, vdl.Float64:
 		return Right
 	// TODO(kash): Leave nil values as unknown.
 	default:
@@ -140,11 +140,11 @@
 	for rs.Advance() {
 		delim := ""
 		for i, n := 0, rs.ResultCount(); i != n; i++ {
-			var column interface{}
+			var column *vdl.Value
 			if err := rs.Result(i, &column); err != nil {
 				return err
 			}
-			str := doubleQuoteForCSV(toStringRaw(column, false), c.delimiter)
+			str := doubleQuoteForCSV(toString(column, false), c.delimiter)
 			io.WriteString(c.w, fmt.Sprintf("%s%s", delim, str))
 			delim = c.delimiter
 		}
@@ -193,7 +193,7 @@
 		io.WriteString(j.w, bOpen)
 		linestart := "\n  "
 		for i, n := 0, rs.ResultCount(); i != n; i++ {
-			var column interface{}
+			var column *vdl.Value
 			if err := rs.Result(i, &column); err != nil {
 				return err
 			}
@@ -208,10 +208,6 @@
 	return rs.Err()
 }
 
-func toStringRaw(rb interface{}, nested bool) string {
-	return toString(vdl.ValueOf(rb), nested)
-}
-
 // Converts VDL value to readable yet parseable string representation.
 // If nested is not set, strings outside composites are left unquoted.
 // TODO(ivanpi): Handle cycles and improve non-tree DAG handling.
@@ -319,8 +315,8 @@
 }
 
 // Converts VDL value to JSON representation.
-func toJson(val interface{}) string {
-	jf := toJsonFriendly(vdl.ValueOf(val))
+func toJson(val *vdl.Value) string {
+	jf := toJsonFriendly(val)
 	jOut, err := json.Marshal(jf)
 	if err != nil {
 		panic(fmt.Sprintf("JSON marshalling failed: %v", err))
diff --git a/cmd/sb/internal/writer/writer_test.go b/cmd/sb/internal/writer/writer_test.go
index 982e6ce..e4b8c2f 100644
--- a/cmd/sb/internal/writer/writer_test.go
+++ b/cmd/sb/internal/writer/writer_test.go
@@ -19,7 +19,7 @@
 )
 
 type fakeResultStream struct {
-	rows [][]interface{}
+	rows [][]vdl.Value
 	curr int
 }
 
@@ -58,11 +58,11 @@
 }
 
 func newResultStream(iRows [][]interface{}) syncbase.ResultStream {
-	vRows := make([][]interface{}, len(iRows))
+	vRows := make([][]vdl.Value, len(iRows))
 	for i, iRow := range iRows {
-		vRow := make([]interface{}, len(iRow))
+		vRow := make([]vdl.Value, len(iRow))
 		for j, iCol := range iRow {
-			vRow[j] = iCol
+			vRow[j] = *vdl.ValueOf(iCol)
 		}
 		vRows[i] = vRow
 	}
@@ -89,8 +89,8 @@
 		panic("call advance first")
 	}
 	switch intf := value.(type) {
-	case *interface{}:
-		*intf = f.rows[f.curr][i]
+	case **vdl.Value:
+		*intf = &f.rows[f.curr][i]
 	default:
 		err = fmt.Errorf("unsupported value type: %t", value)
 	}
