diff --git a/index.html b/index.html
index 89bc9f8..16efb34 100644
--- a/index.html
+++ b/index.html
@@ -270,7 +270,6 @@
     crossorigin="anonymous"></script>
   <!-- Script: Smooth scrolling between anchors in the same page -->
   <script src="js/smooth-scroll.js"></script>
-  <script src="js/conditionize.js"></script>
 
 </body>
 
diff --git a/js/conditionize.js b/js/conditionize.js
deleted file mode 100644
index a9075fc..0000000
--- a/js/conditionize.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/* * * * * * * * * * * * * * * * * *
-* Show/hide fields conditionally
-* * * * * * * * * * * * * * * * * */
-(function($) {
-  $.fn.conditionize = function(options){ 
-    
-     var settings = $.extend({
-        hideJS: true
-    }, options );
-    
-    $.fn.showOrHide = function(listenTo, listenFor, $section) {
-      if ($(listenTo).is('select, input[type=text]') && $(listenTo).val() == listenFor ) {
-        $section.slideDown();
-      }
-      else if ($(listenTo + ":checked").val() == listenFor) {
-        $section.slideDown();
-      }
-      else {
-        $section.slideUp();
-      }
-    } 
-
-    return this.each( function() {
-      var listenTo = "[name=" + $(this).data('cond-option') + "]";
-      var listenFor = $(this).data('cond-value');
-      var $section = $(this);
-  
-      //Set up event listener
-      $(listenTo).on('change', function() {
-        $.fn.showOrHide(listenTo, listenFor, $section);
-      });
-      //If setting was chosen, hide everything first...
-      if (settings.hideJS) {
-        $(this).hide();
-      }
-      //Show based on current value on page load
-      $.fn.showOrHide(listenTo, listenFor, $section);
-    });
-  }
-}(jQuery));
-  
- $('.conditional').conditionize();
\ No newline at end of file
