diff --git a/x/ibc/20-transfer/alias.go b/x/ibc/20-transfer/alias.go
index ba4008d57374..66028740581e 100644
--- a/x/ibc/20-transfer/alias.go
+++ b/x/ibc/20-transfer/alias.go
@@ -56,6 +56,7 @@ type (
 	ConnectionKeeper = types.ConnectionKeeper
 	SupplyKeeper     = types.SupplyKeeper
 	MsgTransfer      = types.MsgTransfer
+	MsgRecvPacket    = types.MsgRecvPacket
 	PacketData       = types.PacketData
 	PacketDataAlias  = types.PacketDataAlias
 )
diff --git a/x/ibc/20-transfer/client/cli/tx.go b/x/ibc/20-transfer/client/cli/tx.go
index e9e12f28d4a8..99be5e6387c3 100644
--- a/x/ibc/20-transfer/client/cli/tx.go
+++ b/x/ibc/20-transfer/client/cli/tx.go
@@ -1,16 +1,24 @@
 package cli
 
 import (
+	"fmt"
+	"io/ioutil"
+	"os"
+	"strconv"
+
 	"github.com/spf13/cobra"
 	"github.com/spf13/viper"
 
+	"github.com/cosmos/cosmos-sdk/client"
 	"github.com/cosmos/cosmos-sdk/client/context"
 	"github.com/cosmos/cosmos-sdk/client/flags"
 	"github.com/cosmos/cosmos-sdk/codec"
 	sdk "github.com/cosmos/cosmos-sdk/types"
 	"github.com/cosmos/cosmos-sdk/x/auth"
 	"github.com/cosmos/cosmos-sdk/x/auth/client/utils"
+	channelexported "github.com/cosmos/cosmos-sdk/x/ibc/04-channel/exported"
 	"github.com/cosmos/cosmos-sdk/x/ibc/20-transfer/types"
+	commitment "github.com/cosmos/cosmos-sdk/x/ibc/23-commitment"
 )
 
 // IBC transfer flags
@@ -26,6 +34,7 @@ func GetTxCmd(cdc *codec.Codec) *cobra.Command {
 	}
 	txCmd.AddCommand(
 		GetTransferTxCmd(cdc),
+		GetMsgRecvPacketCmd(cdc),
 	)
 
 	return txCmd
@@ -68,3 +77,56 @@ func GetTransferTxCmd(cdc *codec.Codec) *cobra.Command {
 	cmd.Flags().Bool(FlagSource, false, "Pass flag for sending token from the source chain")
 	return cmd
 }
+
+// GetMsgRecvPacketCmd returns the command to create a MsgRecvTransferPacket transaction
+func GetMsgRecvPacketCmd(cdc *codec.Codec) *cobra.Command {
+	cmd := &cobra.Command{
+		Use:   "recv-packet [/path/to/packet-data.json] [/path/to/proof.json] [height]",
+		Short: "Creates and sends a SendPacket message",
+		Args:  cobra.ExactArgs(3),
+		RunE: func(cmd *cobra.Command, args []string) error {
+			txBldr := auth.NewTxBuilderFromCLI().WithTxEncoder(utils.GetTxEncoder(cdc))
+			cliCtx := context.NewCLIContext().WithCodec(cdc).WithBroadcastMode(flags.BroadcastBlock)
+
+			var packet channelexported.PacketI
+			if err := cdc.UnmarshalJSON([]byte(args[0]), &packet); err != nil {
+				fmt.Fprintf(os.Stderr, "failed to unmarshall input into struct, checking for file...\n")
+				contents, err := ioutil.ReadFile(args[0])
+				if err != nil {
+					return fmt.Errorf("error opening packet file: %v", err)
+				}
+
+				if err := cdc.UnmarshalJSON(contents, packet); err != nil {
+					return fmt.Errorf("error unmarshalling packet file: %v", err)
+				}
+			}
+
+			var proof commitment.Proof
+			if err := cdc.UnmarshalJSON([]byte(args[1]), &proof); err != nil {
+				fmt.Fprintf(os.Stderr, "failed to unmarshall input into struct, checking for file...\n")
+				contents, err := ioutil.ReadFile(args[1])
+				if err != nil {
+					return fmt.Errorf("error opening proofs file: %v", err)
+				}
+				if err := cdc.UnmarshalJSON(contents, &proof); err != nil {
+					return fmt.Errorf("error unmarshalling proofs file: %v", err)
+				}
+			}
+
+			height, err := strconv.ParseUint(args[2], 10, 64)
+			if err != nil {
+				return fmt.Errorf("error height: %v", err)
+			}
+
+			msg := types.NewMsgRecvPacket(packet, []commitment.Proof{proof}, height, cliCtx.GetFromAddress())
+			if err := msg.ValidateBasic(); err != nil {
+				return err
+			}
+
+			return utils.GenerateOrBroadcastMsgs(cliCtx, txBldr, []sdk.Msg{msg})
+		},
+	}
+
+	cmd = client.PostCommands(cmd)[0]
+	return cmd
+}
diff --git a/x/ibc/20-transfer/handler.go b/x/ibc/20-transfer/handler.go
index 52f47fab9257..49fe077acbe2 100644
--- a/x/ibc/20-transfer/handler.go
+++ b/x/ibc/20-transfer/handler.go
@@ -5,6 +5,16 @@ import (
 	"github.com/cosmos/cosmos-sdk/x/ibc/20-transfer/types"
 )
 
