diff --git a/contiki/ctk/ctk.c b/contiki/ctk/ctk.c
index 65b336e..4be2980 100644
--- a/contiki/ctk/ctk.c
+++ b/contiki/ctk/ctk.c
@@ -32,7 +32,7 @@
  *
  * This file is part of the "ctk" console GUI toolkit for cc65
  *
- * $Id: ctk.c,v 1.23 2003/08/09 13:34:16 adamdunkels Exp $
+ * $Id: ctk.c,v 1.24 2003/08/09 23:32:37 adamdunkels Exp $
  *
  */
 
@@ -103,9 +103,8 @@
   ctk_signal_pointer_button;
 
 #if CTK_CONF_SCREENSAVER
-ek_signal_t ctk_signal_screensaver_start,
-  ctk_signal_screensaver_stop,
-  ctk_signal_screensaver_uninstall;
+ek_signal_t ctk_signal_screensaver_stop,
+  ctk_signal_screensaver_start;
 #endif /* CTK_CONF_SCREENSAVER */
 
 
@@ -113,10 +112,9 @@
 unsigned short mouse_x, mouse_y, mouse_button;
 #endif /* CTK_CONF_MOUSE_SUPPORT */
 
-static unsigned short screensaver_timer;
+static unsigned short screensaver_timer = 0;
 unsigned short ctk_screensaver_timeout = (5*60);
-static u16_t start, current;
-/*#define SCREENSAVER_TIMEOUT (5*60)*/
+static ek_clock_t start, current;
 
 #if CTK_CONF_MENUS
 /*-----------------------------------------------------------------------------------*/
@@ -194,7 +192,6 @@
 #if CTK_CONF_SCREENSAVER
   ctk_signal_screensaver_start = dispatcher_sigalloc();
   ctk_signal_screensaver_stop = dispatcher_sigalloc();
-  ctk_signal_screensaver_uninstall = dispatcher_sigalloc();
 #endif /* CTK_CONF_SCREENSAVER */
     
 
@@ -457,7 +454,7 @@
   }
 }
 /*-----------------------------------------------------------------------------------*/
-void
+void 
 ctk_window_redraw(struct ctk_window *w)
 {
   /* Only redraw the window if it is a dialog or if it is the foremost
@@ -524,8 +521,7 @@
 {
   window_new(window, w, h, NULL);
 }
-/*-----------------------------------------------------------------------------------*/
-void
+/*-----------------------------------------------------------------------------------*/void
 ctk_menu_new(CC_REGISTER_ARG struct ctk_menu *menu,
 	     char *title)
 {
@@ -574,7 +570,7 @@
   }
 }
 /*-----------------------------------------------------------------------------------*/
-void
+void 
 ctk_widget_redraw(struct ctk_widget *widget)
 {
   struct ctk_window *window;
@@ -606,15 +602,15 @@
 	if(window == dialog) {
 	  ctk_draw_widget(widget, CTK_FOCUS_DIALOG, 0, height);
 	} else if(dialog == NULL &&
-		  window == windows ||
-		  window == &desktop_window) {
+		  (window == windows ||
+		   window == &desktop_window)) {
 	  ctk_draw_widget(widget, CTK_FOCUS_WINDOW, 0, height);
 	}
       }
   }
 }
 /*-----------------------------------------------------------------------------------*/
-void
+void 
 ctk_widget_add(CC_REGISTER_ARG struct ctk_window *window,
 	       CC_REGISTER_ARG struct ctk_widget *widget)
 {  
@@ -645,7 +641,7 @@
   return ctk_draw_height();
 }
 /*-----------------------------------------------------------------------------------*/
