diff --git a/.github/workflows/gen-upgrade-on-manual-input.yml b/.github/workflows/gen-upgrade-on-manual-input.yml
index c52b2edb287..8a6cfaf57e7 100644
--- a/.github/workflows/gen-upgrade-on-manual-input.yml
+++ b/.github/workflows/gen-upgrade-on-manual-input.yml
@@ -1,7 +1,8 @@
 # When user trigger this workflow with custom version input, this action will do 3 things:
-# 1) it will create a directory with an empty upgrade handler in app/upgrades folder
-# 2) will increase an E2E_UPGRADE_VERSION variable in Makefile
-# 3) create a pull request with these changes to main
+# 1) create a directory with an empty upgrade handler in app/upgrades folder
+# 2) increase E2E_UPGRADE_VERSION variable in Makefile
+# 3) update OSMOSIS_E2E_UPGRADE_VERSION variable in .vscode/launch.json
+# 4) create a pull request with these changes to main
 
 # Please note that if the given version (or release major version) is smaller than the latest
 # existing upgrade handler version in `app/upgrades/`, this will be a no-op.
@@ -58,6 +59,7 @@ jobs:
             Update report
             - Created a new empty upgrade handler
             - Increased E2E_UPGRADE_VERSION in Makefile by 1
+            - Increased OSMOSIS_E2E_UPGRADE_VERSION in .vscode/launch.json by 1
           labels: |
             T:auto
             C:e2e
diff --git a/.vscode/launch.json b/.vscode/launch.json
index 9cbf78461f6..36809466b6c 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -21,7 +21,7 @@
                 "OSMOSIS_E2E_SKIP_UPGRADE": "false",
                 "OSMOSIS_E2E_SKIP_CLEANUP": "true",
                 "OSMOSIS_E2E_SKIP_STATE_SYNC": "false",
-                "OSMOSIS_E2E_UPGRADE_VERSION": "v15",
+                "OSMOSIS_E2E_UPGRADE_VERSION": "v16",
                 "OSMOSIS_E2E_DEBUG_LOG": "false",
             },
             "preLaunchTask": "e2e-setup"
diff --git a/Makefile b/Makefile
index a88902bd152..2a38340ca08 100644
--- a/Makefile
+++ b/Makefile
@@ -7,7 +7,7 @@ SDK_PACK := $(shell go list -m github.com/cosmos/cosmos-sdk | sed  's/ /\@/g')
 GO_VERSION := $(shell cat go.mod | grep -E 'go [0-9].[0-9]+' | cut -d ' ' -f 2)
 DOCKER := $(shell which docker)
 BUILDDIR ?= $(CURDIR)/build
-E2E_UPGRADE_VERSION := "v15"
+E2E_UPGRADE_VERSION := "v16"
 
 
 GO_MAJOR_VERSION = $(shell go version | cut -c 14- | cut -d' ' -f1 | cut -d'.' -f1)
