diff --git a/NEWS b/NEWS
index 87354dac8..5354019f2 100644
--- a/NEWS
+++ b/NEWS
@@ -23,6 +23,7 @@ ver 0.19 (not yet released)
 ver 0.18.8 (not yet released)
 * decoder
   - ffmpeg: support libav v10_alpha1
+* fix Solaris build failure
 
 ver 0.18.7 (2013/01/13)
 * playlist
diff --git a/src/Playlist.hxx b/src/Playlist.hxx
index d6c649355..f2b7ebd67 100644
--- a/src/Playlist.hxx
+++ b/src/Playlist.hxx
@@ -32,7 +32,7 @@ struct playlist {
 	/**
 	 * The song queue - it contains the "real" playlist.
 	 */
-	struct queue queue;
+	struct Queue queue;
 
 	/**
 	 * This value is true if the player is currently playing (or
diff --git a/src/PlaylistPrint.cxx b/src/PlaylistPrint.cxx
index 34143d8a8..c984ea224 100644
--- a/src/PlaylistPrint.cxx
+++ b/src/PlaylistPrint.cxx
@@ -41,7 +41,7 @@
 void
 playlist_print_uris(Client &client, const playlist &playlist)
 {
-	const queue &queue = playlist.queue;
+	const Queue &queue = playlist.queue;
 
 	queue_print_uris(client, queue, 0, queue.GetLength());
 }
@@ -50,7 +50,7 @@ bool
 playlist_print_info(Client &client, const playlist &playlist,
 		    unsigned start, unsigned end)
 {
-	const queue &queue = playlist.queue;
+	const Queue &queue = playlist.queue;
 
 	if (end > queue.GetLength())
 		/* correct the "end" offset */
diff --git a/src/PlaylistSave.cxx b/src/PlaylistSave.cxx
index 9a01aa954..5f5b3e20d 100644
--- a/src/PlaylistSave.cxx
+++ b/src/PlaylistSave.cxx
@@ -64,7 +64,7 @@ playlist_print_uri(FILE *file, const char *uri)
 }
 
 PlaylistResult
