diff --git a/gnome-sudoku/src/lib/number_box.py b/gnome-sudoku/src/lib/number_box.py
index 39dc4a6..f5bce36 100644
--- a/gnome-sudoku/src/lib/number_box.py
+++ b/gnome-sudoku/src/lib/number_box.py
@@ -88,9 +88,6 @@ class NumberBox (Gtk.DrawingArea):
     top_note_text = ''
     bottom_note_text = ''
     read_only = False
-    _layout = None
-    _top_note_layout = None
-    _bottom_note_layout = None
     text_color = None
     highlight_color = None
     shadow_color = None
@@ -117,14 +114,7 @@ class NumberBox (Gtk.DrawingArea):
         self.upper = upper
         self.parent_win = None
         self.timer = None
-        self.font = self.get_style().font_desc
-        self.font.set_size(BASE_FONT_SIZE)
-        self.note_font = self.font.copy()
-        self.note_font.set_size(NOTE_FONT_SIZE)
-        self._top_note_layout = Pango.Layout(self.create_pango_context())
-        self._top_note_layout.set_font_description(self.note_font)
-        self._bottom_note_layout = Pango.Layout(self.create_pango_context())
-        self._bottom_note_layout.set_font_description(self.note_font)
+        self._font_stateflags = Gtk.StateFlags.NORMAL
         self._base_stateflags = Gtk.StateFlags.NORMAL
         self.top_note_list = []
         self.bottom_note_list = []
@@ -346,34 +336,14 @@ class NumberBox (Gtk.DrawingArea):
         self.queue_draw()
         self.emit('changed')
 
-    def set_font (self, font):
-        if type(font) == str:
-            font = Pango.FontDescription(font)
-        self.font = font
-        if self.text:
-            self.set_text(self.text)
-        self.queue_draw()
-
-    def set_note_font (self, font):
-        if type(font) == str:
-            font = Pango.FontDescription(font)
-        self.note_font = font
-        self._top_note_layout.set_font_description(font)
-        self._bottom_note_layout.set_font_description(font)
-        self.queue_draw()
-
     def set_text (self, text):
         self.text = text
-        self._layout = self.create_pango_layout(text)
-        self._layout.set_font_description(self.font)
 
     def show_note_text (self):
         '''Display the notes for the current view
         '''
         self.top_note_text = self.get_note_display(self.top_note_list)[1]
-        self._top_note_layout.set_markup(self.get_note_display(self.top_note_list)[2], -1)
         self.bottom_note_text = self.get_note_display(self.bottom_note_list)[1]
-        self._bottom_note_layout.set_markup(self.get_note_display(self.bottom_note_list)[2], -1)
         self.queue_draw()
 
     def set_note_text (self, top_text = None, bottom_text = None, for_hint = False):
@@ -623,14 +593,20 @@ class NumberBox (Gtk.DrawingArea):
         cr.stroke()
 
     def draw_text (self, cr, style_ctx):
-        fontw, fonth = self._layout.get_pixel_size()
+        font = style_ctx.get_font(self._font_stateflags)
+        #FIXME: copy and set size?
+        #font.set_size(BASE_FONT_SIZE)
+        layout = self.create_pango_layout(self.text)
+        layout.set_font_description(font)
+
+        fontw, fonth = layout.get_pixel_size()
         # Draw a shadow for tracked conflicts.  This is done to
         # differentiate between tracked and untracked conflicts.
         if self.shadow_color:
             cr.set_source_rgb(*self.shadow_color)
             for xoff, yoff in [(1,1),(2,2)]:
                 cr.move_to((BASE_SIZE/2)-(fontw/2) + xoff, (BASE_SIZE/2) - (fonth/2) + yoff)
-                PangoCairo.show_layout(cr, self._layout)
+                PangoCairo.show_layout(cr, layout)
         if self.text_color:
             cr.set_source_rgb(*self.text_color)
         elif self.read_only:
@@ -642,39 +618,47 @@ class NumberBox (Gtk.DrawingArea):
             #cr.set_source_color(self.style.text[self.state])
             #Gdk.cairo_set_source_rgba(
             debug_set_color_rgba(
-                cr, style_ctx.get_color(Gtk.StateFlags.NORMAL))
+                cr, style_ctx.get_color(self.get_state_flags()))
 
         # And draw the text in the middle of the allocated space
-        if self._layout:
+        if self.text:
             cr.move_to(
                 (BASE_SIZE/2)-(fontw/2),
                 (BASE_SIZE/2) - (fonth/2),
                 )
-            PangoCairo.update_layout(cr, self._layout)
-            PangoCairo.show_layout(cr, self._layout)
+            PangoCairo.update_layout(cr, layout)
+            PangoCairo.show_layout(cr, layout)
 
         #cr.set_source_color(self.style.text[self.state])
         #Gdk.cairo_set_source_rgba(
         debug_set_color_rgba(
-            cr, style_ctx.get_color(Gtk.StateFlags.NORMAL))
+            cr, style_ctx.get_color(self.get_state_flags()))
 
         # And draw any note text...
-        if self._top_note_layout:
-            fontw, fonth = self._top_note_layout.get_pixel_size()
+        #FIXME: copy and set size?
+        #font.set_size(NOTE_FONT_SIZE)
+        if self.top_note_text:
+            top_note_layout = Pango.Layout(self.create_pango_context())
+            top_note_layout.set_markup(self.get_note_display(self.top_note_list)[2], -1)
+            top_note_layout.set_font_description(font)
+
+            fontw, fonth = top_note_layout.get_pixel_size()
             cr.move_to(
                 NORMAL_LINE_WIDTH,
                 0,
                 )
-            PangoCairo.update_layout(cr, self._top_note_layout)
-            PangoCairo.update_layout(cr, self._top_note_layout)
-        if self._bottom_note_layout:
-            fontw, fonth = self._bottom_note_layout.get_pixel_size()
+            PangoCairo.update_layout(cr, top_note_layout)
+        if self.bottom_note_text:
+            bottom_note_layout = Pango.Layout(self.create_pango_context())
+            bottom_note_layout.set_markup(self.get_note_display(self.bottom_note_list)[2], -1)
+            bottom_note_layout.set_font_description(font)
+
+            fontw, fonth = bottom_note_layout.get_pixel_size()
             cr.move_to(
                 NORMAL_LINE_WIDTH,
                 BASE_SIZE-fonth,
                 )
-            PangoCairo.update_layout(cr, self._bottom_note_layout)
-            PangoCairo.update_layout(cr, self._bottom_note_layout)
+            PangoCairo.update_layout(cr, bottom_note_layout)
 
     def set_text_color (self, color, shadow = None):
         self.shadow_color = shadow
@@ -756,15 +740,10 @@ class SudokuNumberBox (NumberBox):
             self.set_text_color(self.normal_color)
 
     def set_read_only (self, val):
-        self.read_only = val
-        if not hasattr(self, 'bold_font'):
-            self.normal_font = self.font
-            self.bold_font = self.font.copy()
-            self.bold_font.set_weight(Pango.Weight.BOLD)
-        if self.read_only:
-            self.set_font(self.bold_font)
+        if val:
+            self._font_stateflags = Gtk.StateFlags.INSENSITIVE
         else:
-            self.set_font(self.normal_font)
+            self._font_stateflags = Gtk.StateFlags.NORMAL
         self.queue_draw()
 
     def set_impossible (self, val):
