diff --git a/kayak_core/src/flo_binding/binding_context.rs b/kayak_core/src/flo_binding/binding_context.rs
index d1d611ac6dbc0584caeff857a7c2f665c909d5db..ea4ee4f3540d1ccab9fbb0e03bc82c8b56246594 100644
--- a/kayak_core/src/flo_binding/binding_context.rs
+++ b/kayak_core/src/flo_binding/binding_context.rs
@@ -105,7 +105,7 @@ pub struct BindingContext {
     dependencies: BindingDependencies,
 
     /// None, or the binding context that this context was created within
-    nested: Option<Box<BindingContext>>,
+    _nested: Option<Box<BindingContext>>,
 }
 
 impl BindingContext {
@@ -139,7 +139,7 @@ impl BindingContext {
         let dependencies = BindingDependencies::new();
         let new_context = BindingContext {
             dependencies: dependencies.clone(),
-            nested: previous_context.clone().map(Box::new),
+            _nested: previous_context.clone().map(Box::new),
         };
 
         // Make the current context the same as the new context
diff --git a/kayak_render_macros/src/child.rs b/kayak_render_macros/src/child.rs
index 04f7d15f810777e618eee20b4fedf112a29495e4..f832af602ea83c18d399242b47548201d87ee6bc 100644
--- a/kayak_render_macros/src/child.rs
+++ b/kayak_render_macros/src/child.rs
@@ -1,7 +1,5 @@
-use proc_macro_error::emit_error;
 use quote::{quote, ToTokens};
 use syn::parse::{Parse, ParseStream, Result};
-use syn::spanned::Spanned;
 
 use crate::widget::Widget;
 
diff --git a/kayak_render_macros/src/function_component.rs b/kayak_render_macros/src/function_component.rs
index b94e91a84ecef639726568623db709db0b336b04..10c6a1ec3c26d349b2fa0ebceb47da0dbb44cd52 100644
--- a/kayak_render_macros/src/function_component.rs
+++ b/kayak_render_macros/src/function_component.rs
@@ -1,6 +1,6 @@
 use proc_macro::TokenStream;
-use proc_macro_error::{emit_error, emit_warning};
-use quote::{quote, ToTokens};
+use proc_macro_error::emit_error;
+use quote::quote;
 use syn::{FnArg, Pat, Type};
 use syn::spanned::Spanned;
 use crate::get_core_crate;
@@ -15,7 +15,7 @@ impl Default for WidgetArguments {
     }
 }
 
-pub fn create_function_widget(f: syn::ItemFn, widget_arguments: WidgetArguments) -> TokenStream {
+pub fn create_function_widget(f: syn::ItemFn, _widget_arguments: WidgetArguments) -> TokenStream {
     let struct_name = f.sig.ident.clone();
     let (impl_generics, ty_generics, where_clause) = f.sig.generics.split_for_impl();
 
@@ -36,25 +36,25 @@ pub fn create_function_widget(f: syn::ItemFn, widget_arguments: WidgetArguments)
                 }
                 err => {
                     emit_error!(err.span(), "Expected identifier, but got {:?}", err);
-                    return TokenStream::new()
+                    return TokenStream::new();
                 }
             };
 
             let ty = match *typed.ty.clone() {
                 Type::Path(type_path) => {
                     type_path.path
-                },
+                }
                 err => {
                     emit_error!(err.span(), "Invalid widget prop type: {:?}", err);
-                    return TokenStream::new()
+                    return TokenStream::new();
                 }
             };
 
             (ident, ty)
-        },
+        }
         FnArg::Receiver(receiver) => {
             emit_error!(receiver.span(), "Functional widget cannot use 'self'");
-            return TokenStream::new()
+            return TokenStream::new();
         }
     };
 
