diff --git a/src/main/java/com/intel/jndn/utils/SegmentedClient.java b/src/main/java/com/intel/jndn/utils/SegmentedClient.java
index 40ef7bb..f469b90 100644
--- a/src/main/java/com/intel/jndn/utils/SegmentedClient.java
+++ b/src/main/java/com/intel/jndn/utils/SegmentedClient.java
@@ -14,7 +14,6 @@
 package com.intel.jndn.utils;
 
 import com.intel.jndn.utils.client.SegmentedFutureData;
-import com.intel.jndn.utils.client.FutureData;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
@@ -63,23 +62,26 @@
    *
    * @param face
    * @param interest should include either a ChildSelector or an initial segment
-   * number
+   * number; the initial segment number will be cut off in the de-segmented
+   * packet.
    * @return a list of FutureData packets; if the first segment fails, the list
    * will contain one FutureData with the failure exception
    */
   @Override
   public Future<Data> getAsync(Face face, Interest interest) {
     List<Future<Data>> segments = getAsyncList(face, interest);
-    return new SegmentedFutureData(interest.getName().getPrefix(-1), segments);
+    Name name = hasSegment(interest.getName()) ? interest.getName().getPrefix(-1) : interest.getName();
+    return new SegmentedFutureData(name, segments);
   }
 
- /**
+  /**
    * Asynchronously send Interest packets for a segmented result; will block
    * until the first packet is received and then send remaining interests until
    * the specified FinalBlockId.
    *
    * @param face
-   * @param name
+   * @param name the {@link Name} of the packet to retrieve using a default
+   * interest
    * @return an aggregated data packet from all received segments
    */
   public Future<Data> getAsync(Face face, Name name) {
@@ -168,7 +170,7 @@
    * @throws java.io.IOException
    */
   @Override
-  public Data getSync(Face face, Interest interest) throws IOException {  
+  public Data getSync(Face face, Interest interest) throws IOException {
     try {
       return getAsync(face, interest).get();
     } catch (ExecutionException | InterruptedException e) {
diff --git a/src/test/java/com/intel/jndn/utils/SegmentedClientTest.java b/src/test/java/com/intel/jndn/utils/SegmentedClientTest.java
index e6773ec..a08f3af 100644
--- a/src/test/java/com/intel/jndn/utils/SegmentedClientTest.java
+++ b/src/test/java/com/intel/jndn/utils/SegmentedClientTest.java
@@ -15,6 +15,7 @@
 
 import com.intel.jndn.mock.MockFace;
 import com.intel.jndn.mock.MockTransport;
+import com.intel.jndn.utils.client.SegmentedFutureData;
 import java.io.IOException;
 import java.util.List;
 import java.util.concurrent.ExecutionException;
@@ -86,7 +87,7 @@
     // retrieve non-existent data, should timeout
     logger.info("Client expressing interest asynchronously: /test/no-data");
     List<Future<Data>> futureSegments = SegmentedClient.getDefault().getAsyncList(face, new Name("/test/no-data"));
-    
+
     // the list of future packets should be initialized
     assertEquals(1, futureSegments.size());
     assertTrue(futureSegments.get(0).isDone());
@@ -94,4 +95,24 @@
     // should throw error
     futureSegments.get(0).get();
   }
+
+  /**
+   * Ensure Name of the returned Data is the same as was requested; identifies
+   * bug where the last Name.Component was always cut off.
+   *
+   * @throws InterruptedException
+   * @throws ExecutionException
+   */
+  @Test
+  public void testNameShorteningLogic() throws InterruptedException, ExecutionException {
+    MockFace face = new MockFace();
+    Name name = new Name("/test/123");
+    Data data = new Data(name);
+    data.setContent(new Blob("...."));
+    face.addResponse(name, data);
+
+    SegmentedFutureData future = (SegmentedFutureData) SegmentedClient.getDefault().getAsync(face, name);
+    assertEquals(name.toUri(), future.getName().toUri());
+    assertEquals(name.toUri(), future.get().getName().toUri());
+  }
 }
