diff --git a/includes/interface.h b/includes/interface.h
index df1f9e58d..ad007b169 100644
--- a/includes/interface.h
+++ b/includes/interface.h
@@ -207,6 +207,8 @@ void copytext_ui(pixel *vid_buf, char *top, char *txt, char *copytxt);
 
 void info_box(pixel *vid_buf, char *msg);
 
+char *input_ui(pixel *vid_buf, char *title, char *prompt, char *text, char *shadow);
+
 int confirm_ui(pixel *vid_buf, char *top, char *msg, char *btn);
 
 void login_ui(pixel *vid_buf);
diff --git a/includes/luaconsole.h b/includes/luaconsole.h
index 1d956ea3a..723737d2d 100644
--- a/includes/luaconsole.h
+++ b/includes/luaconsole.h
@@ -37,4 +37,6 @@ int luatpt_set_shortcuts(lua_State* l);
 int luatpt_delete(lua_State* l);
 int luatpt_register_step(lua_State* l);
 int luatpt_unregister_step(lua_State* l);
+int luatpt_input(lua_State* l);
+int luatpt_message_box(lua_State* l);
 #endif
diff --git a/src/interface.c b/src/interface.c
index b6d854e47..86bc0eba2 100644
--- a/src/interface.c
+++ b/src/interface.c
@@ -820,6 +820,75 @@ void error_ui(pixel *vid_buf, int err, char *txt)
 	}
 }
 
+char *input_ui(pixel *vid_buf, char *title, char *prompt, char *text, char *shadow)
+{
+	int xsize = 244;
+	int ysize = 90;
+	int edity, editx;
+	int x0=(XRES-xsize)/2,y0=(YRES-MENUSIZE-ysize)/2,b=1,bq,mx,my;
+	ui_edit ed;
+
+	edity = y0+50;
+	editx = x0+12;
+
+	ed.x = editx;
+	ed.y = edity;
+	ed.w = xsize - 20;
+	ed.nx = 1;
+	ed.def = shadow;
+	ed.focus = 0;
+	ed.hide = 0;
+	ed.cursor = 0;
+	ed.multiline = 0;
+	strncpy(ed.str, text, 254);
+
+	while (!sdl_poll())
+	{
+		b = SDL_GetMouseState(&mx, &my);
+		if (!b)
+			break;
+	}
+
+	while (!sdl_poll())
+	{
+		bq = b;
+		b = SDL_GetMouseState(&mx, &my);
+		mx /= sdl_scale;
+		my /= sdl_scale;
+
+		clearrect(vid_buf, x0-2, y0-2, xsize+4, ysize+4);
+		drawrect(vid_buf, x0, y0, xsize, ysize, 192, 192, 192, 255);
+		drawtext(vid_buf, x0+8, y0+8, title, 160, 160, 255, 255);
+		drawtext(vid_buf, x0+8, y0+26, prompt, 255, 255, 255, 255);
+		
+		drawrect(vid_buf, ed.x-4, ed.y-5, ed.w+4, 16, 192, 192, 192, 255);
+
+		ui_edit_draw(vid_buf, &ed);
+		ui_edit_process(mx, my, b, &ed);
+
+		drawtext(vid_buf, x0+5, y0+ysize-11, "OK", 255, 255, 255, 255);
+		drawrect(vid_buf, x0, y0+ysize-16, xsize, 16, 192, 192, 192, 255);
+
+		sdl_blit(0, 0, (XRES+BARSIZE), YRES+MENUSIZE, vid_buf, (XRES+BARSIZE));
+
+		if (b && !bq && mx>=x0 && mx<x0+xsize && my>=y0+ysize-16 && my<=y0+ysize)
+			break;
+
+		if (sdl_key==SDLK_RETURN)
+			break;
+		if (sdl_key==SDLK_ESCAPE)
+			break;
+	}
+
+	while (!sdl_poll())
+	{
+		b = SDL_GetMouseState(&mx, &my);
+		if (!b)
+			break;
+	}
+	return mystrdup(ed.str);
+}
+
 void info_ui(pixel *vid_buf, char *top, char *txt)
 {
 	int x0=(XRES-240)/2,y0=(YRES-MENUSIZE)/2,b=1,bq,mx,my;
@@ -2618,7 +2687,7 @@ int search_ui(pixel *vid_buf)
 					pixel *thumb_rsdata = NULL;
 					pixel *thumb_imgdata = ptif_unpack(search_thumbs[pos], search_thsizes[pos], &finw, &finh);
 					if(thumb_imgdata!=NULL){
-						thumb_rsdata = resample_img(thumb_imgdata, finw, finh, XRES/GRID_S, YRES/GRID_S);
+						thumb_rsdata = resample_img_nn(thumb_imgdata, finw, finh, XRES/GRID_S, YRES/GRID_S);
 						draw_image(v_buf, thumb_rsdata, gx, gy, XRES/GRID_S, YRES/GRID_S, 255);					
 						free(thumb_imgdata);
 						free(thumb_rsdata);
diff --git a/src/luaconsole.c b/src/luaconsole.c
index 052aa98f4..091b9760a 100644
--- a/src/luaconsole.c
+++ b/src/luaconsole.c
@@ -30,6 +30,8 @@ void luacon_open(){
 		{"delete", &luatpt_delete},
 		{"register_step", &luatpt_register_step},
 		{"unregister_step", &luatpt_unregister_step},
+		{"input", &luatpt_input},
+		{"message_box", &luatpt_message_box},
 		{NULL,NULL}
 	};
 
@@ -703,4 +705,45 @@ int luatpt_unregister_step(lua_State* l)
 	}
 	return 0;
 }
+int luatpt_input(lua_State* l)
+{
+	char *prompt, *title, *result, *shadow, *text;
+	title = mystrdup(luaL_optstring(l, 1, "Title"));
+	prompt = mystrdup(luaL_optstring(l, 2, "Enter some text:"));
+	text = mystrdup(luaL_optstring(l, 3, ""));
+	shadow = mystrdup(luaL_optstring(l, 4, ""));
+
+	if (vid_buf!=NULL)
+	{
+		result = input_ui(vid_buf, title, prompt, text, shadow);
+		lua_pushstring(l, result);
+		free(result);
+		free(title);
+		free(prompt);
+		free(text);
+		free(shadow);
+		return 1;
+	}
+	free(title);
+	free(prompt);
+	free(text);
+	free(shadow);
+	return luaL_error(l, "Screen buffer does not exist");
+}
+int luatpt_message_box(lua_State* l)
+{
+	char *title, *text;
+	title = mystrdup(luaL_optstring(l, 1, "Title"));
+	text = mystrdup(luaL_optstring(l, 2, "Message"));
+	if (vid_buf!=NULL)
+	{
+		info_ui(vid_buf, title, text);
+		free(title);
+		free(text);
+		return 0;
+	}
+	free(title);
+	free(text);
+	return luaL_error(l, "Screen buffer does not exist");;
+}
 #endif
diff --git a/src/main.c b/src/main.c
index 3dd1f2b48..7c681df3e 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1741,6 +1741,9 @@ int main(int argc, char *argv[])
 		http_session_check = http_async_req_start(NULL, "http://" SERVER "/Login.api?Action=CheckSession", NULL, 0, 0);
 		http_auth_headers(http_session_check, svf_user_id, NULL, svf_session_id);
 	}
+#ifdef LUACONSOLE
+	luacon_eval("dofile(\"autorun.lua\")"); //Autorun lua script
+#endif
 	while (!sdl_poll()) //the main loop
 	{
 		frameidx++;