diff --git a/proton-j/proton/src/main/java/org/apache/qpid/proton/messenger/impl/MessengerImpl.java b/proton-j/proton/src/main/java/org/apache/qpid/proton/messenger/impl/MessengerImpl.java
index 6815471..9048de5 100644
--- a/proton-j/proton/src/main/java/org/apache/qpid/proton/messenger/impl/MessengerImpl.java
+++ b/proton-j/proton/src/main/java/org/apache/qpid/proton/messenger/impl/MessengerImpl.java
@@ -173,7 +173,7 @@
                 throw new MessengerException("unable to send to address: " + m.getAddress());
             }
             int port = address.getPort() < 0 ? defaultPort(address.getScheme()) : address.getPort();
-            Sender sender = getLink(address.getHost(), port, new SenderFinder(address.getPath()));
+            Sender sender = getLink(address.getHost(), port, new SenderFinder(cleanPath(address.getPath())));
 
             adjustReplyTo(m);
 
@@ -261,7 +261,7 @@
             }
             else
             {
-                getLink(address.getHost(), port, new ReceiverFinder(address.getPath()));
+                getLink(address.getHost(), port, new ReceiverFinder(cleanPath(address.getPath())));
             }
         }
         catch (URISyntaxException e)
@@ -717,7 +717,11 @@
 
         public Sender create(Session session)
         {
-            return session.sender(_path);
+            Sender sender = session.sender(_path);
+            Target target = new Target();
+            target.setAddress(_path);
+            sender.setTarget(target);
+            return sender;
         }
     }
 
@@ -744,7 +748,11 @@
 
         public Receiver create(Session session)
         {
-            return session.receiver(_path);
+            Receiver receiver = session.receiver(_path);
+            Source source = new Source();
+            source.setAddress(_path);
+            receiver.setSource(source);
+            return receiver;
         }
     }
 
@@ -905,6 +913,19 @@
         }
     }
 
+    private static String cleanPath(String path)
+    {
+        //remove leading '/'
+        if (path != null && path.length() > 0 && path.charAt(0) == '/')
+        {
+            return path.substring(1);
+        }
+        else
+        {
+            return path;
+        }
+    }
+
     private static boolean matchTarget(Target target, String path)
     {
         if (target == null) return path.isEmpty();
