Inheritance: Universe.Framework.Modules.IDataTransferable
        public void PickInfoUpdate (IClientAPI remoteClient, UUID pickID, UUID creatorID, bool topPick, string name,
                                   string desc, UUID snapshotID, int sortOrder, bool enabled, Vector3d globalPos)
        {
            IScenePresence p = remoteClient.Scene.GetScenePresence (remoteClient.AgentId);

            UUID parceluuid = p.CurrentParcelUUID;
            string user = "******";
            string OrigionalName = "(unknown)";

            Vector3 pos_global = new Vector3 (globalPos);

            IParcelManagementModule parcelManagement =
                remoteClient.Scene.RequestModuleInterface<IParcelManagementModule> ();
            if (parcelManagement != null) {
                ILandObject targetlandObj = parcelManagement.GetLandObject (
                    pos_global.X / Constants.RegionSize,
                    pos_global.Y / Constants.RegionSize);

                if (targetlandObj != null) {
                    UserAccount parcelOwner =
                        remoteClient.Scene.UserAccountService.GetUserAccount (remoteClient.AllScopeIDs,
                            targetlandObj.LandData.OwnerID);
                    if (parcelOwner != null)
                        user = parcelOwner.Name;

                    parceluuid = targetlandObj.LandData.GlobalID;

                    OrigionalName = targetlandObj.LandData.Name;
                }
            }

            ProfilePickInfo pick = new ProfilePickInfo {
                PickUUID = pickID,
                CreatorUUID = creatorID,
                TopPick = topPick ? 1 : 0,
                ParcelUUID = parceluuid,
                Name = name,
                Description = desc,
                SnapshotUUID = snapshotID,
                User = user,
                OriginalName = OrigionalName,
                SimName = remoteClient.Scene.RegionInfo.RegionName,
                GlobalPos = pos_global,
                SortOrder = sortOrder,
                Enabled = enabled ? 1 : 0
            };

            ProfileFrontend.AddPick (pick);
        }
        public ProfilePickInfo GetPick(UUID queryPickID)
        {
            if (m_doRemoteOnly) {
                object remoteValue = DoRemote (queryPickID);
                return remoteValue != null ? (ProfilePickInfo)remoteValue : null;
            }

            QueryFilter filter = new QueryFilter();
            filter.andFilters["PickUUID"] = queryPickID;

            List<string> query = GD.Query(new[] { "*" }, m_userPicksTable, filter, null, null, null);

            if (query.Count < 5)
                return null;
            ProfilePickInfo pick = new ProfilePickInfo();
            pick.FromOSD((OSDMap) OSDParser.DeserializeJson(query[4]));
            return pick;
        }
        public List<ProfilePickInfo> GetPicks(UUID ownerID)
        {
            if (m_doRemoteOnly) {
                object remoteValue = DoRemote (ownerID);
                return remoteValue != null ? (List<ProfilePickInfo>)remoteValue : new List<ProfilePickInfo> ();
            }

            QueryFilter filter = new QueryFilter();
            filter.andFilters["OwnerUUID"] = ownerID;

            List<string> query = GD.Query(new[] { "*" }, m_userPicksTable, filter, null, null, null);

            List<ProfilePickInfo> picks = new List<ProfilePickInfo>();
            for (int i = 0; i < query.Count; i += 5)
            {
                ProfilePickInfo pick = new ProfilePickInfo();
                pick.FromOSD((OSDMap) OSDParser.DeserializeJson(query[i + 4]));
                picks.Add(pick);
            }
            return picks;
        }
        public bool AddPick(ProfilePickInfo pick)
        {
            if (m_doRemoteOnly) {
                object remoteValue = DoRemote (pick);
                return remoteValue != null && (bool)remoteValue;
            }

            if (GetUserProfile(pick.CreatorUUID) == null)
                return false;

            //It might be updating, delete the old
            QueryFilter filter = new QueryFilter();
            filter.andFilters["PickUUID"] = pick.PickUUID;
            GD.Delete(m_userPicksTable, filter);
            List<object> values = new List<object>
                                      {
                                          pick.Name,
                                          pick.SimName,
                                          pick.CreatorUUID,
                                          pick.PickUUID,
                                          OSDParser.SerializeJsonString(pick.ToOSD())
                                      };
            return GD.Insert(m_userPicksTable, values.ToArray());
        }