diff --git a/src/audio/sfx_manager.cpp b/src/audio/sfx_manager.cpp
index 27347bd9d..220b6b5b8 100644
--- a/src/audio/sfx_manager.cpp
+++ b/src/audio/sfx_manager.cpp
@@ -71,12 +71,15 @@ SFXManager::~SFXManager()
     {
         delete (*i);
     }   // for i in m_all_sfx
+    m_all_sfx.clear();
 
     //the unbuffer all of the buffers
     for(unsigned int ii = 0; ii != m_sfx_buffers.size(); ii++)
     {
         alDeleteBuffers(1, &(m_sfx_buffers[ii]));
     } 
+    
+    sfx_manager = NULL;
 }   // ~SFXManager
 
 //----------------------------------------------------------------------------
@@ -352,12 +355,14 @@ void SFXManager::deleteSFX(SFXBase *sfx)
 {
     std::vector<SFXBase*>::iterator i;
     i=std::find(m_all_sfx.begin(), m_all_sfx.end(), sfx);
-    delete sfx;
+
     if(i==m_all_sfx.end())
     {
         fprintf(stderr, "SFXManager::deleteSFX : Warning: sfx not found in list.\n");
         return;
     }
+    
+    delete sfx;
 
     m_all_sfx.erase(i);
 
diff --git a/src/challenges/unlock_manager.cpp b/src/challenges/unlock_manager.cpp
index 5472e813b..2975cc10a 100644
--- a/src/challenges/unlock_manager.cpp
+++ b/src/challenges/unlock_manager.cpp
@@ -128,7 +128,9 @@ UnlockManager::UnlockManager()
 UnlockManager::~UnlockManager()
 {
     save();
-    sfx_manager->deleteSFX(m_locked_sound);
+    
+    // sfx_manager is destroyed before UnlockManager is, so SFX will be already deleted
+    // sfx_manager->deleteSFX(m_locked_sound);
 }   // ~UnlockManager
 
 //-----------------------------------------------------------------------------