diff --git a/gi-gtk-declarative.cabal b/gi-gtk-declarative.cabal
--- a/gi-gtk-declarative.cabal
+++ b/gi-gtk-declarative.cabal
@@ -1,5 +1,5 @@
 name:                 gi-gtk-declarative
-version:              0.4.0
+version:              0.4.1
 synopsis:             Declarative GTK+ programming in Haskell
 description:          A declarative programming model for GTK+ user
                       interfaces, implementing support for various widgets
diff --git a/src/GI/Gtk/Declarative/Bin.hs b/src/GI/Gtk/Declarative/Bin.hs
--- a/src/GI/Gtk/Declarative/Bin.hs
+++ b/src/GI/Gtk/Declarative/Bin.hs
@@ -1,21 +1,19 @@
 {-# OPTIONS_GHC -fno-warn-unticked-promoted-constructors #-}
-{-# LANGUAGE DataKinds              #-}
-{-# LANGUAGE FlexibleContexts       #-}
-{-# LANGUAGE FlexibleInstances      #-}
-{-# LANGUAGE FunctionalDependencies #-}
-{-# LANGUAGE GADTs                  #-}
-{-# LANGUAGE MultiParamTypeClasses  #-}
-{-# LANGUAGE OverloadedLabels       #-}
-{-# LANGUAGE ScopedTypeVariables    #-}
-{-# LANGUAGE TypeApplications       #-}
-{-# LANGUAGE TypeFamilies           #-}
-{-# LANGUAGE TypeOperators          #-}
+{-# LANGUAGE DataKinds             #-}
+{-# LANGUAGE FlexibleContexts      #-}
+{-# LANGUAGE FlexibleInstances     #-}
+{-# LANGUAGE GADTs                 #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE OverloadedLabels      #-}
+{-# LANGUAGE ScopedTypeVariables   #-}
+{-# LANGUAGE TypeApplications      #-}
+{-# LANGUAGE TypeFamilies          #-}
+{-# LANGUAGE TypeOperators         #-}
 
 -- | A declarative representation of 'Gtk.Bin' in GTK.
 module GI.Gtk.Declarative.Bin
   ( Bin(..)
   , bin
-  , BinChild
   )
 where
 
@@ -32,50 +30,37 @@
 import           GI.Gtk.Declarative.Widget
 
 
--- | Supported 'Gtk.Bin's.
-class BinChild bin (child :: * -> *) | bin -> child
-
-instance BinChild Gtk.ScrolledWindow Widget where
-instance BinChild Gtk.ListBoxRow Widget where
-instance BinChild Gtk.Window Widget where
-instance BinChild Gtk.ApplicationWindow Widget where
-instance BinChild Gtk.Dialog Widget where
-instance BinChild Gtk.MenuItem Widget where
-
 -- | Declarative version of a /bin/ widget, i.e. a widget with exactly one
 -- child.
-data Bin widget child event where
+data Bin widget event where
   Bin
     :: ( Typeable widget
        , Gtk.IsContainer widget
        , Gtk.IsBin widget
        , Gtk.IsWidget widget
-       , Functor child
        )
     => (Gtk.ManagedPtr widget -> widget)
     -> Vector (Attribute widget event)
-    -> child event
-    -> Bin widget child event
+    -> Widget event
+    -> Bin widget event
 
-instance Functor (Bin widget child) where
+instance Functor (Bin widget) where
   fmap f (Bin ctor attrs child) =
     Bin ctor (fmap f <$> attrs) (fmap f child)
 
 -- | Construct a /bin/ widget, i.e. a widget with exactly one child.
 bin
-  :: ( Patchable (Bin widget child)
+  :: ( Patchable (Bin widget)
      , Typeable widget
-     , Typeable child
      , Typeable event
-     , Functor child
      , Gtk.IsContainer widget
      , Gtk.IsBin widget
      , Gtk.IsWidget widget
-     , FromWidget (Bin widget child) target
+     , FromWidget (Bin widget) target
      )
   => (Gtk.ManagedPtr widget -> widget) -- ^ A bin widget constructor from the underlying gi-gtk library.
   -> Vector (Attribute widget event)   -- ^ List of 'Attribute's.
-  -> child event                       -- ^ The bin's child widget, whose type is decided by the 'BinChild' instance.
+  -> Widget event                       -- ^ The bin's child widget
   -> target event                      -- ^ The target, whose type is decided by 'FromWidget'.
 bin ctor attrs = fromWidget . Bin ctor attrs
 
@@ -83,7 +68,7 @@
 -- Patchable
 --
 
-instance (BinChild parent child, Patchable child) => Patchable (Bin parent child) where
+instance Gtk.IsBin parent => Patchable (Bin parent) where
   create (Bin ctor attrs child) = do
     let collected = collectAttributes attrs
     widget' <- Gtk.new ctor (constructProperties collected)
@@ -128,8 +113,7 @@
 -- EventSource
 --
 
-instance (BinChild parent child, EventSource child) =>
-         EventSource (Bin parent child) where
+instance Gtk.IsBin parent => EventSource (Bin parent) where
   subscribe (Bin ctor props child) (SomeState st) cb =
     case st of
       StateTreeBin top childState -> do
@@ -138,9 +122,5 @@
         (<> handlers') <$> subscribe child childState cb
       _ -> error "Cannot subscribe to Bin events with a non-bin state tree."
 
-instance (a ~ b, c ~ d) => FromWidget (Bin a c) (Bin b d) where
+instance a ~ b => FromWidget (Bin a) (Bin b) where
   fromWidget = id
-
-instance (BinChild widget child, Patchable child, EventSource child)
-         => FromWidget (Bin widget child) Widget where
-  fromWidget = Widget
diff --git a/src/GI/Gtk/Declarative/Container/ListBox.hs b/src/GI/Gtk/Declarative/Container/ListBox.hs
--- a/src/GI/Gtk/Declarative/Container/ListBox.hs
+++ b/src/GI/Gtk/Declarative/Container/ListBox.hs
@@ -10,6 +10,5 @@
 
 import           GI.Gtk.Declarative.Bin
 import           GI.Gtk.Declarative.Container.Class
-import           GI.Gtk.Declarative.Widget
 
-instance ToChildren Gtk.ListBox Vector (Bin Gtk.ListBoxRow Widget)
+instance ToChildren Gtk.ListBox Vector (Bin Gtk.ListBoxRow)
diff --git a/src/GI/Gtk/Declarative/Container/MenuItem.hs b/src/GI/Gtk/Declarative/Container/MenuItem.hs
--- a/src/GI/Gtk/Declarative/Container/MenuItem.hs
+++ b/src/GI/Gtk/Declarative/Container/MenuItem.hs
@@ -36,8 +36,8 @@
 data MenuItem event where
   -- | A single menu item in a 'Gtk.Menu'.
   MenuItem
-    :: (Gtk.IsMenuItem item, BinChild item Widget, Typeable item)
-    => Bin item Widget event
+    :: (Gtk.IsMenuItem item, Gtk.IsBin item, Typeable item)
+    => Bin item event
     -> MenuItem event
   -- | A sub menu in a 'Gtk.Menu', with a text label and the list of
   -- child menu items.
@@ -56,7 +56,6 @@
 menuItem
   :: ( Gtk.IsMenuItem item
      , Typeable event
-     , BinChild item Widget
      , Typeable item
      , Gtk.IsContainer item
      , Gtk.IsBin item
@@ -98,7 +97,7 @@
     \case
       MenuItem item -> create item
       SubMenu label subMenu' -> newSubMenuItem label (create subMenu')
-  patch state (MenuItem (c1 :: Bin i1 Widget e1)) (MenuItem (c2 :: Bin i2 Widget e2)) =
+  patch state (MenuItem (c1 :: Bin i1 e1)) (MenuItem (c2 :: Bin i2 e2)) =
     case eqT @i1 @i2 of
       Just Refl -> patch state c1 c2
       Nothing   -> Replace (create c2)
diff --git a/src/GI/Gtk/Declarative/Container/Patch.hs b/src/GI/Gtk/Declarative/Container/Patch.hs
--- a/src/GI/Gtk/Declarative/Container/Patch.hs
+++ b/src/GI/Gtk/Declarative/Container/Patch.hs
@@ -31,7 +31,6 @@
 import           GI.Gtk.Declarative.Container.Class
 import           GI.Gtk.Declarative.Patch
 import           GI.Gtk.Declarative.State
-import           GI.Gtk.Declarative.Widget
 
 -- | Patch all children in a container. This does not feature any ID checking,
 -- as seen in React, so reordering children in a container can produce many
@@ -116,7 +115,7 @@
 padMaybes :: Int -> Vector a -> Vector (Maybe a)
 padMaybes len xs = Vector.generate len (xs !?)
 
-instance IsContainer Gtk.ListBox (Bin Gtk.ListBoxRow Widget) where
+instance IsContainer Gtk.ListBox (Bin Gtk.ListBoxRow) where
   appendChild box _ widget' =
     Gtk.listBoxInsert box widget' (-1)
   replaceChild box _ i old new = do