-static void
+static void 
 select_widget(struct ctk_widget *focus)
 {
   struct ctk_window *window;
@@ -678,7 +674,7 @@
 #define DOWN 1
 #define LEFT 2
 #define RIGHT 3
-static void
+static void 
 switch_focus_widget(unsigned char direction)
 {
   register struct ctk_window *window;
@@ -768,7 +764,7 @@
   /*  ctk_desktop_redraw();*/
 }
 /*-----------------------------------------------------------------------------------*/
-static void
+static void 
 switch_menu_item(unsigned char updown)
 {
   register struct ctk_menu *m;
@@ -847,7 +843,7 @@
   return REDRAW_NONE;
 }
 /*-----------------------------------------------------------------------------------*/
-static void
+static void 
 textentry_input(ctk_arch_key_t c,
 		CC_REGISTER_ARG struct ctk_textentry *t)
 {
@@ -923,6 +919,15 @@
 #endif /* CTK_CONF_TEXTENTRY_MULTILINE */
     break;
     
+  case CTK_CONF_WIDGETDOWN_KEY:
+    t->state = CTK_TEXTENTRY_NORMAL;
+    switch_focus_widget(DOWN);
+    break;
+  case CTK_CONF_WIDGETUP_KEY:
+    t->state = CTK_TEXTENTRY_NORMAL;
+    switch_focus_widget(UP);
+    break;
+    
   default:
     len = tlen - txpos - 1;
     if(c == CH_DEL) {
@@ -952,7 +957,7 @@
 }
 /*-----------------------------------------------------------------------------------*/
 #if CTK_CONF_MENUS
-static unsigned char
+static unsigned char 
 activate_menu(void)
 {
   struct ctk_window *w;
@@ -1019,14 +1024,14 @@
 {
   if(mode == CTK_MODE_NORMAL) {
     ++screensaver_timer;
-    if(screensaver_timer == ctk_screensaver_timeout) {
+    if(screensaver_timer >= ctk_screensaver_timeout) {
 #if CTK_CONF_SCREENSAVER
       dispatcher_emit(ctk_signal_screensaver_start, NULL,
 		      DISPATCHER_BROADCAST);
 #ifdef CTK_SCREENSAVER_INIT
       CTK_SCREENSAVER_INIT();
 #endif /* CTK_SCREENSAVER_INIT */
-      mode = CTK_MODE_SCREENSAVER;
+
 #endif /* CTK_CONF_SCREENSAVER */
       screensaver_timer = 0;
     }
@@ -1052,7 +1057,7 @@
 
   current = ek_clock();
   
-  if((current - start) >= CLK_TCK/2) {
+  if((current - start) >= CLK_TCK) {
     timer();
     start = current;
   }    
@@ -1319,16 +1324,10 @@
 #endif /* CTK_CONF_MENUS */
       } else {      
 	switch(c) {
-	case CH_CURS_RIGHT:
-	  switch_focus_widget(RIGHT);
-	  break;
-	case CH_CURS_DOWN:
+	case CTK_CONF_WIDGETDOWN_KEY:
 	  switch_focus_widget(DOWN);
 	  break;
-	case CH_CURS_LEFT:
-	  switch_focus_widget(LEFT);
-	  break;
-	case CH_CURS_UP:
+	case CTK_CONF_WIDGETUP_KEY:
 	  switch_focus_widget(UP);
 	  break;
 	case CH_ENTER:
diff --git a/contiki/ctk/ctk.h b/contiki/ctk/ctk.h
index 226b7d4..78ae811 100644
--- a/contiki/ctk/ctk.h
+++ b/contiki/ctk/ctk.h
@@ -32,7 +32,7 @@
  *
  * This file is part of the "ctk" console GUI toolkit for cc65
  *
- * $Id: ctk.h,v 1.11 2003/06/30 20:45:50 adamdunkels Exp $
+ * $Id: ctk.h,v 1.12 2003/08/09 23:32:37 adamdunkels Exp $
  *
  */
 
@@ -323,7 +323,7 @@
 void ctk_init(void);
 void ctk_mode_set(unsigned char mode);
 unsigned char ctk_mode_get(void);
-void ctk_redraw(void);
+/*void ctk_redraw(void);*/
 
 /* Functions for manipulating windows. */
 void ctk_window_new(struct ctk_window *window,
@@ -459,9 +459,8 @@
   ctk_signal_pointer_button;
 
 #if CTK_CONF_SCREENSAVER
-extern ek_signal_t ctk_signal_screensaver_start,
-  ctk_signal_screensaver_stop,
-  ctk_signal_screensaver_uninstall;
+extern ek_signal_t ctk_signal_screensaver_stop,
+  ctk_signal_screensaver_start;
 
 extern unsigned short ctk_screensaver_timeout;
 #define CTK_SCREENSAVER_SET_TIMEOUT(t) ctk_screensaver_timeout = (t)
