diff --git a/PENDING.md b/PENDING.md
index a314a860afee..6f82b55e625e 100644
--- a/PENDING.md
+++ b/PENDING.md
@@ -16,6 +16,7 @@ BREAKING CHANGES
   * `gaiacli gov submit-proposal --proposer`
   * `gaiacli gov deposit --depositer`
   * `gaiacli gov vote --voter`
+* [x/gov] Added tags sub-package, changed tags to use dash-case 
 
 FEATURES
 * [lcd] Can now query governance proposals by ProposalStatus
diff --git a/x/gov/handler.go b/x/gov/handler.go
index 636454571d91..04a68ccbbb8b 100644
--- a/x/gov/handler.go
+++ b/x/gov/handler.go
@@ -2,6 +2,7 @@ package gov
 
 import (
 	sdk "github.com/cosmos/cosmos-sdk/types"
+	"github.com/cosmos/cosmos-sdk/x/gov/tags"
 )
 
 // Handle all "gov" type messages.
@@ -32,19 +33,19 @@ func handleMsgSubmitProposal(ctx sdk.Context, keeper Keeper, msg MsgSubmitPropos
 
 	proposalIDBytes := keeper.cdc.MustMarshalBinaryBare(proposal.GetProposalID())
 
-	tags := sdk.NewTags(
-		"action", []byte("submitProposal"),
-		"proposer", []byte(msg.Proposer.String()),
-		"proposalId", proposalIDBytes,
+	resTags := sdk.NewTags(
+		tags.Action, tags.ActionSubmitProposal,
+		tags.Proposer, []byte(msg.Proposer.String()),
+		tags.ProposalID, proposalIDBytes,
 	)
 
 	if votingStarted {
-		tags.AppendTag("votingPeriodStart", proposalIDBytes)
+		resTags.AppendTag(tags.VotingPeriodStart, proposalIDBytes)
 	}
 
 	return sdk.Result{
 		Data: proposalIDBytes,
-		Tags: tags,
+		Tags: resTags,
 	}
 }
 
@@ -58,18 +59,18 @@ func handleMsgDeposit(ctx sdk.Context, keeper Keeper, msg MsgDeposit) sdk.Result
 	proposalIDBytes := keeper.cdc.MustMarshalBinaryBare(msg.ProposalID)
 
 	// TODO: Add tag for if voting period started
-	tags := sdk.NewTags(
-		"action", []byte("deposit"),
-		"depositer", []byte(msg.Depositer.String()),
-		"proposalId", proposalIDBytes,
+	resTags := sdk.NewTags(
+		tags.Action, tags.ActionDeposit,
+		tags.Depositer, []byte(msg.Depositer.String()),
+		tags.ProposalID, proposalIDBytes,
 	)
 
 	if votingStarted {
-		tags.AppendTag("votingPeriodStart", proposalIDBytes)
+		resTags.AppendTag(tags.VotingPeriodStart, proposalIDBytes)
 	}
 
 	return sdk.Result{
-		Tags: tags,
+		Tags: resTags,
 	}
 }
 
@@ -82,30 +83,32 @@ func handleMsgVote(ctx sdk.Context, keeper Keeper, msg MsgVote) sdk.Result {
 
 	proposalIDBytes := keeper.cdc.MustMarshalBinaryBare(msg.ProposalID)
 
-	tags := sdk.NewTags(
-		"action", []byte("vote"),
-		"voter", []byte(msg.Voter.String()),
-		"proposalId", proposalIDBytes,
+	resTags := sdk.NewTags(
+		tags.Action, tags.ActionVote,
+		tags.Voter, []byte(msg.Voter.String()),
+		tags.ProposalID, proposalIDBytes,
 	)
 	return sdk.Result{
-		Tags: tags,
+		Tags: resTags,
 	}
 }
 
 // Called every block, process inflation, update validator set
-func EndBlocker(ctx sdk.Context, keeper Keeper) (tags sdk.Tags, nonVotingVals []sdk.AccAddress) {
+func EndBlocker(ctx sdk.Context, keeper Keeper) (resTags sdk.Tags, nonVotingVals []sdk.AccAddress) {
 
-	tags = sdk.NewTags()
+	resTags = sdk.NewTags()
 
 	// Delete proposals that haven't met minDeposit
 	for shouldPopInactiveProposalQueue(ctx, keeper) {
 		inactiveProposal := keeper.InactiveProposalQueuePop(ctx)
-		if inactiveProposal.GetStatus() == StatusDepositPeriod {
-			proposalIDBytes := keeper.cdc.MustMarshalBinaryBare(inactiveProposal.GetProposalID())
-			keeper.DeleteProposal(ctx, inactiveProposal)
-			tags.AppendTag("action", []byte("proposalDropped"))
-			tags.AppendTag("proposalId", proposalIDBytes)
+		if inactiveProposal.GetStatus() != StatusDepositPeriod {
+			continue
 		}
+
+		proposalIDBytes := keeper.cdc.MustMarshalBinaryBare(inactiveProposal.GetProposalID())
+		keeper.DeleteProposal(ctx, inactiveProposal)
+		resTags.AppendTag(tags.Action, tags.ActionProposalDropped)
+		resTags.AppendTag(tags.ProposalID, proposalIDBytes)
 	}
 
 	var passes bool
@@ -114,26 +117,31 @@ func EndBlocker(ctx sdk.Context, keeper Keeper) (tags sdk.Tags, nonVotingVals []
 	for shouldPopActiveProposalQueue(ctx, keeper) {
 		activeProposal := keeper.ActiveProposalQueuePop(ctx)
 
-		if ctx.BlockHeight() >= activeProposal.GetVotingStartBlock()+keeper.GetVotingProcedure().VotingPeriod {
-			passes, nonVotingVals = tally(ctx, keeper, activeProposal)
-			proposalIDBytes := keeper.cdc.MustMarshalBinaryBare(activeProposal.GetProposalID())
-			if passes {
-				keeper.RefundDeposits(ctx, activeProposal.GetProposalID())
-				activeProposal.SetStatus(StatusPassed)
-				tags.AppendTag("action", []byte("proposalPassed"))
-				tags.AppendTag("proposalId", proposalIDBytes)
-			} else {
-				keeper.DeleteDeposits(ctx, activeProposal.GetProposalID())
-				activeProposal.SetStatus(StatusRejected)
-				tags.AppendTag("action", []byte("proposalRejected"))
-				tags.AppendTag("proposalId", proposalIDBytes)
-			}
-
-			keeper.SetProposal(ctx, activeProposal)
+		proposalStartBlock := activeProposal.GetVotingStartBlock()
+		votingPeriod := keeper.GetVotingProcedure().VotingPeriod
+		if ctx.BlockHeight() < proposalStartBlock+votingPeriod {
+			continue
+		}
+
+		passes, nonVotingVals = tally(ctx, keeper, activeProposal)
+		proposalIDBytes := keeper.cdc.MustMarshalBinaryBare(activeProposal.GetProposalID())
+		var action []byte
+		if passes {
+			keeper.RefundDeposits(ctx, activeProposal.GetProposalID())
+			activeProposal.SetStatus(StatusPassed)
+			action = tags.ActionProposalPassed
+		} else {
+			keeper.DeleteDeposits(ctx, activeProposal.GetProposalID())
+			activeProposal.SetStatus(StatusRejected)
+			action = tags.ActionProposalRejected
 		}
+		keeper.SetProposal(ctx, activeProposal)
+
+		resTags.AppendTag(tags.Action, action)
+		resTags.AppendTag(tags.ProposalID, proposalIDBytes)
 	}
 
-	return tags, nonVotingVals
+	return resTags, nonVotingVals
 }
 func shouldPopInactiveProposalQueue(ctx sdk.Context, keeper Keeper) bool {
 	depositProcedure := keeper.GetDepositProcedure()
diff --git a/x/gov/tags/tags.go b/x/gov/tags/tags.go
new file mode 100644
index 000000000000..2eded1901a6c
--- /dev/null
+++ b/x/gov/tags/tags.go
@@ -0,0 +1,22 @@
+// nolint
+package tags
+
+import (
+	sdk "github.com/cosmos/cosmos-sdk/types"
+)
+
+var (
+	ActionSubmitProposal   = []byte("submit-proposal")
+	ActionDeposit          = []byte("deposit")
+	ActionVote             = []byte("vote")
+	ActionProposalDropped  = []byte("proposal-dropped")
+	ActionProposalPassed   = []byte("proposal-passed")
+	ActionProposalRejected = []byte("proposal-rejected")
+
+	Action            = sdk.TagAction
+	Proposer          = "proposer"
+	ProposalID        = "proposal-id"
+	VotingPeriodStart = "voting-period-start"
+	Depositer         = "depositer"
+	Voter             = "voter"
+)
diff --git a/x/stake/tags/tags.go b/x/stake/tags/tags.go
index edb4eda07b93..8ef60aa8420e 100644
--- a/x/stake/tags/tags.go
+++ b/x/stake/tags/tags.go
@@ -2,7 +2,7 @@
 package tags
 
 import (
-	"github.com/cosmos/cosmos-sdk/types"
+	sdk "github.com/cosmos/cosmos-sdk/types"
 )
 
 var (
@@ -14,10 +14,10 @@ var (
 	ActionBeginRedelegation    = []byte("begin-redelegation")
 	ActionCompleteRedelegation = []byte("complete-redelegation")
 
-	Action       = types.TagAction
-	SrcValidator = types.TagSrcValidator
-	DstValidator = types.TagDstValidator
-	Delegator    = types.TagDelegator
+	Action       = sdk.TagAction
+	SrcValidator = sdk.TagSrcValidator
+	DstValidator = sdk.TagDstValidator
+	Delegator    = sdk.TagDelegator
 	Moniker      = "moniker"
-	Identity     = "Identity"
+	Identity     = "identity"
 )