diff --git a/App.xaml.cs b/App.xaml.cs
index 092cb9d42..4fd92499a 100644
--- a/App.xaml.cs
+++ b/App.xaml.cs
@@ -40,6 +40,7 @@ protected override void OnStartup(StartupEventArgs e)
}
GridUxBehavior.Install();
+ P2InteractionBehavior.Install();
FaultRecordUxBehavior.Install();
DispatcherUnhandledException += OnDispatcherUnhandledException;
TaskScheduler.UnobservedTaskException += (_, args) => args.SetObserved();
diff --git a/P2InteractionBehavior.cs b/P2InteractionBehavior.cs
new file mode 100644
index 000000000..42ebca23a
--- /dev/null
+++ b/P2InteractionBehavior.cs
@@ -0,0 +1,741 @@
+using System.Collections;
+using System.Runtime.CompilerServices;
+using System.Threading;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Data;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Threading;
+using ArIED61850Tester.Models;
+
+namespace ArIED61850Tester;
+
+///
+/// Presentation-only P2 interaction layer.
+///
+/// Keeps the existing IEC 61850 collections, acquisition paths and filters intact while
+/// making dense engineering workspaces easier to scan: virtualized pixel scrolling,
+/// accumulated/eased mouse-wheel motion, an IED finder, keyboard find shortcuts, and
+/// next/previous navigation through the already-filtered live-value grids.
+///
+internal static class P2InteractionBehavior
+{
+ private sealed class WindowState
+ {
+ public TextBox? IedFinderBox { get; set; }
+ public ListBox? IedList { get; set; }
+ public ICollectionView? IedView { get; set; }
+ public Predicate