diff --git a/contiki/ctk/ctk.c b/contiki/ctk/ctk.c
index 4be2980..ae47b52 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.24 2003/08/09 23:32:37 adamdunkels Exp $
+ * $Id: ctk.c,v 1.25 2003/08/11 22:27:13 adamdunkels Exp $
  *
  */
 
@@ -379,6 +379,8 @@
   }
   m->next = menu;
   menu->next = NULL;
+
+  redraw |= REDRAW_MENUPART;
 #endif /* CTK_CONF_MENUS */
 }
 /*-----------------------------------------------------------------------------------*/
@@ -391,13 +393,14 @@
   for(m = menus.menus; m->next != NULL; m = m->next) {
     if(m->next == menu) {
       m->next = menu->next;
+      redraw |= REDRAW_MENUPART;
       return;
     }
   }
 #endif /* CTK_CONF_MENUS */
 }
 /*-----------------------------------------------------------------------------------*/
-static void
+static void CC_FASTCALL 
 do_redraw_all(unsigned char clipy1, unsigned char clipy2)
 {
   struct ctk_window *w;
@@ -475,7 +478,7 @@
   }  
 }
 /*-----------------------------------------------------------------------------------*/
-static void
+static void 
 window_new(CC_REGISTER_ARG struct ctk_window *window,
 	   unsigned char w, unsigned char h,
 	   char *title)
@@ -521,7 +524,8 @@
 {
   window_new(window, w, h, NULL);
 }
-/*-----------------------------------------------------------------------------------*/void
+/*-----------------------------------------------------------------------------------*/
+void 
 ctk_menu_new(CC_REGISTER_ARG struct ctk_menu *menu,
 	     char *title)
 {
@@ -550,7 +554,7 @@
 #endif /* CTK_CONF_MENUS */
 }
 /*-----------------------------------------------------------------------------------*/
-static void
+static void CC_FASTCALL 
 add_redrawwidget(struct ctk_widget *w)
 {
   static unsigned char i;
@@ -610,7 +614,7 @@
   }
 }
 /*-----------------------------------------------------------------------------------*/
-void 
+void CC_FASTCALL
 ctk_widget_add(CC_REGISTER_ARG struct ctk_window *window,
 	       CC_REGISTER_ARG struct ctk_widget *widget)
 {  
@@ -641,7 +645,7 @@
   return ctk_draw_height();
 }
 /*-----------------------------------------------------------------------------------*/
-static void 
+static void CC_FASTCALL 
 select_widget(struct ctk_widget *focus)
 {
   struct ctk_window *window;
@@ -674,7 +678,7 @@
 #define DOWN 1
 #define LEFT 2
 #define RIGHT 3
-static void 
+static void CC_FASTCALL 
 switch_focus_widget(unsigned char direction)
 {
   register struct ctk_window *window;
@@ -796,7 +800,7 @@
 }
 #endif /* CTK_CONF_MENUS */
 /*-----------------------------------------------------------------------------------*/
-static unsigned char 
+static unsigned char CC_FASTCALL 
 activate(CC_REGISTER_ARG struct ctk_widget *w)
 {
   static unsigned char len;
@@ -843,7 +847,7 @@
   return REDRAW_NONE;
 }
 /*-----------------------------------------------------------------------------------*/
-static void 
+static void CC_FASTCALL 
 textentry_input(ctk_arch_key_t c,
 		CC_REGISTER_ARG struct ctk_textentry *t)
 {
@@ -871,52 +875,15 @@
     break;
 
   case CH_CURS_UP:
-#if CTK_CONF_TEXTENTRY_MULTILINE
-    if(t->h == 1) {
-      txpos = 0;
-    } else {
-      if(typos > 0) {
-	--typos;
-      } else {
-	t->state = CTK_TEXTENTRY_NORMAL;
-      }
-    }
-#else
     txpos = 0;
-#endif /* CTK_CONF_TEXTENTRY_MULTILINE */
     break;
     
   case CH_CURS_DOWN:
-#if CTK_CONF_TEXTENTRY_MULTILINE
-    if(t->h == 1) {
-      txpos = strlen(t->text);
-    } else {
-      if(typos < t->h - 1) {
-	++typos;
-      } else {
-	t->state = CTK_TEXTENTRY_NORMAL;
-      }
-    }
-#else
     txpos = strlen(t->text);
-#endif /* CTK_CONF_TEXTENTRY_MULTILINE */
     break;
     
   case CH_ENTER:
-#if CTK_CONF_TEXTENTRY_MULTILINE
-    if(t->h == 1) {
-      t->state = CTK_TEXTENTRY_NORMAL;
-    } else {
-      if(typos < t->h - 1) {
-	++typos;
-	txpos = 0;
-      } else {
-	t->state = CTK_TEXTENTRY_NORMAL;
-      }
-    }
-#else
     t->state = CTK_TEXTENTRY_NORMAL;
-#endif /* CTK_CONF_TEXTENTRY_MULTILINE */
     break;
     
   case CTK_CONF_WIDGETDOWN_KEY:
@@ -979,7 +946,7 @@
   return REDRAW_MENUPART;
 }
 /*-----------------------------------------------------------------------------------*/
-static unsigned char
+static unsigned char 
 menus_input(ctk_arch_key_t c)
 {
 
@@ -1330,11 +1297,6 @@
 	case CTK_CONF_WIDGETUP_KEY:
 	  switch_focus_widget(UP);
 	  break;
-	case CH_ENTER:
-	  if(widget != NULL) {
-	    redraw |= activate(widget);
-	  }
-	  break;
 #if CTK_CONF_MENUS
 	case CTK_CONF_MENU_KEY:
 	  if(dialog == NULL) {
@@ -1356,14 +1318,20 @@
 	  }
 	  break;
 	default:
-	  if(widget != NULL &&
-	     widget->type == CTK_WIDGET_TEXTENTRY) {
-	    widget->widget.textentry.state = CTK_TEXTENTRY_EDIT;
-	    textentry_input(c, (struct ctk_textentry *)widget);
-	    add_redrawwidget(widget);
+	  if(c == CH_ENTER &&
+	     widget != NULL) {
+	    redraw |= activate(widget);
 	  } else {
-	    dispatcher_emit(ctk_signal_keypress, (void *)c,
-			    window->owner);
+	    add_redrawwidget(widget);
+	    if(widget != NULL &&
+	       widget->type == CTK_WIDGET_TEXTENTRY) {
+	      widget->widget.textentry.state = CTK_TEXTENTRY_EDIT;
+	      textentry_input(c, (struct ctk_textentry *)widget);
+	    } else {
+	      window->focused = NULL;
+	      dispatcher_emit(ctk_signal_keypress, (void *)c,
+			      window->owner);
+	    }
 	  }
 	  break;
 	}
