Listing balance segment sets.
diff --git a/api/src/main/java/io/mifos/portfolio/api/v1/client/PortfolioManager.java b/api/src/main/java/io/mifos/portfolio/api/v1/client/PortfolioManager.java
index ffe36ac..ac86d39 100644
--- a/api/src/main/java/io/mifos/portfolio/api/v1/client/PortfolioManager.java
+++ b/api/src/main/java/io/mifos/portfolio/api/v1/client/PortfolioManager.java
@@ -135,14 +135,23 @@
       value = "/products/{productidentifier}/balancesegmentsets/",
       method = RequestMethod.POST,
       produces = MediaType.APPLICATION_JSON_VALUE,
-      consumes = MediaType.APPLICATION_JSON_VALUE
-  )
+      consumes = MediaType.APPLICATION_JSON_VALUE)
   @ThrowsException(status = HttpStatus.CONFLICT, exception = ProductInUseException.class)
   void createBalanceSegmentSet(
       @PathVariable("productidentifier") final String productIdentifier,
       final BalanceSegmentSet balanceSegmentSet);
 
   @RequestMapping(
+      value = "/products/{productidentifier}/balancesegmentsets/",
+      method = RequestMethod.GET,
+      produces = MediaType.ALL_VALUE,
+      consumes = MediaType.APPLICATION_JSON_VALUE
+  )
+  @ThrowsException(status = HttpStatus.CONFLICT, exception = ProductInUseException.class)
+  List<BalanceSegmentSet> getAllBalanceSegmentSets(
+      @PathVariable("productidentifier") final String productIdentifier);
+
+  @RequestMapping(
       value = "/products/{productidentifier}/balancesegmentsets/{balancesegmentsetidentifier}",
       method = RequestMethod.GET,
       produces = MediaType.ALL_VALUE,
diff --git a/component-test/src/main/java/io/mifos/portfolio/TestBalanceSegmentSets.java b/component-test/src/main/java/io/mifos/portfolio/TestBalanceSegmentSets.java
index 197b3d5..dc9b4ff 100644
--- a/component-test/src/main/java/io/mifos/portfolio/TestBalanceSegmentSets.java
+++ b/component-test/src/main/java/io/mifos/portfolio/TestBalanceSegmentSets.java
@@ -25,6 +25,7 @@
 
 import java.math.BigDecimal;
 import java.util.Arrays;
+import java.util.List;
 
 /**
  * @author Myrle Krantz
@@ -60,9 +61,30 @@
     final BalanceSegmentSet changedBalanceSegmentSet = portfolioManager.getBalanceSegmentSet(product.getIdentifier(), balanceSegmentSet.getIdentifier());
     Assert.assertEquals(balanceSegmentSet, changedBalanceSegmentSet);
 
+
+    final BalanceSegmentSet balanceSegmentSet2 = new BalanceSegmentSet();
+    balanceSegmentSet2.setIdentifier(testEnvironment.generateUniqueIdentifer("bss"));
+    balanceSegmentSet2.setSegments(Arrays.asList(
+        BigDecimal.ZERO.setScale(4, BigDecimal.ROUND_HALF_EVEN),
+        BigDecimal.TEN.setScale(4, BigDecimal.ROUND_HALF_EVEN),
+        BigDecimal.valueOf(10_000_0000, 4)));
+    balanceSegmentSet2.setSegmentIdentifiers(Arrays.asList("abc", "def", "ghi"));
+
+    portfolioManager.createBalanceSegmentSet(product.getIdentifier(), balanceSegmentSet2);
+    Assert.assertTrue(this.eventRecorder.wait(EventConstants.POST_BALANCE_SEGMENT_SET, new BalanceSegmentSetEvent(product.getIdentifier(), balanceSegmentSet2.getIdentifier())));
+
+    final List<BalanceSegmentSet> balanceSegmentSets = portfolioManager.getAllBalanceSegmentSets(product.getIdentifier());
+    Assert.assertTrue(balanceSegmentSets.contains(balanceSegmentSet));
+    Assert.assertTrue(balanceSegmentSets.contains(balanceSegmentSet2));
+    Assert.assertTrue(balanceSegmentSets.size() == 2);
+
     portfolioManager.deleteBalanceSegmentSet(product.getIdentifier(), balanceSegmentSet.getIdentifier());
     Assert.assertTrue(this.eventRecorder.wait(EventConstants.DELETE_BALANCE_SEGMENT_SET, new BalanceSegmentSetEvent(product.getIdentifier(), balanceSegmentSet.getIdentifier())));
 
+    final List<BalanceSegmentSet> balanceSegmentSetsAfterDelete = portfolioManager.getAllBalanceSegmentSets(product.getIdentifier());
+    Assert.assertTrue(balanceSegmentSets.contains(balanceSegmentSet2));
+    Assert.assertTrue(balanceSegmentSetsAfterDelete.size() == 1);
+
     enableProduct(product);
 
     createCase(product.getIdentifier());
diff --git a/service/src/main/java/io/mifos/portfolio/service/internal/repository/BalanceSegmentRepository.java b/service/src/main/java/io/mifos/portfolio/service/internal/repository/BalanceSegmentRepository.java
index 0a4f903..c66952b 100644
--- a/service/src/main/java/io/mifos/portfolio/service/internal/repository/BalanceSegmentRepository.java
+++ b/service/src/main/java/io/mifos/portfolio/service/internal/repository/BalanceSegmentRepository.java
@@ -29,4 +29,6 @@
   Stream<BalanceSegmentEntity> findByProductIdentifierAndSegmentSetIdentifier(String productIdentifier, String segmentSetIdentifier);
 
   Optional<BalanceSegmentEntity> findByProductIdentifierAndSegmentSetIdentifierAndSegmentIdentifier(String productIdentifier, String segmentSetIdentifier, String segmentIdentifier);
+
+  Stream<BalanceSegmentEntity> findByProductIdentifier(String productIdentifier);
 }
diff --git a/service/src/main/java/io/mifos/portfolio/service/internal/service/BalanceSegmentSetService.java b/service/src/main/java/io/mifos/portfolio/service/internal/service/BalanceSegmentSetService.java
index ee558a6..34dfbad 100644
--- a/service/src/main/java/io/mifos/portfolio/service/internal/service/BalanceSegmentSetService.java
+++ b/service/src/main/java/io/mifos/portfolio/service/internal/service/BalanceSegmentSetService.java
@@ -17,11 +17,15 @@
 
 import io.mifos.portfolio.api.v1.domain.BalanceSegmentSet;
 import io.mifos.portfolio.service.internal.mapper.BalanceSegmentSetMapper;
+import io.mifos.portfolio.service.internal.repository.BalanceSegmentEntity;
 import io.mifos.portfolio.service.internal.repository.BalanceSegmentRepository;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+import java.util.Map;
 import java.util.Optional;
+import java.util.stream.Collectors;
 
 /**
  * @author Myrle Krantz
@@ -50,4 +54,15 @@
     return BalanceSegmentSetMapper.map(balanceSegmentRepository
         .findByProductIdentifierAndSegmentSetIdentifier(productIdentifier, balanceSegmentSetIdentifier));
   }
+
+  public List<BalanceSegmentSet> findByIdentifier(final String productIdentifier) {
+    final Map<String, List<BalanceSegmentEntity>> listsOfEntitiesDividedBySet = balanceSegmentRepository
+        .findByProductIdentifier(productIdentifier)
+        .collect(Collectors.groupingBy(BalanceSegmentEntity::getSegmentSetIdentifier, Collectors.toList()));
+    return listsOfEntitiesDividedBySet.values().stream()
+        .map(x -> BalanceSegmentSetMapper.map(x.stream()))
+        .filter(Optional::isPresent)
+        .map(Optional::get)
+        .collect(Collectors.toList());
+  }
 }
diff --git a/service/src/main/java/io/mifos/portfolio/service/rest/BalanceSegmentSetRestController.java b/service/src/main/java/io/mifos/portfolio/service/rest/BalanceSegmentSetRestController.java
index a5ca9cc..2d81434 100644
--- a/service/src/main/java/io/mifos/portfolio/service/rest/BalanceSegmentSetRestController.java
+++ b/service/src/main/java/io/mifos/portfolio/service/rest/BalanceSegmentSetRestController.java
@@ -33,6 +33,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.util.List;
 
 /**
  * @author Myrle Krantz
@@ -60,8 +61,7 @@
   @RequestMapping(
       method = RequestMethod.POST,
       consumes = MediaType.APPLICATION_JSON_VALUE,
-      produces = MediaType.APPLICATION_JSON_VALUE
-  )
+      produces = MediaType.APPLICATION_JSON_VALUE)
   public @ResponseBody
   ResponseEntity<Void> createBalanceSegmentSet(
       @PathVariable("productidentifier") final String productIdentifier,
@@ -74,6 +74,21 @@
     return new ResponseEntity<>(HttpStatus.ACCEPTED);
   }
 
+
+  @Permittable(value = AcceptedTokenType.TENANT, groupId = PermittableGroupIds.PRODUCT_MANAGEMENT)
+  @RequestMapping(
+      method = RequestMethod.GET,
+      consumes = MediaType.ALL_VALUE,
+      produces = MediaType.APPLICATION_JSON_VALUE)
+  public @ResponseBody
+  List<BalanceSegmentSet> getAllBalanceSegmentSets(
+      @PathVariable("productidentifier") final String productIdentifier) {
+    checkThatProductExists(productIdentifier);
+
+    return balanceSegmentSetService.findByIdentifier(productIdentifier);
+  }
+
+
   @Permittable(value = AcceptedTokenType.TENANT, groupId = PermittableGroupIds.PRODUCT_MANAGEMENT)
   @RequestMapping(
       value = "{balancesegmentsetidentifier}",
@@ -132,7 +147,7 @@
 
   private void checkThatSegmentSetDoesntExist(final String productIdentifier, final String segmentSetIdentifier) {
     if (balanceSegmentSetService.existsByIdentifier(productIdentifier, segmentSetIdentifier))
-      throw ServiceException.notFound("Segment set with identifier ''{0}.{1}'' already exists.", productIdentifier, segmentSetIdentifier);
+      throw ServiceException.conflict("Segment set with identifier ''{0}.{1}'' already exists.", productIdentifier, segmentSetIdentifier);
   }
 
   private void checkThatProductAndBalanceSegmentSetExist(final String productIdentifier, final String segmentSetIdentifier) {