diff --git a/nested/src/editors/list/editor.rs b/nested/src/editors/list/editor.rs
index c566e31..f8a0a5f 100644
--- a/nested/src/editors/list/editor.rs
+++ b/nested/src/editors/list/editor.rs
@@ -15,7 +15,7 @@ use {
 
 pub struct ListEditor {
     pub(super) cursor: SingletonBuffer<ListCursor>,
-    pub(crate) data: VecBuffer<NestedNode>,
+    pub data: VecBuffer<NestedNode>,
 
     pub(super) addr_port: OuterViewPort<dyn SequenceView<Item = isize>>,
     pub(super) mode_port: OuterViewPort<dyn SingletonView<Item = ListCursorMode>>,
diff --git a/nested/src/tree/node.rs b/nested/src/tree/node.rs
index 55377d7..3bc3bcc 100644
--- a/nested/src/tree/node.rs
+++ b/nested/src/tree/node.rs
@@ -165,7 +165,7 @@ impl NestedNode {
                       .map(|c| TerminalAtom::from(c))
                       .to_index()
                       .map_key(
-                          |x| {
+                          |_x| {
                               Point2::new(0, 0)
                           },
                           |p| {
@@ -220,7 +220,7 @@ impl NestedNode {
     pub fn get_diag(&self) -> OuterViewPort<dyn SequenceView<Item = Message>> {
         self.diag.clone().unwrap_or(ViewPort::new().into_outer())
     }
-    
+
     pub fn get_view(&self) -> OuterViewPort<dyn TerminalView> {
         self.view.clone().unwrap_or(ViewPort::new().into_outer())
     }
@@ -229,7 +229,7 @@ impl NestedNode {
         Context::morph_node(self, ty)
     }
 
-    pub fn get_data_view<'a, V: View + ?Sized + 'static>(&'a self, type_str: impl Iterator<Item = &'a str>) -> Option<Arc<V>>
+    pub fn get_data_port<'a, V: View + ?Sized + 'static>(&'a self, type_str: impl Iterator<Item = &'a str>) -> Option<OuterViewPort<V>>
     where V::Msg: Clone {
         if let Some(ctx) = self.ctx.clone() {
             if let Some(data) = self.data.clone() {
@@ -237,7 +237,7 @@ impl NestedNode {
 
                 let repr_tree = ReprTree::descend_ladder(&data, type_ladder)?;
                 repr_tree.clone().read().unwrap()
-                    .get_view::<V>().clone()
+                    .get_port::<V>().clone()
             } else {
                 eprintln!("get_data(): no data port");
                 None
@@ -248,6 +248,21 @@ impl NestedNode {
         }
     }
 
+    pub fn get_data_view<'a, V: View + ?Sized + 'static>(&'a self, type_str: impl Iterator<Item = &'a str>) -> Option<Arc<V>>
+    where V::Msg: Clone {
+        self.get_data_port::<V>(type_str)?.get_view()
+    }
+/*
+    pub fn get_seq_view<'a, T: Clone>(&self, type_str: impl Iterator<Item = &'a str>) -> Option<OuterViewPort<dyn SingletonView<Item = T>>> {
+        self.get_data_view::<dyn SequenceView<Item = NestedNode>>(type_str)
+            .unwrap()
+            .map({
+                move |node| {
+                    node.get_data_view::<dyn SingletonView<Item = T>>().get()
+                }
+            })
+    }
+*/
     pub fn get_edit<T: Send + Sync + 'static>(&self) -> Option<Arc<RwLock<T>>> {
         if let Some(edit) = self.editor.clone() {
             if let Ok(edit) = edit.downcast::<RwLock<T>>() {