diff --git a/curator-framework/src/main/java/org/apache/curator/framework/imps/CreateBuilderImpl.java b/curator-framework/src/main/java/org/apache/curator/framework/imps/CreateBuilderImpl.java
index 6b52e66..ea31ef5 100644
--- a/curator-framework/src/main/java/org/apache/curator/framework/imps/CreateBuilderImpl.java
+++ b/curator-framework/src/main/java/org/apache/curator/framework/imps/CreateBuilderImpl.java
@@ -797,8 +797,7 @@
                 {
                     if ( !client.getZookeeperClient().getRetryPolicy().allowRetry(e) )
                     {
-                        final CuratorEvent event = makeCuratorEvent(client, e.code().intValue(), e.getPath(), null, e.getPath(), null);
-                        client.processBackgroundOperation(mainOperationAndData, event);
+                        sendBackgroundResponse(client, e.code().intValue(), e.getPath(), null, null, null, mainOperationAndData);
                         throw e;
                     }
                     // otherwise safe to ignore as it will get retried
@@ -895,14 +894,13 @@
 
     private void sendBackgroundResponse(int rc, String path, Object ctx, String name, Stat stat, OperationAndData<PathAndBytes> operationAndData)
     {
-        client.processBackgroundOperation(operationAndData, makeCuratorEvent(client, rc, path, ctx, name, stat));
+        sendBackgroundResponse(client, rc, path, ctx, name, stat, operationAndData);
     }
 
-    private static CuratorEvent makeCuratorEvent(CuratorFrameworkImpl client, int rc, String path, Object ctx, String name, Stat stat)
+    private static <T> void sendBackgroundResponse(CuratorFrameworkImpl client, int rc, String path, Object ctx, String name, Stat stat, OperationAndData<T> operationAndData)
     {
-        path = client.unfixForNamespace(path);
-        name = client.unfixForNamespace(name);
-        return new CuratorEventImpl(client, CuratorEventType.CREATE, rc, path, name, ctx, stat, null, null, null, null, null);
+        CuratorEvent event = new CuratorEventImpl(client, CuratorEventType.CREATE, rc, path, name, ctx, stat, null, null, null, null, null);
+        client.processBackgroundOperation(operationAndData, event);
     }
 
     private ACLCreateModePathAndBytesable<String> asACLCreateModePathAndBytesable()
diff --git a/curator-framework/src/main/java/org/apache/curator/framework/imps/CuratorEventImpl.java b/curator-framework/src/main/java/org/apache/curator/framework/imps/CuratorEventImpl.java
index e562351..4e316cd 100644
--- a/curator-framework/src/main/java/org/apache/curator/framework/imps/CuratorEventImpl.java
+++ b/curator-framework/src/main/java/org/apache/curator/framework/imps/CuratorEventImpl.java
@@ -133,7 +133,7 @@
         this.resultCode = resultCode;
         this.opResults = (opResults != null) ? ImmutableList.copyOf(opResults) : null;
         this.path = client.unfixForNamespace(path);
-        this.name = name;
+        this.name = client.unfixForNamespace(name);
         this.context = context;
         this.stat = stat;
         this.data = data;
diff --git a/curator-framework/src/test/java/org/apache/curator/framework/imps/TestFramework.java b/curator-framework/src/test/java/org/apache/curator/framework/imps/TestFramework.java
index 5c285fb..5eb632f 100644
--- a/curator-framework/src/test/java/org/apache/curator/framework/imps/TestFramework.java
+++ b/curator-framework/src/test/java/org/apache/curator/framework/imps/TestFramework.java
@@ -1032,6 +1032,33 @@
     }
 
     @Test
+    public void testBackgroundPathWithNamespace() throws Exception {
+        CuratorFrameworkFactory.Builder builder = CuratorFrameworkFactory.builder();
+        try (CuratorFramework client = builder
+                .connectString(server.getConnectString())
+                .retryPolicy(new RetryOneTime(1))
+                .build()) {
+            client.start();
+            CuratorFramework namespaceZoo = client.usingNamespace("zoo");
+            BlockingQueue<CuratorEvent> events = new LinkedBlockingQueue<>();
+            BackgroundCallback callback = (CuratorFramework ignored, CuratorEvent event) -> {
+                events.add(event);
+            };
+
+            namespaceZoo.create().creatingParentsIfNeeded().inBackground(callback).forPath("/zoo/a");
+            CuratorEvent event = events.poll(10, TimeUnit.SECONDS);
+            assertNotNull(event);
+            assertEquals("/zoo/a", event.getPath());
+            assertEquals("/zoo/a", event.getName());
+
+            client.checkExists().inBackground(callback).forPath("/zoo/zoo/a");
+            event = events.poll(10, TimeUnit.SECONDS);
+            assertNotNull(event);
+            assertEquals("/zoo/zoo/a", event.getPath());
+        }
+    }
+
+    @Test
     public void testCreateModes() throws Exception
     {
         CuratorFramework client = CuratorFrameworkFactory.newClient(server.getConnectString(), new RetryOneTime(1));
