owner);
		InsertCore(index, item);
		OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, item, index));
	}

	public void RemoveAt(int index)
	{
		UIElement uIElement = RemoveAtCore(index);
		uIElement.SetParent(null);
		OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, uIElement, index));
	}

	public void Add(UIElement item)
	{
		if (item!= null)
		{
			item.SetParent(_owner);
		}
		AddCore(item);
		OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, item));
	}

	public void Clear()
	{
		IEnumerable<UIElement> enumerable = ClearCore();
		IEnumerator<UIElement> enumerator = enumerable.GetEnumerator();
		while (enumerator.MoveNext())
		{
			UIElement current = enumerator.Current;
			IDependencyObjectStoreProvider dependencyObjectStoreProvider = current;
			if (dependencyObjectStoreProvider!= null)
			{
				current.SetParent(null);
			}
		}
		OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, enumerable.ToList()));
	}

	public bool Contains(UIElement item)
	{
		return ContainsCore(item);
	}

	public void CopyTo(UIElement[] array, int arrayIndex)
	{
		CopyToCore(array, arrayIndex);
	}

	public bool Remove(UIElement item)
	{
		if (item!= null)
		{
			item.SetParent(null);
			bool result = RemoveCore(item);
			OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, item));
			return result;
		}
		return false;
	}

	IEnumerator IEnumerable.GetEnumerator()
	{
		return GetEnumerator();
	}

	public void Move(uint oldIndex, uint newIndex)
	{
		if (oldIndex!= newIndex)
		{
			MoveCore(oldIndex, newIndex);
			OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Move, this[(int)newIndex], (int)newIndex, (int)oldIndex));
		}
	}

	private void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
	{
		this.CollectionChanged?.Invoke(this, e);
	}

	internal UIElementCollection(UIElement view)
	{
		_owner = view;
	}

	private void AddCore(UIElement item)
	{
		_owner.AddChild(item);
	}

	private IEnumerable<UIElement> ClearCore()
	{
		UIElement[] result = _owner._children.ToArray();
		_owner.ClearChildren();
		return result;
	}

	private bool ContainsCore(UIElement item)
	{
		return _owner._children.Contains(item);
	}

	private void CopyToCore(UIElement[] array, int arrayIndex)
	{
		_owner._children.ToArray().CopyTo(array, arrayIndex);
	}

	private int CountCore()
	{
		return _owner._children.Count;
	}

	private UIElement GetAtIndexCore(int index)
	{
		return _owner._children[index];
	}

	public List<UIElement>.Enumerator GetEnumerator()
	{
		return (List<UIElement>.Enumerator)(object)_owner._children.GetEnumerator();
	}

	IEnumerator<UIElement> IEnumerable<UIElement>.GetEnumerator()
	{
		return GetEnumerator();
	}

	private int IndexOfCore(UIElement item)
	{
		return _owner._children.IndexOf(item);
	}

	private void InsertCore(int index, UIElement item)
	{
		_owner.AddChild(item, index);
	}

	private void MoveCore(uint oldIndex, uint newIndex)
	{
		_owner.MoveChildTo((int)oldIndex, (int)newIndex);
	}

	private UIElement RemoveAtCore(int index)
	{
		UIElement uIElement = _owner._children.ElementAtOrDefault(index);
		_owner.RemoveChild(uIElement);
		return uIElement;
	}

	private bool RemoveCore(UIElement item)
	{
		return _owner.RemoveChild(item);
	}

	private UIElement SetAtIndexCore(int index, UIElement value)
	{
		throw new NotImplementedException();
	}
}
In most respects, the THXcertified TC-P65VT50 is similar to other recent Panasonic sets we’ve reviewed. There are seven normal Picture modes plus two ISF modes, ISF Day and ISF Night. Out of the box, the ISF modes are hidden, but they can be opened, set up, and, if desired, locked by a trained calibrator. Calibrators can also set up the VT series using a dedicated computer program. Different settings can be entered for each input in a given Picture mode, and for both 2D and 3D as well. There are two THX modes for 2D, but just one for 3D: THX 3D Cinema.
The Custom and ISF modes offer the maximum range of control. A Pro settings menu, available only in these modes, is home for the high and low White Balance controls. There’s also a White Balance detail adjustment for fine-tuning the gray scale at 10 points across the brightness range. The high, low, and detail adjustments may be used together—the most efficient way to calibrate the set is to optimize the high and low white balance controls first, then tweak the detail adjustments last as needed.
The Pro settings menu also offers hue, saturation, and luminance adjustments for refining the color gamut. The hue and saturation controls proved extremely useful. The luminance controls produced no significant change, but a recent call to the ISF indicates that a firmware fix to correct this is in the works. It should be available by the time this review goes into print. Firmware updates may be downloaded directly to the set, wired or wirelessly, from your home network.
The hue, saturation, and luminance controls, available for each of the primary and secondary colors, should be labeled a color management system. But Panasonic sets have a separate legacy adjustment called Color mgmt.—a misnomer at best since this on/off control offers no help in achieving an accurate color gamut. I left it off.
The Pro settings menu also offers a Color space setting (Wide/Normal—you’ll want Normal), Panel brightness (Low, Mid, High), and Gamma adjustment (six selections). There’s also Black extension, AGC, and Contour emphasis, all of which I set to either zero or off.
An HDMI/DVI control selects the video brightness range. For the TC-P65VT50, the default setting of Auto worked well, as did the Light setting of the Black level control. A Color temp. control offers five settings; in the absence of a good calibration, Warm2 is closest to correct. Panasonic’s C.A.T.S. (Contrast Automatic Tracking System) automatically adjusts the brightness to suit the ambient lighting in the room. I left this off for all of my testing.
For any HD source material on disc—even if it’s 4:3—the HD Size control should be set to Size2 for zero overscan. There’s also the usual range of aspect ratio settings. As with most of today’s HDTVs, it will require some experimentation to find a combination of settings for each type of source that doesn’t make people look like the Before shots in a Weight Watchers commercial.
A four-position Motion smoother does just what its name suggests. Motion smoothing is less significant in a plasma HDTV than on an LCD; LCDs have inherently more image lag to begin with. Panasonic’s implementation of this feature, at least in its Weak setting, produced less of that oily, slick, soap opera look than usual. Nevertheless, I left it off in 2D, particularly on movies. Surprisingly (for me), I actually preferred the Weak setting in 3D.
For 24-hertz source material, the set’s 24p Direct in control offers the choice of 96-Hz, 60-Hz, or 48-Hz refresh rates. Choose 96 Hz to minimize flicker. 60 Hz adds 3:2 pulldown, which may or may not produce motion judder (depending on your sensitivity to it). For 3D, the 96-Hz option is not available.
The IR transmitter for the 3D glasses is built into the set. Unfortunately, no glasses are included; the improved 2012 model (TY-ER3D4MU) costs $80 each. There’s a 3D adjustment control for altering the 3D depth