function overtopo()
    % provide controls that would go around a topographic map
    
    ZG=ZmapGlobal.Data; % used by get_zmap_globals
    report_this_filefun();
    
    to1 = figure_w_normalized_uicontrolunits( ...
        'Name','Topographic Map',...
        'NumberTitle','off', ...
        'backingstore','on',...
        'NextPlot','add', ...
        'Visible','on', ...
        'Position',position_in_current_monitor(ZG.map_len(1), ZG.map_len(2)));
    
    add_controls()
    
    function add_controls()
        labelPos = [0.9 0.93 0.10 0.05];
        uicontrol(...
            'Style','popup',...
            'Units','normalized',...
            'Position',labelPos,...
            'Value',1,...
            'String',cb_shader(),...
            'BackgroundColor',[0.7 0.7 0.7]',...
            'callback',@cb_shader);
        
        
        labelPos = [0.9 0.75 0.10 0.05];
        uicontrol(...
            'Style','popup',...
            'Units','normalized',...
            'Position',labelPos,...
            'Value',1,...
            'String',cb_volcanoes(),...
            'BackgroundColor',[0.7 0.7 0.7]',...
            'callback',@cb_volcanoes);
        
        
        uicontrol('Units','normal',...
            'Position',[.0 .0 .28 .04],'String','Plot using Mapping Toolbox ',...
            'callback', @(~,~)zmaptopo.overmaptb)
        
        labelPos = [0.9 0.65 0.10 0.05];
        uicontrol(...
            'Style','popup',...
            'Units','normalized',...
            'Position',labelPos,...
            'Value',1,...
            'String',cb_eqplot(),...
            'BackgroundColor',[0.7 0.7 0.7]',...
            'callback',@cb_eqplot);
        
        labelPos = [0.9 0.55 0.10 0.05];
        uicontrol(...
            'Style','popup',...
            'Units','normalized',...
            'Position',labelPos,...
            'Value',1,...
            'String',cb_faultplot(),...
            'BackgroundColor',[0.7 0.7 0.7]',...
            'callback',@cb_faultplot);
        
        labelPos = [0.9 0.45 0.10 0.05];
        uicontrol(...
            'Style','popup',...
            'Units','normalized',...
            'Position',labelPos,...
            'Value',1,...
            'String',cb_coastplot(),...
            'BackgroundColor',[0.7 0.7 0.7]',...
            'callback',@cb_coastplot);
        
        
        labelPos = [0.9 0.35 0.10 0.05];
        uicontrol(...
            'Style','popup',...
            'Units','normalized',...
            'Position',labelPos,...
            'Value',1,...
            'String',cb_mainevent(),...
            'BackgroundColor',[0.7 0.7 0.7]',...
            'callback',@cb_mainevent);
        
        labelPos = [0.9 0.25 0.10 0.05];
        uicontrol(...
            'Style','popup',...
            'Units','normalized',...
            'Position',labelPos,...
            'Value',1,...
            'String',cb_stations(),...
            'BackgroundColor',[0.7 0.7 0.7]',...
            'callback',@cb_stations);
    end
    
    %% callbacks
    function labelList = cb_shader(mysrc, ~)
        labelList={'flat', 'interp', 'faceted'};
        if nargin>0
            shading(labelList{mysrc.Value});
        end
    end
    
    function labelList = cb_volcanoes(mysrc,~)
        labelList= {'Volcanoes on','off'};
        if nargin == 0
            return
        end
        switch mysrc.Value
            case 1 % on
                plot(vo.Longitude, vo.Latitude, '^r', 'LineWidth', 1.5, 'MarkerSize',8,...
                    'MarkerFaceColor', 'w', 'MarkerEdgeColor', 'r', 'Tag', 'overtopo_volcanoes');
            case 2
                delete(findobj(gcf, 'Tag', 'overtopo_volcanoes'));
        end
    end
    
    function labelList = cb_eqplot(mysrc,~, catalog)
        labelList = {'EQ (dot)', 'EQ (o)', 'No EQ'};
        if nargin == 0
            return
        end
        
        switch mysrc.Value
            case 1
                plot(catalog.Longitude,catalog.Latitude, '.r', 'MarkerSize', 1, 'Tag', 'overtopo_eq') ;
            case 2
                plot(catalog.Longitude,catalog.Latitude, 'or', 'MarkerSize', 2, 'Tag', 'overtopo_eq') ;
            case 3
                delete(findobj(gcf,'Tag','overtopo_eq'));
        end
    end
    
    function labelList = cb_faultplot(mysrc, ~)
        labelList = {'Faults', 'No Faults'};
        if nargin == 0
            return
        end
        switch mysrc.Value
            case 1
                plot(faults(:,1), faults(:,2), 'm', 'Linewidth', 2, 'Tag', 'overtopo_faults');
            case 2
                delete(findobj(gcf,'Tag','overtopo_faults')) ;
        end
    end
    
    function labelList = cb_coastplot(mysrc,~)
        labelList = {'Coast','No Coast'};
        if nargin == 0
            return
        end
        switch mysrc.Value
            case 1
                plot(coastline(:,1),coastline(:,2),'w','Linewidth',2, 'Tag', 'overtopo_coast');
            case 2
                delete(findobj(gcf,'Tag','overtopo_coast')) ;
        end
    end
    
    function labelList = cb_mainevent(mysrc,~)
        labelList = {' Main','No Main'};
        if nargin == 0
            return
        end
        switch mysrc.Value
            case 1
                plot(ZG.maepi.Longitude, ZG.maepi.Latitude, 'hm',...
                    'LineWidth', 1.5, 'MarkerSize', 12,...
                    'MarkerFaceColor', 'y', 'MarkerEdgeColor', 'k', 'Tag', 'overtopo_mainevts')
                te1 = text(ZG.maepi.Longitude, ZG.maepi.Latitude, stri2);
                set(te1,'FontWeight', 'bold', 'Color', 'k', 'FontSize', 9, 'Clipping', 'on',...
                    'Tag', 'overtopo_mainevts');
                
            case 2
                delete(findobj(gcf, 'Tag','overtopo_mainevts'));
        end
    end
    
    function labelList = cb_stations(mysrc,~)
        labelList = {'Stations','No Stations'};
        if mysrc.Value == 1
            h1 = h1topo;
            plotstations ;
        end
    end
    
end
