diff --git a/src/conf.c b/src/conf.c
index 6ae8d5f..51eeb14 100644
--- a/src/conf.c
+++ b/src/conf.c
@@ -195,9 +195,19 @@ int conf_loadConfig(const char* file) {
     conf_loadBool("nosound", i);
     nosound = i; i = 0;
     conf_loadFloat("sound", d);
-    if(d) { sound_volume(d); d = 0.; }
+    if(d) {
+      sound_defVolume = MAX(MIN(d, 1.), 0.);
+      if(d == 0.)
+        sound_disabled = 1;
+      d = 0.;
+    }
     conf_loadFloat("music", d);
-    if(d) { music_volume(d); d = 0.; }
+    if(d) {
+      music_defVolume = MAX(MIN(d, 1.), 0.);
+      if(d == 0.)
+        music_disabled = 1;
+      d = 0.;
+    }
 
     /* Joystick. */
     lua_getglobal(L, "joystick");
@@ -327,6 +337,7 @@ void conf_parseCLI(int argc, char** argv) {
   };
   int option_index = 0;
   int c = 0;
+  double d;
 
   while((c = getopt_long(argc, argv,
           "fF:Vd:j:J:W:H:MSm:s:Ghv",
@@ -365,10 +376,16 @@ void conf_parseCLI(int argc, char** argv) {
       nosound = 0;
       break;
     case 'm':
-      music_volume(atof(optarg));
+      d = atof(optarg);
+      music_defVolume = MAX(MIN(d, 1.), 0.);
+      if(d == 0.)
+        music_disabled = 1;
       break;
     case 's':
-      /*sound_volume(atof(optarg));*/
+      d = atof(optarg);
+      sound_defVolume = MAX(MIN(d, 1.), 0.);
+      if(d == 0.)
+        sound_disabled = 1;
       break;
     case 'G':
       nebu_forceGenerate();
diff --git a/src/lephisto.c b/src/lephisto.c
index 347ad1f..b4236b0 100644
--- a/src/lephisto.c
+++ b/src/lephisto.c
@@ -123,7 +123,8 @@ int main(int argc, char** argv) {
 
   /* Print the version. */
   snprintf(version, VERSION_LEN, "%d.%d.%d", VMAJOR, VMINOR, VREV);
-  LOG(" "APPNAME" v%s", version);
+  LOG("\n       "APPNAME" - Dark Tides v%s", version);
+  LOG("       ----------------------------\n");
 
   /* Initialize SDL for possible warnings. */
   SDL_Init(0);
diff --git a/src/music.c b/src/music.c
index 1dc92f6..401e066 100644
--- a/src/music.c
+++ b/src/music.c
@@ -22,6 +22,7 @@
 #define MUSIC_LUA_PATH  "../snd/music.lua" /**< Lua music control file. */
 
 int music_disabled = 0; /**< Whether or not music is disabled. */
+double music_defVolume = 0.8l;  /**< Music default volume. */
 
 /* Handle if music should run Lua script. Must be locked to ensure same
  * behaviour always!
@@ -70,6 +71,8 @@ static void music_luaQuit(void);
 void music_update(void) {
   char buf[PATH_MAX];
 
+  if(music_disabled) return;
+
   /* Lock music and see if it needs to update. */
   SDL_mutexP(music_lock);
   if(music_runchoose == 0) {
@@ -90,6 +93,7 @@ void music_update(void) {
  *    @return 0 on success.
  */
 static int music_runLua(char* situation) {
+  if(music_disabled) return 0;
   /* Run the choose function in Lua. */
   lua_getglobal(music_lua, "choose");
   lua_pushstring(music_lua, situation);
@@ -110,7 +114,7 @@ int music_init(void) {
 
   if(music_find() < 0)    return -1;
   if(music_luaInit() < 0) return -1;
-  music_volume(0.8);
+  music_volume(music_defVolume);
 
   /* Create the lock. */
   music_lock = SDL_CreateMutex();
@@ -238,6 +242,8 @@ void music_load(const char* name) {
  * @brief Play the loaded music.
  */
 void music_play(void) {
+  if(music_disabled) return;
+
   if(music_music == NULL) return;
 
   if(Mix_FadeInMusic(music_music, 0, 500) < 0)
@@ -250,6 +256,8 @@ void music_play(void) {
  * @brief Stop the loaded music.
  */
 void music_stop(void) {
+  if(music_disabled) return;
+
   if(music_music == NULL) return;
 
   if(Mix_FadeOutMusic(500) < 0)
@@ -260,6 +268,8 @@ void music_stop(void) {
  * @brief Pauses the music.
  */
 void music_pause(void) {
+  if(music_disabled) return;
+
   if(music_music == NULL) return;
 
   Mix_PauseMusic();
@@ -269,6 +279,8 @@ void music_pause(void) {
  * @brief Resumes the music.
  */
 void music_resume(void) {
+  if(music_disabled) return;
+
   if(music_music == NULL) return;
 
   Mix_ResumeMusic();
@@ -279,6 +291,7 @@ void music_resume(void) {
  *    @param sec Position to go to in seconds.
  */
 void music_setPos(double sec) {
+  if(music_disabled) return;
   if(music_music == NULL) return;
 
   Mix_FadeInMusicPos(music_music, 1, 1000, sec);
@@ -296,6 +309,8 @@ static int music_luaInit(void) {
   char* buf;
   uint32_t bufsize;
 
+  if(music_disabled) return 0;
+
   if(music_lua != NULL)
     music_luaQuit();
 
@@ -329,6 +344,8 @@ static int music_luaInit(void) {
  * @brief Quit the music Lua control system.
  */
 static void music_luaQuit(void) {
+  if(music_disabled) return;
+  
   if(music_lua == NULL)
     return;
 
@@ -373,6 +390,8 @@ int music_choose(char* situation) {
  * ARGH! DO NOT CALL MIX_* FUNCTIONS FROM WITHIN THE CALLBACKS!
  */
 static void music_rechoose(void) {
+  if(music_disabled) return;
+
   /* Lock so it doesn't run in between an update. */
   SDL_mutexP(music_lock);
   music_runchoose = 1;
diff --git a/src/music.h b/src/music.h
index b02519f..0f5f18a 100644
--- a/src/music.h
+++ b/src/music.h
@@ -2,6 +2,7 @@
 #include "lua.h"
 
 extern int music_disabled;
+extern double music_defVolume;
 
 /* Updating. */
 void music_update(void);
diff --git a/src/sound.c b/src/sound.c
index 5837980..b6bf2be 100644
--- a/src/sound.c
+++ b/src/sound.c
@@ -23,9 +23,10 @@
 #define SOUND_SUFFIX      ".wav"           /**< Suffix of sounds. */
 
 /* Global sound properties. */
-int sound_disabled        = 0;  /**< Whether sound is disabled. */
-static int sound_reserved = 0;  /**< Amount of reserved channels. */
-static double sound_pos[3];     /**< Position of listener. */
+int     sound_disabled    = 0;    /**< Whether sound is disabled. */
+double  sound_defVolume   = 0.4;  /**< Sound default volume. */
+static int sound_reserved = 0;    /**< Amount of reserved channels. */
+static double sound_pos[3];       /**< Position of listener. */
 
 /**
  * @struct alSound
@@ -73,7 +74,6 @@ static alSound* sound_list  = NULL; /**< List of available sounds. */
 static int sound_nlist      = 0;    /**< Number of available sounds. */
 
 /* Voice linked list. */
-static SDL_mutex* voice_lock = NULL;
 static alVoice* voice_active = NULL;       /**< Active voices. */
 static alVoice* voice_pool   = NULL;       /**< Pool of free voices. */
 
@@ -95,7 +95,7 @@ static alVoice* voice_get(int id);
  *    @return 0 on success.
  */
 int sound_init(void) {
-  if(sound_disabled) return 0;
+  if(sound_disabled && music_disabled) return 0;
 
   SDL_InitSubSystem(SDL_INIT_AUDIO);
   if(Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 1024) < 0) {
@@ -111,19 +111,18 @@ int sound_init(void) {
   /* Debug magic. */
   print_MixerVersion();
 
-  /* Load up all the sounds. */
-  sound_makeList();
-  sound_volume(0.4);
+  if(!sound_disabled) {
+    /* Load up all the sounds. */
+    sound_makeList();
+    sound_volume(sound_defVolume);
 
-  /* Finish function. */
-  Mix_ChannelFinished(voice_markStopped);
+    /* Finish function. */
+    Mix_ChannelFinished(voice_markStopped);
+  }
 
   /* Init the music. */
   music_init();
 
-  /* Create the voice lock. */
-  voice_lock = SDL_CreateMutex();
-
   return 0;
 }
 
@@ -173,7 +172,6 @@ void sound_exit(void) {
 
   /* Close the audio. */
   Mix_CloseAudio();
-  SDL_DestroyMutex(voice_lock);
 
   /* Free the voices. */
   while(voice_active != NULL) {
@@ -414,6 +412,7 @@ void sound_stop(int voice) {
  * @sa sound_playPos
  */
 int sound_updateListener(double dir, double x, double y) {
+  if(sound_disabled) return 0;
   sound_pos[0] = x;
   sound_pos[1] = y;
   sound_pos[2] = dir/M_PI*180.;
diff --git a/src/sound.h b/src/sound.h
index daf4750..0a32b22 100644
--- a/src/sound.h
+++ b/src/sound.h
@@ -1,6 +1,7 @@
 #pragma once
 
 extern int sound_disabled;
+extern double sound_defVolume;
 
 /* Sound subsystem. */
 int sound_init(void);