diff --git a/Data/ASN1/Stream.hs b/Data/ASN1/Stream.hs
--- a/Data/ASN1/Stream.hs
+++ b/Data/ASN1/Stream.hs
@@ -3,6 +3,7 @@
 	, ASN1Repr
 	, ASN1ConstructionType(..)
 	, getConstructedEnd
+	, getConstructedEndRepr
 	) where
 
 import Data.ASN1.Raw
@@ -50,9 +51,17 @@
 type ASN1Repr = (ASN1, [ASN1Event])
 
 getConstructedEnd :: Int -> [ASN1] -> ([ASN1],[ASN1])
-getConstructedEnd _ xs@[]                = (xs, xs)
+getConstructedEnd _ xs@[]                = (xs, [])
 getConstructedEnd i ((x@(Start _)):xs)   = let (yz, zs) = getConstructedEnd (i+1) xs in (x:yz,zs)
 getConstructedEnd i ((x@(End _)):xs)
-	| i == 0                         = ([], xs)
-	| otherwise                      = let (ys, zs) = getConstructedEnd (i-1) xs in (x:ys,zs)
+	| i == 0    = ([], xs)
+	| otherwise = let (ys, zs) = getConstructedEnd (i-1) xs in (x:ys,zs)
 getConstructedEnd i (x:xs)               = let (ys, zs) = getConstructedEnd i xs in (x:ys,zs)
+
+getConstructedEndRepr :: Int -> [ASN1Repr] -> ([ASN1Repr],[ASN1Repr])
+getConstructedEndRepr _ xs@[]                 = (xs, [])
+getConstructedEndRepr i ((x@(Start _, _)):xs) = let (yz, zs) = getConstructedEndRepr (i+1) xs in (x:yz,zs)
+getConstructedEndRepr i ((x@(End _, _)):xs)
+	| i == 0    = ([], xs)
+	| otherwise = let (ys, zs) = getConstructedEndRepr (i-1) xs in (x:ys,zs)
+getConstructedEndRepr i (x:xs)                = let (ys, zs) = getConstructedEndRepr i xs in (x:ys,zs)
diff --git a/asn1-data.cabal b/asn1-data.cabal
--- a/asn1-data.cabal
+++ b/asn1-data.cabal
@@ -1,5 +1,5 @@
 Name:                asn1-data
-Version:             0.4.3
+Version:             0.4.4
 Description:
     ASN1 data reader and writer in raw form with supports for high level forms of ASN1 (BER, CER and DER).
     .
@@ -23,7 +23,7 @@
   Default:           False
 
 Library
-  Build-Depends:     base >= 3 && < 7,
+  Build-Depends:     base >= 3 && < 5,
                      bytestring,
                      text >= 0.11,
                      enumerator >= 0.4 && < 0.5,
