diff --git a/blockmanager.go b/blockmanager.go
index 9dfeed02..59c5bbe8 100644
--- a/blockmanager.go
+++ b/blockmanager.go
@@ -164,8 +164,8 @@ type blockManager struct {
 	started           int32
 	shutdown          int32
 	blockChain        *btcchain.BlockChain
-	requestedTxns     map[btcwire.ShaHash]bool
-	requestedBlocks   map[btcwire.ShaHash]bool
+	requestedTxns     map[btcwire.ShaHash]struct{}
+	requestedBlocks   map[btcwire.ShaHash]struct{}
 	receivedLogBlocks int64
 	receivedLogTx     int64
 	lastBlockLogTime  time.Time
@@ -701,8 +701,8 @@ func (b *blockManager) fetchHeaderBlocks() {
 
 		iv := btcwire.NewInvVect(btcwire.InvTypeBlock, node.sha)
 		if !b.haveInventory(iv) {
-			b.requestedBlocks[*node.sha] = true
-			b.syncPeer.requestedBlocks[*node.sha] = true
+			b.requestedBlocks[*node.sha] = struct{}{}
+			b.syncPeer.requestedBlocks[*node.sha] = struct{}{}
 			gdmsg.AddInvVect(iv)
 			numRequested++
 		}
@@ -954,8 +954,8 @@ func (b *blockManager) handleInvMsg(imsg *invMsg) {
 			// Request the block if there is not already a pending
 			// request.
 			if _, exists := b.requestedBlocks[iv.Hash]; !exists {
-				b.requestedBlocks[iv.Hash] = true
-				imsg.peer.requestedBlocks[iv.Hash] = true
+				b.requestedBlocks[iv.Hash] = struct{}{}
+				imsg.peer.requestedBlocks[iv.Hash] = struct{}{}
 				gdmsg.AddInvVect(iv)
 				numRequested++
 			}
@@ -964,8 +964,8 @@ func (b *blockManager) handleInvMsg(imsg *invMsg) {
 			// Request the transaction if there is not already a
 			// pending request.
 			if _, exists := b.requestedTxns[iv.Hash]; !exists {
-				b.requestedTxns[iv.Hash] = true
-				imsg.peer.requestedTxns[iv.Hash] = true
+				b.requestedTxns[iv.Hash] = struct{}{}
+				imsg.peer.requestedTxns[iv.Hash] = struct{}{}
 				gdmsg.AddInvVect(iv)
 				numRequested++
 			}
@@ -1304,8 +1304,8 @@ func newBlockManager(s *server) (*blockManager, error) {
 
 	bm := blockManager{
 		server:           s,
-		requestedTxns:    make(map[btcwire.ShaHash]bool),
-		requestedBlocks:  make(map[btcwire.ShaHash]bool),
+		requestedTxns:    make(map[btcwire.ShaHash]struct{}),
+		requestedBlocks:  make(map[btcwire.ShaHash]struct{}),
 		lastBlockLogTime: time.Now(),
 		msgChan:          make(chan interface{}, cfg.MaxPeers*3),
 		headerList:       list.New(),
diff --git a/config.go b/config.go
index e20340ae..a29c7380 100644
--- a/config.go
+++ b/config.go
@@ -233,11 +233,11 @@ func validDbType(dbType string) bool {
 // addrs removed.
 func removeDuplicateAddresses(addrs []string) []string {
 	result := make([]string, 0, len(addrs))
-	seen := map[string]bool{}
+	seen := map[string]struct{}{}
 	for _, val := range addrs {
 		if _, ok := seen[val]; !ok {
 			result = append(result, val)
-			seen[val] = true
+			seen[val] = struct{}{}
 		}
 	}
 	return result
diff --git a/peer.go b/peer.go
index 5701901e..eb476360 100644
--- a/peer.go
+++ b/peer.go
@@ -146,11 +146,11 @@ type peer struct {
 	connected          int32
 	disconnect         int32 // only to be used atomically
 	persistent         bool
-	knownAddresses     map[string]bool
+	knownAddresses     map[string]struct{}
 	knownInventory     *MruInventoryMap
 	knownInvMutex      sync.Mutex
-	requestedTxns      map[btcwire.ShaHash]bool // owned by blockmanager
-	requestedBlocks    map[btcwire.ShaHash]bool // owned by blockmanager
+	requestedTxns      map[btcwire.ShaHash]struct{} // owned by blockmanager
+	requestedBlocks    map[btcwire.ShaHash]struct{} // owned by blockmanager
 	retryCount         int64
 	prevGetBlocksBegin *btcwire.ShaHash // owned by blockmanager
 	prevGetBlocksStop  *btcwire.ShaHash // owned by blockmanager
@@ -911,7 +911,7 @@ func (p *peer) pushAddrMsg(addresses []*btcwire.NetAddress) error {
 	msg := btcwire.NewMsgAddr()
 	for _, na := range addresses {
 		// Filter addresses the peer already knows about.
-		if p.knownAddresses[NetAddressKey(na)] {
+		if _, ok := p.knownAddresses[NetAddressKey(na)]; ok {
 			continue
 		}
 
@@ -979,7 +979,7 @@ func (p *peer) handleAddrMsg(msg *btcwire.MsgAddr) {
 		}
 
 		// Add address to known addresses for this peer.
-		p.knownAddresses[NetAddressKey(na)] = true
+		p.knownAddresses[NetAddressKey(na)] = struct{}{}
 	}
 
 	// Add addresses to server address manager.  The address manager handles
@@ -1616,10 +1616,10 @@ func newPeerBase(s *server, inbound bool) *peer {
 		btcnet:          s.netParams.Net,
 		services:        btcwire.SFNodeNetwork,
 		inbound:         inbound,
-		knownAddresses:  make(map[string]bool),
+		knownAddresses:  make(map[string]struct{}),
 		knownInventory:  NewMruInventoryMap(maxKnownInventory),
-		requestedTxns:   make(map[btcwire.ShaHash]bool),
-		requestedBlocks: make(map[btcwire.ShaHash]bool),
+		requestedTxns:   make(map[btcwire.ShaHash]struct{}),
+		requestedBlocks: make(map[btcwire.ShaHash]struct{}),
 		requestQueue:    list.New(),
 		outputQueue:     make(chan outMsg, outputBufferSize),
 		sendQueue:       make(chan outMsg, 1), // nonblocking sync
diff --git a/rpcserver.go b/rpcserver.go
index 9ee0f23b..5a830a8a 100644
--- a/rpcserver.go
+++ b/rpcserver.go
@@ -124,56 +124,56 @@ func init() {
 // list of commands that we recognise, but for which btcd has no support because
 // it lacks support for wallet functionality. For these commands the user
 // should ask a connected instance of btcwallet.
-var rpcAskWallet = map[string]bool{
-	"addmultisigaddress":     true,
-	"backupwallet":           true,
-	"createencryptedwallet":  true,
-	"createmultisig":         true,
-	"dumpprivkey":            true,
-	"dumpwallet":             true,
-	"encryptwallet":          true,
-	"getaccount":             true,
-	"getaccountaddress":      true,
-	"getaddressesbyaccount":  true,
-	"getbalance":             true,
-	"getnewaddress":          true,
-	"getrawchangeaddress":    true,
-	"getreceivedbyaccount":   true,
-	"getreceivedbyaddress":   true,
-	"gettransaction":         true,
-	"gettxout":               true,
-	"gettxoutsetinfo":        true,
-	"getunconfirmedbalance":  true,
-	"getwalletinfo":          true,
-	"importprivkey":          true,
-	"importwallet":           true,
-	"keypoolrefill":          true,
-	"listaccounts":           true,
-	"listaddressgroupings":   true,
-	"listlockunspent":        true,
-	"listreceivedbyaccount":  true,
-	"listreceivedbyaddress":  true,
-	"listsinceblock":         true,
-	"listtransactions":       true,
-	"listunspent":            true,
-	"lockunspent":            true,
-	"move":                   true,
-	"sendfrom":               true,
-	"sendmany":               true,
-	"sendtoaddress":          true,
-	"setaccount":             true,
-	"settxfee":               true,
-	"signmessage":            true,
-	"signrawtransaction":     true,
-	"validateaddress":        true,
-	"verifymessage":          true,
-	"walletlock":             true,
-	"walletpassphrase":       true,
-	"walletpassphrasechange": true,
+var rpcAskWallet = map[string]struct{}{
+	"addmultisigaddress":     struct{}{},
+	"backupwallet":           struct{}{},
+	"createencryptedwallet":  struct{}{},
+	"createmultisig":         struct{}{},
+	"dumpprivkey":            struct{}{},
+	"dumpwallet":             struct{}{},
+	"encryptwallet":          struct{}{},
+	"getaccount":             struct{}{},
+	"getaccountaddress":      struct{}{},
+	"getaddressesbyaccount":  struct{}{},
+	"getbalance":             struct{}{},
+	"getnewaddress":          struct{}{},
+	"getrawchangeaddress":    struct{}{},
+	"getreceivedbyaccount":   struct{}{},
+	"getreceivedbyaddress":   struct{}{},
+	"gettransaction":         struct{}{},
+	"gettxout":               struct{}{},
+	"gettxoutsetinfo":        struct{}{},
+	"getunconfirmedbalance":  struct{}{},
+	"getwalletinfo":          struct{}{},
+	"importprivkey":          struct{}{},
+	"importwallet":           struct{}{},
+	"keypoolrefill":          struct{}{},
+	"listaccounts":           struct{}{},
+	"listaddressgroupings":   struct{}{},
+	"listlockunspent":        struct{}{},
+	"listreceivedbyaccount":  struct{}{},
+	"listreceivedbyaddress":  struct{}{},
+	"listsinceblock":         struct{}{},
+	"listtransactions":       struct{}{},
+	"listunspent":            struct{}{},
+	"lockunspent":            struct{}{},
+	"move":                   struct{}{},
+	"sendfrom":               struct{}{},
+	"sendmany":               struct{}{},
+	"sendtoaddress":          struct{}{},
+	"setaccount":             struct{}{},
+	"settxfee":               struct{}{},
+	"signmessage":            struct{}{},
+	"signrawtransaction":     struct{}{},
+	"validateaddress":        struct{}{},
+	"verifymessage":          struct{}{},
+	"walletlock":             struct{}{},
+	"walletpassphrase":       struct{}{},
+	"walletpassphrasechange": struct{}{},
 }
 
 // Commands that are temporarily unimplemented.
-var rpcUnimplemented = map[string]bool{}
+var rpcUnimplemented = map[string]struct{}{}
 
 // workStateBlockInfo houses information about how to reconstruct a block given
 // its template and signature script.
diff --git a/rpcwebsocket.go b/rpcwebsocket.go
index a8a34269..1ecb8078 100644
--- a/rpcwebsocket.go
+++ b/rpcwebsocket.go
@@ -58,8 +58,8 @@ var wsHandlers = map[string]wsCommandHandler{
 // asynchronously to the main input handler goroutine.  This allows long-running
 // operations to run concurrently (and one at a time) while still responding
 // to the majority of normal requests which can be answered quickly.
-var wsAsyncHandlers = map[string]bool{
-	"rescan": true,
+var wsAsyncHandlers = map[string]struct{}{
+	"rescan": struct{}{},
 }
 
 // WebsocketHandler handles a new websocket client by creating a new wsClient,
@@ -618,7 +618,7 @@ func (m *wsNotificationManager) notifyForTxOuts(ops map[btcwire.OutPoint]map[cha
 	}
 
 	txHex := ""
-	wscNotified := make(map[chan bool]bool)
+	wscNotified := make(map[chan bool]struct{})
 	for i, txOut := range tx.MsgTx().TxOut {
 		_, txAddrs, _, err := btcscript.ExtractPkScriptAddrs(
 			txOut.PkScript, m.server.server.netParams)
@@ -647,8 +647,8 @@ func (m *wsNotificationManager) notifyForTxOuts(ops map[btcwire.OutPoint]map[cha
 			for wscQuit, wsc := range cmap {
 				m.addSpentRequest(ops, wsc, op)
 
-				if !wscNotified[wscQuit] {
-					wscNotified[wscQuit] = true
+				if _, ok := wscNotified[wscQuit]; !ok {
+					wscNotified[wscQuit] = struct{}{}
 					wsc.QueueNotification(marshalledJSON)
 				}
 			}
@@ -683,7 +683,7 @@ func (m *wsNotificationManager) notifyForTxIns(ops map[btcwire.OutPoint]map[chan
 	}
 
 	txHex := ""
-	wscNotified := make(map[chan bool]bool)
+	wscNotified := make(map[chan bool]struct{})
 	for _, txIn := range tx.MsgTx().TxIn {
 		prevOut := &txIn.PreviousOutpoint
 		if cmap, ok := ops[*prevOut]; ok {
@@ -700,8 +700,8 @@ func (m *wsNotificationManager) notifyForTxIns(ops map[btcwire.OutPoint]map[chan
 					m.removeSpentRequest(ops, wsc, prevOut)
 				}
 
-				if !wscNotified[wscQuit] {
-					wscNotified[wscQuit] = true
+				if _, ok := wscNotified[wscQuit]; !ok {
+					wscNotified[wscQuit] = struct{}{}
 					wsc.QueueNotification(marshalledJSON)
 				}
 			}