+// handleMsgRecvPacket defines the sdk.Handler for MsgRecvPacket
+func HandleMsgRecvPacket(ctx sdk.Context, k Keeper, msg MsgRecvPacket) (res sdk.Result) {
+	err := k.ReceivePacket(ctx, msg.Packet, msg.Proofs[0], msg.Height)
+	if err != nil {
+		return sdk.ResultFromError(err)
+	}
+
+	return sdk.Result{Events: ctx.EventManager().Events()}
+}
+
 // HandleMsgTransfer defines the sdk.Handler for MsgTransfer
 func HandleMsgTransfer(ctx sdk.Context, k Keeper, msg MsgTransfer) (res sdk.Result) {
 	err := k.SendTransfer(ctx, msg.SourcePort, msg.SourceChannel, msg.Amount, msg.Sender, msg.Receiver, msg.Source)
diff --git a/x/ibc/20-transfer/keeper/relay.go b/x/ibc/20-transfer/keeper/relay.go
index 2b481299606a..9dbe829b10f1 100644
--- a/x/ibc/20-transfer/keeper/relay.go
+++ b/x/ibc/20-transfer/keeper/relay.go
@@ -5,8 +5,10 @@ import (
 	"strings"
 
 	sdk "github.com/cosmos/cosmos-sdk/types"
+	channelexported "github.com/cosmos/cosmos-sdk/x/ibc/04-channel/exported"
 	channeltypes "github.com/cosmos/cosmos-sdk/x/ibc/04-channel/types"
 	"github.com/cosmos/cosmos-sdk/x/ibc/20-transfer/types"
+	commitment "github.com/cosmos/cosmos-sdk/x/ibc/23-commitment"
 )
 
 // SendTransfer handles transfer sending logic
@@ -50,6 +52,22 @@ func (k Keeper) SendTransfer(
 	return k.createOutgoingPacket(ctx, sequence, sourcePort, sourceChannel, destinationPort, destinationChannel, coins, sender, receiver, isSourceChain)
 }
 
+// ReceivePacket handles receiving packet
+func (k Keeper) ReceivePacket(ctx sdk.Context, packet channelexported.PacketI, proof commitment.ProofI, height uint64) error {
+	_, err := k.channelKeeper.RecvPacket(ctx, packet, proof, height, nil, k.storeKey)
+	if err != nil {
+		return err
+	}
+
+	var data types.PacketData
+	err = data.UnmarshalJSON(packet.Data())
+	if err != nil {
+		return sdk.NewError(types.DefaultCodespace, types.CodeInvalidPacketData, "invalid packet data")
+	}
+
+	return k.ReceiveTransfer(ctx, packet.SourcePort(), packet.SourceChannel(), packet.DestPort(), packet.DestChannel(), data)
+}
+
 // ReceiveTransfer handles transfer receiving logic
 func (k Keeper) ReceiveTransfer(
 	ctx sdk.Context,
diff --git a/x/ibc/20-transfer/types/errors.go b/x/ibc/20-transfer/types/errors.go
index 090804150095..51f95d560a01 100644
--- a/x/ibc/20-transfer/types/errors.go
+++ b/x/ibc/20-transfer/types/errors.go
@@ -16,6 +16,8 @@ const (
 	CodeInvalidChannelOrder sdk.CodeType = 104
 	CodeInvalidPort         sdk.CodeType = 105
 	CodeInvalidVersion      sdk.CodeType = 106
+	CodeProofMissing        sdk.CodeType = 107
+	CodeInvalidHeight       sdk.CodeType = 108
 )
 
 // ErrInvalidAddress implements sdk.Error
diff --git a/x/ibc/20-transfer/types/expected_keepers.go b/x/ibc/20-transfer/types/expected_keepers.go
index 2e855dfd8079..252eb8060645 100644
--- a/x/ibc/20-transfer/types/expected_keepers.go
+++ b/x/ibc/20-transfer/types/expected_keepers.go
@@ -6,6 +6,7 @@ import (
 	connection "github.com/cosmos/cosmos-sdk/x/ibc/03-connection"
 	channel "github.com/cosmos/cosmos-sdk/x/ibc/04-channel"
 	channelexported "github.com/cosmos/cosmos-sdk/x/ibc/04-channel/exported"
+	commitment "github.com/cosmos/cosmos-sdk/x/ibc/23-commitment"
 	supplyexported "github.com/cosmos/cosmos-sdk/x/supply/exported"
 )
 
@@ -19,6 +20,7 @@ type ChannelKeeper interface {
 	GetChannel(ctx sdk.Context, srcPort, srcChan string) (channel channel.Channel, found bool)
 	GetNextSequenceSend(ctx sdk.Context, portID, channelID string) (uint64, bool)
 	SendPacket(ctx sdk.Context, packet channelexported.PacketI, portCapability sdk.CapabilityKey) error
+	RecvPacket(ctx sdk.Context, packet channelexported.PacketI, proof commitment.ProofI, proofHeight uint64, acknowledgement []byte, portCapability sdk.CapabilityKey) (channelexported.PacketI, error)
 }
 
 // ClientKeeper defines the expected IBC client keeper
diff --git a/x/ibc/20-transfer/types/msgs.go b/x/ibc/20-transfer/types/msgs.go
index e2d4a725b6d1..4df5cf270407 100644
--- a/x/ibc/20-transfer/types/msgs.go
+++ b/x/ibc/20-transfer/types/msgs.go
@@ -5,6 +5,9 @@ import (
 
 	sdk "github.com/cosmos/cosmos-sdk/types"
 	host "github.com/cosmos/cosmos-sdk/x/ibc/24-host"
+
+	channelexported "github.com/cosmos/cosmos-sdk/x/ibc/04-channel/exported"
+	commitment "github.com/cosmos/cosmos-sdk/x/ibc/23-commitment"
 	ibctypes "github.com/cosmos/cosmos-sdk/x/ibc/types"
 )
 
@@ -73,3 +76,63 @@ func (msg MsgTransfer) GetSignBytes() []byte {
 func (msg MsgTransfer) GetSigners() []sdk.AccAddress {
 	return []sdk.AccAddress{msg.Sender}
 }
+
+type MsgRecvPacket struct {
+	Packet channelexported.PacketI `json:"packet" yaml:"packet"`
+	Proofs []commitment.Proof      `json:"proofs" yaml:"proofs"`
+	Height uint64                  `json:"height" yaml:"height"`
+	Signer sdk.AccAddress          `json:"signer" yaml:"signer"`
+}
+
+// NewMsgRecvPacket creates a new MsgRecvPacket instance
+func NewMsgRecvPacket(packet channelexported.PacketI, proofs []commitment.Proof, height uint64, signer sdk.AccAddress) MsgRecvPacket {
+	return MsgRecvPacket{
+		Packet: packet,
+		Proofs: proofs,
+		Height: height,
+		Signer: signer,
+	}
+}
+
+// Route implements sdk.Msg
+func (MsgRecvPacket) Route() string {
+	return RouterKey
+}
+
+// Type implements sdk.Msg
+func (MsgRecvPacket) Type() string {
+	return "recv_packet"
+}
+
+// ValidateBasic implements sdk.Msg
+func (msg MsgRecvPacket) ValidateBasic() sdk.Error {
+	if msg.Height < 1 {
+		return sdk.NewError(DefaultCodespace, CodeInvalidHeight, "invalid height")
+	}
+
+	if msg.Proofs == nil {
+		return sdk.NewError(DefaultCodespace, CodeProofMissing, "proof missing")
+	}
+
+	for _, proof := range msg.Proofs {
+		if proof.Proof == nil {
+			return sdk.NewError(DefaultCodespace, CodeProofMissing, "proof missing")
+		}
+	}
+
+	if msg.Signer.Empty() {
+		return sdk.NewError(DefaultCodespace, CodeInvalidAddress, "invalid signer")
+	}
+
+	return msg.Packet.ValidateBasic()
+}
+
+// GetSignBytes implements sdk.Msg
+func (msg MsgRecvPacket) GetSignBytes() []byte {
+	return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(msg))
+}
+
+// GetSigners implements sdk.Msg
+func (msg MsgRecvPacket) GetSigners() []sdk.AccAddress {
+	return []sdk.AccAddress{msg.Signer}
+}
diff --git a/x/ibc/client/cli/cli.go b/x/ibc/client/cli/cli.go
index 5e58be761800..90ec11a8740f 100644
--- a/x/ibc/client/cli/cli.go
+++ b/x/ibc/client/cli/cli.go
@@ -8,7 +8,6 @@ import (
 	ibcclient "github.com/cosmos/cosmos-sdk/x/ibc/02-client"
 	connection "github.com/cosmos/cosmos-sdk/x/ibc/03-connection"
 	transfer "github.com/cosmos/cosmos-sdk/x/ibc/20-transfer"
-	mockbank "github.com/cosmos/cosmos-sdk/x/ibc/mock/bank"
 	"github.com/cosmos/cosmos-sdk/x/ibc/types"
 )
 
@@ -26,7 +25,6 @@ func GetTxCmd(storeKey string, cdc *codec.Codec) *cobra.Command {
 		ibcclient.GetTxCmd(cdc, storeKey),
 		connection.GetTxCmd(cdc, storeKey),
 		transfer.GetTxCmd(cdc),
-		mockbank.GetTxCmd(cdc),
 	)
 	return ibcTxCmd
 }
diff --git a/x/ibc/handler.go b/x/ibc/handler.go
index 3e432e57e2c5..a0af5394b667 100644
--- a/x/ibc/handler.go
+++ b/x/ibc/handler.go
@@ -61,6 +61,9 @@ func NewHandler(k Keeper) sdk.Handler {
 		case transfer.MsgTransfer:
 			return transfer.HandleMsgTransfer(ctx, k.TransferKeeper, msg)
 
+		case transfer.MsgRecvPacket:
+			return transfer.HandleMsgRecvPacket(ctx, k.TransferKeeper, msg)
+
 		default:
 			errMsg := fmt.Sprintf("unrecognized IBC message type: %T", msg)
 			return sdk.ErrUnknownRequest(errMsg).Result()
diff --git a/x/ibc/mock/bank/alias.go b/x/ibc/mock/bank/alias.go
deleted file mode 100644
index 7447068ba7e7..000000000000
--- a/x/ibc/mock/bank/alias.go
+++ /dev/null
@@ -1,26 +0,0 @@
-package mockbank
-
-import (
-	"github.com/cosmos/cosmos-sdk/x/ibc/mock/bank/internal/keeper"
-	"github.com/cosmos/cosmos-sdk/x/ibc/mock/bank/internal/types"
-)
-
-type (
-	MsgRecvPacket = types.MsgRecvPacket
-	Keeper        = keeper.Keeper
-)
-
-const (
-	ModuleName   = types.ModuleName
-	StoreKey     = types.StoreKey
-	QuerierRoute = types.QuerierRoute
-	RouterKey    = types.RouterKey
-)
-
-// nolint
-var (
-	RegisterCdc = types.RegisterCodec
-
-	NewKeeper        = keeper.NewKeeper
-	NewMsgRecvPacket = types.NewMsgRecvPacket
-)
diff --git a/x/ibc/mock/bank/client/cli/tx.go b/x/ibc/mock/bank/client/cli/tx.go
deleted file mode 100644
index 4bb1fb2fc7d3..000000000000
--- a/x/ibc/mock/bank/client/cli/tx.go
+++ /dev/null
@@ -1,85 +0,0 @@
-package cli
-
-import (
-	"fmt"
-	"io/ioutil"
-	"os"
-	"strconv"
-
-	"github.com/cosmos/cosmos-sdk/client"
-	"github.com/cosmos/cosmos-sdk/client/context"
-	"github.com/cosmos/cosmos-sdk/client/flags"
-	"github.com/cosmos/cosmos-sdk/codec"
-	sdk "github.com/cosmos/cosmos-sdk/types"
-	"github.com/cosmos/cosmos-sdk/x/auth"
-	"github.com/cosmos/cosmos-sdk/x/auth/client/utils"
-	channel "github.com/cosmos/cosmos-sdk/x/ibc/04-channel"
-	commitment "github.com/cosmos/cosmos-sdk/x/ibc/23-commitment"
-	"github.com/cosmos/cosmos-sdk/x/ibc/mock/bank/internal/types"
-	"github.com/spf13/cobra"
-)
-
-func GetTxCmd(cdc *codec.Codec) *cobra.Command {
-	txCmd := &cobra.Command{
-		Use:   "ibcmockbank",
-		Short: "IBC mockbank module transaction subcommands",
-	}
-	txCmd.AddCommand(
-		GetMsgRecvPacketCmd(cdc),
-	)
-
-	return txCmd
-}
-
-// GetMsgRecvPacketCmd returns the command to create a MsgRecvTransferPacket transaction
-func GetMsgRecvPacketCmd(cdc *codec.Codec) *cobra.Command {
-	cmd := &cobra.Command{
-		Use:   "recv-packet [/path/to/packet-data.json] [/path/to/proof.json] [height]",
-		Short: "Creates and sends a SendPacket message",
-		Args:  cobra.ExactArgs(3),
-		RunE: func(cmd *cobra.Command, args []string) error {
-			txBldr := auth.NewTxBuilderFromCLI().WithTxEncoder(utils.GetTxEncoder(cdc))
-			cliCtx := context.NewCLIContext().WithCodec(cdc).WithBroadcastMode(flags.BroadcastBlock)
-
-			var packet channel.Packet
-			if err := cdc.UnmarshalJSON([]byte(args[0]), &packet); err != nil {
-				fmt.Fprintf(os.Stderr, "failed to unmarshall input into struct, checking for file...\n")
-				contents, err := ioutil.ReadFile(args[0])
-				if err != nil {
-					return fmt.Errorf("error opening packet file: %v", err)
-				}
-
-				if err := cdc.UnmarshalJSON(contents, packet); err != nil {
-					return fmt.Errorf("error unmarshalling packet file: %v", err)
-				}
-			}
-
-			var proof commitment.Proof
-			if err := cdc.UnmarshalJSON([]byte(args[1]), &proof); err != nil {
-				fmt.Fprintf(os.Stderr, "failed to unmarshall input into struct, checking for file...\n")
-				contents, err := ioutil.ReadFile(args[1])
-				if err != nil {
-					return fmt.Errorf("error opening proofs file: %v", err)
-				}
-				if err := cdc.UnmarshalJSON(contents, &proof); err != nil {
-					return fmt.Errorf("error unmarshalling proofs file: %v", err)
-				}
-			}
-
-			height, err := strconv.ParseUint(args[2], 10, 64)
-			if err != nil {
-				return fmt.Errorf("error height: %v", err)
-			}
-
-			msg := types.NewMsgRecvPacket(packet, []commitment.Proof{proof}, height, cliCtx.GetFromAddress())
-			if err := msg.ValidateBasic(); err != nil {
-				return err
-			}
-
-			return utils.GenerateOrBroadcastMsgs(cliCtx, txBldr, []sdk.Msg{msg})
-		},
-	}
-
-	cmd = client.PostCommands(cmd)[0]
-	return cmd
-}
diff --git a/x/ibc/mock/bank/handler.go b/x/ibc/mock/bank/handler.go
deleted file mode 100644
index 2ed32c4c837e..000000000000
--- a/x/ibc/mock/bank/handler.go
+++ /dev/null
@@ -1,26 +0,0 @@
-package mockbank
-
-import (
-	sdk "github.com/cosmos/cosmos-sdk/types"
-)
-
-func NewHandler(k Keeper) sdk.Handler {
-	return func(ctx sdk.Context, msg sdk.Msg) sdk.Result {
-		switch msg := msg.(type) {
-		case MsgRecvPacket:
-			return handleMsgRecvPacket(ctx, k, msg)
-		default:
-			return sdk.ErrUnknownRequest("failed to parse message").Result()
-		}
-	}
-}
-
-// handleMsgRecvPacket defines the sdk.Handler for MsgRecvPacket
-func handleMsgRecvPacket(ctx sdk.Context, k Keeper, msg MsgRecvPacket) (res sdk.Result) {
-	err := k.ReceivePacket(ctx, msg.Packet, msg.Proofs[0], msg.Height)
-	if err != nil {
-		return sdk.ResultFromError(err)
-	}
-
-	return sdk.Result{Events: ctx.EventManager().Events()}
-}
diff --git a/x/ibc/mock/bank/internal/keeper/keeper.go b/x/ibc/mock/bank/internal/keeper/keeper.go
deleted file mode 100644
index bdcabcf53e94..000000000000
--- a/x/ibc/mock/bank/internal/keeper/keeper.go
+++ /dev/null
@@ -1,44 +0,0 @@
-package keeper
-
-import (
-	"github.com/cosmos/cosmos-sdk/codec"
-	sdk "github.com/cosmos/cosmos-sdk/types"
-	channelexported "github.com/cosmos/cosmos-sdk/x/ibc/04-channel/exported"
-	transfer "github.com/cosmos/cosmos-sdk/x/ibc/20-transfer"
-	commitment "github.com/cosmos/cosmos-sdk/x/ibc/23-commitment"
-	"github.com/cosmos/cosmos-sdk/x/ibc/mock/bank/internal/types"
-)
-
-type Keeper struct {
-	cdc *codec.Codec
-	key sdk.StoreKey
-	ck  types.ChannelKeeper
-	bk  types.IbcBankKeeper
-}
-
-func NewKeeper(cdc *codec.Codec, key sdk.StoreKey, ck types.ChannelKeeper, bk types.IbcBankKeeper) Keeper {
-	return Keeper{
-		cdc: cdc,
-		key: key,
-		ck:  ck,
-		bk:  bk,
-	}
-}
-
-// ReceivePacket handles receiving packet
-func (k Keeper) ReceivePacket(ctx sdk.Context, packet channelexported.PacketI, proof commitment.ProofI, height uint64) error {
-	_, err := k.ck.RecvPacket(ctx, packet, proof, height, nil, k.key)
-	if err != nil {
-		return sdk.NewError(sdk.CodespaceType(types.DefaultCodespace), types.CodeErrReceivePacket, "failed to receive packet")
-	}
-
-	// only process ICS20 token transfer packet data now,
-	// that should be done in routing module.
-	var data transfer.PacketData
-	err = data.UnmarshalJSON(packet.Data())
-	if err != nil {
-		return sdk.NewError(sdk.CodespaceType(types.DefaultCodespace), types.CodeInvalidPacketData, "invalid packet data")
-	}
-
-	return k.bk.ReceiveTransfer(ctx, packet.SourcePort(), packet.SourceChannel(), packet.DestPort(), packet.DestChannel(), data)
-}
diff --git a/x/ibc/mock/bank/internal/types/codec.go b/x/ibc/mock/bank/internal/types/codec.go
deleted file mode 100644
index ba05f5bb00f7..000000000000
--- a/x/ibc/mock/bank/internal/types/codec.go
+++ /dev/null
@@ -1,19 +0,0 @@
-package types
-
-import (
-	"github.com/cosmos/cosmos-sdk/codec"
-	channel "github.com/cosmos/cosmos-sdk/x/ibc/04-channel"
-	commitment "github.com/cosmos/cosmos-sdk/x/ibc/23-commitment"
-)
-
-func RegisterCodec(cdc *codec.Codec) {
-	cdc.RegisterConcrete(MsgRecvPacket{}, "ibcmockbank/MsgRecvPacket", nil)
-}
-
-var ModuleCdc = codec.New()
-
-func init() {
-	RegisterCodec(ModuleCdc)
-	channel.RegisterCodec(ModuleCdc)
-	commitment.RegisterCodec(ModuleCdc)
-}
diff --git a/x/ibc/mock/bank/internal/types/errors.go b/x/ibc/mock/bank/internal/types/errors.go
deleted file mode 100644
index 09cfc89784ff..000000000000
--- a/x/ibc/mock/bank/internal/types/errors.go
+++ /dev/null
@@ -1,15 +0,0 @@
-package types
-
-import (
-	sdk "github.com/cosmos/cosmos-sdk/types"
-)
-
-// ibcmockbank errors reserve 100 ~ 199.
-const (
-	DefaultCodespace sdk.CodespaceType = ModuleName
-
-	CodeInvalidAddress    sdk.CodeType = 101
-	CodeErrReceivePacket  sdk.CodeType = 102
-	CodeProofMissing      sdk.CodeType = 103
-	CodeInvalidPacketData sdk.CodeType = 104
-)
diff --git a/x/ibc/mock/bank/internal/types/expected_keepers.go b/x/ibc/mock/bank/internal/types/expected_keepers.go
deleted file mode 100644
index 4c6e8e149169..000000000000
--- a/x/ibc/mock/bank/internal/types/expected_keepers.go
+++ /dev/null
@@ -1,25 +0,0 @@
-package types
-
-import (
-	sdk "github.com/cosmos/cosmos-sdk/types"
-	"github.com/cosmos/cosmos-sdk/x/ibc/04-channel/exported"
-	transfer "github.com/cosmos/cosmos-sdk/x/ibc/20-transfer"
-	commitment "github.com/cosmos/cosmos-sdk/x/ibc/23-commitment"
-)
-
-// IbcBankKeeper expected IBC transfer keeper
-type IbcBankKeeper interface {
-	ReceiveTransfer(ctx sdk.Context, srcPort, srcChannel, destPort, destChannel string, data transfer.PacketData) error
-}
-
-// ChannelKeeper expected IBC channel keeper
-type ChannelKeeper interface {
-	RecvPacket(
-		ctx sdk.Context,
-		packet exported.PacketI,
-		proof commitment.ProofI,
-		proofHeight uint64,
-		acknowledgement []byte,
-		portCapability sdk.CapabilityKey,
-	) (exported.PacketI, error)
-}
diff --git a/x/ibc/mock/bank/internal/types/keys.go b/x/ibc/mock/bank/internal/types/keys.go
deleted file mode 100644
index 2ffaa38eaa29..000000000000
--- a/x/ibc/mock/bank/internal/types/keys.go
+++ /dev/null
@@ -1,15 +0,0 @@
-package types
-
-const (
-	// ModuleName is the name of the module
-	ModuleName = "ibcmockbank"
-
-	// StoreKey is the string store representation
-	StoreKey = ModuleName
-
-	// QuerierRoute is the querier route for the module
-	QuerierRoute = ModuleName
-
-	// RouterKey is the msg router key for the module
-	RouterKey = ModuleName
-)
diff --git a/x/ibc/mock/bank/internal/types/msgs.go b/x/ibc/mock/bank/internal/types/msgs.go
deleted file mode 100644
index 61d414591e34..000000000000
--- a/x/ibc/mock/bank/internal/types/msgs.go
+++ /dev/null
@@ -1,61 +0,0 @@
-package types
-
-import (
-	sdk "github.com/cosmos/cosmos-sdk/types"
-	channel "github.com/cosmos/cosmos-sdk/x/ibc/04-channel/exported"
-	commitment "github.com/cosmos/cosmos-sdk/x/ibc/23-commitment"
-)
-
-type MsgRecvPacket struct {
-	Packet channel.PacketI    `json:"packet" yaml:"packet"`
-	Proofs []commitment.Proof `json:"proofs" yaml:"proofs"`
-	Height uint64             `json:"height" yaml:"height"`
-	Signer sdk.AccAddress     `json:"signer" yaml:"signer"`
-}
-
-// NewMsgRecvPacket creates a new MsgRecvPacket instance
-func NewMsgRecvPacket(packet channel.PacketI, proofs []commitment.Proof, height uint64, signer sdk.AccAddress) MsgRecvPacket {
-	return MsgRecvPacket{
-		Packet: packet,
-		Proofs: proofs,
-		Height: height,
-		Signer: signer,
-	}
-}
-
-// Route implements sdk.Msg
-func (MsgRecvPacket) Route() string {
-	return RouterKey
-}
-
-// Type implements sdk.Msg
-func (MsgRecvPacket) Type() string {
-	return "recv_packet"
-}
-
-// ValidateBasic implements sdk.Msg
-func (msg MsgRecvPacket) ValidateBasic() sdk.Error {
-	if msg.Proofs == nil {
-		return sdk.NewError(sdk.CodespaceType(DefaultCodespace), CodeProofMissing, "proof missing")
-	}
-
-	if msg.Signer.Empty() {
-		return sdk.NewError(sdk.CodespaceType(DefaultCodespace), CodeInvalidAddress, "invalid signer")
-	}
-
-	if err := msg.Packet.ValidateBasic(); err != nil {
-		return err
-	}
-
-	return nil
-}
-
-// GetSignBytes implements sdk.Msg
-func (msg MsgRecvPacket) GetSignBytes() []byte {
-	return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(msg))
-}
-
-// GetSigners implements sdk.Msg
-func (msg MsgRecvPacket) GetSigners() []sdk.AccAddress {
-	return []sdk.AccAddress{msg.Signer}
-}
diff --git a/x/ibc/mock/bank/module.go b/x/ibc/mock/bank/module.go
deleted file mode 100644
index e033d1de5666..000000000000
--- a/x/ibc/mock/bank/module.go
+++ /dev/null
@@ -1,110 +0,0 @@
-package mockbank
-
-import (
-	"encoding/json"
-
-	"github.com/gorilla/mux"
-	"github.com/spf13/cobra"
-
-	abci "github.com/tendermint/tendermint/abci/types"
-
-	"github.com/cosmos/cosmos-sdk/client/context"
-	"github.com/cosmos/cosmos-sdk/codec"
-	sdk "github.com/cosmos/cosmos-sdk/types"
-	"github.com/cosmos/cosmos-sdk/types/module"
-	"github.com/cosmos/cosmos-sdk/x/ibc/mock/bank/client/cli"
-)
-
-var (
-	_ module.AppModule      = AppModule{}
-	_ module.AppModuleBasic = AppModuleBasic{}
-)
-
-type AppModuleBasic struct{}
-
-var _ module.AppModuleBasic = AppModuleBasic{}
-
-func (AppModuleBasic) Name() string {
-	return ModuleName
-}
-
-func (AppModuleBasic) RegisterCodec(cdc *codec.Codec) {
-	RegisterCdc(cdc)
-}
-
-func (AppModuleBasic) DefaultGenesis() json.RawMessage {
-	return nil
-}
-
-func (AppModuleBasic) ValidateGenesis(bz json.RawMessage) error {
-	return nil
-}
-
-func (AppModuleBasic) RegisterRESTRoutes(ctx context.CLIContext, rtr *mux.Router) {
-	//noop
-}
-
-func (AppModuleBasic) GetTxCmd(cdc *codec.Codec) *cobra.Command {
-	return cli.GetTxCmd(cdc)
-}
-
-func (AppModuleBasic) GetQueryCmd(cdc *codec.Codec) *cobra.Command {
-	return nil
-}
-
-type AppModule struct {
-	AppModuleBasic
-	k Keeper
-}
-
-func NewAppModule(k Keeper) AppModule {
-	return AppModule{
-		AppModuleBasic: AppModuleBasic{},
-		k:              k,
-	}
-}
-
-func (AppModule) RegisterInvariants(ir sdk.InvariantRegistry) {
-
-}
-
-func (AppModule) Name() string {
-	return ModuleName
-}
-
-func (AppModule) Route() string {
-	return ModuleName
-}
-
-func (am AppModule) NewHandler() sdk.Handler {
-	return NewHandler(am.k)
-}
-
-func (am AppModule) QuerierRoute() string {
-	return ModuleName
-}
-
-func (am AppModule) NewQuerierHandler() sdk.Querier {
-	return nil
-}
-
-func (am AppModule) InitGenesis(ctx sdk.Context, data json.RawMessage) []abci.ValidatorUpdate {
-	return []abci.ValidatorUpdate{}
-}
-
-func (am AppModule) ExportGenesis(ctx sdk.Context) json.RawMessage {
-	return nil
-}
-
-func (am AppModule) BeginBlock(ctx sdk.Context, req abci.RequestBeginBlock) {
-
-}
-
-func (am AppModule) EndBlock(ctx sdk.Context, req abci.RequestEndBlock) []abci.ValidatorUpdate {
-	return []abci.ValidatorUpdate{}
-}
-
-// GetTxCmd returns the root tx command for the ibc-channel module.
-func GetTxCmd(cdc *codec.Codec) *cobra.Command {
-	return cli.GetTxCmd(cdc)
-}