diff --git a/extension/src/welcome.ts b/extension/src/welcome.ts
index d68ed75..b0afe12 100644
--- a/extension/src/welcome.ts
+++ b/extension/src/welcome.ts
@@ -12,7 +12,7 @@
 import semver = require('semver');
 import { extensionId } from './const';
 import { GoExtensionContext } from './context';
-import { extensionInfo, getGoConfig } from './config';
+import { extensionInfo } from './config';
 import { getFromGlobalState, updateGlobalState } from './stateUtils';
 import { createRegisterCommand } from './commands';
 
@@ -29,7 +29,11 @@
 				}
 			});
 		}
-		showGoWelcomePage();
+
+		// Show the Go welcome page on update.
+		if (!extensionInfo.isInCloudIDE && vscode.workspace.getConfiguration('go.showWelcome')) {
+			showGoWelcomePage();
+		}
 	}
 
 	public static currentPanel: WelcomePanel | undefined;
@@ -274,9 +278,6 @@
 }
 
 export function shouldShowGoWelcomePage(showVersions: string[], newVersion: string, oldVersion: string): boolean {
-	if (!extensionInfo.isInCloudIDE && getGoConfig().get('showWelcome') === false) {
-		return false;
-	}
 	if (newVersion === oldVersion) {
 		return false;
 	}
diff --git a/extension/test/integration/welcome.test.ts b/extension/test/integration/welcome.test.ts
index 72885ae..78afe71 100644
--- a/extension/test/integration/welcome.test.ts
+++ b/extension/test/integration/welcome.test.ts
@@ -8,70 +8,52 @@
 import { shouldShowGoWelcomePage } from '../../src/welcome';
 import { extensionId } from '../../src/const';
 import { WelcomePanel } from '../../src/welcome';
-import sinon = require('sinon');
-import * as config from '../../src/config';
-import { MockCfg } from '../mocks/MockCfg';
 
 suite('WelcomePanel Tests', () => {
-	let sandbox: sinon.SinonSandbox;
-	setup(() => {
-		sandbox = sinon.createSandbox();
-	});
-	teardown(() => sandbox.restore());
-
-	// 0:showVersions, 1:newVersion, 2:oldVersion, 3: showWelcome, 4:expected
-	//
-	// If showWelcome is false, then expected has to be false.
-	// Otherwise, expected is true if (and only if) newVersion occurs in showVersions
-	// and is newer than oldVersion (as semantic versions).
-	type testCase = [string[], string, string, boolean, boolean];
+	// 0:showVersions, 1:newVersion, 2:oldVersion, 3:expected
+	type testCase = [string[], string, string, boolean];
 	const testCases: testCase[] = [
-		[[], '0.22.0', '0.0.0', true, false],
-		[[], '0.22.0', '0.21.0', true, false],
-		[[], '0.22.0', '0.22.0-rc.1', true, false],
-		[[], '0.22.0', '0.22.0', true, false],
-		[[], '0.22.0', '0.23.0', true, false],
+		[[], '0.22.0', '0.0.0', false],
+		[[], '0.22.0', '0.21.0', false],
+		[[], '0.22.0', '0.22.0-rc.1', false],
+		[[], '0.22.0', '0.22.0', false],
+		[[], '0.22.0', '0.23.0', false],
 
-		[['0.22.0'], '0.22.0', '0.0.0', true, true],
-		[['0.22.0'], '0.22.0', '0.0.0', false, false],
-		[['0.22.0'], '0.22.0', '0.21.0-rc.1', true, true],
-		[['0.22.0'], '0.22.0', '0.21.0', true, true],
-		[['0.22.0'], '0.22.0', '0.22.0-rc.1', true, true],
-		[['0.22.0'], '0.22.0', '0.22.0', true, false],
-		[['0.22.0'], '0.22.0', '0.22.1', true, false],
-		[['0.22.0'], '0.22.0', '0.23.0', true, false],
-		[['0.22.0'], '0.22.0', '1.0.0', true, false],
-		[['0.22.0'], '0.22.0', '2021.1.100', true, false],
+		[['0.22.0'], '0.22.0', '0.0.0', true],
+		[['0.22.0'], '0.22.0', '0.21.0-rc.1', true],
+		[['0.22.0'], '0.22.0', '0.21.0', true],
+		[['0.22.0'], '0.22.0', '0.22.0-rc.1', true],
+		[['0.22.0'], '0.22.0', '0.22.0', false],
+		[['0.22.0'], '0.22.0', '0.22.1', false],
+		[['0.22.0'], '0.22.0', '0.23.0', false],
+		[['0.22.0'], '0.22.0', '1.0.0', false],
+		[['0.22.0'], '0.22.0', '2021.1.100', false],
 
-		[['0.22.0'], '0.22.0-rc.2', '0.0.0', true, true],
-		[['0.22.0'], '0.22.0-rc.2', '0.21.0-rc.1', true, true],
-		[['0.22.0'], '0.22.0-rc.2', '0.21.0', true, true],
-		[['0.22.0'], '0.22.0-rc.2', '0.22.0-rc.1', true, true],
-		[['0.22.0'], '0.22.0-rc.2', '0.22.0-rc.2', true, false],
-		[['0.22.0'], '0.22.0-rc.2', '0.22.0-rc.3', true, true],
-		[['0.22.0'], '0.22.0-rc.2', '0.22.0', true, true],
-		[['0.22.0'], '0.22.0-rc.2', '0.22.1', true, false],
-		[['0.22.0'], '0.22.0-rc.2', '0.23.0', true, false],
-		[['0.22.0'], '0.22.0-rc.2', '1.0.0', true, false],
-		[['0.22.0'], '0.22.0-rc.2', '2021.1.100', true, false],
+		[['0.22.0'], '0.22.0-rc.2', '0.0.0', true],
+		[['0.22.0'], '0.22.0-rc.2', '0.21.0-rc.1', true],
+		[['0.22.0'], '0.22.0-rc.2', '0.21.0', true],
+		[['0.22.0'], '0.22.0-rc.2', '0.22.0-rc.1', true],
+		[['0.22.0'], '0.22.0-rc.2', '0.22.0-rc.2', false],
+		[['0.22.0'], '0.22.0-rc.2', '0.22.0-rc.3', true],
+		[['0.22.0'], '0.22.0-rc.2', '0.22.0', true],
+		[['0.22.0'], '0.22.0-rc.2', '0.22.1', false],
+		[['0.22.0'], '0.22.0-rc.2', '0.23.0', false],
+		[['0.22.0'], '0.22.0-rc.2', '1.0.0', false],
+		[['0.22.0'], '0.22.0-rc.2', '2021.1.100', false],
 
-		[['0.22.0'], '0.22.1', '0.0.0', true, false],
-		[['0.22.0'], '0.22.1', '0.21.0-rc.1', true, false],
-		[['0.22.0'], '0.22.1', '0.21.0', true, false],
-		[['0.22.0'], '0.22.1', '0.22.0-rc.1', true, false],
-		[['0.22.0'], '0.22.1', '0.22.0', true, false],
-		[['0.22.0'], '0.22.1', '0.23.0', true, false],
-		[['0.22.0'], '0.22.1', '1.0.0', true, false],
-		[['0.22.0'], '0.22.1', '2021.1.100', true, false]
+		[['0.22.0'], '0.22.1', '0.0.0', false],
+		[['0.22.0'], '0.22.1', '0.21.0-rc.1', false],
+		[['0.22.0'], '0.22.1', '0.21.0', false],
+		[['0.22.0'], '0.22.1', '0.22.0-rc.1', false],
+		[['0.22.0'], '0.22.1', '0.22.0', false],
+		[['0.22.0'], '0.22.1', '0.23.0', false],
+		[['0.22.0'], '0.22.1', '1.0.0', false],
+		[['0.22.0'], '0.22.1', '2021.1.100', false]
 	];
 	testCases.forEach((c: testCase) => {
-		const [showVersions, newVersion, oldVersion, showWelcome, expected] = c;
-		test(`shouldShowGoWelcomePage(${JSON.stringify(
-			showVersions
-		)}, ${newVersion}, ${oldVersion}, (showWelcome=${showWelcome}))`, () => {
-			const goConfig = new MockCfg([]);
-			sandbox.stub(config, 'getGoConfig').returns(goConfig);
-			sinon.stub(goConfig, 'get').withArgs('showWelcome').returns(showWelcome);
+		const [showVersions, newVersion, oldVersion, expected] = c;
+
+		test(`shouldShowGoWelcomePage(${JSON.stringify(showVersions)}, ${newVersion}, ${oldVersion})`, () => {
 			assert.strictEqual(shouldShowGoWelcomePage(showVersions, newVersion, oldVersion), expected);
 		});
 	});
