public void watch( Source source )
    {
        // make sure the source exists:
        if( source == null )
            return;
        
        // make sure we aren't already watching this source:
        if( streamingSources.contains( source ) )
            return;
        
        ListIterator<Source> iter;
        Source src;
        
        // Make sure noone else is accessing the list of sources:
        synchronized( listLock )
        {
            // Any currently watched source which is null or playing on the 
            // same channel as the new source should be stopped and removed 
            // from the list.
            iter = streamingSources.listIterator();
            while( iter.hasNext() )
            {
                src = iter.next();
                if( src == null )
                {
                    iter.remove();
                }
                else if( source.channel == src.channel )
                {
                    src.stop();
                    iter.remove();
                }
            }
            
            // Add the new source to the list:
            streamingSources.add( source );
        }
    }