diff --git a/expr.go b/expr.go
index f778901..d9fdb40 100644
--- a/expr.go
+++ b/expr.go
@@ -75,7 +75,7 @@
 	return SerializableVar{Type: "literal", V: string(s)}
 }
 func (s literal) Dump(w io.Writer) {
-	dumpByte(w, ValueTypeLiteral)
+	dumpByte(w, valueTypeLiteral)
 	dumpBytes(w, []byte(s))
 }
 
@@ -91,7 +91,7 @@
 	return SerializableVar{Type: "tmpval", V: string(t)}
 }
 func (t tmpval) Dump(w io.Writer) {
-	dumpByte(w, ValueTypeTmpval)
+	dumpByte(w, valueTypeTmpval)
 	dumpBytes(w, t)
 }
 
@@ -120,7 +120,7 @@
 	return r
 }
 func (e Expr) Dump(w io.Writer) {
-	dumpByte(w, ValueTypeExpr)
+	dumpByte(w, valueTypeExpr)
 	dumpInt(w, len(e))
 	for _, v := range e {
 		v.Dump(w)
@@ -165,7 +165,7 @@
 	}
 }
 func (v *varref) Dump(w io.Writer) {
-	dumpByte(w, ValueTypeVarref)
+	dumpByte(w, valueTypeVarref)
 	v.varname.Dump(w)
 }
 
@@ -193,7 +193,7 @@
 }
 
 func (p paramref) Dump(w io.Writer) {
-	dumpByte(w, ValueTypeParamref)
+	dumpByte(w, valueTypeParamref)
 	dumpInt(w, int(p))
 }
 
@@ -243,7 +243,7 @@
 }
 
 func (v varsubst) Dump(w io.Writer) {
-	dumpByte(w, ValueTypeVarsubst)
+	dumpByte(w, valueTypeVarsubst)
 	v.varname.Dump(w)
 	v.pat.Dump(w)
 	v.subst.Dump(w)
diff --git a/func.go b/func.go
index b9f3fd9..84be00d 100644
--- a/func.go
+++ b/func.go
@@ -147,7 +147,7 @@
 }
 
 func (c *fclosure) Dump(w io.Writer) {
-	dumpByte(w, ValueTypeFunc)
+	dumpByte(w, valueTypeFunc)
 	for _, a := range c.args {
 		a.Dump(w)
 	}
@@ -972,7 +972,7 @@
 	}
 }
 func (f *funcNop) Dump(w io.Writer) {
-	dumpByte(w, ValueTypeNop)
+	dumpByte(w, valueTypeNop)
 }
 
 func parseAssignLiteral(s string) (lhs, op string, rhs Value, ok bool) {
@@ -1058,7 +1058,7 @@
 }
 
 func (f *funcEvalAssign) Dump(w io.Writer) {
-	dumpByte(w, ValueTypeAssign)
+	dumpByte(w, valueTypeAssign)
 	dumpString(w, f.lhs)
 	dumpString(w, f.op)
 	f.rhs.Dump(w)
diff --git a/para_test.go b/para_test.go
index 26f2669..bb39eb9 100644
--- a/para_test.go
+++ b/para_test.go
@@ -25,11 +25,11 @@
 	if err != nil {
 		panic(err)
 	}
-	ParaPath = filepath.Join(cwd, "para")
-	JobsFlag = 4
+	paraPath := filepath.Join(cwd, "para")
+	numJobs := 4
 
 	paraChan := make(chan *ParaResult)
-	para := NewParaWorker(paraChan)
+	para := newParaWorker(paraChan, numJobs, paraPath)
 	go para.Run()
 
 	numTasks := 100
diff --git a/serialize.go b/serialize.go
index 2b8c45c..7f26456 100644
--- a/serialize.go
+++ b/serialize.go
@@ -31,19 +31,19 @@
 )
 
 const (
-	ValueTypeRecursive = 'R'
-	ValueTypeSimple    = 'S'
-	ValueTypeTSV       = 'T'
-	ValueTypeUndefined = 'U'
-	ValueTypeAssign    = 'a'
-	ValueTypeExpr      = 'e'
-	ValueTypeFunc      = 'f'
-	ValueTypeLiteral   = 'l'
-	ValueTypeNop       = 'n'
-	ValueTypeParamref  = 'p'
-	ValueTypeVarref    = 'r'
-	ValueTypeVarsubst  = 's'
-	ValueTypeTmpval    = 't'
+	valueTypeRecursive = 'R'
+	valueTypeSimple    = 'S'
+	valueTypeTSV       = 'T'
+	valueTypeUndefined = 'U'
+	valueTypeAssign    = 'a'
+	valueTypeExpr      = 'e'
+	valueTypeFunc      = 'f'
+	valueTypeLiteral   = 'l'
+	valueTypeNop       = 'n'
+	valueTypeParamref  = 'p'
+	valueTypeVarref    = 'r'
+	valueTypeVarsubst  = 's'
+	valueTypeTmpval    = 't'
 )
 
 func dumpInt(w io.Writer, i int) {
diff --git a/var.go b/var.go
index 568316d..a28ae12 100644
--- a/var.go
+++ b/var.go
@@ -73,7 +73,7 @@
 }
 
 func (v *TargetSpecificVar) Dump(w io.Writer) {
-	dumpByte(w, ValueTypeTSV)
+	dumpByte(w, valueTypeTSV)
 	dumpString(w, v.op)
 	v.v.Dump(w)
 }
@@ -99,7 +99,7 @@
 	}
 }
 func (v *SimpleVar) Dump(w io.Writer) {
-	dumpByte(w, ValueTypeSimple)
+	dumpByte(w, valueTypeSimple)
 	dumpString(w, v.value)
 	dumpString(w, v.origin)
 }
@@ -188,7 +188,7 @@
 	}
 }
 func (v *RecursiveVar) Dump(w io.Writer) {
-	dumpByte(w, ValueTypeRecursive)
+	dumpByte(w, valueTypeRecursive)
 	v.expr.Dump(w)
 	dumpString(w, v.origin)
 }
@@ -238,7 +238,7 @@
 	return SerializableVar{Type: "undefined"}
 }
 func (UndefinedVar) Dump(w io.Writer) {
-	dumpByte(w, ValueTypeUndefined)
+	dumpByte(w, valueTypeUndefined)
 }
 
 func (UndefinedVar) Append(*Evaluator, string) Var {
