diff --git a/src/popover.rs b/src/popover.rs
index ce1543baad330d098a257be5c821469b56cb6457..8330a92021d788a2b1590baad7b97a2045c1ade9 100644
--- a/src/popover.rs
+++ b/src/popover.rs
@@ -29,6 +29,7 @@ mod variants {
 
     use glib::ToVariant;
     use glib::translate::FromGlibPtrFull;
+    use glib::translate::FromGlibPtrNone;
     use glib::translate::ToGlibPtr;
 
     /// Unpacks tuple & array variants
@@ -91,12 +92,7 @@ mod variants {
             unsafe {
                 let ret = glib_sys::g_variant_builder_end(builder);
                 glib_sys::g_variant_builder_unref(builder);
-                // HACK: This is to prevent C taking ownership
-                // of "floating" Variants,
-                // where Rust gets to keep a stale reference
-                // and crash when trying to drop it.
-                glib_sys::g_variant_ref_sink(ret);
-                glib::Variant::from_glib_full(ret)
+                glib::Variant::from_glib_none(ret)
             }
         }
     }