diff --git a/decode.go b/decode.go
index 4bb5130..3d4b128 100644
--- a/decode.go
+++ b/decode.go
@@ -7,9 +7,9 @@
 import "C"
 
 import (
-	"unsafe"
 	"reflect"
 	"strconv"
+	"unsafe"
 )
 
 const (
@@ -34,7 +34,6 @@
 	return C.GoString((*C.char)(unsafe.Pointer(s)))
 }
 
-
 // ----------------------------------------------------------------------------
 // Parser, produces a node tree out of a libyaml event stream.
 
@@ -196,7 +195,6 @@
 	return n
 }
 
-
 // ----------------------------------------------------------------------------
 // Decoder, unmarshals a node into a provided value.
 
@@ -292,7 +290,7 @@
 	}
 	d.aliases[n.value] = true
 	good = d.unmarshal(an, out)
-	d.aliases[n.value] = false, false
+	delete(d.aliases, n.value)
 	return good
 }
 
@@ -357,7 +355,7 @@
 			good = true
 		}
 	case reflect.Ptr:
-		switch resolved := resolved.(type) {
+		switch resolved.(type) {
 		case nil:
 			out.Set(reflect.Zero(out.Type()))
 			good = true
diff --git a/decode_test.go b/decode_test.go
index bd73dd4..36699d3 100644
--- a/decode_test.go
+++ b/decode_test.go
@@ -1,14 +1,12 @@
 package goyaml_test
 
-
 import (
 	. "launchpad.net/gocheck"
 	"launchpad.net/goyaml"
-	"reflect"
 	"math"
+	"reflect"
 )
 
-
 var unmarshalIntTest = 123
 
 var unmarshalTests = []struct {
@@ -131,7 +129,6 @@
 	{"a: &a [1, 2]\nb: *a", &struct{ B []int }{[]int{1, 2}}},
 }
 
-
 func (s *S) TestUnmarshal(c *C) {
 	for i, item := range unmarshalTests {
 		t := reflect.ValueOf(item.value).Type()
@@ -163,7 +160,7 @@
 	for _, item := range unmarshalErrorTests {
 		var value interface{}
 		err := goyaml.Unmarshal([]byte(item.data), &value)
-		c.Assert(err, Matches, item.error, Bug("Partial unmarshal: %#v", value))
+		c.Assert(err, ErrorMatches, item.error, Bug("Partial unmarshal: %#v", value))
 	}
 }
 
@@ -226,8 +223,8 @@
 	setterResult[2] = false
 	setterResult[4] = false
 	defer func() {
-		setterResult[2] = false, false
-		setterResult[4] = false, false
+		delete(setterResult, 2)
+		delete(setterResult, 4)
 	}()
 
 	m := map[string]*typeWithSetter{}
diff --git a/encode.go b/encode.go
index ad414e2..666258d 100644
--- a/encode.go
+++ b/encode.go
@@ -5,11 +5,10 @@
 
 import (
 	"reflect"
-	"unsafe"
 	"strconv"
+	"unsafe"
 )
 
-
 type encoder struct {
 	emitter C.yaml_emitter_t
 	event   C.yaml_event_t
@@ -19,7 +18,6 @@
 	flow    bool
 }
 
-
 //export outputHandler
 func outputHandler(data unsafe.Pointer, buffer *C.uchar, size C.size_t) C.int {
 	e := (*encoder)(data)
@@ -253,7 +251,7 @@
 }
 
 func (e *encoder) emitScalar(value, anchor, tag string,
-style C.yaml_scalar_style_t) {
+	style C.yaml_scalar_style_t) {
 	var canchor, ctag, cvalue *C.yaml_char_t
 	var cimplicit C.int
 	var free func()
diff --git a/encode_test.go b/encode_test.go
index 3fd69c5..a37adf9 100644
--- a/encode_test.go
+++ b/encode_test.go
@@ -1,6 +1,5 @@
 package goyaml_test
 
-
 import (
 	. "launchpad.net/gocheck"
 	"launchpad.net/goyaml"
@@ -94,7 +93,6 @@
 		}{struct{ B string }{"c"}}},
 }
 
-
 func (s *S) TestMarshal(c *C) {
 	for _, item := range marshalTests {
 		data, err := goyaml.Marshal(item.value)
diff --git a/goyaml.go b/goyaml.go
index 7c2d98e..e7ba7a3 100644
--- a/goyaml.go
+++ b/goyaml.go
@@ -10,15 +10,15 @@
 package goyaml
 
 import (
+	"errors"
 	"fmt"
 	"reflect"
 	"runtime"
 	"strings"
 	"sync"
-	"os"
 )
 
-func handleErr(err *os.Error) {
+func handleErr(err *error) {
 	if r := recover(); r != nil {
 		if _, ok := r.(runtime.Error); ok {
 			panic(r)
@@ -27,8 +27,8 @@
 		} else if _, ok := r.(externalPanic); ok {
 			panic(r)
 		} else if s, ok := r.(string); ok {
-			*err = os.NewError("YAML error: " + s)
-		} else if e, ok := r.(os.Error); ok {
+			*err = errors.New("YAML error: " + s)
+		} else if e, ok := r.(error); ok {
 			*err = e
 		} else {
 			panic(r)
@@ -84,7 +84,7 @@
 //     var T t
 //     goyaml.Unmarshal([]byte("a: 1\nb: 2"), &t)
 // 
-func Unmarshal(in []byte, out interface{}) (err os.Error) {
+func Unmarshal(in []byte, out interface{}) (err error) {
 	defer handleErr(&err)
 	d := newDecoder()
 	p := newParser(in)
@@ -128,7 +128,7 @@
 //     goyaml.Marshal(&T{B: 2}) // Returns "b: 2\n"
 //     goyaml.Marshal(&T{F: 1}} // Returns "a: 1\nb: 0\n"
 //
-func Marshal(in interface{}) (out []byte, err os.Error) {
+func Marshal(in interface{}) (out []byte, err error) {
 	defer handleErr(&err)
 	e := newEncoder()
 	defer e.destroy()
@@ -138,7 +138,6 @@
 	return
 }
 
-
 // --------------------------------------------------------------------------
 // Maintain a mapping of keys to structure field indexes
 
@@ -165,7 +164,7 @@
 	return string(e)
 }
 
-func getStructFields(st reflect.Type) (*structFields, os.Error) {
+func getStructFields(st reflect.Type) (*structFields, error) {
 	path := st.PkgPath()
 	name := st.Name()
 
@@ -235,7 +234,7 @@
 
 		if _, found = fieldsMap[info.Key]; found {
 			msg := "Duplicated key '" + info.Key + "' in struct " + st.String()
-			return nil, os.NewError(msg)
+			return nil, errors.New(msg)
 		}
 
 		fieldsList[len(fieldsMap)] = info
diff --git a/resolve.go b/resolve.go
index 36f43ff..577e1b9 100644
--- a/resolve.go
+++ b/resolve.go
@@ -1,12 +1,11 @@
 package goyaml
 
 import (
+	"math"
 	"strconv"
 	"strings"
-	"math"
 )
 
-
 // TODO: merge, timestamps, base 60 floats, omap.
 
 
@@ -18,7 +17,6 @@
 var resolveTable = make([]byte, 256)
 var resolveMap = make(map[string]resolveMapItem)
 
-
 func init() {
 	t := resolveTable
 	t[int('+')] = 'S' // Sign
diff --git a/suite_test.go b/suite_test.go
index 03359cd..963ab0b 100644
--- a/suite_test.go
+++ b/suite_test.go
@@ -1,6 +1,5 @@
 package goyaml_test
 
-
 import (
 	. "launchpad.net/gocheck"
 	"testing"
