diff -rupN squeezeplay_orig9411/src/Makefile.linux squeezeplay/src/Makefile.linux
--- squeezeplay_orig9411/src/Makefile.linux	2011-04-08 11:56:15.675101374 +0100
+++ squeezeplay/src/Makefile.linux	2011-04-08 12:00:16.792105503 +0100
@@ -7,7 +7,7 @@
 # Absolute path to top of SQUEEZEPLAY directories
 #
 
-SRC_DIR = $(realpath ${PWD})
+SRC_DIR = $(realpath $(shell pwd))
 BASE_DIR = $(dir ${SRC_DIR})
 
 export BUILD_TOP=$(BASE_DIR)/build/linux
@@ -143,7 +143,7 @@ luafilesystem:
 	cd luafilesystem-1.2 && make install PREFIX=${PREFIX} PLATFORM=linux
 
 luaprofiler:
-	cd luaprofiler-2.0 && make -f Makefile.linux install
+	cd luaprofiler-2.0 && LD="gcc -shared" make -f Makefile.linux install
 
 # just compile the library for to tolua++
 .PHONY: tolua++
diff -rupN squeezeplay_orig9411/src/squeezeplay/src/audio/decode/decode_alsa.c squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa.c
--- squeezeplay_orig9411/src/squeezeplay/src/audio/decode/decode_alsa.c	2011-04-08 11:56:04.439098703 +0100
+++ squeezeplay/src/squeezeplay/src/audio/decode/decode_alsa.c	2011-04-08 14:16:17.563608173 +0100
@@ -276,7 +276,7 @@ static int decode_alsa_init(lua_State *L
 
 	lua_pop(L, 2);
 
-	return 1;
+	return playback_pid > 0 ? 1 : 0;
 }
 
 
diff -rupN squeezeplay_orig9411/src/squeezeplay/src/audio/decode/decode.c squeezeplay/src/squeezeplay/src/audio/decode/decode.c
--- squeezeplay_orig9411/src/squeezeplay/src/audio/decode/decode.c	2011-04-08 11:56:04.439098703 +0100
+++ squeezeplay/src/squeezeplay/src/audio/decode/decode.c	2011-04-08 14:16:17.558604378 +0100
@@ -1005,6 +1005,7 @@ static int decode_init_audio(lua_State *
 
 static int decode_audio_open(lua_State *L) {
 	struct decode_audio_func *f = NULL;
+	char *errstr = NULL;
 
 	if (decode_audio || decode_thread) {
 		/* already initialized */
@@ -1012,30 +1013,39 @@ static int decode_audio_open(lua_State *
 		return 1;
 	}
 
-	/* initialise audio output */
+	/* initialise audio output - try in order: null, alsa, portaudio */
+	/* this allows fallback from alsa to portaudio on systems where this fails - e.g. ubuntu desktop */
+
+#ifdef HAVE_NULLAUDIO
+	f = &decode_null;
+	if (!f->init(L)) {
+		errstr = "null audio init failed";
+		f = NULL;
+	}
+#endif
 #ifdef HAVE_LIBASOUND
-	f = &decode_alsa;
+	if (!f) {
+		f = &decode_alsa;
+		if (!f->init(L)) {
+			errstr = "alsa audio init failed";
+			f = NULL;
+		}
+	}
 #endif
 #ifdef HAVE_LIBPORTAUDIO
 	if (!f) {
 		f = &decode_portaudio;
+		if (!f->init(L)) {
+			errstr = "port audio init failed";
+			f = NULL;
+		}
 	}
 #endif
-#ifdef HAVE_NULLAUDIO
-	f = &decode_null;
-#endif
-	if (!f) {
-		/* no audio support */
-		lua_pushnil(L);
-		lua_pushstring(L, "No audio support");
-		return 2;
-	}
 
-	/* audio initialization */
-	if (!f->init(L)) {
-		/* audio init failed */
+	/* no audio device available */
+	if (!f) {
 		lua_pushnil(L);
-		lua_pushstring(L, "Error in audio init");
+		lua_pushstring(L, errstr ? errstr : "No audio support");
 		return 2;
 	}
 
diff -rupN squeezeplay_orig9411/src/squeezeplay/src/ui/jive_framework.c squeezeplay/src/squeezeplay/src/ui/jive_framework.c
--- squeezeplay_orig9411/src/squeezeplay/src/ui/jive_framework.c	2011-04-08 11:56:04.447099052 +0100
+++ squeezeplay/src/squeezeplay/src/ui/jive_framework.c	2011-04-08 12:00:16.806840038 +0100
@@ -1072,7 +1072,7 @@ static int process_event(lua_State *L, S
 
 		/* show mouse cursor */
 		if (pointer_timeout == 0) {
-			SDL_ShowCursor(SDL_ENABLE);
+			SDL_ShowCursor(SDL_DISABLE);
 		}
 		pointer_timeout = now + POINTER_TIMEOUT;
 
diff -rupN squeezeplay_orig9411/src/squeezeplay/src/ui/jive_surface.c squeezeplay/src/squeezeplay/src/ui/jive_surface.c
--- squeezeplay_orig9411/src/squeezeplay/src/ui/jive_surface.c	2011-04-08 11:56:04.451097011 +0100
+++ squeezeplay/src/squeezeplay/src/ui/jive_surface.c	2011-04-08 12:00:16.838610729 +0100
@@ -840,7 +840,7 @@ JiveSurface *jive_surface_set_video_mode
 	    flags = SDL_FULLSCREEN;
 	}
 	else {
-	    flags = SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_RESIZABLE;
+	    flags = SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_NOFRAME;
 	}
 
 	sdl = SDL_GetVideoSurface();
@@ -852,7 +852,7 @@ JiveSurface *jive_surface_set_video_mode
 		/* check if we can reuse the existing suface? */
 		video_info = SDL_GetVideoInfo();
 		if (video_info->wm_available) {
-			mask = (SDL_FULLSCREEN | SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_RESIZABLE);
+			mask = (SDL_FULLSCREEN | SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_NOFRAME);
 		}
 		else {
 			mask = (SDL_HWSURFACE | SDL_DOUBLEBUF);
