diff --git a/js/mods.js b/js/mods.js
index 70832717a66530fec60e248326226eee36f2bb88..41cc5e73c52a3fa4f05c6d0467c1a97a943273bb 100644
--- a/js/mods.js
+++ b/js/mods.js
@@ -17,6 +17,8 @@
 // globals
 //
 var mods = {}
+mods.mod = {}
+mods.globals = {}
 mods.ui = {source:null,
    progname:'',
    padding:7,
@@ -29,11 +31,11 @@ mods.ui = {source:null,
    header:50,
    mousedown:false,
    xstart:undefined,
-   selected:{}
+   selected:{},
+   menu:null,
+   top:null,
+   left:null
    }
-mods.globals = {}
-mods.mod = {}
-document.body.id = 'body'
 //
 // UI
 //
@@ -235,9 +237,9 @@ document.addEventListener('mousemove',function(evt) {
 document.addEventListener('contextmenu',function(evt){
    evt.stopPropagation()
    evt.preventDefault()
-   if (mods.globals.menu != null) {
-      document.body.removeChild(mods.globals.menu)
-      mods.globals.menu = null
+   if (mods.ui.menu != null) {
+      document.body.removeChild(mods.ui.menu)
+      mods.ui.menu = null
       }
    var div = document.createElement('div')
    make_menu(div)
@@ -247,7 +249,7 @@ document.addEventListener('contextmenu',function(evt){
    add_menu(div,'options',options)
    document.body.appendChild(div)
    function make_menu(div) {
-      mods.globals.menu = div
+      mods.ui.menu = div
       div.style.position = "absolute"
       var t = mods_transform()
       div.style.top = t.oy-t.ty+(evt.pageY-t.oy)/t.s
@@ -301,8 +303,10 @@ document.addEventListener('contextmenu',function(evt){
             div.addEventListener('mouseout',function(evt){
                evt.target.style.fontWeight = 'normal'})
             div.addEventListener('mousedown',function(evt){
+               evt.preventDefault()
+               evt.stopPropagation()
                document.body.removeChild(evt.target.parentNode)
-               mods.globals.menu = null
+               mods.ui.menu = null
                var t = mods_transform()
                mod_message_handler(module,
                   t.oy-t.ty+(evt.pageY-t.oy)/t.s,
@@ -333,10 +337,10 @@ document.addEventListener('contextmenu',function(evt){
       //
       add_menu(div,'open local module',function(evt){
          var t = mods_transform()
-         mods.globals.top = t.oy-t.ty+(evt.pageY-t.oy)/t.s
-         mods.globals.left = t.ox-t.tx+(evt.pageX-t.ox)/t.s
+         mods.ui.top = t.oy-t.ty+(evt.pageY-t.oy)/t.s
+         mods.ui.left = t.ox-t.tx+(evt.pageX-t.ox)/t.s
          document.body.removeChild(evt.target.parentNode)
-         mods.globals.menu = null
+         mods.ui.menu = null
          var file = document.getElementById('mod_input')
          file.value = null
          file.click()
@@ -346,7 +350,7 @@ document.addEventListener('contextmenu',function(evt){
       //
       add_menu(div,'open remote module',function(evt){
          document.body.removeChild(evt.target.parentNode)
-         mods.globals.menu = null
+         mods.ui.menu = null
          set_prompt('remotes not yet implemented')
          })
       document.body.appendChild(div)
@@ -364,7 +368,7 @@ document.addEventListener('contextmenu',function(evt){
       //
       add_menu(div,'open local program',function(evt){
          document.body.removeChild(evt.target.parentNode)
-         mods.globals.menu = null
+         mods.ui.menu = null
          var file = document.getElementById('prog_input')
          file.value = null
          file.click()
@@ -390,6 +394,8 @@ document.addEventListener('contextmenu',function(evt){
             div.addEventListener('mouseout',function(evt){
                evt.target.style.fontWeight = 'normal'})
             div.addEventListener('mousedown',function(evt){
+               evt.preventDefault()
+               evt.stopPropagation()
                if (location.port == 80)
                   var uri = 'http://'+location.hostname
                      +'?program='+program
@@ -399,7 +405,7 @@ document.addEventListener('contextmenu',function(evt){
                set_prompt('<a href='+uri+'>program link</a>')
                prog_message_handler(program)
                document.body.removeChild(evt.target.parentNode)
-               mods.globals.menu = null
+               mods.ui.menu = null
                })
             div.appendChild(document.createElement('br'))
             menu.appendChild(div)
@@ -427,7 +433,7 @@ document.addEventListener('contextmenu',function(evt){
       //
       add_menu(div,'open remote program',function(evt){
          document.body.removeChild(evt.target.parentNode)
-         mods.globals.menu = null
+         mods.ui.menu = null
          set_prompt('remotes not yet implemented')
          })
       //
@@ -435,7 +441,7 @@ document.addEventListener('contextmenu',function(evt){
       //
       add_menu(div,'save local program',function(evt){
          document.body.removeChild(evt.target.parentNode)
-         mods.globals.menu = null
+         mods.ui.menu = null
          save_program()
          })
       //
@@ -443,7 +449,7 @@ document.addEventListener('contextmenu',function(evt){
       //
       add_menu(div,'save local page',function(evt){
          document.body.removeChild(evt.target.parentNode)
-         mods.globals.menu = null
+         mods.ui.menu = null
          save_page()
          })
       document.body.appendChild(div)
@@ -454,7 +460,7 @@ document.addEventListener('contextmenu',function(evt){
    function edit(evt) {
       evt.preventDefault()
       document.body.removeChild(evt.target.parentNode)
-      mods.globals.menu = null
+      mods.ui.menu = null
       set_prompt('editing not yet implemented')
       }
    //
@@ -463,7 +469,7 @@ document.addEventListener('contextmenu',function(evt){
    function options(evt) {
       evt.preventDefault()
       document.body.removeChild(evt.target.parentNode)
-      mods.globals.menu = null
+      mods.ui.menu = null
       var div = document.createElement('div')
       make_menu(div)
       //
@@ -471,7 +477,7 @@ document.addEventListener('contextmenu',function(evt){
       //
       add_menu(div,'view files',function(evt){
          document.body.removeChild(evt.target.parentNode)
-         mods.globals.menu = null
+         mods.ui.menu = null
          var win = window.open('files.html')
          })
       document.body.appendChild(div)
@@ -480,7 +486,7 @@ document.addEventListener('contextmenu',function(evt){
       //
       add_menu(div,'view project',function(evt){
          document.body.removeChild(evt.target.parentNode)
-         mods.globals.menu = null
+         mods.ui.menu = null
          var win = window.open('https://gitlab.cba.mit.edu/pub/mods')
          })
       document.body.appendChild(div)
@@ -890,8 +896,8 @@ function mod_load_handler(event) {
       }
    args.definition = str
    args.id = String(Math.random())
-   args.top = mods.globals.top
-   args.left = mods.globals.left
+   args.top = mods.ui.top
+   args.left = mods.ui.left
    args.filename = ""
    var div = add_module(args)
    return(div)