 			# Don't remove twice
 			return unless @inViewport.listening
 			@inViewport.listening = false
+			
+			# Destroy instance, which also removes listeners
+			@inViewportObserver?.disconnect()
+			delete @inViewportObserver
 
-			# Destroy instance, which also removes listeners
-			@scrollMonitor.destroy() if @scrollMonitor
-			delete @scrollMonitor
-
-		# Handle state changes from scrollMonitor
-		updateInViewport: ->
+		# Handle state changes from scrollMonitor.  There should only ever be one
+		# entry
+		updateInViewport: ([entry]) ->
+			console.log entry
 
 			# Update state values
-			@inViewport.now   = @scrollMonitor.isInViewport
-			@inViewport.fully = @scrollMonitor.isFullyInViewport
-			@inViewport.above = @scrollMonitor.isAboveViewport
-			@inViewport.below = @scrollMonitor.isBelowViewport
+			@inViewport.now = entry.isIntersecting
+			@inViewport.fully = entry.intersectionRatio == 1
+			# @inViewport.above = @scrollMonitor.isAboveViewport
+			# @inViewport.below = @scrollMonitor.isBelowViewport
 
 			# If set to update "once", remove listeners if in viewport
 			@removeInViewportHandlers() if @inViewportOnce and @inViewport.now


		# Add listeners
		addInViewportHandlers: ->
			return
			# Don't add twice
			return if @inViewport.listening
			@inViewport.listening = true

			# Create scrollMonitor instance which starts watching scroll
			if @inViewportContainer
				@scrollMonitor = (scrollMonitor.createContainer @inViewportContainer).create @$el, @inViewportOffsetComputed
			else
				@scrollMonitor = scrollMonitor.create @$el, @inViewportOffsetComputed

			# Start listening for changes
			@scrollMonitor.on 'stateChange', @updateInViewport

			# Update intiial state, which also handles `once` prop
			@updateInViewport()

		# Remove listeners
		removeInViewportHandlers: ->

			then @addInViewportHandlers()
			else @removeInViewportHandlers()

		# If the offsets change, need to re-init the observer
		inViewportOffsetComputed:
			deep: true
			handler: ->
