diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp
index f4028057e8565b66078f4b9abc706c30910923e4..7415e7d9747e6bc92f2a3fb54a65ff612c6cc851 100644
--- a/indra/llui/llscrolllistctrl.cpp
+++ b/indra/llui/llscrolllistctrl.cpp
@@ -137,6 +137,7 @@ LLScrollListCtrl::Params::Params()
 	background_visible("background_visible"),
 	draw_stripes("draw_stripes"),
 	column_padding("column_padding"),
+	row_padding("row_padding", 2),
 	fg_unselected_color("fg_unselected_color"),
 	fg_selected_color("fg_selected_color"),
 	bg_selected_color("bg_selected_color"),
@@ -199,6 +200,7 @@ LLScrollListCtrl::LLScrollListCtrl(const LLScrollListCtrl::Params& p)
 	mHoveredColor(p.hovered_color()),
 	mSearchColumn(p.search_column),
 	mColumnPadding(p.column_padding),
+	mRowPadding(p.row_padding),
 	mContextMenuType(MENU_NONE),
 	mIsFriendSignal(NULL)
 {
@@ -685,8 +687,6 @@ bool LLScrollListCtrl::updateColumnWidths()
 	return width_changed;
 }
 
-const S32 SCROLL_LIST_ROW_PAD = 2;
-
 // Line height is the max height of all the cells in all the items.
 void LLScrollListCtrl::updateLineHeight()
 {
@@ -699,7 +699,7 @@ void LLScrollListCtrl::updateLineHeight()
 		S32 i = 0;
 		for (const LLScrollListCell* cell = itemp->getColumn(i); i < num_cols; cell = itemp->getColumn(++i))
 		{
-			mLineHeight = llmax( mLineHeight, cell->getHeight() + SCROLL_LIST_ROW_PAD );
+			mLineHeight = llmax( mLineHeight, cell->getHeight() + mRowPadding );
 		}
 	}
 }
@@ -711,7 +711,7 @@ void LLScrollListCtrl::updateLineHeightInsert(LLScrollListItem* itemp)
 	S32 i = 0;
 	for (const LLScrollListCell* cell = itemp->getColumn(i); i < num_cols; cell = itemp->getColumn(++i))
 	{
-		mLineHeight = llmax( mLineHeight, cell->getHeight() + SCROLL_LIST_ROW_PAD );
+		mLineHeight = llmax( mLineHeight, cell->getHeight() + mRowPadding );
 	}
 }
 
diff --git a/indra/llui/llscrolllistctrl.h b/indra/llui/llscrolllistctrl.h
index b35a8608e70d82e2b9ec8f9ab7fb0d764ad329b2..51e0819eccaf42e55bba75ddf0e85ab7a5c3316f 100644
--- a/indra/llui/llscrolllistctrl.h
+++ b/indra/llui/llscrolllistctrl.h
@@ -108,7 +108,8 @@ class LLScrollListCtrl : public LLUICtrl, public LLEditMenuHandler,
 
 		// layout
 		Optional<S32>	column_padding,
-							page_lines,
+						row_padding,
+						page_lines,
 						heading_height;
 
 		// sort and search behavior
@@ -283,8 +284,10 @@ class LLScrollListCtrl : public LLUICtrl, public LLEditMenuHandler,
 
 	void setBackgroundVisible(BOOL b)			{ mBackgroundVisible = b; }
 	void setDrawStripes(BOOL b)					{ mDrawStripes = b; }
-	void setColumnPadding(const S32 c)          { mColumnPadding = c; }
-	S32  getColumnPadding()						{ return mColumnPadding; }
+	void setColumnPadding(const S32 c)			{ mColumnPadding = c; }
+	S32  getColumnPadding() const				{ return mColumnPadding; }
+	void setRowPadding(const S32 c)				{ mColumnPadding = c; }
+	S32  getRowPadding() const					{ return mColumnPadding; }
 	void setCommitOnKeyboardMovement(BOOL b)	{ mCommitOnKeyboardMovement = b; }
 	void setCommitOnSelectionChange(BOOL b)		{ mCommitOnSelectionChange = b; }
 	void setAllowKeyboardMovement(BOOL b)		{ mAllowKeyboardMovement = b; }
@@ -468,6 +471,7 @@ class LLScrollListCtrl : public LLUICtrl, public LLEditMenuHandler,
 
 	LLRect			mItemListRect;
 	S32             mColumnPadding;
