public void decreaseKey( Position<T> pos, T newVal )
 {
     if( pos == null )
         throw new IllegalArgumentException( "null Position passed to decreaseKey" );

     PairNode<T> p = (PairNode<T>) pos;
     
     if( p.element == null )
         throw new IllegalArgumentException( "pos already deleted" );
     if( p.element.compareTo( newVal ) < 0 )
         throw new IllegalArgumentException( "newVal/oldval: " + newVal + " /" + p.element );
     p.element = newVal;
     if( p != root )
     {
         if( p.nextSibling != null )
             p.nextSibling.prev = p.prev;
         if( p.prev.leftChild == p )
             p.prev.leftChild = p.nextSibling;
         else
             p.prev.nextSibling = p.nextSibling;

         p.nextSibling = null;
         root = compareAndLink( root, p );
     }
 }