diff --git a/src/command.c b/src/command.c
index 1a019b830..535c3638c 100644
--- a/src/command.c
+++ b/src/command.c
@@ -1039,33 +1039,39 @@ handle_listall(struct client *client, G_GNUC_UNUSED int argc, char *argv[])
 static enum command_return
 handle_volume(struct client *client, G_GNUC_UNUSED int argc, char *argv[])
 {
-	int change, ret;
+	int change;
+	bool success;
 
 	if (!check_int(client, &change, argv[1], need_integer))
 		return COMMAND_RETURN_ERROR;
 
-	ret = volume_level_change(change, 1);
-	if (ret == -1)
+	success = volume_level_change(change, true);
+	if (!success) {
 		command_error(client, ACK_ERROR_SYSTEM,
 			      "problems setting volume");
+		return COMMAND_RETURN_ERROR;
+	}
 
-	return ret;
+	return COMMAND_RETURN_OK;
 }
 
 static enum command_return
 handle_setvol(struct client *client, G_GNUC_UNUSED int argc, char *argv[])
 {
-	int level, ret;
+	int level;
+	bool success;
 
 	if (!check_int(client, &level, argv[1], need_integer))
 		return COMMAND_RETURN_ERROR;
 
-	ret = volume_level_change(level, 0);
-	if (ret == -1)
+	success = volume_level_change(level, 0);
+	if (!success) {
 		command_error(client, ACK_ERROR_SYSTEM,
 			      "problems setting volume");
+		return COMMAND_RETURN_ERROR;
+	}
 
-	return ret;
+	return COMMAND_RETURN_OK;
 }
 
 static enum command_return
diff --git a/src/volume.c b/src/volume.c
index 5ce842251..8e97280a4 100644
--- a/src/volume.c
+++ b/src/volume.c
@@ -215,7 +215,7 @@ int volume_level_get(void)
 	return -1;
 }
 
-static int software_volume_change(int change, int rel)
+static bool software_volume_change(int change, bool rel)
 {
 	int new = change;
 
@@ -240,10 +240,10 @@ static int software_volume_change(int change, int rel)
 
 	setPlayerSoftwareVolume(new);
 
-	return 0;
+	return true;
 }
 
-static int hardware_volume_change(int change, int rel)
+static bool hardware_volume_change(int change, bool rel)
 {
 	int device, count;
 
@@ -254,10 +254,10 @@ static int hardware_volume_change(int change, int rel)
 	for (device=0; device<count ;device++) {
 		mixer_control_setvol(device, change, rel);
 	}
-	return 0;
+	return true;
 }
 
-int volume_level_change(int change, int rel)
+bool volume_level_change(int change, bool rel)
 {
 	idle_add(IDLE_MIXER);
 
@@ -267,7 +267,7 @@ int volume_level_change(int change, int rel)
 	case VOLUME_MIXER_TYPE_SOFTWARE:
 		return software_volume_change(change, rel);
 	default:
-		return 0;
+		return true;
 	}
 }
 
diff --git a/src/volume.h b/src/volume.h
index 435e32711..99d31da4e 100644
--- a/src/volume.h
+++ b/src/volume.h
@@ -20,6 +20,7 @@
 #ifndef MPD_VOLUME_H
 #define MPD_VOLUME_H
 
+#include <stdbool.h>
 #include <stdio.h>
 
 #define VOLUME_MIXER_OSS	"oss"
@@ -34,7 +35,7 @@ void volume_finish(void);
 
 int volume_level_get(void);
 
-int volume_level_change(int change, int rel);
+bool volume_level_change(int change, bool rel);
 
 void read_sw_volume_state(FILE *fp);