diff --git a/command_test.go b/command_test.go
index 72d397d..e7e3089 100644
--- a/command_test.go
+++ b/command_test.go
@@ -430,14 +430,14 @@
 func TestDefaultOnCommand(t *testing.T) {
 	var opts = struct {
 		Command struct {
-			G bool `short:"g" default:"true"`
+			G string `short:"g" default:"value"`
 		} `command:"cmd"`
 	}{}
 
 	assertParseSuccess(t, &opts, "cmd")
 
-	if !opts.Command.G {
-		t.Errorf("Expected G to be true")
+	if opts.Command.G != "value" {
+		t.Errorf("Expected G to be \"value\"")
 	}
 }
 
@@ -470,14 +470,14 @@
 func TestCommandAlias(t *testing.T) {
 	var opts = struct {
 		Command struct {
-			G bool `short:"g" default:"true"`
+			G string `short:"g" default:"value"`
 		} `command:"cmd" alias:"cm"`
 	}{}
 
 	assertParseSuccess(t, &opts, "cm")
 
-	if !opts.Command.G {
-		t.Errorf("Expected G to be true")
+	if opts.Command.G != "value" {
+		t.Errorf("Expected G to be \"value\"")
 	}
 }
 
diff --git a/error.go b/error.go
index 2f27aee..05528d8 100644
--- a/error.go
+++ b/error.go
@@ -55,6 +55,9 @@
 	// ErrInvalidChoice indicates an invalid option value which only allows
 	// a certain number of choices.
 	ErrInvalidChoice
+
+	// ErrInvalidTag indicates an invalid tag or invalid use of an existing tag
+	ErrInvalidTag
 )
 
 func (e ErrorType) String() string {
@@ -87,6 +90,8 @@
 		return "unknown command"
 	case ErrInvalidChoice:
 		return "invalid choice"
+	case ErrInvalidTag:
+		return "invalid tag"
 	}
 
 	return "unrecognized error type"
diff --git a/group.go b/group.go
index debb8de..27d2d72 100644
--- a/group.go
+++ b/group.go
@@ -276,6 +276,12 @@
 			tag:   mtag,
 		}
 
+		if option.isBool() && option.Default != nil {
+			return newErrorf(ErrInvalidTag,
+				"boolean flag `%s' may not have default values, they always default to `false' and can only be turned off",
+				option.shortAndLongName())
+		}
+
 		g.options = append(g.options, option)
 	}
 
diff --git a/marshal_test.go b/marshal_test.go
index 59c9cce..095e9e4 100644
--- a/marshal_test.go
+++ b/marshal_test.go
@@ -5,13 +5,13 @@
 	"testing"
 )
 
-type marshalled bool
+type marshalled string
 
 func (m *marshalled) UnmarshalFlag(value string) error {
 	if value == "yes" {
-		*m = true
+		*m = "true"
 	} else if value == "no" {
-		*m = false
+		*m = "false"
 	} else {
 		return fmt.Errorf("`%s' is not a valid value, please specify `yes' or `no'", value)
 	}
@@ -20,7 +20,7 @@
 }
 
 func (m marshalled) MarshalFlag() (string, error) {
-	if m {
+	if m == "true" {
 		return "yes", nil
 	}
 
@@ -42,8 +42,8 @@
 
 	assertStringArray(t, ret, []string{})
 
-	if !opts.Value {
-		t.Errorf("Expected Value to be true")
+	if opts.Value != "true" {
+		t.Errorf("Expected Value to be \"true\"")
 	}
 }
 
@@ -56,8 +56,8 @@
 
 	assertStringArray(t, ret, []string{})
 
-	if !opts.Value {
-		t.Errorf("Expected Value to be true")
+	if opts.Value != "true" {
+		t.Errorf("Expected Value to be \"true\"")
 	}
 }
 
@@ -70,8 +70,8 @@
 
 	assertStringArray(t, ret, []string{})
 
-	if !opts.Value {
-		t.Errorf("Expected Value to be true")
+	if opts.Value != "true" {
+		t.Errorf("Expected Value to be \"true\"")
 	}
 }
 
diff --git a/option.go b/option.go
index a7f4f9a..b2a69c7 100644
--- a/option.go
+++ b/option.go
@@ -1,6 +1,7 @@
 package flags
 
 import (
+	"bytes"
 	"fmt"
 	"reflect"
 	"strings"
@@ -412,3 +413,22 @@
 
 	option.defaultLiteral = def
 }
+
+func (option *Option) shortAndLongName() string {
+	ret := &bytes.Buffer{}
+
+	if option.ShortName != 0 {
+		ret.WriteRune(defaultShortOptDelimiter)
+		ret.WriteRune(option.ShortName)
+	}
+
+	if len(option.LongName) != 0 {
+		if option.ShortName != 0 {
+			ret.WriteRune('/')
+		}
+
+		ret.WriteString(option.LongName)
+	}
+
+	return ret.String()
+}
diff --git a/parser_test.go b/parser_test.go
index b57dbee..a81983f 100644
--- a/parser_test.go
+++ b/parser_test.go
@@ -4,6 +4,7 @@
 	"fmt"
 	"os"
 	"reflect"
+	"runtime"
 	"strconv"
 	"strings"
 	"testing"
@@ -17,7 +18,7 @@
 	Float64        float64 `long:"f"`
 	Float64Default float64 `long:"fd" default:"-3.14"`
 
-	NumericFlag bool `short:"3" default:"false"`
+	NumericFlag bool `short:"3"`
 
 	String            string `long:"str"`
 	StringDefault     string `long:"strd" default:"abc"`
@@ -132,6 +133,18 @@
 	}
 }
 
+func TestNoDefaultsForBools(t *testing.T) {
+	var opts struct {
+		DefaultBool bool `short:"d" default:"true"`
+	}
+
+	if runtime.GOOS == "windows" {
+		assertParseFail(t, ErrInvalidTag, "boolean flag `/d' may not have default values, they always default to `false' and can only be turned off", &opts)
+	} else {
+		assertParseFail(t, ErrInvalidTag, "boolean flag `-d' may not have default values, they always default to `false' and can only be turned off", &opts)
+	}
+}
+
 func TestUnquoting(t *testing.T) {
 	var tests = []struct {
 		arg   string
