diff --git a/indra/llinventory/llinventorysettings.cpp b/indra/llinventory/llinventorysettings.cpp
index 8887c23a6cf7845c476d3a9b5f25310c4d4e8936..fdad50e8d46b70fe5772d5d15df8088a7517014f 100644
--- a/indra/llinventory/llinventorysettings.cpp
+++ b/indra/llinventory/llinventorysettings.cpp
@@ -89,7 +89,6 @@ LLSettingsType::type_e LLSettingsType::fromInventoryFlags(U32 flags)
     return  (LLSettingsType::type_e)(flags & LLInventoryItemFlags::II_FLAGS_SUBTYPE_MASK);
 }
 
-
 LLInventoryType::EIconName LLSettingsType::getIconName(LLSettingsType::type_e type)
 {
     const SettingsEntry *entry = LLSettingsDictionary::instance().lookup(type);
@@ -98,6 +97,13 @@ LLInventoryType::EIconName LLSettingsType::getIconName(LLSettingsType::type_e ty
     return entry->mIconName;
 }
 
+std::string LLSettingsType::getDefaultName(LLSettingsType::type_e type)
+{
+    const SettingsEntry *entry = LLSettingsDictionary::instance().lookup(type);
+    if (!entry)
+        return getDefaultName(ST_INVALID);
+    return entry->mDefaultNewName;
+}
 
 void LLSettingsType::initClass(LLTranslationBridge::ptr_t &trans)
 {
diff --git a/indra/llinventory/llinventorysettings.h b/indra/llinventory/llinventorysettings.h
index fb08190ea9391ad3974fd2ef98c7dd78e6d97d4e..906540689c0dda7e51cd7b949c97830f4dfdccfa 100644
--- a/indra/llinventory/llinventorysettings.h
+++ b/indra/llinventory/llinventorysettings.h
@@ -46,6 +46,7 @@ class LLSettingsType
 
     static type_e fromInventoryFlags(U32 flags);
     static LLInventoryType::EIconName getIconName(type_e type);
+    static std::string getDefaultName(type_e type);
 
     static void initClass(LLTranslationBridge::ptr_t &trans);
     static void cleanupClass();
diff --git a/indra/newview/llsettingsvo.cpp b/indra/newview/llsettingsvo.cpp
index a5187b73639bc5fbcd702cf4489bca770235496d..010b5dec36c26463385972576ca383748f6a5688 100644
--- a/indra/newview/llsettingsvo.cpp
+++ b/indra/newview/llsettingsvo.cpp
@@ -90,6 +90,31 @@ namespace
 
 
 //=========================================================================
+void LLSettingsVOBase::createNewInventoryItem(LLSettingsType::type_e stype, const LLUUID &parent_id, inventory_result_fn callback)
+{
+    LLTransactionID tid;
+    U32             nextOwnerPerm = LLPermissions::DEFAULT.getMaskNextOwner();
+
+    if (!LLEnvironment::instance().isInventoryEnabled())
+    {
+        LL_WARNS("SETTINGS") << "Region does not support settings inventory objects." << LL_ENDL;
+        LLNotificationsUtil::add("SettingsUnsuported");
+        return;
+    }
+
+    tid.generate();
+
+    LLPointer<LLInventoryCallback> cb = new LLSettingsInventoryCB([callback](const LLUUID &inventoryId) {
+        LLSettingsVOBase::onInventoryItemCreated(inventoryId, LLSettingsBase::ptr_t(), callback);
+    });
+
+    create_inventory_settings(gAgent.getID(), gAgent.getSessionID(),
+        parent_id, LLTransactionID::tnull,
+        LLSettingsType::getDefaultName(stype), "new settings collection.",
+        stype, nextOwnerPerm, cb);
+}
+
+
 void LLSettingsVOBase::createInventoryItem(const LLSettingsBase::ptr_t &settings, const LLUUID &parent_id, inventory_result_fn callback)
 {
     LLTransactionID tid;
@@ -116,6 +141,20 @@ void LLSettingsVOBase::createInventoryItem(const LLSettingsBase::ptr_t &settings
 
 void LLSettingsVOBase::onInventoryItemCreated(const LLUUID &inventoryId, LLSettingsBase::ptr_t settings, inventory_result_fn callback)
 {
+    if (!settings)
+    {   // The item was created as new with no settings passed in.  Simulator should have given it the default for the type... check ID, 
+        // no need to upload asset.
+        LLUUID asset_id;
+        LLViewerInventoryItem *pitem = gInventory.getItem(inventoryId);
+
+        if (pitem)
+        {
+            asset_id = pitem->getAssetUUID();
+        }
+        if (callback)
+            callback(asset_id, inventoryId, LLUUID::null, LLSD());
+        return;
+    }
     // We need to update some inventory stuff here.... maybe.
     updateInventoryItem(settings, inventoryId, callback);
 }
diff --git a/indra/newview/llsettingsvo.h b/indra/newview/llsettingsvo.h
index 5d62edd867dcccdc863f91624092ec22e1dd0230..15b51d09887458973975b4250473b5911b169d07 100644
--- a/indra/newview/llsettingsvo.h
+++ b/indra/newview/llsettingsvo.h
@@ -47,6 +47,7 @@ class LLSettingsVOBase : public LLSettingsBase
     typedef std::function<void(LLUUID asset_id, LLSettingsBase::ptr_t settins, S32 status, LLExtStat extstat)>  asset_download_fn;
     typedef std::function<void(LLUUID asset_id, LLUUID inventory_id, LLUUID object_id, LLSD results)>           inventory_result_fn;
 
+    static void     createNewInventoryItem(LLSettingsType::type_e stype, const LLUUID &parent_id, inventory_result_fn callback = inventory_result_fn());
     static void     createInventoryItem(const LLSettingsBase::ptr_t &settings, const LLUUID &parent_id, inventory_result_fn callback = inventory_result_fn());
     
     static void     updateInventoryItem(const LLSettingsBase::ptr_t &settings, LLUUID inv_item_id, inventory_result_fn callback = inventory_result_fn());
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index 09b07b83b8731855eff9859e7bf9bf2c25c8392e..e4d3d73a3e960452820938cdc36bb85aaa051a85 100644
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -1823,37 +1823,29 @@ void menu_create_inventory_item(LLInventoryPanel* panel, LLFolderBridge *bridge,
 	}
     else if (("sky" == type_name) || ("water" == type_name) || ("daycycle" == type_name))
     {
-        LLSettingsBase::ptr_t settings;
-        std::string name;
+        LLSettingsType::type_e stype(LLSettingsType::ST_NONE);
 
         if ("sky" == type_name)
         {
-            settings = LLSettingsVOSky::buildDefaultSky();
-            name = LLTrans::getString("New Sky");
+            stype = LLSettingsType::ST_SKY;
         }
         else if ("water" == type_name)
         {
-            settings = LLSettingsVOWater::buildDefaultWater();
-            name = LLTrans::getString("New Water");
+            stype = LLSettingsType::ST_WATER;
         }
         else if ("daycycle" == type_name)
         {
-            settings = LLSettingsVODay::buildDefaultDayCycle();
-            name = LLTrans::getString("New Daycycle");
+            stype = LLSettingsType::ST_DAYCYCLE;
         }
         else
-            LL_ERRS(LOG_INV) << "Unknown settings type: '" << type_name << "'" << LL_ENDL;
-
-        if (!settings)
         {
-            LL_WARNS(LOG_INV) << "Unable to create a default setting object of type '" << type_name << "'" << LL_ENDL;
+            LL_ERRS(LOG_INV) << "Unknown settings type: '" << type_name << "'" << LL_ENDL;
             return;
         }
 
         LLUUID parent_id = bridge ? bridge->getUUID() : gInventory.findCategoryUUIDForType(LLFolderType::FT_SETTINGS);
 
-        settings->setName(name);
-        LLSettingsVOBase::createInventoryItem(settings, parent_id);
+        LLSettingsVOBase::createNewInventoryItem(stype, parent_id);
     }
 	else
 	{