diff --git a/README.md b/README.md
index c60e6a48c8e30764868b1ceb45e532e23f040ec5..d8960b1859f5786bad5a126df36943a4a8831f70 100644
--- a/README.md
+++ b/README.md
@@ -592,6 +592,9 @@ Reveal.isLastSlide();
 Reveal.isOverview();
 Reveal.isPaused();
 Reveal.isAutoSliding();
+
+// Returns the top-level DOM element
+getRevealElement(); // <div class="reveal">...</div>
 ```
 
 ### Custom Key Bindings
diff --git a/js/reveal.js b/js/reveal.js
index f6f79031372b571da9edf1f0980cc78ae9730ef6..637ea63a56b5f40980c09f3656b278e69b6d8397 100644
--- a/js/reveal.js
+++ b/js/reveal.js
@@ -5683,6 +5683,11 @@
 			return query;
 		},
 
+		// Returns the top-level DOM element
+		getRevealElement: function() {
+			return dom.wrapper || document.querySelector( '.reveal' );
+		},
+
 		// Returns true if we're currently on the first slide
 		isFirstSlide: function() {
 			return ( indexh === 0 && indexv === 0 );
@@ -5724,12 +5729,12 @@
 		// Forward event binding to the reveal DOM element
 		addEventListener: function( type, listener, useCapture ) {
 			if( 'addEventListener' in window ) {
-				( dom.wrapper || document.querySelector( '.reveal' ) ).addEventListener( type, listener, useCapture );
+				Reveal.getRevealElement().addEventListener( type, listener, useCapture );
 			}
 		},
 		removeEventListener: function( type, listener, useCapture ) {
 			if( 'addEventListener' in window ) {
-				( dom.wrapper || document.querySelector( '.reveal' ) ).removeEventListener( type, listener, useCapture );
+				Reveal.getRevealElement().removeEventListener( type, listener, useCapture );
 			}
 		},