diff --git a/libs/canvas/wave_view.cc b/libs/canvas/wave_view.cc
index 3f2c608..606879a 100644
--- a/libs/canvas/wave_view.cc
+++ b/libs/canvas/wave_view.cc
@@ -104,6 +104,15 @@ WaveView::WaveView (Item* parent, boost::shared_ptr<ARDOUR::AudioRegion> region)
 WaveView::~WaveView ()
 {
 	invalidate_image_cache ();
+
+	if (!_image_cache.empty()) {
+		std::map <boost::shared_ptr<ARDOUR::AudioSource>, std::vector <CacheEntry> >::iterator i;
+		for (i = _image_cache.begin(); i != _image_cache.end(); ++i) {
+			if (i->first.unique()) {
+				_image_cache.erase(i->first);
+			}
+		}
+	}
 }
 
 void
@@ -211,6 +220,10 @@ WaveView::invalidate_image_cache ()
 	vector <uint32_t> deletion_list;
 	vector <CacheEntry> caches;
 
+	if (_region->n_channels() == 0) {
+		return;
+	}
+
 	if (_image_cache.find (_region->audio_source ()) != _image_cache.end ()) {
 		caches = _image_cache.find (_region->audio_source ())->second;
 	} else {
@@ -237,10 +250,12 @@ WaveView::invalidate_image_cache ()
 		deletion_list.pop_back();
 	}
 
-	if (caches.size () == 0) {
-		_image_cache.erase(_region->audio_source ());
-	} else {
-		_image_cache[_region->audio_source ()] = caches;
+	if (_region->sources().size() > 0) {
+		if (caches.size () == 0) {
+			_image_cache.erase(_region->audio_source ());
+		} else {
+			_image_cache[_region->audio_source ()] = caches;
+		}
 	}
 
 }
