diff --git a/2014/go4gophers/chain.go b/2014/go4gophers/chain.go
index 1e1c5f0..a73a868 100644
--- a/2014/go4gophers/chain.go
+++ b/2014/go4gophers/chain.go
@@ -1,3 +1,5 @@
+// +build OMIT
+
 package main
 
 import (
diff --git a/2014/go4gophers/copy.go b/2014/go4gophers/copy.go
deleted file mode 100644
index ee671ad..0000000
--- a/2014/go4gophers/copy.go
+++ /dev/null
@@ -1,32 +0,0 @@
-package main
-
-import (
-	"io"
-	"io/ioutil"
-	"log"
-)
-
-// ByteReader implements an io.Reader that emits a stream of its byte value.
-type ByteReader byte
-
-func (b ByteReader) Read(buf []byte) (int, error) {
-	for i := range buf {
-		buf[i] = byte(b)
-	}
-	return len(buf), nil
-}
-
-type LogReader struct {
-	io.Reader
-}
-
-func (r LogReader) Read(b []byte) (int, error) {
-	n, err := r.Reader.Read(b)
-	log.Printf("read %d bytes, error: %v", n, err)
-	return n, err
-}
-
-func main() {
-	r := LogReader{ByteReader('A')}
-	io.CopyN(ioutil.Discard, r, 1e6)
-}
diff --git a/2014/go4gophers/organs.go b/2014/go4gophers/organs.go
index e84b672..209a035 100644
--- a/2014/go4gophers/organs.go
+++ b/2014/go4gophers/organs.go
@@ -1,3 +1,5 @@
+// +build OMIT
+
 package main
 
 import "fmt"
diff --git a/2014/go4gophers/organs2.go b/2014/go4gophers/organs2.go
index 0a25b58..acd9fe3 100644
--- a/2014/go4gophers/organs2.go
+++ b/2014/go4gophers/organs2.go
@@ -1,3 +1,5 @@
+// +build OMIT
+
 package main
 
 import (
diff --git a/2014/go4gophers/organs3.go b/2014/go4gophers/organs3.go
index 9216886..98ced84 100644
--- a/2014/go4gophers/organs3.go
+++ b/2014/go4gophers/organs3.go
@@ -1,3 +1,5 @@
+// +build OMIT
+
 package main
 
 import (
diff --git a/2014/go4gophers/reader.go b/2014/go4gophers/reader.go
index 78d3281..a548d61 100644
--- a/2014/go4gophers/reader.go
+++ b/2014/go4gophers/reader.go
@@ -1,3 +1,5 @@
+// +build OMIT
+
 package main
 
 import (
diff --git a/2014/go4gophers/reverse.go b/2014/go4gophers/reverse.go
deleted file mode 100644
index 7b65730..0000000
--- a/2014/go4gophers/reverse.go
+++ /dev/null
@@ -1,13 +0,0 @@
-package main
-
-import "sort"
-
-func Reverse(data sort.Interface) sort.Interface {
-	return &reverse{data}
-}
-
-type reverse struct{ sort.Interface }
-
-func (r reverse) Less(i, j int) bool {
-	return r.Interface.Less(j, i) // HL
-}
diff --git a/2014/go4gophers/select.go b/2014/go4gophers/select.go
deleted file mode 100644
index e552405..0000000
--- a/2014/go4gophers/select.go
+++ /dev/null
@@ -1,34 +0,0 @@
-package main
-
-import (
-	"net/http"
-	"text/template"
-	"time"
-)
-
-type Result struct{}
-
-func WebSearch(q string) *Result   { return nil }
-func ImageSearch(q string) *Result { return nil }
-
-var searchTemplate *template.Template
-
-func searchHandler(w http.ResponseWriter, r *http.Request) {
-	var (
-		results []*Result
-		ch      = make(chan *Result)
-		timeout = time.After(20 * time.Millisecond)
-	)
-	go func() { ch <- WebSearch(r) }()
-	go func() { ch <- ImageSearch(r) }()
-loop:
-	for i := 0; i < 2; i++ {
-		select { // HL
-		case r := <-ch: // HL
-			results = append(results, r)
-		case <-timeout: // HL
-			break loop
-		}
-	}
-	searchTemplate.Execute(w, results)
-}
diff --git a/2014/go4gophers/sort.go b/2014/go4gophers/sort.go
index 1397887..48d7fde 100644
--- a/2014/go4gophers/sort.go
+++ b/2014/go4gophers/sort.go
@@ -1,3 +1,5 @@
+// +build OMIT
+
 package main
 
 import (
diff --git a/2014/go4gophers/spin.go b/2014/go4gophers/spin.go
deleted file mode 100644
index 0d21283..0000000
--- a/2014/go4gophers/spin.go
+++ /dev/null
@@ -1,57 +0,0 @@
-package main
-
-import (
-	"fmt"
-	"io"
-	"io/ioutil"
-	"time"
-)
-
-type Zero struct{}
-
-func (Zero) Read(b []byte) (int, error) {
-	for i := range b {
-		b[i] = 0
-	}
-	return len(b), nil
-}
-
-type SleepReader struct {
-	r io.Reader
-	d time.Duration
-}
-
-func (r SleepReader) Read(b []byte) (int, error) {
-	time.Sleep(r.d)
-	return r.r.Read(b)
-}
-
-// END OMIT
-
-type Spinner int
-
-var spinBytes = []byte{'-', '/', '|', '\\'}
-
-func (s *Spinner) Tick() {
-	*s = (*s + 1) % 4
-	fmt.Printf("\x0cReading...%c", spinBytes[*s])
-}
-
-type SpinReader struct {
-	r io.Reader
-	s Spinner
-}
-
-func (r *SpinReader) Read(b []byte) (int, error) {
-	r.s.Tick()
-	return r.r.Read(b)
-}
-
-func main() {
-	var r io.Reader = Zero{}
-	r = io.LimitReader(r, 1e6)
-	r = SleepReader{r, 20 * time.Millisecond}
-	r = &SpinReader{r: r}
-	n, _ := io.Copy(ioutil.Discard, r)
-	fmt.Print("\x0c", n, " bytes read.")
-}
diff --git a/2014/go4gophers/time.go b/2014/go4gophers/time.go
deleted file mode 100644
index 297a83f..0000000
--- a/2014/go4gophers/time.go
+++ /dev/null
@@ -1,23 +0,0 @@
-package main
-
-import "time"
-
-var now = time.Now
-
-type timeImpl interface {
-	Now() time.Time
-}
-
-type systemTime struct{}
-
-func (systemTime) Now() time.Time        { return time.Now() }
-func (systemTime) Sleep(d time.Duration) { time.Sleep(d) }
-
-type fakeTime time.Time
-
-func (t *fakeTime) Now() time.Time        { return time.Time(*t) }
-func (t *fakeTime) Sleep(d time.Duration) { *t = fakeTime(time.Time(*t).Add(d)) }
-
-func Sleeper() {
-
-}
diff --git a/2014/go4gophers/tree-nothread.go b/2014/go4gophers/tree-nothread.go
index c3cb6d7..04b188e 100644
--- a/2014/go4gophers/tree-nothread.go
+++ b/2014/go4gophers/tree-nothread.go
@@ -1,3 +1,5 @@
+// +build OMIT
+
 package main
 
 import (
diff --git a/2014/go4gophers/tree-select.go b/2014/go4gophers/tree-select.go
index 1623ec3..4082d93 100644
--- a/2014/go4gophers/tree-select.go
+++ b/2014/go4gophers/tree-select.go
@@ -1,3 +1,5 @@
+// +build OMIT
+
 package main
 
 import (
diff --git a/2014/go4gophers/tree-thread.go b/2014/go4gophers/tree-thread.go
index bf1db5c..32162c5 100644
--- a/2014/go4gophers/tree-thread.go
+++ b/2014/go4gophers/tree-thread.go
@@ -1,3 +1,5 @@
+// +build OMIT
+
 package main
 
 import (
diff --git a/2014/go4gophers/tree-walk.go b/2014/go4gophers/tree-walk.go
index c4c7ea0..5a06f3e 100644
--- a/2014/go4gophers/tree-walk.go
+++ b/2014/go4gophers/tree-walk.go
@@ -1,3 +1,5 @@
+// +build OMIT
+
 package main
 
 import (