+	S32             mRowPadding;
 
 	BOOL			mBackgroundVisible;
 	BOOL			mDrawStripes;
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 5423ddb684ce969dea3b61d0abf5c8308f6b0d62..748cffd1c399fe1c067f53618273c916f9898b87 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -441,6 +441,7 @@ set(viewer_SOURCE_FILES
     llpanelface.cpp
     llpanelgenerictip.cpp
     llpanelgroup.cpp
+    llpanelgroupcreate.cpp
     llpanelgroupbulk.cpp
     llpanelgroupbulkban.cpp
     llpanelgroupexperiences.cpp
@@ -1060,6 +1061,7 @@ set(viewer_HEADER_FILES
     llpanelface.h
     llpanelgenerictip.h
     llpanelgroup.h
+    llpanelgroupcreate.h
     llpanelgroupbulk.h
     llpanelgroupbulkimpl.h
     llpanelgroupbulkban.h
diff --git a/indra/newview/llagentbenefits.cpp b/indra/newview/llagentbenefits.cpp
index fcb1600b1d8c96bbf06c2ebcdc63df52eaba8d68..2d219735a09cf22b7512b5c6e651239808e48254 100644
--- a/indra/newview/llagentbenefits.cpp
+++ b/indra/newview/llagentbenefits.cpp
@@ -217,6 +217,7 @@ bool LLAgentBenefitsMgr::initCurrent(const std::string& package, const LLSD& ben
 	else
 	{
 		instance().mCurrent = benefits;
+		instance().mCurrentName = package;
 	}
 	return true;
 
@@ -227,3 +228,9 @@ bool LLAgentBenefitsMgr::has(const std::string& package)
 {
 	return instance().mPackageMap.find(package) != instance().mPackageMap.end();
 }
+
+//static
+bool LLAgentBenefitsMgr::isCurrent(const std::string& package)
+{
+	return instance().mCurrentName == package;
+}
diff --git a/indra/newview/llagentbenefits.h b/indra/newview/llagentbenefits.h
index 680b1e7b07eb876026c295feffba751c315853a6..48aa6bd8698babcaacb929bf5c1ec621ef4e158b 100644
--- a/indra/newview/llagentbenefits.h
+++ b/indra/newview/llagentbenefits.h
@@ -75,8 +75,10 @@ class LLAgentBenefitsMgr: public LLSingleton<LLAgentBenefitsMgr>
 	static bool init(const std::string& package, const LLSD& benefits_sd);
 	static bool initCurrent(const std::string& package, const LLSD& benefits_sd);
 	static bool has(const std::string& package);
+	static bool isCurrent(const std::string& package);
 
 private:
+	std::string     mCurrentName;
 	LLAgentBenefits mCurrent;
 	LLAgentBenefits mDefault;
 	std::map<std::string, LLAgentBenefits> mPackageMap;
diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp
index 599790d2bb8e0d3591d488ddb0c6f8b71f21ec59..d2bd716f550d1e6e850bb56c80d915570f812e3e 100644
--- a/indra/newview/llgroupactions.cpp
+++ b/indra/newview/llgroupactions.cpp
@@ -400,10 +400,10 @@ void LLGroupActions::createGroup()
 {
 	LLSD params;
 	params["group_id"] = LLUUID::null;
-	params["open_tab_name"] = "panel_group_info_sidetray";
+	params["open_tab_name"] = "panel_group_creation_sidetray";
 	params["action"] = "create";
 
-	LLFloaterSidePanelContainer::showPanel("people", "panel_group_info_sidetray", params);
+	LLFloaterSidePanelContainer::showPanel("people", "panel_group_creation_sidetray", params);
 
 }
 //static
diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp
index e384019a43ec7b296f7ccde879f53760ce3b88d4..dbf76395391469532f8610fb2a41e7853512da55 100644
--- a/indra/newview/llgroupmgr.cpp
+++ b/indra/newview/llgroupmgr.cpp
@@ -45,7 +45,7 @@
 #include "lltransactiontypes.h"
 #include "llstatusbar.h"
 #include "llviewerwindow.h"
-#include "llpanelgroup.h"
+#include "llpanelgroupcreate.h"
 #include "llgroupactions.h"
 #include "llnotificationsutil.h"
 #include "lluictrlfactory.h"
@@ -1451,7 +1451,7 @@ void LLGroupMgr::processCreateGroupReply(LLMessageSystem* msg, void ** data)
 
 		gAgent.mGroups.push_back(gd);
 
-		LLPanelGroup::refreshCreatedGroup(group_id);
+		LLPanelGroupCreate::refreshCreatedGroup(group_id);
 		//FIXME
 		//LLFloaterGroupInfo::closeCreateGroup();
 		//LLFloaterGroupInfo::showFromUUID(group_id,"roles_tab");
diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp
index e41211ddbdff5daef7f4b09ee81ddfddafc8f471..ab255d52151261c0c348d491e230d815a5e676b9 100644
--- a/indra/newview/llpanelgroup.cpp
+++ b/indra/newview/llpanelgroup.cpp
@@ -128,10 +128,6 @@ void LLPanelGroup::onOpen(const LLSD& key)
 	{
 		onBackBtnClick();
 	}
-	else if(str_action == "create")
-	{
-		setGroupID(LLUUID::null);
-	}
 	else if(str_action == "refresh_notices")
 	{
 		LLPanelGroupNotices* panel_notices = findChild<LLPanelGroupNotices>("group_notices_tab_panel");
@@ -162,12 +158,8 @@ BOOL LLPanelGroup::postBuild()
 	button = getChild<LLButton>("btn_refresh");
 	button->setClickedCallback(onBtnRefresh, this);
 
-	getChild<LLButton>("btn_create")->setVisible(false);
-
 	childSetCommitCallback("back",boost::bind(&LLPanelGroup::onBackBtnClick,this),NULL);
 
-	childSetCommitCallback("btn_create",boost::bind(&LLPanelGroup::onBtnCreate,this),NULL);
-
 	LLPanelGroupTab* panel_general = findChild<LLPanelGroupTab>("group_general_tab_panel");
 	LLPanelGroupTab* panel_roles = findChild<LLPanelGroupTab>("group_roles_tab_panel");
 	LLPanelGroupTab* panel_notices = findChild<LLPanelGroupTab>("group_notices_tab_panel");
@@ -223,7 +215,6 @@ void LLPanelGroup::reposButtons()
 	}
 
 	reposButton("btn_apply");
-	reposButton("btn_create");
 	reposButton("btn_refresh");
 	reposButton("btn_cancel");
 	reposButton("btn_chat");
@@ -246,23 +237,6 @@ void LLPanelGroup::onBackBtnClick()
 	}
 }
 
-
-void LLPanelGroup::onBtnCreate()
-{
-	LLPanelGroupGeneral* panel_general = findChild<LLPanelGroupGeneral>("group_general_tab_panel");
-	if(!panel_general)
-		return;
-	std::string apply_mesg;
-	if(panel_general->apply(apply_mesg))//yes yes you need to call apply to create...
-		return;
-	if ( !apply_mesg.empty() )
-	{
-		LLSD args;
-		args["MESSAGE"] = apply_mesg;
-		LLNotificationsUtil::add("GenericAlert", args);
-	}
-}
-
 void LLPanelGroup::onBtnRefresh(void* user_data)
 {
 	LLPanelGroup* self = static_cast<LLPanelGroup*>(user_data);
@@ -378,7 +352,6 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)
 
 	LLButton* button_apply = findChild<LLButton>("btn_apply");
 	LLButton* button_refresh = findChild<LLButton>("btn_refresh");
-	LLButton* button_create = findChild<LLButton>("btn_create");
 	
 	LLButton* button_cancel = findChild<LLButton>("btn_cancel");
 	LLButton* button_call = findChild<LLButton>("btn_call");
@@ -391,8 +364,6 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)
 	if(button_refresh)
 		button_refresh->setVisible(!is_null_group_id);
 
