diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index ee8c15752b27bebb57c4ec72c1f9c076fc843072..12e2ff71fd47726235d00906ada6e74fcd40392f 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -13494,5 +13494,16 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
+  <key>AdultCheckEnablePurchse</key>
+  <map>
+    <key>Comment</key>
+    <string>Hack to allow QA testing of purchasing land regardless of maturity rating.</string>
+    <key>Persist</key>
+    <integer>0</integer>
+    <key>Type</key>
+    <string>Boolean</string>
+    <key>Value</key>
+    <integer>0</integer>
+  </map>
 </map>
 </llsd>
diff --git a/indra/newview/llfloaterbuycontents.cpp b/indra/newview/llfloaterbuycontents.cpp
index a7388d21a37d2277440f25b2f331b76d9984e24f..9bbbbb9867eaa47a6737c05cfc274c33f9b1ddd9 100644
--- a/indra/newview/llfloaterbuycontents.cpp
+++ b/indra/newview/llfloaterbuycontents.cpp
@@ -51,6 +51,9 @@
 #include "llviewerregion.h"
 #include "lluictrlfactory.h"
 #include "llviewerwindow.h"
+#ifndef STINSON_ADULT_CHECK_HACK
+#include "llviewercontrol.h"
+#endif // STINSON_ADULT_CHECK_HACK
 
 LLFloaterBuyContents::LLFloaterBuyContents(const LLSD& key)
 :	LLFloater(key)
@@ -64,7 +67,11 @@ BOOL LLFloaterBuyContents::postBuild()
 	getChild<LLUICtrl>("buy_btn")->setCommitCallback( boost::bind(&LLFloaterBuyContents::onClickBuy, this));
 
 	getChildView("item_list")->setEnabled(FALSE);
+#ifndef STINSON_ADULT_CHECK_HACK
+	getChildView("buy_btn")->setEnabled(gSavedSettings.getBOOL("AdultCheckEnablePurchse"));
+#else // STINSON_ADULT_CHECK_HACK
 	getChildView("buy_btn")->setEnabled(FALSE);
+#endif // STINSON_ADULT_CHECK_HACK
 	getChildView("wear_check")->setEnabled(FALSE);
 
 	setDefaultBtn("cancel_btn"); // to avoid accidental buy (SL-43130)
@@ -163,7 +170,11 @@ void LLFloaterBuyContents::inventoryChanged(LLViewerObject* obj,
 	}
 
 	// default to turning off the buy button.
+#ifndef STINSON_ADULT_CHECK_HACK
+	getChildView("buy_btn")->setEnabled(gSavedSettings.getBOOL("AdultCheckEnablePurchse"));
+#else // STINSON_ADULT_CHECK_HACK
 	getChildView("buy_btn")->setEnabled(FALSE);
+#endif // STINSON_ADULT_CHECK_HACK
 
 	LLUUID owner_id;
 	BOOL is_group_owned;
diff --git a/indra/newview/llfloaterbuycurrency.cpp b/indra/newview/llfloaterbuycurrency.cpp
index e21a8594bc0e4f37c3087a65dab274c874807f2b..3e7d265cdfe796bbab0f6ac9e914ddbf62b45d90 100644
--- a/indra/newview/llfloaterbuycurrency.cpp
+++ b/indra/newview/llfloaterbuycurrency.cpp
@@ -41,6 +41,9 @@
 #include "llweb.h"
 #include "llwindow.h"
 #include "llappviewer.h"
+#ifndef STINSON_ADULT_CHECK_HACK
+#include "llviewercontrol.h"
+#endif // STINSON_ADULT_CHECK_HACK
 
 static const S32 STANDARD_BUY_AMOUNT = 2000;
 static const S32 MINIMUM_BALANCE_AMOUNT = 0;
@@ -156,7 +159,11 @@ void LLFloaterBuyCurrencyUI::draw()
 	}
 
 	// disable the Buy button when we are not able to buy
+#ifndef STINSON_ADULT_CHECK_HACK
+	getChildView("buy_btn")->setEnabled(gSavedSettings.getBOOL("AdultCheckEnablePurchse") || mManager.canBuy());
+#else // STINSON_ADULT_CHECK_HACK
 	getChildView("buy_btn")->setEnabled(mManager.canBuy());
+#endif // STINSON_ADULT_CHECK_HACK
 
 	LLFloater::draw();
 }
diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp
index 8223e89b64752078a0d5b6442c623b4b3b8f32d9..6333238c267143a8e92eac95d6272d16142f0ab4 100644
--- a/indra/newview/llfloaterbuyland.cpp
+++ b/indra/newview/llfloaterbuyland.cpp
@@ -1305,7 +1305,11 @@ void LLFloaterBuyLandUI::refreshUI()
 	    agrees_to_covenant = check->get();
 	}
 
+#ifndef STINSON_ADULT_CHECK_HACK
+	getChildView("buy_btn")->setEnabled(gSavedSettings.getBOOL("AdultCheckEnablePurchse") || (mCanBuy  &&  mSiteValid  &&  willHaveEnough  &&  !mTransaction && agrees_to_covenant));
+#else // STINSON_ADULT_CHECK_HACK
 	getChildView("buy_btn")->setEnabled(mCanBuy  &&  mSiteValid  &&  willHaveEnough  &&  !mTransaction && agrees_to_covenant);
+#endif // STINSON_ADULT_CHECK_HACK
 }
 
 void LLFloaterBuyLandUI::startBuyPreConfirm()
diff --git a/indra/newview/llsidepaneltaskinfo.cpp b/indra/newview/llsidepaneltaskinfo.cpp
index 24cb559fd058249cf163064d2161cd3cae6e9099..13a2a395e9fe345366468b12ab1f7991fe85ec11 100644
--- a/indra/newview/llsidepaneltaskinfo.cpp
+++ b/indra/newview/llsidepaneltaskinfo.cpp
@@ -251,7 +251,11 @@ void LLSidepanelTaskInfo::disableAll()
 	
 	mOpenBtn->setEnabled(FALSE);
 	mPayBtn->setEnabled(FALSE);
+#ifndef STINSON_ADULT_CHECK_HACK
+	mBuyBtn->setEnabled(gSavedSettings.getBOOL("AdultCheckEnablePurchse"));
+#else // STINSON_ADULT_CHECK_HACK
 	mBuyBtn->setEnabled(FALSE);
+#endif // STINSON_ADULT_CHECK_HACK
 }
 
 void LLSidepanelTaskInfo::refresh()
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 12aed8f448c554d90602902447d558e644c67be1..a5effe4f093b631551f40937b2e25663e2fa65a7 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -111,6 +111,9 @@
 #include "lltoolgrab.h"
 #include "llwindow.h"
 #include "boost/unordered_map.hpp"
+#ifndef STINSON_ADULT_CHECK_HACK
+#include "llviewercontrol.h"
+#endif // STINSON_ADULT_CHECK_HACK
 
 using namespace LLVOAvatarDefines;
 
@@ -335,7 +338,11 @@ void LLMenuParcelObserver::changed()
 {
 	gMenuHolder->childSetEnabled("Land Buy Pass", LLPanelLandGeneral::enableBuyPass(NULL));
 	
+#ifndef STINSON_ADULT_CHECK_HACK
+	BOOL buyable = gSavedSettings.getBOOL("AdultCheckEnablePurchse") || enable_buy_land(NULL);
+#else // STINSON_ADULT_CHECK_HACK
 	BOOL buyable = enable_buy_land(NULL);
+#endif // STINSON_ADULT_CHECK_HACK
 	gMenuHolder->childSetEnabled("Land Buy", buyable);
 	gMenuHolder->childSetEnabled("Buy Land...", buyable);
 }
@@ -3241,6 +3248,12 @@ void append_aggregate(std::string& string, const LLAggregatePermissions& ag_perm
 
 bool enable_buy_object()
 {
+#ifndef STINSON_ADULT_CHECK_HACK
+	if (gSavedSettings.getBOOL("AdultCheckEnablePurchse"))
+	{
+		return true;
+	}
+#endif // STINSON_ADULT_CHECK_HACK
     // In order to buy, there must only be 1 purchaseable object in
     // the selection manger.
 	if(LLSelectMgr::getInstance()->getSelection()->getRootObjectCount() != 1) return false;
@@ -5928,6 +5941,12 @@ class LLWorldEnableBuyLand : public view_listener_t
 {
 	bool handleEvent(const LLSD& userdata)
 	{
+#ifndef STINSON_ADULT_CHECK_HACK
+		if (gSavedSettings.getBOOL("AdultCheckEnablePurchse"))
+		{
+			return true;
+		}
+#endif // STINSON_ADULT_CHECK_HACK
 		bool new_value = LLViewerParcelMgr::getInstance()->canAgentBuyParcel(
 								LLViewerParcelMgr::getInstance()->selectionEmpty()
 									? LLViewerParcelMgr::getInstance()->getAgentParcel()