diff --git a/api_c.go b/api_c.go
index 6d75786..ded1b99 100644
--- a/api_c.go
+++ b/api_c.go
@@ -27,14 +27,8 @@
 // Create a new parser object.
 func yaml_parser_initialize(parser *yaml_parser_t) bool {
 	*parser = yaml_parser_t{
-		raw_buffer:     make([]byte, 0, input_raw_buffer_size),
-		buffer:         make([]byte, 0, input_buffer_size),
-		//tokens:         make([]yaml_token_t, 0, initial_queue_size),
-		//indents:        make([]int, 0, initial_stack_size),
-		//simple_keys:    make([]yaml_simple_key_t, 0, initial_stack_size),
-		//states:         make([]yaml_parser_state_t, 0, initial_stack_size),
-		//marks:          make([]yaml_mark_t, 0, initial_stack_size),
-		//tag_directives: make([]yaml_tag_directive_t, 0, initial_stack_size),
+		raw_buffer: make([]byte, 0, input_raw_buffer_size),
+		buffer:     make([]byte, 0, input_buffer_size),
 	}
 	return true
 }
@@ -88,14 +82,11 @@
 
 // Create a new emitter object.
 func yaml_emitter_initialize(emitter *yaml_emitter_t) bool {
-	// [Go] These should be initialized lazily instead.
 	*emitter = yaml_emitter_t{
 		buffer:         make([]byte, output_buffer_size),
 		raw_buffer:     make([]byte, 0, output_raw_buffer_size),
 		states:         make([]yaml_emitter_state_t, 0, initial_stack_size),
 		events:         make([]yaml_event_t, 0, initial_queue_size),
-		indents:        make([]int, 0, initial_stack_size),
-		tag_directives: make([]yaml_tag_directive_t, 0, initial_stack_size),
 	}
 	return true
 }
@@ -263,9 +254,9 @@
 // Create STREAM-START.
 func yaml_stream_start_event_initialize(event *yaml_event_t, encoding yaml_encoding_t) bool {
 	*event = yaml_event_t{
-		typ: yaml_STREAM_START_EVENT,
+		typ:      yaml_STREAM_START_EVENT,
+		encoding: encoding,
 	}
-	event.stream_start.encoding = encoding
 	return true
 }
 
@@ -280,34 +271,21 @@
 // Create DOCUMENT-START.
 func yaml_document_start_event_initialize(event *yaml_event_t, version_directive *yaml_version_directive_t,
 	tag_directives []yaml_tag_directive_t, implicit bool) bool {
-
-	// [Go] It doesn't sound necessary to perform these copies
-	// given that with garbage collection ownership is handled.
-	var version_directive_copy *yaml_version_directive_t
-	var tag_directives_copy []yaml_tag_directive_t
-	if version_directive != nil {
-		copy := *version_directive
-		version_directive_copy = &copy
-	}
-	if len(tag_directives) > 0 {
-		tag_directives_copy = append([]yaml_tag_directive_t(nil), tag_directives...)
-	}
-
 	*event = yaml_event_t{
-		typ: yaml_DOCUMENT_START_EVENT,
+		typ:               yaml_DOCUMENT_START_EVENT,
+		version_directive: version_directive,
+		tag_directives:    tag_directives,
+		implicit:          implicit,
 	}
-	event.document_start.version_directive = version_directive_copy
-	event.document_start.tag_directives = tag_directives_copy
-	event.document_start.implicit = implicit
 	return true
 }
 
 // Create DOCUMENT-END.
 func yaml_document_end_event_initialize(event *yaml_event_t, implicit bool) bool {
 	*event = yaml_event_t{
-		typ: yaml_DOCUMENT_END_EVENT,
+		typ:      yaml_DOCUMENT_END_EVENT,
+		implicit: implicit,
 	}
-	event.document_end.implicit = implicit
 	return true
 }
 
@@ -336,56 +314,28 @@
 //}
 
 // Create SCALAR.
-func yaml_scalar_event_initialize(event *yaml_event_t, anchor, tag, value []byte,
-	plain_implicit, quoted_implicit bool, style yaml_scalar_style_t) bool {
-	var anchor_copy, tag_copy, value_copy []byte
-
-	// [Go] These copies are probably not necessary in Go, where
-	// ownership of data is more flexible due to garbage collection.
-	if len(anchor) > 0 {
-		//if !yaml_check_utf8(anchor) { return false }
-		anchor_copy = append([]byte(nil), anchor...)
-	}
-	if len(tag) > 0 {
-		//if !yaml_check_utf8(tag) { return false }
-		tag_copy = append([]byte(nil), tag...)
-	}
-	//if !yaml_check_utf8(value) { return false }
-	value_copy = append([]byte(nil), value...)
-
+func yaml_scalar_event_initialize(event *yaml_event_t, anchor, tag, value []byte, plain_implicit, quoted_implicit bool, style yaml_scalar_style_t) bool {
 	*event = yaml_event_t{
-		typ: yaml_SCALAR_EVENT,
+		typ:             yaml_SCALAR_EVENT,
+		anchor:          anchor,
+		tag:             tag,
+		value:           value,
+		implicit:        plain_implicit,
+		quoted_implicit: quoted_implicit,
+		style:           yaml_style_t(style),
 	}
-	event.scalar.anchor = anchor_copy
-	event.scalar.tag = tag_copy
-	event.scalar.value = value_copy
-	event.scalar.plain_implicit = plain_implicit
-	event.scalar.quoted_implicit = quoted_implicit
-	event.scalar.style = style
 	return true
 }
 
 // Create SEQUENCE-START.
 func yaml_sequence_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_sequence_style_t) bool {
-	// [Go] These copies are probably not necessary in Go, where
-	// ownership of data is more flexible due to garbage collection.
-	var anchor_copy, tag_copy []byte
-	if len(anchor) > 0 {
-		//if !yaml_check_utf8(anchor) { return false }
-		anchor_copy = append([]byte(nil), anchor...)
-	}
-	if len(tag) > 0 {
-		//if !yaml_check_utf8(tag) { return false }
-		tag_copy = append([]byte(nil), tag...)
-	}
-
 	*event = yaml_event_t{
-		typ: yaml_SEQUENCE_START_EVENT,
+		typ:      yaml_SEQUENCE_START_EVENT,
+		anchor:   anchor,
+		tag:      tag,
+		implicit: implicit,
+		style:    yaml_style_t(style),
 	}
-	event.sequence_start.anchor = anchor_copy
-	event.sequence_start.tag = tag_copy
-	event.sequence_start.implicit = implicit
-	event.sequence_start.style = style
 	return true
 }
 
