private void RegisterPrim(IObject obj)
        {
            lock (this) {
                if (obj == null)
                {
                    return;
                }
                if (_tracked.Contains(obj.GlobalID))
                {
                    return;
                }
                else
                {
                    _tracked.Add(obj.GlobalID);
                }
            }
            try {
                obj.OnTouch += (source, args) => {
                    TouchEventArgs e = new TouchEventArgs();
                    e.AvatarID       = args.Avatar.GlobalID;
                    e.AvatarName     = args.Avatar.Name;
                    e.AvatarPosition = args.Avatar.WorldPosition;
                    e.TouchPosition  = args.TouchPosition;
                    Touched(source.GlobalID, e);
                };

                _factory.RegisterLinkButton(obj, this);
            } catch (Exception e) {
                _factory.RegisterChatButton(obj.GlobalID, this);
                obj.Say(e.Message);
            }
        }