diff --git a/src/file_browser.rs b/src/file_browser.rs
index e021dd9..1d2edeb 100644
--- a/src/file_browser.rs
+++ b/src/file_browser.rs
@@ -1,12 +1,12 @@
-use termion::event::{Key,Event};
+use termion::event::{Key};
 
 
 use crate::widget::Widget;
 use crate::files::Files;
 //use crate::hbox::HBox;
 use crate::listview::ListView;
-use crate::coordinates::{Coordinates, Size,Position};
-use crate::files::File;
+use crate::coordinates::{Size,Position};
+use crate::preview::Previewer;
 use crate::miller_columns::MillerColumns;
 
 pub struct FileBrowser {
@@ -14,9 +14,6 @@ pub struct FileBrowser {
 }
 
 impl FileBrowser {
-    pub fn set_left_directory(&mut self) {
-        
-    }
 }
 
 
@@ -40,26 +37,22 @@ impl Widget for FileBrowser {
         "".to_string()
     }
     fn refresh(&mut self) {
+        let file
+            = self.columns.get_main_widget().as_ref().unwrap().selected_file().clone();
+        let (_, _, preview_coordinates) = self.columns.calculate_coordinates();
+
+        match &mut self.columns.preview {
+            Some(preview) => preview.set_file(&file),
+            None => {
+                let preview = Previewer::new(&file, &preview_coordinates);
+                self.columns.preview = Some(preview);
+            }
+        }
         self.columns.refresh();
     }
     
     fn get_drawlist(&self) -> String {
         self.columns.get_drawlist()
-        // let view_count = self.columns.widgets.len();
-
-        // if view_count < 2 {
-        //     // TODO: Special handling
-        // } else if view_count < 1 {
-        //     // etc.
-        // }
-        
-        // self.views
-        //     .iter()
-        //     .skip(view_count - 2)
-        //     .map(|view| {
-        //         eprintln!("{}", view.get_drawlist());
-        //         view.get_drawlist()
-        //     }).collect()
     }
             
 
@@ -71,6 +64,8 @@ impl Widget for FileBrowser {
                         let path = widget.selected_file().path();
                         let files = Files::new_from_path(&path).unwrap();
                         let view = ListView::new(files);
+                        let selected_file = view.selected_file();
+                        self.columns.set_preview(selected_file);
                         self.columns.widgets.push(view);
                         self.refresh();
                     }, None => { }
@@ -86,7 +81,6 @@ impl Widget for FileBrowser {
                 match self.columns.get_main_widget_mut() {
                     Some(widget) => {
                         widget.on_key(key);
-                        self.set_left_directory();
                         self.refresh();
                     }, None => { self.refresh(); }
                     
diff --git a/src/listview.rs b/src/listview.rs
index 76bb240..ca1129c 100644
--- a/src/listview.rs
+++ b/src/listview.rs
@@ -220,9 +220,6 @@ impl Widget for ListView<Files> {
     fn refresh(&mut self) {
         self.buffer = self.render();
     }
-
-
-
     fn render(&self) -> Vec<String> {
         self.content.iter().map(|file| {
             self.render_line(&file)
@@ -251,16 +248,7 @@ impl Widget for ListView<Files> {
                                term::reset());
         }
 
-
-        if ysize as usize > self.buffer.len() {
-            let start_y = self.buffer.len() + 1 + ypos as usize;
-            for i in start_y..(ysize+2) as usize {
-                output += &format!("{}{:xsize$}",
-                                   term::goto_xy(xpos,i as u16),
-                                   " ",
-                                   xsize = xsize as usize);
-            }
-        }
+        output += &self.get_redraw_empty_list(self.buffer.len());
 
         output
     }
diff --git a/src/miller_columns.rs b/src/miller_columns.rs
index fce25ac..2f92828 100644
--- a/src/miller_columns.rs
+++ b/src/miller_columns.rs
@@ -7,14 +7,15 @@ use crate::files::Files;
 use crate::listview::ListView;
 use crate::coordinates::{Coordinates, Size,Position};
 use crate::files::File;
+use crate::preview::Previewer;
 
 pub struct MillerColumns<T> {
     pub widgets: Vec<T>,
     // pub left: Option<T>,
     // pub main: Option<T>,
-    // pub preview: Option<T>,
-    ratio: (u16,u16,u16),
-    coordinates: Coordinates,
+    pub preview: Option<Previewer>,
+    pub ratio: (u16,u16,u16),
+    pub coordinates: Coordinates,
 }
 
 
@@ -27,7 +28,8 @@ impl<T> MillerColumns<T> where T: Widget {
                ratio: (u16, u16, u16))
                -> Self { Self { widgets: widgets,
                                 coordinates: coordinates,
-                                ratio: ratio } }       
+                                ratio: ratio,
+                                preview: None } }
 
 
     pub fn push_widget(&mut self, widget: T) {
@@ -51,7 +53,7 @@ impl<T> MillerColumns<T> where T: Widget {
 
         let preview_xsize = xsize * ratio.2 / 100;
         let preview_size = Size ( (preview_xsize, ysize) );
-        let preview_pos = Position ( (left_xsize + main_xsize + 2, top) );
+        let preview_pos = Position ( (left_xsize + main_xsize + 3, top) );
 
         let left_coords = Coordinates { size: left_size,
                                         position: left_pos };
@@ -83,8 +85,12 @@ impl<T> MillerColumns<T> where T: Widget {
     pub fn get_main_widget_mut(&mut self) -> Option<&mut T> {
         self.widgets.last_mut()
     }
-
-    
+    pub fn set_preview(&mut self, file: &File) {
+        match &mut self.preview {
+            Some(preview) => preview.set_file(file),
+            None => {}
+        };
+    }
 }
 
 impl<T> Widget for MillerColumns<T> where T: Widget {
@@ -107,17 +113,6 @@ impl<T> Widget for MillerColumns<T> where T: Widget {
         "".to_string()
     }
     fn refresh(&mut self) {
-        let (left_coords, main_coords, preview_coords) = self.calculate_coordinates(); 
-        
-        // self.left.as_mut().unwrap().set_size(left_coords.size);
-        // self.left.as_mut().unwrap().set_position(left_coords.position);
-
-        // self.get_main_widget_mut().map(|widget| {
-        //     widget.set_size(main_coords.size);
-        //     widget.set_position(main_coords.position);
-        // });
-
-        
         let (left_coords, main_coords, preview_coords) = self.calculate_coordinates();  
 
         let widget2 = self.get_left_widget_mut().unwrap();
@@ -130,39 +125,20 @@ impl<T> Widget for MillerColumns<T> where T: Widget {
         widget.set_size(main_coords.size);
         widget.set_position(main_coords.position);
         widget.refresh();
-        
-        
-        // self.main.as_mut().unwrap().set_size(main_coords.size);
-        // self.main.as_mut().unwrap().set_position(main_coords.position);
 
-        // self.preview.as_mut().unwrap().set_size(preview_coords.size);
-        // self.preview.as_mut().unwrap().set_position(preview_coords.position);
-
-        // self.left.as_mut().unwrap().refresh();
-        // self.main.as_mut().unwrap().refresh();
-        // self.preview.as_mut().unwrap().refresh()
+        match &mut self.preview {
+            Some(preview) => { preview.set_size(preview_coords.size);
+                               preview.set_position(preview_coords.position);
+                               preview.refresh(); },
+            None => {}
+        };
     }
     
     fn get_drawlist(&self) -> String {
         let left_widget = self.get_left_widget().unwrap().get_drawlist();
         let main_widget = self.get_main_widget().unwrap().get_drawlist();
-        format!("{}{}", main_widget, left_widget)
-        // let left_drawlist = &self.left.as_ref().unwrap().get_drawlist();
-        // let main_drawlist = &self.main.as_ref().unwrap().get_drawlist();
-        // let preview_drawlist = &self.preview.as_ref().unwrap().get_drawlist();
-        
-        // format!("{}{}{}", left_drawlist, &main_drawlist, &preview_drawlist)
-        // let main_widget_drawlist = self.get_main_widget().map(|widget| {
-            
-        //     widget.get_drawlist()
-        // });
-
-        
-        // match main_widget_drawlist {
-        //     Some(drawlist) => { drawlist },
-        //     None => "Can't draw this".to_string()
-        // }
-    
+        let preview = self.preview.as_ref().unwrap().get_drawlist();
+        format!("{}{}{}", main_widget, left_widget, preview)
     }
 
     fn on_key(&mut self, key: Key) {
diff --git a/src/widget.rs b/src/widget.rs
index 7fc319c..db2a4f1 100644
--- a/src/widget.rs
+++ b/src/widget.rs
@@ -68,16 +68,41 @@ pub trait Widget {
         )
     }
 
-    //fn get_window(&self) -> Window<Widget>;
-    //fn get_window_mut(&mut self) -> &mut Window<dyn Widget>;
+    fn get_clearlist(&self) -> String {
+        let (xpos, ypos) = self.get_position().position();
+        let (xsize, ysize) = self.get_size().size();
 
-    //fn run(&mut self) {
-        // self.draw();
-        // self.handle_input();
-    //}
+        let mut clearcmd = String::from("");
+        for line in ypos..ysize {
+            clearcmd += &format!("{}{:xsize$}",
+                                 crate::term::goto_xy(xpos, line),
+                                 " ",
+                                 xsize=xsize as usize);
+        }
+
+        clearcmd
+    }
+
+    fn get_redraw_empty_list(&self, lines: usize) -> String {
+        let (xpos, ypos) = self.get_position().position();
+        let (xsize, ysize) = self.get_size().size();
+        
+        let mut output = String::new();
+
+        if ysize as usize > lines {
+            let start_y = lines + 1 + ypos as usize;
+            for i in start_y..(ysize+2) as usize {
+                output += &format!("{}{:xsize$}",
+                                   crate::term::goto_xy(xpos,i as u16),
+                                   " ",
+                                   xsize = xsize as usize);
+            }
+        }
+
+        output
+    }
 
 
-    //fn get_buffer(&self) -> &Vec<String>;
     fn refresh(&mut self);
     fn get_drawlist(&self) -> String;
 }