diff --git a/app/app.go b/app/app.go
index 7f2f67c3c06..296de406fb6 100644
--- a/app/app.go
+++ b/app/app.go
@@ -51,6 +51,7 @@ import (
 	v13 "github.com/osmosis-labs/osmosis/v14/app/upgrades/v13"
 	v14 "github.com/osmosis-labs/osmosis/v14/app/upgrades/v14"
 	v15 "github.com/osmosis-labs/osmosis/v14/app/upgrades/v15"
+	v16 "github.com/osmosis-labs/osmosis/v14/app/upgrades/v16"
 	v3 "github.com/osmosis-labs/osmosis/v14/app/upgrades/v3"
 	v4 "github.com/osmosis-labs/osmosis/v14/app/upgrades/v4"
 	v5 "github.com/osmosis-labs/osmosis/v14/app/upgrades/v5"
@@ -96,7 +97,7 @@ var (
 
 	// _ sdksimapp.App = (*OsmosisApp)(nil)
 
-	Upgrades = []upgrades.Upgrade{v4.Upgrade, v5.Upgrade, v7.Upgrade, v9.Upgrade, v11.Upgrade, v12.Upgrade, v13.Upgrade, v14.Upgrade, v15.Upgrade}
+	Upgrades = []upgrades.Upgrade{v4.Upgrade, v5.Upgrade, v7.Upgrade, v9.Upgrade, v11.Upgrade, v12.Upgrade, v13.Upgrade, v14.Upgrade, v15.Upgrade, v16.Upgrade}
 	Forks    = []upgrades.Fork{v3.Fork, v6.Fork, v8.Fork, v10.Fork}
 )
 
diff --git a/app/upgrades/v16/constants.go b/app/upgrades/v16/constants.go
new file mode 100644
index 00000000000..7504f8a892a
--- /dev/null
+++ b/app/upgrades/v16/constants.go
@@ -0,0 +1,19 @@
+package v16
+
+import (
+	"github.com/osmosis-labs/osmosis/v14/app/upgrades"
+
+	store "github.com/cosmos/cosmos-sdk/store/types"
+)
+
+// UpgradeName defines the on-chain upgrade name for the Osmosis v16 upgrade.
+const UpgradeName = "v16"
+
+var Upgrade = upgrades.Upgrade{
+	UpgradeName:          UpgradeName,
+	CreateUpgradeHandler: CreateUpgradeHandler,
+	StoreUpgrades:        store.StoreUpgrades{
+		Added:   []string{},
+		Deleted: []string{},
+    },
+}
diff --git a/app/upgrades/v16/upgrades.go b/app/upgrades/v16/upgrades.go
new file mode 100644
index 00000000000..f4b4528277d
--- /dev/null
+++ b/app/upgrades/v16/upgrades.go
@@ -0,0 +1,21 @@
+package v16
+
+import (
+	sdk "github.com/cosmos/cosmos-sdk/types"
+	"github.com/cosmos/cosmos-sdk/types/module"
+	upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"
+
+	"github.com/osmosis-labs/osmosis/v14/app/keepers"
+	"github.com/osmosis-labs/osmosis/v14/app/upgrades"
+)
+
+func CreateUpgradeHandler(
+	mm *module.Manager,
+	configurator module.Configurator,
+	bpm upgrades.BaseAppParamManager,
+	keepers *keepers.AppKeepers,
+) upgradetypes.UpgradeHandler {
+	return func(ctx sdk.Context, plan upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) {
+		return mm.RunMigrations(ctx, configurator, fromVM)
+	}
+}
diff --git a/scripts/empty_upgrade_handler_gen.sh b/scripts/empty_upgrade_handler_gen.sh
index f14c3ffaf14..16c255c39cd 100755
--- a/scripts/empty_upgrade_handler_gen.sh
+++ b/scripts/empty_upgrade_handler_gen.sh
@@ -2,8 +2,9 @@
 
 # 1) this script creates an empty directory in app/upgrades called "vX" where X is a previous version + 1 with an empty upgrade handler.
 # 2) adds new version to app.go
-# 3) increases E2E_UPGRADE_VERSION in makefile by 1
-# 4) bumps up previous e2e-init version in tests/e2e/containers/config.go
+# 3) update OSMOSIS_E2E_UPGRADE_VERSION variable in .vscode/launch.json
+# 4) increases E2E_UPGRADE_VERSION in makefile by 1
+# 5) bumps up previous e2e-init version in tests/e2e/containers/config.go
 
 # Also insures that all the imports make use of a current module version from go mod:
 # (see:    module=$(go mod edit -json | jq ".Module.Path")      in this script)
@@ -119,3 +120,6 @@ else
     echo "Using pre-defined osmosis-e2e-init-chain tag: $PREV_OSMOSIS_E2E_TAG"
     sed -i '/previousVersionInitTag/s/".*"/'"\"$PREV_OSMOSIS_E2E_TAG\""'/' $e2e_file
 fi
+
+# update OSMOSIS_E2E_UPGRADE_VERSION in launch.json
+sed -i "s/${bracks}OSMOSIS_E2E_UPGRADE_VERSION${bracks}: ${bracks}v$latest_version${bracks}/${bracks}OSMOSIS_E2E_UPGRADE_VERSION${bracks}: ${bracks}$version_create${bracks}/" ./.vscode/launch.json
diff --git a/tests/e2e/containers/config.go b/tests/e2e/containers/config.go
index a08952f2ae4..383fd58853c 100644
--- a/tests/e2e/containers/config.go
+++ b/tests/e2e/containers/config.go
@@ -24,10 +24,10 @@ const (
 	// It should be uploaded to Docker Hub. OSMOSIS_E2E_SKIP_UPGRADE should be unset
 	// for this functionality to be used.
 	previousVersionOsmoRepository = "osmolabs/osmosis-dev"
-	previousVersionOsmoTag        = "v14.x-de392d2b-1674667154"
+	previousVersionOsmoTag        = "v15.0.0"
 	// Pre-upgrade repo/tag for osmosis initialization (this should be one version below upgradeVersion)
 	previousVersionInitRepository = "osmolabs/osmosis-e2e-init-chain"
-	previousVersionInitTag        = "v14.x-f6813bcb-1674140667-manual"
+	previousVersionInitTag        = "v15.0.0"
 	// Hermes repo/version for relayer
 	relayerRepository = "osmolabs/hermes"
 	relayerTag        = "0.13.0"