@@ -399,25 +349,13 @@
 
 // Create MAPPING-START.
 func yaml_mapping_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_mapping_style_t) bool {
-	// [Go] These copies are probably not necessary in Go, where
-	// ownership of data is more flexible due to garbage collection.
-	var anchor_copy, tag_copy []byte
-	if len(anchor) > 0 {
-		//if !yaml_check_utf8(anchor) { return false }
-		anchor_copy = append([]byte(nil), anchor...)
-	}
-	if len(tag) > 0 {
-		//if !yaml_check_utf8(tag) { return false }
-		tag_copy = append([]byte(nil), tag...)
-	}
-
 	*event = yaml_event_t{
-		typ: yaml_MAPPING_START_EVENT,
+		typ:      yaml_MAPPING_START_EVENT,
+		anchor:   anchor,
+		tag:      tag,
+		implicit: implicit,
+		style:    yaml_style_t(style),
 	}
-	event.mapping_start.anchor = anchor_copy
-	event.mapping_start.tag = tag_copy
-	event.mapping_start.implicit = implicit
-	event.mapping_start.style = style
 	return true
 }
 
diff --git a/decode.go b/decode.go
index 6179e66..e7fb29b 100644
--- a/decode.go
+++ b/decode.go
@@ -143,25 +143,24 @@
 
 func (p *parser) alias() *node {
 	n := p.node(aliasNode)
-	n.value = string(p.event.alias.anchor)
+	n.value = string(p.event.anchor)
 	p.skip()
 	return n
 }
 
 func (p *parser) scalar() *node {
-	scalar := p.event.scalar
 	n := p.node(scalarNode)
-	n.value = string(scalar.value)
-	n.tag = string(scalar.tag)
-	n.implicit = scalar.plain_implicit
-	p.anchor(n, scalar.anchor)
+	n.value = string(p.event.value)
+	n.tag = string(p.event.tag)
+	n.implicit = p.event.implicit
+	p.anchor(n, p.event.anchor)
 	p.skip()
 	return n
 }
 
 func (p *parser) sequence() *node {
 	n := p.node(sequenceNode)
-	p.anchor(n, p.event.sequence_start.anchor)
+	p.anchor(n, p.event.anchor)
 	p.skip()
 	for p.event.typ != yaml_SEQUENCE_END_EVENT {
 		n.children = append(n.children, p.parse())
@@ -172,7 +171,7 @@
 
 func (p *parser) mapping() *node {
 	n := p.node(mappingNode)
-	p.anchor(n, p.event.mapping_start.anchor)
+	p.anchor(n, p.event.anchor)
 	p.skip()
 	for p.event.typ != yaml_MAPPING_END_EVENT {
 		n.children = append(n.children, p.parse(), p.parse())
diff --git a/decode_test.go b/decode_test.go
index 89a9fdb..8970b98 100644
--- a/decode_test.go
+++ b/decode_test.go
@@ -1,6 +1,7 @@
 package goyaml_test
 
 import (
+	"io/ioutil"
 	. "launchpad.net/gocheck"
 	"launchpad.net/goyaml"
 	"math"
@@ -437,31 +438,31 @@
 	c.Assert(m["ghi"].value, Equals, 3)
 }
 
-//var data []byte
-//func init() {
-//	var err error
-//	data, err = ioutil.ReadFile("/tmp/file.yaml")
-//	if err != nil {
-//		panic(err)
-//	}
-//}
-//
-//func (s *S) BenchmarkUnmarshal(c *C) {
-//	var err error
-//	for i := 0; i < c.N; i++ {
-//		var v map[string]interface{}
-//		err = goyaml.Unmarshal(data, &v)
-//	}
-//	if err != nil {
-//		panic(err)
-//	}
-//}
-//
-//func (s *S) BenchmarkMarshal(c *C) {
-//	var v map[string]interface{}
-//	goyaml.Unmarshal(data, &v)
-//	c.ResetTimer()
-//	for i := 0; i < c.N; i++ {
-//		goyaml.Marshal(&v)
-//	}
-//}
+var data []byte
+func init() {
+	var err error
+	data, err = ioutil.ReadFile("/tmp/file.yaml")
+	if err != nil {
+		panic(err)
+	}
+}
+
+func (s *S) BenchmarkUnmarshal(c *C) {
+	var err error
+	for i := 0; i < c.N; i++ {
+		var v map[string]interface{}
+		err = goyaml.Unmarshal(data, &v)
+	}
+	if err != nil {
+		panic(err)
+	}
+}
+
+func (s *S) BenchmarkMarshal(c *C) {
+	var v map[string]interface{}
+	goyaml.Unmarshal(data, &v)
+	c.ResetTimer()
+	for i := 0; i < c.N; i++ {
+		goyaml.Marshal(&v)
+	}
+}
diff --git a/emitter_c.go b/emitter_c.go
index 507a2fd..ac63f28 100644
--- a/emitter_c.go
+++ b/emitter_c.go
@@ -274,7 +274,7 @@
 		return yaml_emitter_set_emitter_error(emitter, "expected STREAM-START")
 	}
 	if emitter.encoding == yaml_ANY_ENCODING {
-		emitter.encoding = event.stream_start.encoding
+		emitter.encoding = event.encoding
 		if emitter.encoding == yaml_ANY_ENCODING {
 			emitter.encoding = yaml_UTF8_ENCODING
 		}
@@ -312,14 +312,14 @@
 
 	if event.typ == yaml_DOCUMENT_START_EVENT {
 
-		if event.document_start.version_directive != nil {
-			if !yaml_emitter_analyze_version_directive(emitter, event.document_start.version_directive) {
+		if event.version_directive != nil {
+			if !yaml_emitter_analyze_version_directive(emitter, event.version_directive) {
 				return false
 			}
 		}
 
-		for i := 0; i < len(event.document_start.tag_directives); i++ {
-			tag_directive := &event.document_start.tag_directives[i]
+		for i := 0; i < len(event.tag_directives); i++ {
+			tag_directive := &event.tag_directives[i]
 			if !yaml_emitter_analyze_tag_directive(emitter, tag_directive) {
 				return false
 			}
@@ -335,12 +335,12 @@
 			}
 		}
 
-		implicit := event.document_start.implicit
+		implicit := event.implicit
 		if !first || emitter.canonical {
 			implicit = false
 		}
 
-		if emitter.open_ended && (event.document_start.version_directive != nil || len(event.document_start.tag_directives) > 0) {
+		if emitter.open_ended && (event.version_directive != nil || len(event.tag_directives) > 0) {
 			if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) {
 				return false
 			}
@@ -349,7 +349,7 @@
 			}
 		}
 
-		if event.document_start.version_directive != nil {
+		if event.version_directive != nil {
 			implicit = false
 			if !yaml_emitter_write_indicator(emitter, []byte("%YAML"), true, false, false) {
 				return false
@@ -362,10 +362,10 @@
 			}
 		}
 
-		if len(event.document_start.tag_directives) > 0 {
+		if len(event.tag_directives) > 0 {
 			implicit = false
-			for i := 0; i < len(event.document_start.tag_directives); i++ {
-				tag_directive := &event.document_start.tag_directives[i]
+			for i := 0; i < len(event.tag_directives); i++ {
+				tag_directive := &event.tag_directives[i]
 				if !yaml_emitter_write_indicator(emitter, []byte("%TAG"), true, false, false) {
 					return false
 				}
@@ -435,7 +435,7 @@
 	if !yaml_emitter_write_indent(emitter) {
 		return false
 	}
-	if !event.document_end.implicit {
+	if !event.implicit {
 		// [Go] Allocate the slice elsewhere.
 		if !yaml_emitter_write_indicator(emitter, []byte("..."), true, false, false) {
 			return false
@@ -711,8 +711,7 @@
 	if !yaml_emitter_process_tag(emitter) {
 		return false
 	}
-	if emitter.flow_level > 0 || emitter.canonical ||
-		event.sequence_start.style == yaml_FLOW_SEQUENCE_STYLE ||
+	if emitter.flow_level > 0 || emitter.canonical || event.sequence_style() == yaml_FLOW_SEQUENCE_STYLE ||
 		yaml_emitter_check_empty_sequence(emitter) {
 		emitter.state = yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE
 	} else {
@@ -729,8 +728,7 @@
 	if !yaml_emitter_process_tag(emitter) {
 		return false
 	}
-	if emitter.flow_level > 0 || emitter.canonical ||
-		event.mapping_start.style == yaml_FLOW_MAPPING_STYLE ||
+	if emitter.flow_level > 0 || emitter.canonical || event.mapping_style() == yaml_FLOW_MAPPING_STYLE ||
 		yaml_emitter_check_empty_mapping(emitter) {
 		emitter.state = yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE
 	} else {
@@ -800,11 +798,11 @@
 func yaml_emitter_select_scalar_style(emitter *yaml_emitter_t, event *yaml_event_t) bool {
 
 	no_tag := len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0
-	if no_tag && !event.scalar.plain_implicit && !event.scalar.quoted_implicit {
+	if no_tag && !event.implicit && !event.quoted_implicit {
 		return yaml_emitter_set_emitter_error(emitter, "neither tag nor implicit flags are specified")
 	}
 
-	style := event.scalar.style
+	style := event.scalar_style()
 	if style == yaml_ANY_SCALAR_STYLE {
 		style = yaml_PLAIN_SCALAR_STYLE
 	}
@@ -823,7 +821,7 @@
 		if len(emitter.scalar_data.value) == 0 && (emitter.flow_level > 0 || emitter.simple_key_context) {
 			style = yaml_SINGLE_QUOTED_SCALAR_STYLE
 		}
-		if no_tag && !event.scalar.plain_implicit {
+		if no_tag && !event.implicit {
 			style = yaml_SINGLE_QUOTED_SCALAR_STYLE
 		}
 	}
@@ -838,7 +836,7 @@
 		}
 	}
 
-	if no_tag && !event.scalar.quoted_implicit && style != yaml_PLAIN_SCALAR_STYLE {
+	if no_tag && !event.quoted_implicit && style != yaml_PLAIN_SCALAR_STYLE {
 		emitter.tag_data.handle = []byte{'!'}
 	}
 	emitter.scalar_data.style = style
@@ -1141,45 +1139,45 @@
 
 	switch event.typ {
 	case yaml_ALIAS_EVENT:
-		if !yaml_emitter_analyze_anchor(emitter, event.alias.anchor, true) {
+		if !yaml_emitter_analyze_anchor(emitter, event.anchor, true) {
 			return false
 		}
 
 	case yaml_SCALAR_EVENT:
-		if len(event.scalar.anchor) > 0 {
-			if !yaml_emitter_analyze_anchor(emitter, event.scalar.anchor, false) {
+		if len(event.anchor) > 0 {
+			if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) {
 				return false
 			}
 		}
-		if len(event.scalar.tag) > 0 && (emitter.canonical || (!event.scalar.plain_implicit && !event.scalar.quoted_implicit)) {
-			if !yaml_emitter_analyze_tag(emitter, event.scalar.tag) {
+		if len(event.tag) > 0 && (emitter.canonical || (!event.implicit && !event.quoted_implicit)) {
+			if !yaml_emitter_analyze_tag(emitter, event.tag) {
 				return false
 			}
 		}
-		if !yaml_emitter_analyze_scalar(emitter, event.scalar.value) {
+		if !yaml_emitter_analyze_scalar(emitter, event.value) {
 			return false
 		}
 
 	case yaml_SEQUENCE_START_EVENT:
-		if len(event.sequence_start.anchor) > 0 {
-			if !yaml_emitter_analyze_anchor(emitter, event.sequence_start.anchor, false) {
+		if len(event.anchor) > 0 {
+			if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) {
 				return false
 			}
 		}
-		if len(event.sequence_start.tag) > 0 && (emitter.canonical || !event.sequence_start.implicit) {
-			if !yaml_emitter_analyze_tag(emitter, event.sequence_start.tag) {
+		if len(event.tag) > 0 && (emitter.canonical || !event.implicit) {
+			if !yaml_emitter_analyze_tag(emitter, event.tag) {
 				return false
 			}
 		}
 
 	case yaml_MAPPING_START_EVENT:
-		if len(event.mapping_start.anchor) > 0 {
-			if !yaml_emitter_analyze_anchor(emitter, event.mapping_start.anchor, false) {
+		if len(event.anchor) > 0 {
+			if !yaml_emitter_analyze_anchor(emitter, event.anchor, false) {
 				return false
 			}
 		}
-		if len(event.mapping_start.tag) > 0 && (emitter.canonical || !event.mapping_start.implicit) {
-			if !yaml_emitter_analyze_tag(emitter, event.mapping_start.tag) {
+		if len(event.tag) > 0 && (emitter.canonical || !event.implicit) {
+			if !yaml_emitter_analyze_tag(emitter, event.tag) {
 				return false
 			}
 		}
diff --git a/parser_c.go b/parser_c.go
index 5210b4f..0fdfa4e 100644
--- a/parser_c.go
+++ b/parser_c.go
@@ -185,8 +185,8 @@
 		typ:        yaml_STREAM_START_EVENT,
 		start_mark: token.start_mark,
 		end_mark:   token.end_mark,
+		encoding:   token.encoding,
 	}
-	event.stream_start.encoding = token.stream_start.encoding
 	skip_token(parser)
 	return true
 }
@@ -253,13 +253,13 @@
 		end_mark := token.end_mark
 
 		*event = yaml_event_t{
-			typ:        yaml_DOCUMENT_START_EVENT,
-			start_mark: start_mark,
-			end_mark:   end_mark,
+			typ:               yaml_DOCUMENT_START_EVENT,
+			start_mark:        start_mark,
+			end_mark:          end_mark,
+			version_directive: version_directive,
+			tag_directives:    tag_directives,
+			implicit:          false,
 		}
-		event.document_start.version_directive = version_directive
-		event.document_start.tag_directives = tag_directives
-		event.document_start.implicit = false
 		skip_token(parser)
 
 	} else {
@@ -326,8 +326,8 @@
 		typ:        yaml_DOCUMENT_END_EVENT,
 		start_mark: start_mark,
 		end_mark:   end_mark,
+		implicit:   implicit,
 	}
-	event.document_start.implicit = implicit
 	return true
 }
 
@@ -372,8 +372,8 @@
 			typ:        yaml_ALIAS_EVENT,
 			start_mark: token.start_mark,
 			end_mark:   token.end_mark,
+			anchor:     token.value,
 		}
-		event.alias.anchor = token.alias.value
 		skip_token(parser)
 		return true
 	}
@@ -385,7 +385,7 @@
 	var tag_handle, tag_suffix, anchor []byte
 	var tag_mark yaml_mark_t
 	if token.typ == yaml_ANCHOR_TOKEN {
-		anchor = token.anchor.value
+		anchor = token.value
 		start_mark = token.start_mark
 		end_mark = token.end_mark
 		skip_token(parser)
@@ -395,8 +395,8 @@
 		}
 		if token.typ == yaml_TAG_TOKEN {
 			tag_token = true
-			tag_handle = token.tag.handle
-			tag_suffix = token.tag.suffix
+			tag_handle = token.value
+			tag_suffix = token.suffix
 			tag_mark = token.start_mark
 			end_mark = token.end_mark
 			skip_token(parser)
@@ -407,8 +407,8 @@
 		}
 	} else if token.typ == yaml_TAG_TOKEN {
 		tag_token = true
-		tag_handle = token.tag.handle
-		tag_suffix = token.tag.suffix
+		tag_handle = token.value
+		tag_suffix = token.suffix
 		start_mark = token.start_mark
 		tag_mark = token.start_mark
 		end_mark = token.end_mark
@@ -418,7 +418,7 @@
 			return false
 		}
 		if token.typ == yaml_ANCHOR_TOKEN {
-			anchor = token.anchor.value
+			anchor = token.value
 			end_mark = token.end_mark
 			skip_token(parser)
 			token = peek_token(parser)
@@ -458,17 +458,17 @@
 			typ:        yaml_SEQUENCE_START_EVENT,
 			start_mark: start_mark,
 			end_mark:   end_mark,
+			anchor:     anchor,
+			tag:        tag,
+			implicit:   implicit,
+			style:      yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE),
 		}
-		event.sequence_start.anchor = anchor
-		event.sequence_start.tag = tag
-		event.sequence_start.implicit = implicit
-		event.sequence_start.style = yaml_BLOCK_SEQUENCE_STYLE
 		return true
 	}
 	if token.typ == yaml_SCALAR_TOKEN {
 		var plain_implicit, quoted_implicit bool
 		end_mark = token.end_mark
-		if (len(tag) == 0 && token.scalar.style == yaml_PLAIN_SCALAR_STYLE) || (len(tag) == 1 && tag[0] == '!') {
+		if (len(tag) == 0 && token.style == yaml_PLAIN_SCALAR_STYLE) || (len(tag) == 1 && tag[0] == '!') {
 			plain_implicit = true
 		} else if len(tag) == 0 {
 			quoted_implicit = true
@@ -477,16 +477,16 @@
 		parser.states = parser.states[:len(parser.states)-1]
 
 		*event = yaml_event_t{
-			typ:        yaml_SCALAR_EVENT,
-			start_mark: start_mark,
-			end_mark:   end_mark,
+			typ:             yaml_SCALAR_EVENT,
+			start_mark:      start_mark,
+			end_mark:        end_mark,
+			anchor:          anchor,
+			tag:             tag,
+			value:           token.value,
+			implicit:        plain_implicit,
+			quoted_implicit: quoted_implicit,
+			style:           yaml_style_t(token.style),
 		}
-		event.scalar.anchor = anchor
-		event.scalar.tag = tag
-		event.scalar.value = token.scalar.value
-		event.scalar.plain_implicit = plain_implicit
-		event.scalar.quoted_implicit = quoted_implicit
-		event.scalar.style = token.scalar.style
 		skip_token(parser)
 		return true
 	}
@@ -498,11 +498,11 @@
 			typ:        yaml_SEQUENCE_START_EVENT,
 			start_mark: start_mark,
 			end_mark:   end_mark,
+			anchor:     anchor,
+			tag:        tag,
+			implicit:   implicit,
+			style:      yaml_style_t(yaml_FLOW_SEQUENCE_STYLE),
 		}
-		event.sequence_start.anchor = anchor
-		event.sequence_start.tag = tag
-		event.sequence_start.implicit = implicit
-		event.sequence_start.style = yaml_FLOW_SEQUENCE_STYLE
 		return true
 	}
 	if token.typ == yaml_FLOW_MAPPING_START_TOKEN {
@@ -512,11 +512,11 @@
 			typ:        yaml_MAPPING_START_EVENT,
 			start_mark: start_mark,
 			end_mark:   end_mark,
+			anchor:     anchor,
+			tag:        tag,
+			implicit:   implicit,
+			style:      yaml_style_t(yaml_FLOW_MAPPING_STYLE),
 		}
-		event.mapping_start.anchor = anchor
-		event.mapping_start.tag = tag
-		event.mapping_start.implicit = implicit
-		event.mapping_start.style = yaml_FLOW_MAPPING_STYLE
 		return true
 	}
 	if block && token.typ == yaml_BLOCK_SEQUENCE_START_TOKEN {
@@ -526,11 +526,11 @@
 			typ:        yaml_SEQUENCE_START_EVENT,
 			start_mark: start_mark,
 			end_mark:   end_mark,
+			anchor:     anchor,
+			tag:        tag,
+			implicit:   implicit,
+			style:      yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE),
 		}
-		event.sequence_start.anchor = anchor
-		event.sequence_start.tag = tag
-		event.sequence_start.implicit = implicit
-		event.sequence_start.style = yaml_BLOCK_SEQUENCE_STYLE
 		return true
 	}
 	if block && token.typ == yaml_BLOCK_MAPPING_START_TOKEN {
@@ -540,11 +540,11 @@
 			typ:        yaml_MAPPING_START_EVENT,
 			start_mark: start_mark,
 			end_mark:   end_mark,
+			anchor:     anchor,
+			tag:        tag,
+			implicit:   implicit,
+			style:      yaml_style_t(yaml_BLOCK_MAPPING_STYLE),
 		}
-		event.mapping_start.anchor = anchor
-		event.mapping_start.tag = tag
-		event.mapping_start.implicit = implicit
-		event.mapping_start.style = yaml_BLOCK_MAPPING_STYLE
 		return true
 	}
 	if len(anchor) > 0 || len(tag) > 0 {
@@ -552,15 +552,15 @@
 		parser.states = parser.states[:len(parser.states)-1]
 
 		*event = yaml_event_t{
-			typ:        yaml_SCALAR_EVENT,
-			start_mark: start_mark,
-			end_mark:   end_mark,
+			typ:             yaml_SCALAR_EVENT,
+			start_mark:      start_mark,
+			end_mark:        end_mark,
+			anchor:          anchor,
+			tag:             tag,
+			implicit:        implicit,
+			quoted_implicit: false,
+			style:           yaml_style_t(yaml_PLAIN_SCALAR_STYLE),
 		}
-		event.scalar.anchor = anchor
-		event.scalar.tag = tag
-		event.scalar.plain_implicit = implicit
-		event.scalar.quoted_implicit = false
-		event.scalar.style = yaml_PLAIN_SCALAR_STYLE
 		return true
 	}
 
@@ -801,9 +801,9 @@
 				typ:        yaml_MAPPING_START_EVENT,
 				start_mark: token.start_mark,
 				end_mark:   token.end_mark,
+				implicit:   true,
+				style:      yaml_style_t(yaml_FLOW_MAPPING_STYLE),
 			}
-			event.mapping_start.implicit = true
-			event.mapping_start.style = yaml_FLOW_MAPPING_STYLE
 			skip_token(parser)
 			return true
 		} else if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN {
@@ -998,10 +998,10 @@
 		typ:        yaml_SCALAR_EVENT,
 		start_mark: mark,
 		end_mark:   mark,
+		value:      nil, // Empty
+		implicit:   true,
+		style:      yaml_style_t(yaml_PLAIN_SCALAR_STYLE),
 	}
-	event.scalar.plain_implicit = true
-	event.scalar.style = yaml_PLAIN_SCALAR_STYLE
-	// Empty means len(event.scalar.value) == 0
 	return true
 }
 
@@ -1030,19 +1030,19 @@
 					"found duplicate %YAML directive", token.start_mark)
 				return false
 			}
-			if token.version_directive.major != 1 || token.version_directive.minor != 1 {
+			if token.major != 1 || token.minor != 1 {
 				yaml_parser_set_parser_error(parser,
 					"found incompatible YAML document", token.start_mark)
 				return false
 			}
 			version_directive = &yaml_version_directive_t{
-				major: token.version_directive.major,
-				minor: token.version_directive.minor,
+				major: token.major,
+				minor: token.minor,
 			}
 		} else if token.typ == yaml_TAG_DIRECTIVE_TOKEN {
 			value := yaml_tag_directive_t{
-				handle: token.tag_directive.handle,
-				prefix: token.tag_directive.prefix,
+				handle: token.value,
+				prefix: token.prefix,
 			}
 			if !yaml_parser_append_tag_directive(parser, value, false, token.start_mark) {
 				return false
diff --git a/scanner_c.go b/scanner_c.go
index c0e611a..3589318 100644
--- a/scanner_c.go
+++ b/scanner_c.go
@@ -990,8 +990,8 @@
 		typ:        yaml_STREAM_START_TOKEN,
 		start_mark: parser.mark,
 		end_mark:   parser.mark,
+		encoding:   parser.encoding,
 	}
-	token.stream_start.encoding = parser.encoding
 	yaml_insert_token(parser, -1, &token)
 	return true
 }
@@ -1494,7 +1494,7 @@
 	// Is it a YAML directive?
 	if bytes.Equal(name, []byte("YAML")) {
 		// Scan the VERSION directive value.
-		var major, minor int
+		var major, minor int8
 		if !yaml_parser_scan_version_directive_value(parser, start_mark, &major, &minor) {
 			return false
 		}
@@ -1505,9 +1505,9 @@
 			typ:        yaml_VERSION_DIRECTIVE_TOKEN,
 			start_mark: start_mark,
 			end_mark:   end_mark,
+			major:      major,
+			minor:      minor,
 		}
-		token.version_directive.major = major
-		token.version_directive.minor = minor
 
 		// Is it a TAG directive?
 	} else if bytes.Equal(name, []byte("TAG")) {
@@ -1523,9 +1523,9 @@
 			typ:        yaml_TAG_DIRECTIVE_TOKEN,
 			start_mark: start_mark,
 			end_mark:   end_mark,
+			value:      handle,
+			prefix:     prefix,
 		}
-		token.tag_directive.handle = handle
-		token.tag_directive.prefix = prefix
 
 		// Unknown directive.
 	} else {
@@ -1619,7 +1619,7 @@
 // Scope:
 //      %YAML   1.1     # a comment \n
 //           ^^^^^^
-func yaml_parser_scan_version_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, major, minor *int) bool {
+func yaml_parser_scan_version_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, major, minor *int8) bool {
 	// Eat whitespaces.
 	if !cache(parser, 1) {
 		return false
@@ -1651,7 +1651,7 @@
 	return true
 }
 
-const max_number_length = 9
+const max_number_length = 2
 
 // Scan the version number of VERSION-DIRECTIVE.
 //
@@ -1660,13 +1660,13 @@
 //              ^
 //      %YAML   1.1     # a comment \n
 //                ^
-func yaml_parser_scan_version_directive_number(parser *yaml_parser_t, start_mark yaml_mark_t, number *int) bool {
+func yaml_parser_scan_version_directive_number(parser *yaml_parser_t, start_mark yaml_mark_t, number *int8) bool {
 
 	// Repeat while the next character is digit.
 	if !cache(parser, 1) {
 		return false
 	}
-	var value, length int
+	var value, length int8
 	for is_digit(parser.buffer, parser.buffer_pos) {
 		// Check if the number is too long.
 		length++
@@ -1674,7 +1674,7 @@
 			return yaml_parser_set_scanner_error(parser, "while scanning a %YAML directive",
 				start_mark, "found extremely long version number")
 		}
-		value = value*10 + as_digit(parser.buffer, parser.buffer_pos)
+		value = value*10 + int8(as_digit(parser.buffer, parser.buffer_pos))
 		skip(parser)
 		if !cache(parser, 1) {
 			return false
@@ -1804,12 +1804,7 @@
 		typ:        typ,
 		start_mark: start_mark,
 		end_mark:   end_mark,
-	}
-	// [Go] Just use a single field instead.
-	if typ == yaml_ANCHOR_TOKEN {
-		token.anchor.value = s
-	} else {
-		token.alias.value = s
+		value:      s,
 	}
 
 	return true
@@ -1897,9 +1892,9 @@
 		typ:        yaml_TAG_TOKEN,
 		start_mark: start_mark,
 		end_mark:   end_mark,
+		value:      handle,
+		suffix:     suffix,
 	}
-	token.tag.handle = handle
-	token.tag.suffix = suffix
 	return true
 }
 
@@ -2241,14 +2236,12 @@
 		typ:        yaml_SCALAR_TOKEN,
 		start_mark: start_mark,
 		end_mark:   end_mark,
+		value:      s,
+		style:      yaml_LITERAL_SCALAR_STYLE,
 	}
-	token.scalar.value = s
-	if literal {
-		token.scalar.style = yaml_LITERAL_SCALAR_STYLE
-	} else {
-		token.scalar.style = yaml_FOLDED_SCALAR_STYLE
+	if !literal {
+		token.style = yaml_FOLDED_SCALAR_STYLE
 	}
-
 	return true
 }
 
@@ -2566,12 +2559,11 @@
 		typ:        yaml_SCALAR_TOKEN,
 		start_mark: start_mark,
 		end_mark:   end_mark,
+		value:      s,
+		style:      yaml_SINGLE_QUOTED_SCALAR_STYLE,
 	}
-	token.scalar.value = s
-	if single {
-		token.scalar.style = yaml_SINGLE_QUOTED_SCALAR_STYLE
-	} else {
-		token.scalar.style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
+	if !single {
+		token.style = yaml_DOUBLE_QUOTED_SCALAR_STYLE
 	}
 	return true
 }
@@ -2726,9 +2718,9 @@
 		typ:        yaml_SCALAR_TOKEN,
 		start_mark: start_mark,
 		end_mark:   end_mark,
+		value:      s,
+		style:      yaml_PLAIN_SCALAR_STYLE,
 	}
-	token.scalar.value = s
-	token.scalar.style = yaml_PLAIN_SCALAR_STYLE
 
 	// Note that we change the 'simple_key_allowed' flag.
 	if leading_blanks {
diff --git a/yaml_h.go b/yaml_h.go
index eb8931c..7733b86 100644
--- a/yaml_h.go
+++ b/yaml_h.go
@@ -6,8 +6,8 @@
 
 // The version directive data.
 type yaml_version_directive_t struct {
-	major int // The major version number.
-	minor int // The minor version number.
+	major int8 // The major version number.
+	minor int8 // The minor version number.
 }
 
 // The tag directive data.
@@ -65,7 +65,9 @@
 
 // Node Styles
 
-type yaml_scalar_style_t int
+type yaml_style_t int8
+
+type yaml_scalar_style_t yaml_style_t
 
 // Scalar styles.
 const (
@@ -79,7 +81,7 @@
 	yaml_FOLDED_SCALAR_STYLE        // The folded scalar style.
 )
 
-type yaml_sequence_style_t int
+type yaml_sequence_style_t yaml_style_t
 
 // Sequence styles.
 const (
@@ -90,7 +92,7 @@
 	yaml_FLOW_SEQUENCE_STYLE  // The flow sequence style.
 )
 
-type yaml_mapping_style_t int
+type yaml_mapping_style_t yaml_style_t
 
 // Mapping styles.
 const (
@@ -190,64 +192,35 @@
 
 // The token structure.
 type yaml_token_t struct {
-
 	// The token type.
 	typ yaml_token_type_t
 
-	// The token data.
+	// The start/end of the token.
+	start_mark, end_mark yaml_mark_t
 
-	// [Go] These structs should all be flattened onto the outer
-	// struct, as many of them are naturally shared among the various
-	// token types. This will reduce the impact of the lack of a union.
+	// The stream encoding (for yaml_STREAM_START_TOKEN).
+	encoding yaml_encoding_t
 
-	// The stream start (for yaml_STREAM_START_TOKEN).
-	stream_start struct {
-		encoding yaml_encoding_t // The stream encoding.
-	}
+	// The alias/anchor/scalar value or tag/tag directive handle
+	// (for yaml_ALIAS_TOKEN, yaml_ANCHOR_TOKEN, yaml_SCALAR_TOKEN, yaml_TAG_TOKEN, yaml_TAG_DIRECTIVE_TOKEN).
+	value []byte
 
-	// The alias (for yaml_ALIAS_TOKEN).
-	alias struct {
-		value []byte // The alias value.
-	}
+	// The tag suffix (for yaml_TAG_TOKEN).
+	suffix []byte
 
-	// The anchor (for yaml_ANCHOR_TOKEN).
-	anchor struct {
-		value []byte // The anchor value.
-	}
+	// The tag directive prefix (for yaml_TAG_DIRECTIVE_TOKEN).
+	prefix []byte
 
-	// The tag (for yaml_TAG_TOKEN).
-	tag struct {
-		handle []byte // The tag handle.
-		suffix []byte // The tag suffix.
-	}
+	// The scalar style (for yaml_SCALAR_TOKEN).
+	style yaml_scalar_style_t
 
-	// The scalar value (for yaml_SCALAR_TOKEN).
-	scalar struct {
-		value []byte              // The scalar value.
-		style yaml_scalar_style_t // The scalar style.
-	}
-
-	// The version directive (for yaml_VERSION_DIRECTIVE_TOKEN).
-	version_directive struct {
-		major int // The major version number.
-		minor int // The minor version number.
-	}
-
-	// The tag directive (for yaml_TAG_DIRECTIVE_TOKEN).
-	tag_directive struct {
-		handle []byte // The tag handle.
-		prefix []byte // The tag prefix.
-	}
-
-	// The beginning of the token.
-	start_mark yaml_mark_t
-	// The end of the token.
-	end_mark yaml_mark_t
+	// The version directive major/minor (for yaml_VERSION_DIRECTIVE_TOKEN).
+	major, minor int8
 }
 
 // Events
 
-type yaml_event_type_t int
+type yaml_event_type_t int8
 
 // Event types.
 const (
@@ -272,64 +245,42 @@
 	// The event type.
 	typ yaml_event_type_t
 
-	// The event data.
+	// The start and end of the event.
+	start_mark, end_mark yaml_mark_t
 
-	// The stream parameters (for yaml_STREAM_START_EVENT).
-	stream_start struct {
-		encoding yaml_encoding_t // The document encoding.
-	}
+	// The document encoding (for yaml_STREAM_START_EVENT).
+	encoding yaml_encoding_t
 
-	// The document parameters (for yaml_DOCUMENT_START_EVENT).
-	document_start struct {
-		version_directive *yaml_version_directive_t // The version directive.
+	// The version directive (for yaml_DOCUMENT_START_EVENT).
+	version_directive *yaml_version_directive_t
 
-		// The list of tag directives.
-		tag_directives []yaml_tag_directive_t
-		implicit       bool // Is the document indicator implicit?
-	}
+	// The list of tag directives (for yaml_DOCUMENT_START_EVENT).
+	tag_directives []yaml_tag_directive_t
 
-	// The document end parameters (for yaml_DOCUMENT_END_EVENT).
-	document_end struct {
-		implicit bool // Is the document end indicator implicit?
-	}
+	// The anchor (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_ALIAS_EVENT).
+	anchor []byte
 
-	// The alias parameters (for yaml_ALIAS_EVENT).
-	alias struct {
-		anchor []byte // The anchor.
-	}
+	// The tag (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT).
+	tag []byte
 
-	// The scalar parameters (for yaml_SCALAR_EVENT).
-	scalar struct {
-		anchor          []byte              // The anchor.
-		tag             []byte              // The tag.
-		value           []byte              // The scalar value.
-		length          int                 // The length of the scalar value.
-		plain_implicit  bool                // Is the tag optional for the plain style?
-		quoted_implicit bool                // Is the tag optional for any non-plain style?
-		style           yaml_scalar_style_t // The scalar style.
-	}
+	// The scalar value (for yaml_SCALAR_EVENT).
+	value []byte
 
-	// The sequence parameters (for yaml_SEQUENCE_START_EVENT).
-	sequence_start struct {
-		anchor   []byte                // The anchor.
-		tag      []byte                // The tag.
-		implicit bool                  // Is the tag optional?
-		style    yaml_sequence_style_t // The sequence style.
-	}
+	// Is the document start/end indicator implicit, or the tag optional?
+	// (for yaml_DOCUMENT_START_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_SCALAR_EVENT).
+	implicit bool
 
-	// The mapping parameters (for yaml_MAPPING_START_EVENT).
-	mapping_start struct {
-		anchor   []byte               // The anchor.
-		tag      []byte               // The tag.
-		implicit bool                 // Is the tag optional?
-		style    yaml_mapping_style_t // The mapping style.
-	}
+	// Is the tag optional for any non-plain style? (for yaml_SCALAR_EVENT).
+	quoted_implicit bool
 
-	start_mark yaml_mark_t // The beginning of the event.
-	end_mark   yaml_mark_t // The end of the event.
-
+	// The style (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT).
+	style yaml_style_t
 }
 
+func (e *yaml_event_t) scalar_style() yaml_scalar_style_t     { return yaml_scalar_style_t(e.style) }
+func (e *yaml_event_t) sequence_style() yaml_sequence_style_t { return yaml_sequence_style_t(e.style) }
+func (e *yaml_event_t) mapping_style() yaml_mapping_style_t   { return yaml_mapping_style_t(e.style) }
+
 // Nodes
 
 const (
@@ -420,9 +371,8 @@
 	start_implicit int // Is the document start indicator implicit?
 	end_implicit   int // Is the document end indicator implicit?
 
-	start_mark yaml_mark_t // The beginning of the document.
-	end_mark   yaml_mark_t // The end of the document.
-
+	// The start/end of the document.
+	start_mark, end_mark yaml_mark_t
 }
 
 // The prototype of a read handler.
diff --git a/yaml_private_h.go b/yaml_private_h.go
index 781166e..9dd382f 100644
--- a/yaml_private_h.go
+++ b/yaml_private_h.go
@@ -2,14 +2,14 @@
 
 const (
 	// The size of the input raw buffer.
-	input_raw_buffer_size = 16384
+	input_raw_buffer_size = 512
 
 	// The size of the input buffer.
 	// It should be possible to decode the whole raw buffer.
 	input_buffer_size = input_raw_buffer_size * 3
 
 	// The size of the output buffer.
-	output_buffer_size = 16384
+	output_buffer_size = 128
 
 	// The size of the output raw buffer.
 	// It should be possible to encode the whole output buffer.
