diff --git a/apps/plugins/text_viewer/text_viewer.c b/apps/plugins/text_viewer/text_viewer.c
index fae2f07..2f1bedf 100644
--- a/apps/plugins/text_viewer/text_viewer.c
+++ b/apps/plugins/text_viewer/text_viewer.c
@@ -66,7 +66,7 @@ enum plugin_status plugin_start(const void* file)
             case TV_MENU2:
 #endif
                 {
-                    enum tv_menu_result res = tv_menu();
+                    unsigned res = tv_menu();
 
                     if (res != TV_MENU_RESULT_EXIT_MENU)
                     {
diff --git a/apps/plugins/text_viewer/tv_action.c b/apps/plugins/text_viewer/tv_action.c
index 53a29ef..ce21efc 100644
--- a/apps/plugins/text_viewer/tv_action.c
+++ b/apps/plugins/text_viewer/tv_action.c
@@ -83,7 +83,7 @@ void tv_draw(void)
     tv_move_screen(pos.page, pos.line, SEEK_SET);
 }
 
-void tv_scroll_up(enum tv_vertical_scroll_mode mode)
+void tv_scroll_up(unsigned mode)
 {
     int offset_page = 0;
     int offset_line = -1;
@@ -99,7 +99,7 @@ void tv_scroll_up(enum tv_vertical_scroll_mode mode)
     tv_move_screen(offset_page, offset_line, SEEK_CUR);
 }
 
-void tv_scroll_down(enum tv_vertical_scroll_mode mode)
+void tv_scroll_down(unsigned mode)
 {
     int offset_page = 0;
     int offset_line = 1;
@@ -115,7 +115,7 @@ void tv_scroll_down(enum tv_vertical_scroll_mode mode)
     tv_move_screen(offset_page, offset_line, SEEK_CUR);
 }
 
-void tv_scroll_left(enum tv_horizontal_scroll_mode mode)
+void tv_scroll_left(unsigned mode)
 {
     int offset_window = 0;
     int offset_column = 0;
@@ -134,7 +134,7 @@ void tv_scroll_left(enum tv_horizontal_scroll_mode mode)
     tv_move_window(offset_window, offset_column);
 }
 
-void tv_scroll_right(enum tv_horizontal_scroll_mode mode)
+void tv_scroll_right(unsigned mode)
 {
     int offset_window = 0;
     int offset_column = 0;
@@ -165,9 +165,9 @@ void tv_bottom(void)
         tv_move_screen(0, -tv_get_screen_pos()->line, SEEK_CUR);
 }
 
-enum tv_menu_result tv_menu(void)
+unsigned tv_menu(void)
 {
-    enum tv_menu_result res;
+    unsigned res;
     struct tv_screen_pos cur_pos;
     off_t cur_file_pos = tv_get_screen_pos()->file_pos;
 
diff --git a/apps/plugins/text_viewer/tv_action.h b/apps/plugins/text_viewer/tv_action.h
index b01079c..f774f07 100644
--- a/apps/plugins/text_viewer/tv_action.h
+++ b/apps/plugins/text_viewer/tv_action.h
@@ -26,17 +26,17 @@
 #include "tv_menu.h"
 
 /* horizontal scroll mode */
-enum tv_horizontal_scroll_mode
+enum
 {
-    TV_HORIZONTAL_SCROLL_COLUMN, /* left/right one column */
+    TV_HORIZONTAL_SCROLL_COLUMN = 0, /* left/right one column */
     TV_HORIZONTAL_SCROLL_SCREEN, /* left/right one screen */
     TV_HORIZONTAL_SCROLL_PREFS,  /* left/right follows the settings */
 };
 
 /*vertical scroll mode */
-enum tv_vertical_scroll_mode
+enum
 {
-    TV_VERTICAL_SCROLL_LINE,   /* up/down one line */
+    TV_VERTICAL_SCROLL_LINE = 0,   /* up/down one line */
     TV_VERTICAL_SCROLL_PAGE,   /* up/down one page */
     TV_VERTICAL_SCROLL_PREFS,  /* up/down follows the settings */
 };
@@ -70,7 +70,7 @@ void tv_draw(void);
  * [In] mode
  *          scroll mode
  */
-void tv_scroll_up(enum tv_vertical_scroll_mode mode);
+void tv_scroll_up(unsigned mode);
 
 /*
  * scroll down
@@ -78,7 +78,7 @@ void tv_scroll_up(enum tv_vertical_scroll_mode mode);
  * [In] mode
  *          scroll mode
  */
-void tv_scroll_down(enum tv_vertical_scroll_mode mode);
+void tv_scroll_down(unsigned mode);
 
 /*
  * scroll left
@@ -86,7 +86,7 @@ void tv_scroll_down(enum tv_vertical_scroll_mode mode);
  * [In] mode
  *          scroll mode
  */
-void tv_scroll_left(enum tv_horizontal_scroll_mode mode);
+void tv_scroll_left(unsigned mode);
 
 /*
  * scroll right
@@ -94,7 +94,7 @@ void tv_scroll_left(enum tv_horizontal_scroll_mode mode);
  * [In] mode
  *          scroll mode
  */
-void tv_scroll_right(enum tv_horizontal_scroll_mode mode);
+void tv_scroll_right(unsigned mode);
 
 /* jump to the top */
 void tv_top(void);
@@ -111,7 +111,7 @@ void tv_bottom(void);
  *         TV_MENU_RESULT_EXIT_PLUGIN   request to exit this plugin
  *         TV_MENU_RESULT_ATTACHED_USB  connect USB cable
  */
-enum tv_menu_result tv_menu(void);
+unsigned tv_menu(void);
 
 /* add or remove the bookmark to the current position */
 void tv_add_or_remove_bookmark(void);
diff --git a/apps/plugins/text_viewer/tv_menu.c b/apps/plugins/text_viewer/tv_menu.c
index ce85dc9..92e5658 100644
--- a/apps/plugins/text_viewer/tv_menu.c
+++ b/apps/plugins/text_viewer/tv_menu.c
@@ -350,9 +350,9 @@ MAKE_MENU(option_menu, "Viewer Options", NULL, Icon_NOICON,
 #endif
             &scroll_menu, &indent_spaces_item);
 
-static enum tv_menu_result tv_options_menu(void)
+static unsigned tv_options_menu(void)
 {
-    enum tv_menu_result result = TV_MENU_RESULT_EXIT_MENU;
+    unsigned result = TV_MENU_RESULT_EXIT_MENU;
 
     if (rb->do_menu(&option_menu, NULL, NULL, false) == MENU_ATTACHED_USB)
         result = TV_MENU_RESULT_ATTACHED_USB;
@@ -360,9 +360,9 @@ static enum tv_menu_result tv_options_menu(void)
     return result;
 }
 
-enum tv_menu_result tv_display_menu(void)
+unsigned tv_display_menu(void)
 {
-    enum tv_menu_result result = TV_MENU_RESULT_EXIT_MENU;
+    unsigned result = TV_MENU_RESULT_EXIT_MENU;
 
     MENUITEM_STRINGLIST(menu, "Viewer Menu", NULL,
                         "Return", "Viewer Options",
diff --git a/apps/plugins/text_viewer/tv_menu.h b/apps/plugins/text_viewer/tv_menu.h
index 9f28723..0db5051 100644
--- a/apps/plugins/text_viewer/tv_menu.h
+++ b/apps/plugins/text_viewer/tv_menu.h
@@ -23,8 +23,8 @@
 #ifndef PLUGIN_TEXT_VIEWER_MENU_H
 #define PLUGIN_TEXT_VIEWER_MENU_H
 
-enum tv_menu_result {
-    TV_MENU_RESULT_MOVE_PAGE,
+enum {
+    TV_MENU_RESULT_MOVE_PAGE = 0,
     TV_MENU_RESULT_EXIT_MENU,
     TV_MENU_RESULT_EXIT_PLUGIN,
     TV_MENU_RESULT_ATTACHED_USB,
@@ -40,6 +40,6 @@ enum tv_menu_result {
  *         TV_MENU_RESULT_EXIT_PLUGIN   request to exit this plugin
  *         TV_MENU_RESULT_ATTACHED_USB  connect USB cable
  */
-enum tv_menu_result tv_display_menu(void);
+unsigned tv_display_menu(void);
 
 #endif
diff --git a/apps/plugins/text_viewer/tv_preferences.c b/apps/plugins/text_viewer/tv_preferences.c
index d317508..da5dbb3 100644
--- a/apps/plugins/text_viewer/tv_preferences.c
+++ b/apps/plugins/text_viewer/tv_preferences.c
@@ -24,7 +24,6 @@
 #include "tv_preferences.h"
 
 static struct tv_preferences prefs;
-static bool is_initialized = false;
 static int listner_count = 0;
 
 #define TV_MAX_LISTNERS 4
@@ -73,15 +72,13 @@ const struct tv_preferences *tv_get_preferences(void)
 void tv_set_preferences(const struct tv_preferences *new_prefs)
 {
     struct tv_preferences *oldp = NULL;
-    struct tv_preferences old_prefs;
+    static struct tv_preferences old_prefs;
+    static bool is_initialized = false;
+
+    if (is_initialized)
+        tv_copy_preferences((oldp = &old_prefs));
+    is_initialized = true;
 
-    if (!is_initialized)
-        is_initialized = true;
-    else
-    {
-        old_prefs = prefs;
-        oldp      = &old_prefs;
-    }
     rb->memcpy(&prefs, new_prefs, sizeof(struct tv_preferences));
     tv_notify_change_preferences(oldp, &prefs);
 }
diff --git a/apps/plugins/text_viewer/tv_preferences.h b/apps/plugins/text_viewer/tv_preferences.h
index 1e5c453..2614d30 100644
--- a/apps/plugins/text_viewer/tv_preferences.h
+++ b/apps/plugins/text_viewer/tv_preferences.h
@@ -23,73 +23,96 @@
 #ifndef PLUGIN_TEXT_VIEWER_PREFERENCES_H
 #define PLUGIN_TEXT_VIEWER_PREFERENCES_H
 
-enum scrollbar_mode {
+/* scrollbar_mode */
+enum {
     SB_OFF = 0,
     SB_ON,
 };
 
+/* word_mode */
+enum {
+    WRAP = 0,
+    CHOP,
+};
+
+/* line_mode */
+enum {
+    NORMAL = 0,
+    JOIN,
+    EXPAND,
+    REFLOW,
+};
+
+/* alignment */
+enum {
+    LEFT = 0,
+    RIGHT,
+};
+
+/* page_mode */
+enum {
+    NO_OVERLAP = 0,
+    OVERLAP,
+};
+
+/* header_mode */
+enum {
+    HD_NONE = 0,
+    HD_PATH,
+    HD_SBAR,
+    HD_BOTH,
+};
+
+/* footer_mode */
+enum {
+
+    FT_NONE = 0,
+    FT_PAGE,
+    FT_SBAR,
+    FT_BOTH,
+};
+
+/* horizontal_scroll_mode */
+enum {
+    SCREEN = 0,
+    COLUMN,
+};
+
+/* vertical_scroll_mode */
+enum {
+    PAGE = 0,
+    LINE,
+};
+
+/* narrow_mode */
+enum {
+    NM_PAGE = 0,
+    NM_TOP_BOTTOM,
+};
+
 struct tv_preferences {
-    enum {
-        WRAP = 0,
-        CHOP,
-    } word_mode;
-
-    enum {
-        NORMAL = 0,
-        JOIN,
-        EXPAND,
-        REFLOW,
-    } line_mode;
-
-    enum {
-        LEFT = 0,
-        RIGHT,
-    } alignment;
-
-    enum codepages encoding;
-
-    enum scrollbar_mode horizontal_scrollbar;
-    enum scrollbar_mode vertical_scrollbar;
-
-    enum {
-        NO_OVERLAP = 0,
-        OVERLAP,
-    } page_mode;
-
-    enum {
-        HD_NONE = 0,
-        HD_PATH,
-        HD_SBAR,
-        HD_BOTH,
-    } header_mode;
-
-    enum {
-        FT_NONE = 0,
-        FT_PAGE,
-        FT_SBAR,
-        FT_BOTH,
-    } footer_mode;
-
-    enum {
-        SCREEN = 0,
-        COLUMN,
-    } horizontal_scroll_mode;
-
-    enum {
-        PAGE = 0,
-        LINE,
-    } vertical_scroll_mode;
+    unsigned word_mode;
+    unsigned line_mode;
+    unsigned alignment;
+
+    unsigned encoding;
+
+    unsigned horizontal_scrollbar;
+    unsigned vertical_scrollbar;
+
+    unsigned page_mode;
+    unsigned header_mode;
+    unsigned footer_mode;
+    unsigned horizontal_scroll_mode;
+    unsigned vertical_scroll_mode;
 
     int autoscroll_speed;
 
     int windows;
 
-    enum {
-        NM_PAGE = 0,
-        NM_TOP_BOTTOM,
-    } narrow_mode;
+    unsigned narrow_mode;
 
-    int indent_spaces;
+    unsigned indent_spaces;
 
     unsigned char font_name[MAX_PATH];
 #ifdef HAVE_LCD_BITMAP
diff --git a/apps/plugins/text_viewer/tv_text_processor.c b/apps/plugins/text_viewer/tv_text_processor.c
index 5e30f0b..af397a8 100644
--- a/apps/plugins/text_viewer/tv_text_processor.c
+++ b/apps/plugins/text_viewer/tv_text_processor.c
@@ -25,7 +25,7 @@
 #include "tv_preferences.h"
 #include "tv_text_processor.h"
 
-enum tv_text_type {
+enum{
     TV_TEXT_UNKNOWN,
     TV_TEXT_MAC,
     TV_TEXT_UNIX,
@@ -42,7 +42,7 @@ enum tv_text_type {
 #define TV_MAX_BLOCKS 5
 
 static const struct tv_preferences *prefs;
-static enum tv_text_type text_type = TV_TEXT_UNKNOWN;
+static unsigned text_type = TV_TEXT_UNKNOWN;
 
 static const unsigned char *end_ptr;
 
@@ -368,7 +368,6 @@ static int tv_parse_text(const unsigned char *src, unsigned short *ucs,
     unsigned short prev_ch;
     int chars = 0;
     int gw;
-    int i;
     int line_break_width = 0;
     int line_end_chars   = 0;
     int width = 0;
@@ -449,6 +448,7 @@ static int tv_parse_text(const unsigned char *src, unsigned short *ucs,
             ucs[chars++] = ch;
         else
         {
+            unsigned i;
             for (i = 0; i < prefs->indent_spaces; i++)
                 ucs[chars++] = ch;
         }
