public void PopulateShop(bool restoreFromSave)
    {
        List <template_item> unOwnedItems = new List <template_item>();
        PlayerState          player       = SaveManager.instance.GetCurrentPlayerState();

        if (restoreFromSave)
        {
            bool toySlotUsed = false;
            for (int i = 0; i < player.GetCurrentDayItems().Count; ++i)
            {
                template_item item = ArticyDatabase.GetObject(player.GetCurrentDayItems()[i]) as template_item;

                if (toySlotUsed && item.Template.item_data.item_slot_number == 2)
                {
                    GameObject marker = Shop.instance.GetShopItemSpawnMarkerForPosition(1);
                    SpawnItem(item, marker.transform.position);
                }
                else
                {
                    GameObject marker = Shop.instance.GetShopItemSpawnMarkerForPosition(item.Template.item_data.item_slot_number);
                    SpawnItem(item, marker.transform.position);
                    if (item.Template.item_data.item_slot_number == 2)
                    {
                        toySlotUsed = true;
                    }
                }

                //if (i >= shopItemSpawnMarkers.Count)
                //{
                //    Debug.LogError("Invalid number of items in savegame! Contact Ott!");
                //}
                //else
                //{

                //}
            }
        }
        else
        {
            bool          isInfoToolSlotEmpty = true;
            template_item substituteItem      = null;
            for (int j = 0; j < 3; ++j)
            {
                unOwnedItems.Clear();
                for (int i = 0; i < ItemDictionary[j].Count; ++i)
                {
                    //if (!SaveManager.instance.GetCurrentCarryoverPlayerState().IsItemOwnedByID(ItemDictionary[j][i].Id))
                    //{
                    //    unOwnedItems.Add(ItemDictionary[j][i]);
                    //}

                    if (!ItemDictionary[j][i].Template.item_data.item_variable.CallScript() && substituteItem != ItemDictionary[j][i])
                    {
                        if (j == 1)
                        {
                            isInfoToolSlotEmpty = false;
                        }
                        if (ItemDictionary[j][i] != GetStarterBody() && ItemDictionary[j][i] != GetStarterHead())
                        {
                            unOwnedItems.Add(ItemDictionary[j][i]);
                        }
                    }
                }

                if (isInfoToolSlotEmpty && j == 1)
                {
                    for (int i = 0; i < ItemDictionary[2].Count; ++i)
                    {
                        if (!ItemDictionary[2][i].Template.item_data.item_variable.CallScript())
                        {
                            if (ItemDictionary[2][i] != GetStarterBody() && ItemDictionary[2][i] != GetStarterHead())
                            {
                                unOwnedItems.Add(ItemDictionary[2][i]);
                            }
                        }
                    }
                }

                if (unOwnedItems.Count > 0)
                {
                    if (isInfoToolSlotEmpty && j == 1)
                    {
                        GameObject marker = Shop.instance.GetShopItemSpawnMarkerForPosition(1);

                        template_item rolledItem = unOwnedItems[Random.Range(0, unOwnedItems.Count)];
                        substituteItem = rolledItem;
                        unOwnedItems.Remove(rolledItem);
                        SpawnItem(rolledItem, marker.transform.position);
                        player.AddCurrentDayItem(rolledItem.Id);
                    }
                    else
                    {
                        GameObject marker = Shop.instance.GetShopItemSpawnMarkerForPosition(j);

                        template_item rolledItem = unOwnedItems[Random.Range(0, unOwnedItems.Count)];
                        unOwnedItems.Remove(rolledItem);
                        SpawnItem(rolledItem, marker.transform.position);
                        player.AddCurrentDayItem(rolledItem.Id);
                    }
                }
            }
        }
    }