diff --git a/Control/Arrow/Needle/Parse.hs b/Control/Arrow/Needle/Parse.hs
--- a/Control/Arrow/Needle/Parse.hs
+++ b/Control/Arrow/Needle/Parse.hs
@@ -42,7 +42,7 @@
 -- | The datatype representing a generic needle arrow.
 
 data NeedleArrow = Input Int Int
-                 | Through NeedleArrow T.Text
+                 | Through (Maybe NeedleArrow) T.Text
                  | Join [NeedleArrow]
     deriving (Show, Read, Eq)
 
@@ -137,7 +137,7 @@
                         e <- lDownGet n
                         return $ mfilter (== (Switch Up)) e
                     left <- tryPath leftGet
-                    let paths = rights $ left : ups ++ downs
+                    let paths = rights $ ups ++ [left] ++ downs
                         mJoint = arrowJoin paths
                     case mJoint of
                         Nothing -> do
@@ -168,13 +168,9 @@
                     down <- tryPath $ do
                         e <- lDownGet 0
                         return $ mfilter (== (Switch Up)) e
-                    let paths = rights $ [left,up,down]
+                    let paths = rights $ [up,left,down]
                         mJoint = arrowJoin paths
-                    case mJoint of
-                        Nothing -> do
-                            (n, _) <- G.getPosition
-                            err $ "External arrow '" ++ T.unpack t ++ "' on line " ++ show (n + 1) ++ " has no arrow going into it"
-                        Just joint -> success $ Through joint t
+                    success $ Through mJoint t
                 Switch d -> do
                     left <- tryPath leftGet
                     continuing <- tryPath $ do
@@ -182,7 +178,9 @@
                             Down -> lUpGet 0
                             Up -> lDownGet 0
                         return $ mfilter (== h) e
-                    let paths = rights $ [left, continuing]
+                    let paths = rights $ case d of
+                            Down -> [continuing, left]
+                            Up -> [left, continuing]
                         mJoint = arrowJoin paths
                     case mJoint of
                         Nothing -> do
diff --git a/Control/Arrow/Needle/TH.hs b/Control/Arrow/Needle/TH.hs
--- a/Control/Arrow/Needle/TH.hs
+++ b/Control/Arrow/Needle/TH.hs
@@ -20,6 +20,8 @@
 import Control.Arrow.Needle.Parse
 import Control.Arrow
 
+import Data.Maybe
+
 import Control.Applicative
 
 import Language.Haskell.TH
@@ -81,9 +83,13 @@
             $ AppE (VarE $ mkName "arr") 
             $ LamE [TupP $ Pre.map VarP iNames] (VarE (iName i))
 
-        f (Through a t) = do
+        f (Through ma t) = do
             let ea = either error id $ parseExp . T.unpack $ t
-            b <- f a
+            b <- case ma of
+                Nothing -> return 
+                    $ AppE (VarE $ mkName "arr") 
+                    $ LamE [TupP $ Pre.map VarP iNames] (ConE $ mkName "()")
+                Just a -> f a
             return $ InfixE (Just b) (VarE $ mkName ">>>") (Just ea)
 
         f (Join as) = do
@@ -105,5 +111,5 @@
 
 inputs :: NeedleArrow -> [(Int, Int)]
 inputs (Input a b) = [(a,b)]
-inputs (Through a _) = inputs a
+inputs (Through ma _) = maybe [] inputs ma
 inputs (Join as) = as >>= inputs
diff --git a/needle.cabal b/needle.cabal
--- a/needle.cabal
+++ b/needle.cabal
@@ -1,9 +1,10 @@
 name:                needle
-version:             0.1.0.0
+version:             0.1.0.1
 synopsis:            ASCII-fied arrow notation
 description:         Needle is a domain specific language for ASCII-fied arrow notation. See "Control.Arrow.Needle" for more information and an example.
 license:             MIT
 license-file:        LICENSE
+homepage:            http://scrambledeggsontoast.github.io/2014/09/28/needle-announce/
 author:              Josh Kirklin
 maintainer:          Josh Kirklin <jjvk2@cam.ac.uk>
 copyright:           (c) 2014 Josh Kirklin
@@ -31,4 +32,4 @@
 
 source-repository head
   type:     git
-  location: git://github.com/ScrambledEggsOnToast/needle.git
+  location: http://github.com/ScrambledEggsOnToast/needle.git