-	if(button_create)
-		button_create->setVisible(is_null_group_id);
 	if(button_cancel)
 		button_cancel->setVisible(!is_null_group_id);
 
@@ -611,18 +582,6 @@ void LLPanelGroup::showNotice(const std::string& subject,
 	panel_notices->showNotice(subject,message,has_inventory,inventory_name,inventory_offer);
 }
 
-
-
-
-//static
-void LLPanelGroup::refreshCreatedGroup(const LLUUID& group_id)
-{
-	LLPanelGroup* panel = LLFloaterSidePanelContainer::getPanel<LLPanelGroup>("people", "panel_group_info_sidetray");
-	if(!panel)
-		return;
-	panel->setGroupID(group_id);
-}
-
 //static
 
 void LLPanelGroup::showNotice(const std::string& subject,
diff --git a/indra/newview/llpanelgroup.h b/indra/newview/llpanelgroup.h
index 0b40c8b5d3640dd3bb095468c5bb2942817fd199..be40b08a6d748f16d850d2a8fd009be3405f6215 100644
--- a/indra/newview/llpanelgroup.h
+++ b/indra/newview/llpanelgroup.h
@@ -79,8 +79,6 @@ class LLPanelGroup : public LLPanel,
 
 	virtual void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
 
-	static void refreshCreatedGroup(const LLUUID& group_id);
-
 	static void showNotice(const std::string& subject,
 						   const std::string& message,
 						   const LLUUID& group_id,
@@ -92,7 +90,6 @@ class LLPanelGroup : public LLPanel,
 protected:
 	virtual void update(LLGroupChange gc);
 
-	void onBtnCreate();
 	void onBackBtnClick();
 	void onBtnJoin();
 
diff --git a/indra/newview/llpanelgroupcreate.cpp b/indra/newview/llpanelgroupcreate.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a782edae72005a4a79d7101e6262d6e04d97e6ee
--- /dev/null
+++ b/indra/newview/llpanelgroupcreate.cpp
@@ -0,0 +1,237 @@
+/** 
+ * @file llpanelgroupcreate.cpp
+ *
+ * $LicenseInfo:firstyear=2019&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2019, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llpanelgroupcreate.h"
+
+// UI includes
+#include "llbutton.h"
+#include "llcheckboxctrl.h"
+#include "llcombobox.h"
+#include "llfloatersidepanelcontainer.h"
+#include "llsidetraypanelcontainer.h"
+#include "llscrolllistctrl.h"
+#include "llspinctrl.h"
+#include "lltextbox.h"
+#include "lltexteditor.h"
+#include "lltexturectrl.h"
+#include "lluictrlfactory.h"
+
+// Viewer includes
+#include "llagentbenefits.h"
+#include "llfloaterreg.h"
+#include "llfloater.h"
+#include "llgroupmgr.h"
+#include "lltrans.h"
+#include "llnotificationsutil.h"
+#include "lluicolortable.h"
+
+
+const S32 MATURE_CONTENT = 1;
+const S32 NON_MATURE_CONTENT = 2;
+const S32 DECLINE_TO_STATE = 0;
+
+static LLPanelInjector<LLPanelGroupCreate> t_panel_group_creation("panel_group_creation_sidetray");
+
+LLPanelGroupCreate::LLPanelGroupCreate()
+:    LLPanel()
+{
+}
+
+LLPanelGroupCreate::~LLPanelGroupCreate()
+{
+}
+
+BOOL LLPanelGroupCreate::postBuild()
+{
+    childSetCommitCallback("back", boost::bind(&LLPanelGroupCreate::onBackBtnClick, this), NULL);
+
+    mComboMature = getChild<LLComboBox>("group_mature_check", TRUE);
+    mCtrlOpenEnrollment = getChild<LLCheckBoxCtrl>("open_enrollement", TRUE);
+    mCtrlEnrollmentFee = getChild<LLCheckBoxCtrl>("check_enrollment_fee", TRUE);
+    mEditCharter = getChild<LLTextEditor>("charter", TRUE);
+    mSpinEnrollmentFee = getChild<LLSpinCtrl>("spin_enrollment_fee", TRUE);
+    mMembershipList = getChild<LLScrollListCtrl>("membership_list", TRUE);
+
+    mCreateButton = getChild<LLButton>("btn_create", TRUE);
+    mCreateButton->setCommitCallback(boost::bind(&LLPanelGroupCreate::onBtnCreate, this));
+
+    mGroupNameEditor = getChild<LLLineEditor>("group_name_editor", TRUE);
+    mGroupNameEditor->setPrevalidate(LLTextValidate::validateASCIINoLeadingSpace);
+
+    mInsignia = getChild<LLTextureCtrl>("insignia", TRUE);
+    mInsignia->setAllowLocalTexture(FALSE);
+    mInsignia->setCanApplyImmediately(FALSE);
+
+    return TRUE;
+}
+
+void LLPanelGroupCreate::onOpen(const LLSD& key)
+{
+    mInsignia->setImageAssetID(LLUUID::null);
+    mInsignia->setImageAssetName(mInsignia->getDefaultImageName());
+    mGroupNameEditor->clear();
+    mEditCharter->clear();
+    mSpinEnrollmentFee->set(0.f);
+    mCtrlEnrollmentFee->set(FALSE);
+    mCtrlOpenEnrollment->set(FALSE);
+    mMembershipList->clearRows();
+
+    // populate list
+    addMembershipRow("Base");
+    addMembershipRow("Premium");
+    addMembershipRow("PremiumPlus");
+    addMembershipRow("Internal");// Present only if you are already in one, needed for testing
+
+    S32 cost = LLAgentBenefitsMgr::current().getCreateGroupCost();
+    mCreateButton->setLabelArg("[COST]", llformat("%d", cost));
+}
+
+//static
+void LLPanelGroupCreate::refreshCreatedGroup(const LLUUID& group_id)
+{
+    LLSD params;
+    params["group_id"] = group_id;
+    params["open_tab_name"] = "panel_group_info_sidetray";
+    LLFloaterSidePanelContainer::showPanel("people", "panel_group_info_sidetray", params);
+}
+
+void LLPanelGroupCreate::addMembershipRow(const std::string &name)
+{
+    if (LLAgentBenefitsMgr::has(name))
+    {
+        bool is_current = LLAgentBenefitsMgr::isCurrent(name);
+
+        LLScrollListItem::Params item_params;
+        LLScrollListCell::Params cell_params;
+        cell_params.font = LLFontGL::getFontSansSerif();
+        // Start out right justifying numeric displays
+        cell_params.font_halign = LLFontGL::LEFT;
+        if (is_current)
+        {
+            cell_params.color = LLUIColorTable::instance().getColor("DrYellow");
+        }
+
+        cell_params.column = "clmn_name";
+        std::string mem_str = name + "Membership";
+        if (is_current)
+        {
+            cell_params.value = LLTrans::getString(mem_str) + " " + getString("current_membership");
+        }
+        else
+        {
+            cell_params.value = LLTrans::getString(mem_str);
+        }
+        item_params.columns.add(cell_params);
+        cell_params.column = "clmn_price";
+        cell_params.value = llformat("L$ %d",LLAgentBenefitsMgr::get(name).getCreateGroupCost());
+        item_params.columns.add(cell_params);
+        mMembershipList->addRow(item_params);
+    }
+}
+
+void LLPanelGroupCreate::onBackBtnClick()
+{
+    LLSideTrayPanelContainer* parent = dynamic_cast<LLSideTrayPanelContainer*>(getParent());
+    if(parent)
+    {
+        parent->openPreviousPanel();
+    }
+}
+
+bool LLPanelGroupCreate::confirmMatureApply(const LLSD& notification, const LLSD& response)
+{
+    S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+    // 0 == Yes
+    // 1 == No
+    // 2 == Cancel
+    switch (option)
+    {
+    case 0:
+        mComboMature->setCurrentByIndex(MATURE_CONTENT);
+        createGroup();
+        break;
+    case 1:
+        mComboMature->setCurrentByIndex(NON_MATURE_CONTENT);
+        createGroup();
+        break;
+    default:
+        break;
+    }
+
+    return true;
+}
+
+void LLPanelGroupCreate::onBtnCreate()
+{
+    LL_INFOS() << "Validating group creation" << LL_ENDL;
+
+    // Validate the group name length.
+    std::string gr_name = mGroupNameEditor->getText();
+    LLStringUtil::trim(gr_name);
+    S32 group_name_len = gr_name.size();
+    if (group_name_len < DB_GROUP_NAME_MIN_LEN
+        || group_name_len > DB_GROUP_NAME_STR_LEN)
+    {
+        LLSD args;
+        args["MIN_LEN"] = DB_GROUP_NAME_MIN_LEN;
+        args["MAX_LEN"] = DB_GROUP_NAME_STR_LEN;
+        LLNotificationsUtil::add("GroupNameLengthWarning", args);
+    }
+    else
+    // Check to make sure mature has been set
+    if (mComboMature &&
+        mComboMature->getCurrentIndex() == DECLINE_TO_STATE)
+    {
+        LLNotificationsUtil::add("SetGroupMature", LLSD(), LLSD(),
+            boost::bind(&LLPanelGroupCreate::confirmMatureApply, this, _1, _2));
+    }
+    else
+    {
+        createGroup();
+    }
+}
+
+void LLPanelGroupCreate::createGroup()
+{
+    LL_INFOS() << "Creating group" << LL_ENDL;
+
+    U32 enrollment_fee = (mCtrlEnrollmentFee->get() ?
+        (U32)mSpinEnrollmentFee->get() : 0);
+    LLUUID insignia_id = mInsignia->getImageItemID().isNull() ? LLUUID::null : mInsignia->getImageAssetID();
+
+    std::string gr_name = mGroupNameEditor->getText();
+    LLStringUtil::trim(gr_name);
+    LLGroupMgr::getInstance()->sendCreateGroupRequest(gr_name,
+        mEditCharter->getText(),
+        true,
+        insignia_id,
+        enrollment_fee,
+        mCtrlOpenEnrollment->get(),
+        false,
+        mComboMature->getCurrentIndex() == MATURE_CONTENT);
+}
+
diff --git a/indra/newview/llpanelgroupcreate.h b/indra/newview/llpanelgroupcreate.h
new file mode 100644
index 0000000000000000000000000000000000000000..3ae2e7f24ac9a126927c4b26f37afa06fd71ba88
--- /dev/null
+++ b/indra/newview/llpanelgroupcreate.h
@@ -0,0 +1,73 @@
+/** 
+ * @file llpanelgroupcreate.h
+ *
+ * $LicenseInfo:firstyear=2019&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2019, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLPANELGROUPCREATE_H
+#define LL_LLPANELGROUPCREATE_H
+
+#include "llpanel.h"
+
+
+// Forward declares
+class LLButton;
+class LLCheckBoxCtrl;
+class LLComboBox;
+class LLLineEditor;
+class LLTextEditor;
+class LLTextureCtrl;
+class LLScrollListCtrl;
+class LLSpinCtrl;
+
+
+class LLPanelGroupCreate : public LLPanel
+{
+public:
+    LLPanelGroupCreate();
+    virtual ~LLPanelGroupCreate();
+
+    virtual BOOL postBuild();
+
+    void onOpen(const LLSD& key);
+
+    static void refreshCreatedGroup(const LLUUID& group_id);
+
+private:
+    void addMembershipRow(const std::string &name);
+    bool confirmMatureApply(const LLSD& notification, const LLSD& response);
+    void onBtnCreate();
+    void onBackBtnClick();
+    void createGroup();
+
+    LLComboBox       *mComboMature;
+    LLButton         *mCreateButton;
+    LLCheckBoxCtrl   *mCtrlOpenEnrollment;
+    LLCheckBoxCtrl   *mCtrlEnrollmentFee;
+    LLTextEditor     *mEditCharter;
+    LLTextureCtrl    *mInsignia;
+    LLLineEditor     *mGroupNameEditor;
+    LLScrollListCtrl *mMembershipList;
+    LLSpinCtrl       *mSpinEnrollmentFee;
+};
+
+#endif // LL_LLPANELGROUPCREATE_H
diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp
index 18f38b0d12de6c06886eed9440f3078d0008bacd..375daf60f88ec6f55f661e2a571d1fec0aa84caf 100644
--- a/indra/newview/llpanelgroupgeneral.cpp
+++ b/indra/newview/llpanelgroupgeneral.cpp
@@ -304,6 +304,11 @@ void LLPanelGroupGeneral::draw()
 
 bool LLPanelGroupGeneral::apply(std::string& mesg)
 {
+	if (mGroupID.isNull())
+	{
+		return false;
+	}
+
 	if (!mGroupID.isNull() && mAllowEdit && mComboActiveTitle && mComboActiveTitle->isDirty())
 	{
 		LLGroupMgr::getInstance()->sendGroupTitleUpdate(mGroupID,mComboActiveTitle->getCurrentID());
@@ -313,7 +318,7 @@ bool LLPanelGroupGeneral::apply(std::string& mesg)
 
 	BOOL has_power_in_group = gAgent.hasPowerInGroup(mGroupID,GP_GROUP_CHANGE_IDENTITY);
 
-	if (has_power_in_group || mGroupID.isNull())
+	if (has_power_in_group)
 	{
 		LL_INFOS() << "LLPanelGroupGeneral::apply" << LL_ENDL;
 
@@ -326,27 +331,6 @@ bool LLPanelGroupGeneral::apply(std::string& mesg)
 			return false;
 		}
 
-		if (mGroupID.isNull())
-		{
-			// Validate the group name length.
-			S32 group_name_len = mGroupNameEditor->getText().size();
-			if ( group_name_len < DB_GROUP_NAME_MIN_LEN 
-				|| group_name_len > DB_GROUP_NAME_STR_LEN)
-			{
-				std::ostringstream temp_error;
-				temp_error << "A group name must be between " << DB_GROUP_NAME_MIN_LEN
-					<< " and " << DB_GROUP_NAME_STR_LEN << " characters.";
-				mesg = temp_error.str();
-				return false;
-			}
-
-			LLSD args;
-			args["COST"] = LLAgentBenefitsMgr::current().getCreateGroupCost();
-			LLNotificationsUtil::add("CreateGroupCost",  args, LLSD(), boost::bind(&LLPanelGroupGeneral::createGroupCallback, this, _1, _2));
-
-			return false;
-		}
-
 		LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
 		if (!gdatap)
 		{
@@ -453,37 +437,6 @@ bool LLPanelGroupGeneral::confirmMatureApply(const LLSD& notification, const LLS
 	return ret;
 }
 
-// static
-bool LLPanelGroupGeneral::createGroupCallback(const LLSD& notification, const LLSD& response)
-{
-	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-	switch(option)
-	{
-	case 0:
-		{
-			// Yay!  We are making a new group!
-			U32 enrollment_fee = (mCtrlEnrollmentFee->get() ? 
-									(U32) mSpinEnrollmentFee->get() : 0);
-			LLUUID insignia_id = mInsignia->getImageItemID().isNull() ? LLUUID::null : mInsignia->getImageAssetID();
-
-			LLGroupMgr::getInstance()->sendCreateGroupRequest(mGroupNameEditor->getText(),
-												mEditCharter->getText(),
-												mCtrlShowInGroupList->get(),
-												insignia_id,
-												enrollment_fee,
-												mCtrlOpenEnrollment->get(),
-												false,
-												mComboMature->getCurrentIndex() == MATURE_CONTENT);
-
-		}
-		break;
-	case 1:
-	default:
-		break;
-	}
-	return false;
-}
-
 // virtual
 void LLPanelGroupGeneral::update(LLGroupChange gc)
 {
diff --git a/indra/newview/llpanelgroupgeneral.h b/indra/newview/llpanelgroupgeneral.h
index 11972bafa98fc260537501209690d79f27746aca..1d0789521cb7a16ba788a21886b38efe995729f4 100644
--- a/indra/newview/llpanelgroupgeneral.h
+++ b/indra/newview/llpanelgroupgeneral.h
@@ -51,7 +51,6 @@ class LLPanelGroupGeneral : public LLPanelGroupTab
 	virtual bool needsApply(std::string& mesg);
 	virtual bool apply(std::string& mesg);
 	virtual void cancel();
-	bool createGroupCallback(const LLSD& notification, const LLSD& response);
 	
 	virtual void update(LLGroupChange gc);
 	
diff --git a/indra/newview/skins/default/xui/en/floater_people.xml b/indra/newview/skins/default/xui/en/floater_people.xml
index 701233ba4a0f2c2b4b22c4e2a38e15e8de42b6fc..0cc0ca1ce49acbb9c046b260990e69d930273e28 100644
--- a/indra/newview/skins/default/xui/en/floater_people.xml
+++ b/indra/newview/skins/default/xui/en/floater_people.xml
@@ -31,5 +31,11 @@
         filename="panel_group_info_sidetray.xml"
         label="Group Profile"
         font="SansSerifBold"/>
+      <panel
+        class="panel_group_creation_sidetray"
+        name="panel_group_creation_sidetray"
+        filename="panel_group_creation_sidetray.xml"
+        label="Create Group"
+        font="SansSerifBold"/>
     </panel_container>
 </floater>
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 670784f3bf1cb7e60add0b1737ca8dab3fcf52dc..2417c5225102318607bdc13e04c20f3560ac84fe 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -684,6 +684,18 @@ Do you want to revoke modify rights for the selected Residents?
      yestext="Yes"/>
   </notification>
 
+  <notification
+   icon="alertmodal.tga"
+   name="GroupNameLengthWarning"
+   type="alertmodal">
+A group name must be between [MIN_LEN] and [MAX_LEN] characters.
+    <tag>group</tag>
+    <tag>fail</tag>
+    <usetemplate
+       name="okbutton"
+       yestext="OK"/>
+  </notification>
+  
   <notification
    icon="alertmodal.tga"
    name="UnableToCreateGroup"
diff --git a/indra/newview/skins/default/xui/en/panel_group_creation_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_creation_sidetray.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c0265c2fa263c56da2d235631a27d25f8c20e2be
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_group_creation_sidetray.xml
@@ -0,0 +1,314 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+background_visible="true"
+ follows="all"
+ height="570"
+ label="Group Creation"
+ layout="topleft"
+ min_height="350"
+ left="0"
+ top="20"
+ name="GroupCreation"
+ width="313">
+  <panel.string
+   name="current_membership">
+(your membership)
+  </panel.string>
+  <panel
+    name="group_info_top"
+    follows="top|left"
+    top="0"
+    left="0"
+    height="29"
+    width="313"
+    layout="topleft">
+    <line_editor
+     follows="left|top"
+     font="SansSerif"
+     label="Type your new group name here"
+     layout="topleft"
+     max_length_bytes="35"
+     name="group_name_editor"
+     left="12"
+     top="5"
+     width="270"
+     height="20"
+     visible="true" />
+  </panel>
+  <layout_stack
+    name="layout"
+    orientation="vertical"
+     follows="all"
+    left="8"
+    top_pad="0"
+    height="538"
+    width="300"
+    border_size="0">
+    <layout_panel
+        bg_alpha_color="DkGray2"
+        bg_opaque_color="DkGray2"
+        background_visible="true"
+        background_opaque="true"
+        name="group_info"
+        follows="all"
+        layout="topleft"
+        auto_resize="false"
+        user_resize="false"
+        height="206"
+        width="313">
+      <panel
+         name="group_info_top"
+         follows="top|left|right"
+         top="0"
+         left="0"
+         height="99"
+         width="312"
+         layout="topleft">
+        <texture_picker
+         default_image_name="Generic_Group_Large"
+         follows="left|top"
+         name="insignia"
+         label=""
+         no_commit_on_selection="true"
+         tool_tip="Click to choose a picture"
+         layout="topleft"
+         height="110"
+         left="5"
+         top="5"
+         width="100" />
+        <text_editor
+         follows="left|top|right"
+         layout="topleft"
+         type="string"
+         name="charter"
+         left_pad="3"
+         height="86"
+         max_length="511"
+         top="6"
+         right="-4"
+         bg_readonly_color="DkGray2"
+         text_readonly_color="White"
+         word_wrap="true">
+          Group Charter
+        </text_editor>
+      </panel>
+      <panel
+            layout="topleft"
+            follows="left|top|right"
+            background_visible="false"
+            bevel_style="none"
+            border="false"
+            bg_alpha_color="FloaterUnfocusBorderColor"
+            height="100"
+            width="313"
+            left="0"
+            name="preferences_container"
+            top_pad="5">
+        <check_box
+         follows="right|top|left"
+         layout="topleft"
+         label="Anyone can join"
+         height="16"
+         left="10"
+         name="open_enrollement"
+         tool_tip="Sets whether this group allows new members to join without being invited."
+         width="90" />
+        <check_box
+         label="Cost to join"
+         layout="topleft"
+         name="check_enrollment_fee"
+         tool_tip="Sets whether to require an enrollment fee to join the group"
+         top_pad="5"
+         left_delta="0"
+         height="16"
+         width="300" />
+        <spinner
+         decimal_digits="0"
+         follows="left|top"
+         halign="left"
+         increment="1"
+         label_width="15"
+         label="L$"
+         layout="topleft"
+         max_val="99999"
+         height="23"
+         left="30"
+         name="spin_enrollment_fee"
+         tool_tip="New members must pay this fee to join the group when Enrollment Fee is checked."
+         width="170" />
+        <combo_box
+         follows="left|top"
+         layout="topleft"
+         name="group_mature_check"
+         tool_tip="Maturity ratings designate the type of content and behavior allowed in a group"
+         height="23"
+         left="10"
+         top_pad="4"
+         width="190">
+          <combo_item name="select_mature" value="Select">
+            - Select maturity rating -
+          </combo_item>
+          <combo_box.item
+           label="Moderate Content"
+           name="mature"
+           value="Mature" />
+          <combo_box.item
+           label="General Content"
+           name="pg"
+           value="Not Mature" />
+        </combo_box>
+      </panel>
+    </layout_panel>
+    <layout_panel
+      background_visible="false"
+      background_opaque="true"
+      name="create_info"
+      follows="all"
+      layout="topleft"
+      auto_resize="false"
+      user_resize="false"
+      height="200"
+      width="313">
+      <text
+        font="SansSerifSmall"
+        follows="top|left|right"
+        layout="topleft"
+        mouse_opaque="false"
+        type="string"
+        name="fee_information"
+        skip_link_underline="true"
+        height="26"
+        left="8"
+        right="-8"
+        top="5"
+        word_wrap="true">
+        The fee to create a group is based on your membership level. [https://secondlife.com/my/account/membership.php More info]
+      </text>
+      <scroll_list
+        draw_border="false"
+        background_visible="false"
+        follows="left|top|bottom|right"
+        layout="topleft"
+        multi_select="true"
+        name="membership_list"
+        row_padding="4"
+        enabled="false"
+        height="150"
+        left="2"
+        top_pad="8"
+        width="290">
+        <scroll_list.columns
+          dynamic_width="false"
+          name="clmn_name"
+          width="220"/>
+        <scroll_list.columns
+          dynamic_width="true"
+          name="clmn_price"/>
+        <scroll_list.rows
+          name="basic"
+          value="Basic (placeholder)"/>
+        <scroll_list.rows
+          name="plc2"
+          value="" />
+        <scroll_list.rows
+          name="premium"
+          value="Premium (placeholder)" />
+      </scroll_list>
+    </layout_panel>
+    <layout_panel
+      background_visible="false"
+      background_opaque="true"
+      name="create_actions"
+      follows="all"
+      layout="topleft"
+      auto_resize="true"
+      user_resize="true"
+      height="200"
+      width="313">
+    </layout_panel>
+    <layout_panel
+      background_visible="false"
+      background_opaque="true"
+      name="create_actions"
+      follows="all"
+      layout="topleft"
+      auto_resize="false"
+      user_resize="false"
+      height="75"
+      width="313">
+
+      <layout_stack
+        follows="bottom|left|right"
+        layout="topleft"
+        name="button_row_ls"
+        left="1"
+        right="-1"
+        orientation="horizontal"
+        height="25"
+        top="1">
+        <layout_panel
+          follows="bottom|left|right"
+          layout="bottomleft"
+          name="layout_crt"
+          auto_resize="true"
+          height="23"
+          width="91">
+          <!-- placeholder to autoadjust buttons (since they are of different sizes)-->
+        </layout_panel>
+        <layout_panel
+          follows="bottom|left|right"
+          layout="bottomleft"
+          name="layout_crt"
+          auto_resize="false"
+          height="23"
+          width="245">
+          <button
+            follows="bottom|left|right"
+            layout="topleft"
+            label="Create group for L$ [COST]"
+            name="btn_create"
+            visible="true"
+            tool_tip="Create a new Group"
+            height="23"
+            left="1"
+            top="0"
+            width="160" />
+          <button
+            follows="bottom|left|right"
+            name="back"
+            label="Cancel"
+            layout="topleft"
+            tool_tip="Return to list of groups"
+            left_pad="13"
+            height="23"
+            top="0"
+            width="70" />
+        </layout_panel>
+        <layout_panel
+          follows="bottom|left|right"
+          layout="bottomleft"
+          name="layout_crt"
+          auto_resize="true"
+          height="23"
+          width="91">
+          <!-- placeholder to autoadjust buttons-->
+        </layout_panel>
+      </layout_stack>
+      <text
+        font="SansSerifSmall"
+        follows="top|left|right"
+        layout="topleft"
+        mouse_opaque="false"
+        type="string"
+        height="26"
+        left="6"
+        right="-6"
+        name="info_deletion"
+        top_pad="8"
+        word_wrap="true"
+        halign="center">
+        Note: After 7 days, a group with no members (other than the creator) is deleted
+      </text>
+    </layout_panel>
+  </layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
index 95312edfb9cf693f9618cff42b6778882084df3b..05de249d226f9f404ecd9c6ce31759b41a06c143 100644
--- a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
@@ -280,17 +280,6 @@ background_visible="true"
 				     left="1"
 				     top="0"
 				     width="90" />
-					<button
-    				 follows="bottom|left|right"
-	                 height="23"
-	                 layout="topleft"
-	                 left="1"
-	                 top="0"
-	                 label="Create Group"
-     				 name="btn_create"
-               		 visible="true"
-                 	 tool_tip="Create a new Group"
-                 	 width="90" />	
 				</layout_panel>
 		   </layout_stack>
   
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 9eedc45aa9d4533c153c790493661bc396c83577..942fb925b54c7b869b7b5f510dc9c4278cd96538 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -3934,6 +3934,12 @@ Please check http://status.secondlifegrid.net to see if there is a known problem
   <string name="Accounting">Accounting</string>
   <string name="Notices">Notices</string>
   <string name="Chat">Chat</string>
+  
+  <!-- SL Membership -->
+  <string name="BaseMembership">Base</string>
+  <string name="PremiumMembership">Premium</string>
+  <string name="PremiumPlusMembership">Premium Plus</string>
+  <string name="InternalMembership">Internal</string> <!-- No need to translate -->
 
   <!-- Question strings for delete items notifications -->
   <string name="DeleteItems">Delete selected items?</string>