bool ROUTER_TOOL::prepareInteractive()
{
    int routingLayer = getStartLayer ( m_startItem );
    m_frame->SetActiveLayer( ToLAYER_ID ( routingLayer ) );

    // fixme: switch on invisible layer

    if( m_startItem && m_startItem->Net() >= 0 )
    {
        highlightNet( true, m_startItem->Net() );
        // Update track width and via size shown in main toolbar comboboxes
        m_frame->SetCurrentNetClass( m_startItem->Parent()->GetNetClass()->GetName() );
    }
    else
        m_frame->SetCurrentNetClass( NETCLASS::Default );

    m_ctls->ForceCursorPosition( false );
    m_ctls->SetAutoPan( true );

    PNS_SIZES_SETTINGS sizes ( m_router->Sizes() );

    sizes.Init ( m_board, m_startItem );
    sizes.AddLayerPair ( m_frame->GetScreen()->m_Route_Layer_TOP,
                         m_frame->GetScreen()->m_Route_Layer_BOTTOM );
    m_router->UpdateSizes( sizes );

    if ( !m_router->StartRouting( m_startSnapPoint, m_startItem, routingLayer ) )
    {
        wxMessageBox ( m_router->FailureReason(), _( "Error" ) );
        highlightNet ( false );
        return false;
    }

    m_endItem = NULL;
    m_endSnapPoint = m_startSnapPoint;

    return true;
}