diff --git a/src/character_map/main.rs b/src/character_map/main.rs
index af568fd7f6e54079584e107a7df83d9542a0473a..acd281ad640fd94b43308fa6f10359e90f969d6c 100644
--- a/src/character_map/main.rs
+++ b/src/character_map/main.rs
@@ -7,32 +7,9 @@ use std::cmp::max;
 
 use std::env;
 
-use orbclient::{Color, Renderer, Window, EventOption, K_ESC};
+use orbclient::{Color, Renderer, Window, WindowFlag, EventOption};
 use orbfont::Font;
 
-fn event_loop(window: &mut Window){
-    loop {
-        for event in window.events() {
-            if let EventOption::Key(key_event) = event.to_option() {
-                if key_event.pressed && key_event.scancode == K_ESC {
-                    return;
-                }
-            }
-            if let EventOption::Quit(_) = event.to_option() {
-                return;
-            }
-        }
-    }
-}
-
-fn error_msg(window: &mut Window, msg: &str) {
-    let mut x = 0;
-    for c in msg.chars() {
-        window.char(x, 0, c, Color::rgb(255, 255, 255));
-        x += 8;
-    }
-}
-
 fn main() {
     let (title, font_res) = match env::args().nth(1) {
         Some(arg) => (arg.clone(), Font::from_path(&arg)),
@@ -49,38 +26,59 @@ fn main() {
                 font.render("stuvwxyz.?!", 64.0),
                 font.render("0123456789 ", 64.0)
             ];
+
             let mut width = 0;
             let mut height = 0;
             for line in lines.iter() {
                 width = max(width, line.width());
                 height += line.height();
             }
-            let mut window = Window::new(-1,
-                                         -1,
-                                         max(320, width),
-                                         max(32, height),
-                                         &("Character Map (".to_string() + &title + ")"))
-                                 .unwrap();
-            window.set(Color::rgb(255, 255, 255));
-            let mut y = 0;
-            for line in lines.iter() {
-                line.draw(&mut window, 0, y, Color::rgb(0, 0, 0));
-                y += line.height() as i32;
+
+            let redraw = move |window: &mut Window| {
+                window.set(Color::rgb(255, 255, 255));
+                let mut y = 0;
+                for line in lines.iter() {
+                    line.draw(window, 0, y, Color::rgb(0, 0, 0));
+                    y += line.height() as i32;
+                }
+                window.sync();
+            };
+
+            let mut window = Window::new_flags(-1, -1, max(320, width), max(32, height),
+                                        &format!("{} - Character Map", title),
+                                        &[WindowFlag::Resizable])
+                                    .unwrap();
+
+            redraw(&mut window);
+
+            loop {
+                for event in window.events() {
+                    match event.to_option() {
+                        EventOption::Resize(_) => redraw(&mut window),
+                        EventOption::Quit(_) => return,
+                        _ => ()
+                    }
+                }
             }
-            window.sync();
-            event_loop(&mut window);
         },
         Err(err) => {
-            let mut window = Window::new(-1,
-                                         -1,
-                                         320,
-                                         32,
-                                         &("Character Map (".to_string() + &title + ")"))
-                                 .unwrap();
+            let mut window = Window::new(-1, -1, 320, 32, &format!("{} - Character Map", title))
+                                    .unwrap();
             window.set(Color::rgb(0, 0, 0));
-            error_msg(&mut window, &format!("{}", err));
+            let mut x = 0;
+            for c in format!("{}", err).chars() {
+                window.char(x, 0, c, Color::rgb(255, 255, 255));
+                x += 8;
+            }
             window.sync();
-            event_loop(&mut window);
+            loop {
+                for event in window.events() {
+                    match event.to_option() {
+                        EventOption::Quit(_) => return,
+                        _ => ()
+                    }
+                }
+            }
         }
     }
 }