diff --git a/lib/form/form.js b/lib/form/form.js
index 1c6dacc4cc0..2118e97420f 100644
--- a/lib/form/form.js
+++ b/lib/form/form.js
@@ -13,6 +13,7 @@ if (typeof M.form.dependencyManager === 'undefined') {
     Y.extend(dependencyManager, Y.Base, {
         _locks: null,
         _hides: null,
+        _shows: null,
         _dirty: null,
         _nameCollections: null,
         _fileinputs: null,
@@ -21,6 +22,7 @@ if (typeof M.form.dependencyManager === 'undefined') {
             // Setup initial values for complex properties.
             this._locks = {};
             this._hides = {};
+            this._shows = {};
             this._dirty = {};
 
             // Setup event handlers.
@@ -137,7 +139,8 @@ if (typeof M.form.dependencyManager === 'undefined') {
             var dependencies = this.get('dependencies'),
                 tohide = {},
                 tolock = {},
-                condition, value, isHide, lock, hide,
+                toshow = {},
+                condition, value, isHide, lock, hide, show,
                 checkfunction, result, elements;
             if (!({}).hasOwnProperty.call(dependencies, dependon)) {
                 return true;
@@ -148,12 +151,13 @@ if (typeof M.form.dependencyManager === 'undefined') {
                     for (isHide in dependencies[dependon][condition][value]) {
                         checkfunction = '_dependency' + condition[0].toUpperCase() + condition.slice(1);
                         if (Y.Lang.isFunction(this[checkfunction])) {
-                            result = this[checkfunction].apply(this, [elements, value, (isHide === "1"), e]);
+                            result = this[checkfunction].apply(this, [elements, value, isHide, e]);
                         } else {
-                            result = this._dependencyDefault(elements, value, (isHide === "1"), e);
+                            result = this._dependencyDefault(elements, value, isHide, e);
                         }
                         lock = result.lock || false;
                         hide = result.hide || false;
+                        show = result.show || false;
                         for (var ei in dependencies[dependon][condition][value][isHide]) {
                             var eltolock = dependencies[dependon][condition][value][isHide][ei];
                             if (({}).hasOwnProperty.call(tohide, eltolock)) {
@@ -162,6 +166,12 @@ if (typeof M.form.dependencyManager === 'undefined') {
                                 tohide[eltolock] = hide;
                             }
 
+                            if (({}).hasOwnProperty.call(toshow, eltolock)) {
+                                toshow[eltolock] = toshow[eltolock] || show;
+                            } else {
+                                toshow[eltolock] = show;
+                            }
+
                             if (({}).hasOwnProperty.call(tolock, eltolock)) {
                                 tolock[eltolock] = tolock[eltolock] || lock;
                             } else {
@@ -200,6 +210,19 @@ if (typeof M.form.dependencyManager === 'undefined') {
                     needsupdate = true;
                 }
 
+                if (!({}).hasOwnProperty.call(this._shows, el)) {
+                    this._shows[el] = {};
+                }
+                if (({}).hasOwnProperty.call(toshow, el) && toshow[el]) {
+                    if (!({}).hasOwnProperty.call(this._shows[el], dependon) || this._shows[el][dependon]) {
+                        this._shows[el][dependon] = true;
+                        needsupdate = true;
+                    }
+                } else if (({}).hasOwnProperty.call(this._shows[el], dependon) && this._shows[el][dependon]) {
+                    delete this._shows[el][dependon];
+                    needsupdate = true;
+                }
+
                 if (needsupdate) {
                     this._dirty[el] = true;
                 }
@@ -239,6 +262,12 @@ if (typeof M.form.dependencyManager === 'undefined') {
                 if (({}).hasOwnProperty.call(this._hides, el)) {
                     this._hideElement(el, !Y.Object.isEmpty(this._hides[el]));
                 }
+
+                // This will hide the element as long as everything in _shows[el] is false.
+                // If even one item is true, it will not hide the element.
+                if (({}).hasOwnProperty.call(this._shows, el)) {
+                    this._hideElement(el, Y.Object.isEmpty(this._shows[el]));
+                }
             }
 
             this._dirty = {};
@@ -367,7 +396,8 @@ if (typeof M.form.dependencyManager === 'undefined') {
             });
             return {
                 lock: lock,
-                hide: isHide ? lock : false
+                hide: isHide == 1 ? lock : false,
+                show: isHide == 2 ? lock : false
             };
         },
         _dependencyChecked: function(elements, value, isHide) {
@@ -385,7 +415,8 @@ if (typeof M.form.dependencyManager === 'undefined') {
             });
             return {
                 lock: lock,
-                hide: isHide ? lock : false
+                hide: isHide == 1 ? lock : false,
+                show: isHide == 2 ? lock : false
             };
         },
         _dependencyNoitemselected: function(elements, value, isHide) {
@@ -395,7 +426,8 @@ if (typeof M.form.dependencyManager === 'undefined') {
             });
             return {
                 lock: lock,
-                hide: isHide ? lock : false
+                hide: isHide == 1 ? lock : false,
+                show: isHide == 2 ? lock : false
             };
         },
         _dependencyEq: function(elements, value, isHide) {
@@ -452,7 +484,8 @@ if (typeof M.form.dependencyManager === 'undefined') {
             });
             return {
                 lock: lock,
-                hide: isHide ? lock : false
+                hide: isHide == 1 ? lock : false,
+                show: isHide == 2 ? lock : false
             };
         },
         /**
@@ -519,13 +552,15 @@ if (typeof M.form.dependencyManager === 'undefined') {
             });
             return {
                 lock: lock,
-                hide: isHide ? lock : false
+                hide: isHide == 1 ? lock : false,
+                show: isHide == 2 ? lock : false
             };
         },
         _dependencyHide: function(elements, value) {
             return {
                 lock: false,
-                hide: true
+                hide: true,
+                show: false
             };
         },
         _dependencyDefault: function(elements, value, isHide) {
@@ -582,7 +617,8 @@ if (typeof M.form.dependencyManager === 'undefined') {
             });
             return {
                 lock: lock,
-                hide: isHide ? lock : false
+                hide: isHide == 1 ? lock : false,
+                show: isHide == 2 ? lock : false
             };
         }
     }, {
diff --git a/lib/formslib.php b/lib/formslib.php
index 5c9667dfbd0..47520b08932 100644
--- a/lib/formslib.php
+++ b/lib/formslib.php
@@ -1640,6 +1640,11 @@ class MoodleQuickForm extends HTML_QuickForm_DHTMLRulesTableless {
      */
     protected $_hideifs = array();
 
+    /**
+     * @var array elements that will become shown based on another element
+     */
+    protected $_showifs = array();
+
     /** @var array Array of buttons that if pressed do not result in the processing of the form. */
     var $_noSubmitButtons=array();
 
@@ -1725,6 +1730,11 @@ class MoodleQuickForm extends HTML_QuickForm_DHTMLRulesTableless {
      */
     const DEP_HIDE = 1;
 
+    /**
+     * Is this a 'showIf' dependency?
+     */
+    const DEP_SHOW = 2;
+
     /** @var string request class HTML. */
     protected $_reqHTML;
 
@@ -2894,6 +2904,32 @@ require([
                 }
             }
         }
+        foreach ($this->_showifs as $dependenton => $conditions) {
+            if (!isset($result[$dependenton])) {
+                $result[$dependenton] = array();
+            }
+            foreach ($conditions as $condition => $values) {
+                if (!isset($result[$dependenton][$condition])) {
+                    $result[$dependenton][$condition] = array();
+                }
+                foreach ($values as $value => $dependents) {
+                    $result[$dependenton][$condition][$value][self::DEP_SHOW] = array();
+                    foreach ($dependents as $dependent) {
+                        $elements = $this->_getElNamesRecursive($dependent);
+                        if (!in_array($dependent, $elements)) {
+                            // Always want to hide the main element, even if it contains sub-elements as well.
+                            $elements[] = $dependent;
+                        }
+                        foreach ($elements as $element) {
+                            if ($element == $dependenton) {
+                                continue;
+                            }
+                            $result[$dependenton][$condition][$value][self::DEP_SHOW][] = $element;
+                        }
+                    }
+                }
+            }
+        }
         return array($this->getAttribute('id'), $result);
     }
 
@@ -3017,6 +3053,34 @@ require([
         $this->_hideifs[$dependenton][$condition][$value][] = $elementname;
     }
 
+    /**
+     * Adds a dependency for $elementName which will be shown if $condition is met.
+     *
+     * This is effectively the opposite to hideIf()
+     *
+     * @param string $elementname the name of the element which will be shown
+     * @param string $dependenton the name of the element whose state will be checked for condition
+     * @param string $condition the condition to check
+     * @param mixed $value used in conjunction with condition.
+     */
+    public function showIf($elementname, $dependenton, $condition = 'notchecked', $value = '1') {
+        // Multiple selects allow for a multiple selection, we transform the array to string here as
+        // an array cannot be used as a key in an associative array.
+        if (is_array($value)) {
+            $value = implode('|', $value);
+        }
+        if (!array_key_exists($dependenton, $this->_showifs)) {
+            $this->_showifs[$dependenton] = array();
+        }
+        if (!array_key_exists($condition, $this->_showifs[$dependenton])) {
+            $this->_showifs[$dependenton][$condition] = array();
+        }
+        if (!array_key_exists($value, $this->_showifs[$dependenton][$condition])) {
+            $this->_showifs[$dependenton][$condition][$value] = array();
+        }
+        $this->_showifs[$dependenton][$condition][$value][] = $elementname;
+    }
+
     /**
      * Registers button as no submit button
      *
diff --git a/mod/url/mod_form.php b/mod/url/mod_form.php
index 099b8978231..c15c733fc85 100644
--- a/mod/url/mod_form.php
+++ b/mod/url/mod_form.php
@@ -37,96 +37,21 @@ class mod_url_mod_form extends moodleform_mod {
 
         //-------------------------------------------------------
         $mform->addElement('header', 'general', get_string('general', 'form'));
-        $mform->addElement('text', 'name', get_string('name'), array('size'=>'48'));
-        $mform->addHelpButton('name', 'name', 'url');
-        if (!empty($CFG->formatstringstriptags)) {
-            $mform->setType('name', PARAM_TEXT);
-        } else {
-            $mform->setType('name', PARAM_CLEANHTML);
-        }
-        $mform->addRule('name', null, 'required', null, 'client');
-        $mform->addRule('name', get_string('maximumchars', '', 255), 'maxlength', 255, 'client');
-        $mform->addElement('url', 'externalurl', get_string('externalurl', 'url'), array('size'=>'60'), array('usefilepicker'=>true));
-        $mform->setType('externalurl', PARAM_RAW_TRIMMED);
-        $mform->addRule('externalurl', null, 'required', null, 'client');
-        $this->standard_intro_elements();
-        $element = $mform->getElement('introeditor');
-        $attributes = $element->getAttributes();
-        $attributes['rows'] = 5;
-        $element->setAttributes($attributes);
-        //-------------------------------------------------------
-        $mform->addElement('header', 'optionssection', get_string('appearance'));
 
-        if ($this->current->instance) {
-            $options = resourcelib_get_displayoptions(explode(',', $config->displayoptions), $this->current->display);
-        } else {
-            $options = resourcelib_get_displayoptions(explode(',', $config->displayoptions));
-        }
-        if (count($options) == 1) {
-            $mform->addElement('hidden', 'display');
-            $mform->setType('display', PARAM_INT);
-            reset($options);
-            $mform->setDefault('display', key($options));
-        } else {
-            $mform->addElement('select', 'display', get_string('displayselect', 'url'), $options);
-            $mform->setDefault('display', $config->display);
-            $mform->addHelpButton('display', 'displayselect', 'url');
-        }
+        $mform->addElement('text', 'testing_a', 'Testing A', ['size' => 10]);
+        $mform->setType('testing_a', PARAM_TEXT);
+        $mform->addElement('text', 'testing_b', 'Testing B', ['size' => 10]);
+        $mform->setType('testing_b', PARAM_TEXT);
+        $mform->addElement('checkbox', 'element_to_show', 'This is a test and will hide if Testing A = 1, and Testing B = 2');
 
-        if (array_key_exists(RESOURCELIB_DISPLAY_POPUP, $options)) {
-            $mform->addElement('text', 'popupwidth', get_string('popupwidth', 'url'), array('size'=>3));
-            if (count($options) > 1) {
-                $mform->hideIf('popupwidth', 'display', 'noteq', RESOURCELIB_DISPLAY_POPUP);
-            }
-            $mform->setType('popupwidth', PARAM_INT);
-            $mform->setDefault('popupwidth', $config->popupwidth);
+        /**
+         * This will show the checkbox if Testing A is not 1, OR if Testing B is not 2.
+         * This has the effect of hiding the checkbox if Testing A = 1 AND Testing B = 2.
+         */
+        $mform->showIf('element_to_show', 'testing_a', 'neq', 1);
+        $mform->showIf('element_to_show', 'testing_b', 'neq', 2);
 
-            $mform->addElement('text', 'popupheight', get_string('popupheight', 'url'), array('size'=>3));
-            if (count($options) > 1) {
-                $mform->hideIf('popupheight', 'display', 'noteq', RESOURCELIB_DISPLAY_POPUP);
-            }
-            $mform->setType('popupheight', PARAM_INT);
-            $mform->setDefault('popupheight', $config->popupheight);
-        }
-
-        if (array_key_exists(RESOURCELIB_DISPLAY_AUTO, $options) or
-          array_key_exists(RESOURCELIB_DISPLAY_EMBED, $options) or
-          array_key_exists(RESOURCELIB_DISPLAY_FRAME, $options)) {
-            $mform->addElement('checkbox', 'printintro', get_string('printintro', 'url'));
-            $mform->hideIf('printintro', 'display', 'eq', RESOURCELIB_DISPLAY_POPUP);
-            $mform->hideIf('printintro', 'display', 'eq', RESOURCELIB_DISPLAY_OPEN);
-            $mform->hideIf('printintro', 'display', 'eq', RESOURCELIB_DISPLAY_NEW);
-            $mform->setDefault('printintro', $config->printintro);
-        }
-
-        //-------------------------------------------------------
-        $mform->addElement('header', 'parameterssection', get_string('parametersheader', 'url'));
-        $mform->addElement('static', 'parametersinfo', '', get_string('parametersheader_help', 'url'));
-
-        if (empty($this->current->parameters)) {
-            $parcount = 5;
-        } else {
-            $parcount = 5 + count((array) unserialize_array($this->current->parameters));
-            $parcount = ($parcount > 100) ? 100 : $parcount;
-        }
-        $options = url_get_variable_options($config);
-
-        for ($i=0; $i < $parcount; $i++) {
-            $parameter = "parameter_$i";
-            $variable  = "variable_$i";
-            $pargroup = "pargoup_$i";
-            $group = array(
-                $mform->createElement('text', $parameter, '', array('size'=>'12')),
-                $mform->createElement('selectgroups', $variable, '', $options),
-            );
-            $mform->addGroup($group, $pargroup, get_string('parameterinfo', 'url'), ' ', false);
-            $mform->setType($parameter, PARAM_RAW);
-        }
-
-        //-------------------------------------------------------
         $this->standard_coursemodule_elements();
-
-        //-------------------------------------------------------
         $this->add_action_buttons();
     }
 