diff --git a/kayak_render_macros/src/widget.rs b/kayak_render_macros/src/widget.rs
index a19cd426cd5e34745c57876a71d43ad0c2126501..3be7ea0548fa58a30e4bea30302f40a44ac3d8e6 100644
--- a/kayak_render_macros/src/widget.rs
+++ b/kayak_render_macros/src/widget.rs
@@ -1,10 +1,8 @@
 use proc_macro2::TokenStream;
-use proc_macro_error::{emit_error, emit_warning};
 use quote::{format_ident, quote};
 use quote::ToTokens;
 use syn::parse::{Parse, ParseStream, Result};
 use syn::Path;
-use syn::spanned::Spanned;
 
 use crate::widget_builder::build_widget_stream;
 use crate::children::Children;
@@ -110,7 +108,7 @@ impl Widget {
         let attrs = attrs.assign_attributes(&prop_ident);
 
         let props = quote! {
-            let mut #prop_ident = <#name as kayak_core::Widget>::Props::default();
+            let mut #prop_ident = <#name as #kayak_core::Widget>::Props::default();
             #attrs
         };
 
diff --git a/kayak_render_macros/src/widget_attributes.rs b/kayak_render_macros/src/widget_attributes.rs
index 7ac896f00778ec32a5742ad75282e772fc9cfedb..45f85a676d9eb864abe260ca2c4dce4af54de45c 100644
--- a/kayak_render_macros/src/widget_attributes.rs
+++ b/kayak_render_macros/src/widget_attributes.rs
@@ -1,4 +1,4 @@
-use proc_macro_error::{emit_error, emit_warning};
+use proc_macro_error::emit_error;
 use quote::{quote, ToTokens};
 use std::collections::HashSet;
 use proc_macro2::{Ident, TokenStream};
@@ -9,7 +9,6 @@ use syn::{
 };
 
 use crate::{attribute::Attribute, children::Children, get_core_crate};
-use crate::attribute::AttributeKey;
 use crate::child::Child;
 
 #[derive(Clone)]
diff --git a/kayak_render_macros/src/widget_props.rs b/kayak_render_macros/src/widget_props.rs
index e01e2cd7db29b7504d9984c7238e66ea036d0760..7fc4084b401df9647f2548b6137f2249458c718c 100644
--- a/kayak_render_macros/src/widget_props.rs
+++ b/kayak_render_macros/src/widget_props.rs
@@ -1,10 +1,9 @@
 use proc_macro::TokenStream;
 
 use proc_macro2::{Ident};
-use proc_macro_error::{emit_error, emit_warning};
+use proc_macro_error::emit_error;
 use quote::quote;
-use syn::{AttributeArgs, Data, DeriveInput, Field, Fields, ItemStruct, Meta, NestedMeta, parse_macro_input, spanned::Spanned};
-use crate::attribute::Attribute;
+use syn::{Data, DeriveInput, Field, Meta, NestedMeta, parse_macro_input, spanned::Spanned};
 
 use crate::get_core_crate;
 
diff --git a/src/widgets/app.rs b/src/widgets/app.rs
index 03216d91029d0ae86aa0bd4c6566892c334495c8..a93b22091ae3f036d5ec61aa6b2531c8d68ad355 100644
--- a/src/widgets/app.rs
+++ b/src/widgets/app.rs
@@ -1,4 +1,4 @@
-use crate::core::derivative::*;
+
 use crate::core::{
     render_command::RenderCommand,
     OnEvent, rsx, WidgetProps,
diff --git a/src/widgets/background.rs b/src/widgets/background.rs
index be08aac9322fc36f42f6d8775d04c7b53d6029ee..b91db38d1d2509ed454abd2983f7962961104377 100644
--- a/src/widgets/background.rs
+++ b/src/widgets/background.rs
@@ -1,6 +1,5 @@
 use crate::core::{
     render_command::RenderCommand,
-    derivative::Derivative,
     OnEvent, rsx, WidgetProps,
     styles::{Style, StyleProp},
     widget, Children, Fragment,
diff --git a/src/widgets/button.rs b/src/widgets/button.rs
index 7c790d2443e52530dacf1a719fbd3fbcb34f58dc..8f9abd1bf36f3e38fdd48eb09717d582c5eeb8aa 100644
--- a/src/widgets/button.rs
+++ b/src/widgets/button.rs
@@ -1,6 +1,5 @@
 use crate::core::{
     render_command::RenderCommand,
-    derivative::Derivative,
     Color, OnEvent, rsx, WidgetProps,
     styles::{Style, StyleProp, Units},
     widget, Children, Fragment,
diff --git a/src/widgets/clip.rs b/src/widgets/clip.rs
index d710339621aa260bd70b4ae1e517a48751ecdf57..f70e4cd2050706481eebe01586b0de0700da1ed6 100644
--- a/src/widgets/clip.rs
+++ b/src/widgets/clip.rs
@@ -1,9 +1,8 @@
 use crate::core::{
     render_command::RenderCommand,
-    derivative::Derivative,
     OnEvent, rsx, WidgetProps,
     styles::{Style, StyleProp, Units},
-    widget, Children, Fragment,
+    widget, Children,
 };
 
 #[derive(WidgetProps, Default, Debug, PartialEq, Clone)]
diff --git a/src/widgets/element.rs b/src/widgets/element.rs
index 6d0a4cab2c36cbb00d980f47775cba68e806868d..e671e6bd2c63e08923ca3bb07570c790d287981b 100644
--- a/src/widgets/element.rs
+++ b/src/widgets/element.rs
@@ -1,9 +1,8 @@
 use crate::core::{
     render_command::RenderCommand,
-    derivative::Derivative,
     OnEvent, rsx, WidgetProps,
     styles::{Style, StyleProp},
-    widget, Children, Fragment,
+    widget, Children,
 };
 
 #[derive(WidgetProps, Default, Debug, PartialEq, Clone)]
diff --git a/src/widgets/fold.rs b/src/widgets/fold.rs
index c9a2b4010c5fe9ecc136dc1733e16b8fa67cd828..a88f6762926bda7fc0e2cb5965f0e181ad2ff047 100644
--- a/src/widgets/fold.rs
+++ b/src/widgets/fold.rs
@@ -1,6 +1,5 @@
 use crate::core::{
     render_command::RenderCommand,
-    derivative::Derivative,
     OnEvent, rsx, WidgetProps,
     styles::{Style, StyleProp, Units},
     use_state, widget, Children, EventType, Handler,
diff --git a/src/widgets/if_element.rs b/src/widgets/if_element.rs
index 3fdb090d4f3a9a2491527af70ded45a6a9728a46..807a22983a88185dd911724df18c4fc6946935e8 100644
--- a/src/widgets/if_element.rs
+++ b/src/widgets/if_element.rs
@@ -1,9 +1,7 @@
 use crate::core::{
-    render_command::RenderCommand,
-    derivative::Derivative,
     OnEvent, rsx, WidgetProps,
-    styles::{Style, StyleProp},
-    widget, Children, Fragment,
+    styles::{Style},
+    widget, Children,
 };
 
 #[derive(WidgetProps, Default, Debug, PartialEq, Clone)]
diff --git a/src/widgets/image.rs b/src/widgets/image.rs
index 79d421c246c798b21cf2b637e04beb7e31489fd8..f73dc232acfbbfd44d41c6343c78c85dc8a75159 100644
--- a/src/widgets/image.rs
+++ b/src/widgets/image.rs
@@ -1,9 +1,8 @@
 use crate::core::{
     render_command::RenderCommand,
-    derivative::Derivative,
     OnEvent, rsx, WidgetProps,
     styles::{Style, StyleProp},
-    widget, Children, Fragment,
+    widget, Children,
 };
 
 #[derive(WidgetProps, Default, Debug, PartialEq, Clone)]
diff --git a/src/widgets/inspector.rs b/src/widgets/inspector.rs
index 2b5cb7f4cb4b2cad46c417296978d169a4b66af4..d77251ae1a2303f507e96ac6873e3516240c8d70 100644
--- a/src/widgets/inspector.rs
+++ b/src/widgets/inspector.rs
@@ -2,7 +2,7 @@ use kayak_core::styles::{PositionType, Style, StyleProp, Units};
 use kayak_core::{Bound, Color, EventType, OnEvent, VecTracker};
 use kayak_render_macros::{constructor, use_state};
 
-use crate::core::derivative::*;
+
 use crate::core::{rsx, widget, WidgetProps, MutableBound};
 
 use crate::widgets::{Background, Button, Text};
diff --git a/src/widgets/nine_patch.rs b/src/widgets/nine_patch.rs
index 830c61eb1f97e588073fa47ce4cfc60ec7d41bce..48627e0441c093064376ac8b5add5a36bd88fe54 100644
--- a/src/widgets/nine_patch.rs
+++ b/src/widgets/nine_patch.rs
@@ -1,10 +1,9 @@
 use crate::core::{
     render_command::RenderCommand,
     layout_cache::Space,
-    derivative::Derivative,
     OnEvent, rsx, WidgetProps,
     styles::{Style, StyleProp},
-    widget, Children, Fragment,
+    widget, Children,
 };
 
 #[derive(WidgetProps, Default, Debug, PartialEq, Clone)]
diff --git a/src/widgets/text.rs b/src/widgets/text.rs
index b1845c581b4e4f30a81428bf97209582b846f64a..5b6562d4ef05adf965b6ef655270910d65526f83 100644
--- a/src/widgets/text.rs
+++ b/src/widgets/text.rs
@@ -3,10 +3,9 @@ use kayak_font::{CoordinateSystem, KayakFont};
 
 use crate::core::{
     render_command::RenderCommand,
-    derivative::Derivative,
-    OnEvent, rsx, WidgetProps,
+    OnEvent, WidgetProps,
     styles::{Style, StyleProp},
-    widget, Children, Fragment,
+    widget,
 };
 
 #[derive(WidgetProps, Default, Debug, PartialEq, Clone)]
diff --git a/src/widgets/text_box.rs b/src/widgets/text_box.rs
index 14aa3e36d706c34b485cbd473f913ca8e92deb75..360b7bf4334460e894fb74769d68247fe8af8ad1 100644
--- a/src/widgets/text_box.rs
+++ b/src/widgets/text_box.rs
@@ -1,6 +1,5 @@
 use crate::core::{
     render_command::RenderCommand,
-    derivative::Derivative,
     Children, rsx, WidgetProps,
     styles::{Style, StyleProp, Units},
     widget, Bound, Color, EventType, MutableBound, OnEvent,
diff --git a/src/widgets/tooltip.rs b/src/widgets/tooltip.rs
index ccdff94419081a710dcc99f87b80b8a324fe2d1f..e80dc93390c165a8390e152cd40212f27f314a3c 100644
--- a/src/widgets/tooltip.rs
+++ b/src/widgets/tooltip.rs
@@ -1,6 +1,5 @@
 use crate::core::{
     render_command::RenderCommand,
-    derivative::Derivative,
     rsx, WidgetProps,
     styles::{PositionType, Style, StyleProp, Units},
     widget, Bound, Children, Color, EventType, MutableBound, OnEvent,
diff --git a/src/widgets/window.rs b/src/widgets/window.rs
index c6366e894a4cf8b10b48965531237d292478743b..08b3beca41c371fb026f833759e421882ec32e93 100644
--- a/src/widgets/window.rs
+++ b/src/widgets/window.rs
@@ -1,7 +1,6 @@
 use crate::core::{
     color::Color,
     render_command::RenderCommand,
-    derivative::Derivative,
     rsx, WidgetProps,
     styles::{PositionType, Style, StyleProp, Units},
     use_state, widget, Children, EventType, OnEvent,