-spl_save_queue(const char *name_utf8, const queue &queue)
+spl_save_queue(const char *name_utf8, const Queue &queue)
 {
 	if (map_spl_path().IsNull())
 		return PlaylistResult::DISABLED;
diff --git a/src/PlaylistSave.hxx b/src/PlaylistSave.hxx
index 655db1836..3e58b8630 100644
--- a/src/PlaylistSave.hxx
+++ b/src/PlaylistSave.hxx
@@ -24,7 +24,7 @@
 
 #include <stdio.h>
 
-struct queue;
+struct Queue;
 struct playlist;
 struct PlayerControl;
 class DetachedSong;
@@ -40,7 +40,7 @@ playlist_print_uri(FILE *fp, const char *uri);
  * Saves a queue object into a stored playlist file.
  */
 PlaylistResult
-spl_save_queue(const char *name_utf8, const queue &queue);
+spl_save_queue(const char *name_utf8, const Queue &queue);
 
 /**
  * Saves a playlist object into a stored playlist file.
diff --git a/src/Queue.cxx b/src/Queue.cxx
index 116fcead1..99b545ab1 100644
--- a/src/Queue.cxx
+++ b/src/Queue.cxx
@@ -21,7 +21,7 @@
 #include "Queue.hxx"
 #include "DetachedSong.hxx"
 
-queue::queue(unsigned _max_length)
+Queue::Queue(unsigned _max_length)
 	:max_length(_max_length), length(0),
 	 version(1),
 	 items(new Item[max_length]),
@@ -34,7 +34,7 @@ queue::queue(unsigned _max_length)
 {
 }
 
-queue::~queue()
+Queue::~Queue()
 {
 	Clear();
 
@@ -43,7 +43,7 @@ queue::~queue()
 }
 
 int
-queue::GetNextOrder(unsigned _order) const
+Queue::GetNextOrder(unsigned _order) const
 {
 	assert(_order < length);
 
@@ -60,7 +60,7 @@ queue::GetNextOrder(unsigned _order) const
 }
 
 void
-queue::IncrementVersion()
+Queue::IncrementVersion()
 {
 	static unsigned long max = ((uint32_t) 1 << 31) - 1;
 
@@ -75,7 +75,7 @@ queue::IncrementVersion()
 }
 
 void
-queue::ModifyAtOrder(unsigned _order)
+Queue::ModifyAtOrder(unsigned _order)
 {
 	assert(_order < length);
 
@@ -84,7 +84,7 @@ queue::ModifyAtOrder(unsigned _order)
 }
 
 unsigned
-queue::Append(DetachedSong &&song, uint8_t priority)
+Queue::Append(DetachedSong &&song, uint8_t priority)
 {
 	assert(!IsFull());
 
@@ -103,7 +103,7 @@ queue::Append(DetachedSong &&song, uint8_t priority)
 }
 
 void
-queue::SwapPositions(unsigned position1, unsigned position2)
+Queue::SwapPositions(unsigned position1, unsigned position2)
 {
 	unsigned id1 = items[position1].id;
 	unsigned id2 = items[position2].id;
@@ -118,7 +118,7 @@ queue::SwapPositions(unsigned position1, unsigned position2)
 }
 
 void
-queue::MovePostion(unsigned from, unsigned to)
+Queue::MovePostion(unsigned from, unsigned to)
 {
 	const Item tmp = items[from];
 
@@ -154,7 +154,7 @@ queue::MovePostion(unsigned from, unsigned to)
 }
 
 void
-queue::MoveRange(unsigned start, unsigned end, unsigned to)
+Queue::MoveRange(unsigned start, unsigned end, unsigned to)
 {
 	Item tmp[end - start];
 	// Copy the original block [start,end-1]
@@ -196,7 +196,7 @@ queue::MoveRange(unsigned start, unsigned end, unsigned to)
 }
 
 void
-queue::MoveOrder(unsigned from_order, unsigned to_order)
+Queue::MoveOrder(unsigned from_order, unsigned to_order)
 {
 	assert(from_order < length);
 	assert(to_order <= length);
@@ -215,7 +215,7 @@ queue::MoveOrder(unsigned from_order, unsigned to_order)
 }
 
 void
-queue::DeletePosition(unsigned position)
+Queue::DeletePosition(unsigned position)
 {
 	assert(position < length);
 
@@ -248,7 +248,7 @@ queue::DeletePosition(unsigned position)
 }
 
 void
-queue::Clear()
+Queue::Clear()
 {
 	for (unsigned i = 0; i < length; i++) {
 		Item *item = &items[i];
@@ -262,7 +262,7 @@ queue::Clear()
 }
 
 static void
-queue_sort_order_by_priority(struct queue *queue, unsigned start, unsigned end)
+queue_sort_order_by_priority(Queue *queue, unsigned start, unsigned end)
 {
 	assert(queue != nullptr);
 	assert(queue->random);
@@ -270,8 +270,8 @@ queue_sort_order_by_priority(struct queue *queue, unsigned start, unsigned end)
 	assert(end <= queue->length);
 
 	auto cmp = [queue](unsigned a_pos, unsigned b_pos){
-		const queue::Item &a = queue->items[a_pos];
-		const queue::Item &b = queue->items[b_pos];
+		const Queue::Item &a = queue->items[a_pos];
+		const Queue::Item &b = queue->items[b_pos];
 
 		return a.priority > b.priority;
 	};
@@ -280,7 +280,7 @@ queue_sort_order_by_priority(struct queue *queue, unsigned start, unsigned end)
 }
 
 void
-queue::ShuffleOrderRange(unsigned start, unsigned end)
+Queue::ShuffleOrderRange(unsigned start, unsigned end)
 {
 	assert(random);
 	assert(start <= end);
@@ -295,7 +295,7 @@ queue::ShuffleOrderRange(unsigned start, unsigned end)
  * priority group.
  */
 void
-queue::ShuffleOrderRangeWithPriority(unsigned start, unsigned end)
+Queue::ShuffleOrderRangeWithPriority(unsigned start, unsigned end)
 {
 	assert(random);
 	assert(start <= end);
@@ -329,13 +329,13 @@ queue::ShuffleOrderRangeWithPriority(unsigned start, unsigned end)
 }
 
 void
-queue::ShuffleOrder()
+Queue::ShuffleOrder()
 {
 	ShuffleOrderRangeWithPriority(0, length);
 }
 
 void
-queue::ShuffleOrderFirst(unsigned start, unsigned end)
+Queue::ShuffleOrderFirst(unsigned start, unsigned end)
 {
 	rand.AutoCreate();
 
@@ -344,7 +344,7 @@ queue::ShuffleOrderFirst(unsigned start, unsigned end)
 }
 
 void
-queue::ShuffleOrderLast(unsigned start, unsigned end)
+Queue::ShuffleOrderLast(unsigned start, unsigned end)
 {
 	rand.AutoCreate();
 
@@ -353,7 +353,7 @@ queue::ShuffleOrderLast(unsigned start, unsigned end)
 }
 
 void
-queue::ShuffleRange(unsigned start, unsigned end)
+Queue::ShuffleRange(unsigned start, unsigned end)
 {
 	assert(start <= end);
 	assert(end <= length);
@@ -369,7 +369,7 @@ queue::ShuffleRange(unsigned start, unsigned end)
 }
 
 unsigned
-queue::FindPriorityOrder(unsigned start_order, uint8_t priority,
+Queue::FindPriorityOrder(unsigned start_order, uint8_t priority,
 			 unsigned exclude_order) const
 {
 	assert(random);
@@ -386,7 +386,7 @@ queue::FindPriorityOrder(unsigned start_order, uint8_t priority,
 }
 
 unsigned
-queue::CountSamePriority(unsigned start_order, uint8_t priority) const
+Queue::CountSamePriority(unsigned start_order, uint8_t priority) const
 {
 	assert(random);
 	assert(start_order <= length);
@@ -402,7 +402,7 @@ queue::CountSamePriority(unsigned start_order, uint8_t priority) const
 }
 
 bool
-queue::SetPriority(unsigned position, uint8_t priority, int after_order)
+Queue::SetPriority(unsigned position, uint8_t priority, int after_order)
 {
 	assert(position < length);
 
@@ -460,7 +460,7 @@ queue::SetPriority(unsigned position, uint8_t priority, int after_order)
 }
 
 bool
-queue::SetPriorityRange(unsigned start_position, unsigned end_position,
+Queue::SetPriorityRange(unsigned start_position, unsigned end_position,
 			uint8_t priority, int after_order)
 {
 	assert(start_position <= end_position);
diff --git a/src/Queue.hxx b/src/Queue.hxx
index ce4bdd11a..016619e65 100644
--- a/src/Queue.hxx
+++ b/src/Queue.hxx
@@ -41,7 +41,7 @@ class DetachedSong;
  * - the unique id (which stays the same, regardless of moves)
  * - the order number (which only differs from "position" in random mode)
  */
-struct queue {
+struct Queue {
 	/**
 	 * reserve max_length * HASH_MULT elements in the id
 	 * number space
@@ -103,16 +103,16 @@ struct queue {
 	/** random number generator for shuffle and random mode */
 	LazyRandomEngine rand;
 
-	queue(unsigned max_length);
+	explicit Queue(unsigned max_length);
 
 	/**
 	 * Deinitializes a queue object.  It does not free the queue
 	 * pointer itself.
 	 */
-	~queue();
+	~Queue();
 
-	queue(const queue &other) = delete;
-	queue &operator=(const queue &other) = delete;
+	Queue(const Queue &) = delete;
+	Queue &operator=(const Queue &) = delete;
 
 	unsigned GetLength() const {
 		assert(length <= max_length);
diff --git a/src/QueuePrint.cxx b/src/QueuePrint.cxx
index d79d31a15..1f3c8fd57 100644
--- a/src/QueuePrint.cxx
+++ b/src/QueuePrint.cxx
@@ -33,7 +33,7 @@
  * @param end the index of the last song (excluding)
  */
 static void
-queue_print_song_info(Client &client, const queue &queue,
+queue_print_song_info(Client &client, const Queue &queue,
 		      unsigned position)
 {
 	song_print_info(client, queue.Get(position));
@@ -46,7 +46,7 @@ queue_print_song_info(Client &client, const queue &queue,
 }
 
 void
-queue_print_info(Client &client, const queue &queue,
+queue_print_info(Client &client, const Queue &queue,
 		 unsigned start, unsigned end)
 {
 	assert(start <= end);
@@ -57,7 +57,7 @@ queue_print_info(Client &client, const queue &queue,
 }
 
 void
-queue_print_uris(Client &client, const queue &queue,
+queue_print_uris(Client &client, const Queue &queue,
 		 unsigned start, unsigned end)
 {
 	assert(start <= end);
@@ -70,7 +70,7 @@ queue_print_uris(Client &client, const queue &queue,
 }
 
 void
-queue_print_changes_info(Client &client, const queue &queue,
+queue_print_changes_info(Client &client, const Queue &queue,
 			 uint32_t version)
 {
 	for (unsigned i = 0; i < queue.GetLength(); i++) {
@@ -80,7 +80,7 @@ queue_print_changes_info(Client &client, const queue &queue,
 }
 
 void
-queue_print_changes_position(Client &client, const queue &queue,
+queue_print_changes_position(Client &client, const Queue &queue,
 			     uint32_t version)
 {
 	for (unsigned i = 0; i < queue.GetLength(); i++)
@@ -90,7 +90,7 @@ queue_print_changes_position(Client &client, const queue &queue,
 }
 
 void
-queue_find(Client &client, const queue &queue,
+queue_find(Client &client, const Queue &queue,
 	   const SongFilter &filter)
 {
 	for (unsigned i = 0; i < queue.GetLength(); i++) {
diff --git a/src/QueuePrint.hxx b/src/QueuePrint.hxx
index 0238252f7..1aa876219 100644
--- a/src/QueuePrint.hxx
+++ b/src/QueuePrint.hxx
@@ -27,28 +27,28 @@
 
 #include <stdint.h>
 
-struct queue;
+struct Queue;
 class SongFilter;
 class Client;
 
 void
-queue_print_info(Client &client, const queue &queue,
+queue_print_info(Client &client, const Queue &queue,
 		 unsigned start, unsigned end);
 
 void
-queue_print_uris(Client &client, const queue &queue,
+queue_print_uris(Client &client, const Queue &queue,
 		 unsigned start, unsigned end);
 
 void
-queue_print_changes_info(Client &client, const queue &queue,
+queue_print_changes_info(Client &client, const Queue &queue,
 			 uint32_t version);
 
 void
-queue_print_changes_position(Client &client, const queue &queue,
+queue_print_changes_position(Client &client, const Queue &queue,
 			     uint32_t version);
 
 void
-queue_find(Client &client, const queue &queue,
+queue_find(Client &client, const Queue &queue,
 	   const SongFilter &filter);
 
 #endif
diff --git a/src/QueueSave.cxx b/src/QueueSave.cxx
index 601d3519a..87de02c56 100644
--- a/src/QueueSave.cxx
+++ b/src/QueueSave.cxx
@@ -57,7 +57,7 @@ queue_save_song(FILE *fp, int idx, const DetachedSong &song)
 }
 
 void
-queue_save(FILE *fp, const queue &queue)
+queue_save(FILE *fp, const Queue &queue)
 {
 	for (unsigned i = 0; i < queue.GetLength(); i++) {
 		uint8_t prio = queue.GetPriorityAtPosition(i);
@@ -69,7 +69,7 @@ queue_save(FILE *fp, const queue &queue)
 }
 
 void
-queue_load_song(TextFile &file, const char *line, queue &queue)
+queue_load_song(TextFile &file, const char *line, Queue &queue)
 {
 	if (queue.IsFull())
 		return;
diff --git a/src/QueueSave.hxx b/src/QueueSave.hxx
index cc21851bb..c9a646369 100644
--- a/src/QueueSave.hxx
+++ b/src/QueueSave.hxx
@@ -27,16 +27,16 @@
 
 #include <stdio.h>
 
-struct queue;
+struct Queue;
 class TextFile;
 
 void
-queue_save(FILE *fp, const queue &queue);
+queue_save(FILE *fp, const Queue &queue);
 
 /**
  * Loads one song from the state file and appends it to the queue.
  */
 void
-queue_load_song(TextFile &file, const char *line, queue &queue);
+queue_load_song(TextFile &file, const char *line, Queue &queue);
 
 #endif
diff --git a/test/test_queue_priority.cxx b/test/test_queue_priority.cxx
index 953103f9a..108a608c4 100644
--- a/test/test_queue_priority.cxx
+++ b/test/test_queue_priority.cxx
@@ -12,7 +12,7 @@ Tag::Tag(const Tag &) {}
 void Tag::Clear() {}
 
 static void
-check_descending_priority(const struct queue *queue,
+check_descending_priority(const Queue *queue,
 			  unsigned start_order)
 {
 	assert(start_order < queue->GetLength());
@@ -58,7 +58,7 @@ QueuePriorityTest::TestPriority()
 		DetachedSong("f.ogg"),
 	};
 
-	struct queue queue(32);
+	Queue queue(32);
 
 	for (unsigned i = 0; i < ARRAY_SIZE(songs); ++i)
 		queue.Append(DetachedSong(songs[i]), 0);