diff --git a/modules/demux/adaptive/playlist/Segment.cpp b/modules/demux/adaptive/playlist/Segment.cpp
index d9e77f4511102bbd9ee1f50300bc1597a89d99aa..03f5efa2bda61850977fb6374a4d7a6562d03318 100644
--- a/modules/demux/adaptive/playlist/Segment.cpp
+++ b/modules/demux/adaptive/playlist/Segment.cpp
@@ -61,35 +61,32 @@ ISegment::~ISegment()
     assert(chunksuse.Get() == 0);
 }
 
-SegmentChunk * ISegment::getChunk(const std::string &url, BaseRepresentation *rep, HTTPConnectionManager *connManager)
-{
-    HTTPChunkBufferedSource *source = new HTTPChunkBufferedSource(url, connManager);
-    if(startByte != endByte)
-        source->setBytesRange(BytesRange(startByte, endByte));
-    connManager->downloader->schedule(source);
-    return new (std::nothrow) SegmentChunk(this, source, rep);
-}
-
 void ISegment::onChunkDownload(block_t **, SegmentChunk *, BaseRepresentation *)
 {
 
 }
 
-SegmentChunk* ISegment::toChunk(size_t index, BaseRepresentation *ctxrep, HTTPConnectionManager *connManager)
+SegmentChunk* ISegment::toChunk(size_t index, BaseRepresentation *rep, HTTPConnectionManager *connManager)
 {
-    SegmentChunk *chunk;
-    try
+    const std::string url = getUrlSegment().toString(index, rep);
+    HTTPChunkBufferedSource *source = new (std::nothrow) HTTPChunkBufferedSource(url, connManager);
+    if( source )
     {
-        chunk = getChunk(getUrlSegment().toString(index, ctxrep), ctxrep, connManager);
-        if (!chunk)
-            return NULL;
+        if(startByte != endByte)
+            source->setBytesRange(BytesRange(startByte, endByte));
+
+        SegmentChunk *chunk = new (std::nothrow) SegmentChunk(this, source, rep);
+        if( chunk )
+        {
+            connManager->downloader->schedule(source);
+            return chunk;
+        }
+        else
+        {
+            delete source;
+        }
     }
-    catch (int)
-    {
-        return NULL;
-    };
-
-    return chunk;
+    return NULL;
 }
 
 bool ISegment::isTemplate() const
diff --git a/modules/demux/adaptive/playlist/Segment.h b/modules/demux/adaptive/playlist/Segment.h
index 7d0b0dae9603b02196b138a36a16af659a580321..db24acd974c7d228b731baf321e85a9a98a82881 100644
--- a/modules/demux/adaptive/playlist/Segment.h
+++ b/modules/demux/adaptive/playlist/Segment.h
@@ -88,8 +88,6 @@ namespace adaptive
                 uint64_t                sequence;
                 static const int        SEQUENCE_INVALID;
                 static const int        SEQUENCE_FIRST;
-
-                virtual SegmentChunk * getChunk(const std::string &, BaseRepresentation *, HTTPConnectionManager *);
         };
 
         class Segment : public ISegment
diff --git a/modules/demux/smooth/playlist/ForgedInitSegment.cpp b/modules/demux/smooth/playlist/ForgedInitSegment.cpp
index 0f12edea1e5800c00df23819d4d800ac0eff28fe..2ddc2737bff031603438c806f21e277de7085067 100644
--- a/modules/demux/smooth/playlist/ForgedInitSegment.cpp
+++ b/modules/demux/smooth/playlist/ForgedInitSegment.cpp
@@ -299,14 +299,20 @@ block_t * ForgedInitSegment::buildMoovBox()
     return moov;
 }
 
-SegmentChunk * ForgedInitSegment::getChunk(const std::string &, BaseRepresentation *rep, HTTPConnectionManager *)
+SegmentChunk* ForgedInitSegment::toChunk(size_t, BaseRepresentation *rep, HTTPConnectionManager *)
 {
     block_t *moov = buildMoovBox();
     if(moov)
     {
         MemoryChunkSource *source = new (std::nothrow) MemoryChunkSource(moov);
-        return new (std::nothrow) SegmentChunk(this, source, rep);
+        if( source )
+        {
+            SegmentChunk *chunk = new (std::nothrow) SegmentChunk(this, source, rep);
+            if( chunk )
+                return chunk;
+            else
+                delete source;
+        }
     }
-
     return NULL;
 }
diff --git a/modules/demux/smooth/playlist/ForgedInitSegment.hpp b/modules/demux/smooth/playlist/ForgedInitSegment.hpp
index 4590ed17f594b89ee7a05c992fe78a98a0f470ed..a685e91704e88252d270ee5adee6285f6efc7dae 100644
--- a/modules/demux/smooth/playlist/ForgedInitSegment.hpp
+++ b/modules/demux/smooth/playlist/ForgedInitSegment.hpp
@@ -39,6 +39,7 @@ namespace smooth
                 ForgedInitSegment(ICanonicalUrl *parent, const std::string &,
                                   uint64_t, uint64_t);
                 virtual ~ForgedInitSegment();
+                virtual SegmentChunk* toChunk(size_t, BaseRepresentation *, HTTPConnectionManager *); /* reimpl */
                 void setWaveFormatEx(const std::string &);
                 void setCodecPrivateData(const std::string &);
                 void setChannels(uint16_t);
@@ -51,9 +52,6 @@ namespace smooth
                 void setTrackID(unsigned);
                 void setLanguage(const std::string &);
 
-            protected:
-                virtual SegmentChunk * getChunk(const std::string &, BaseRepresentation *, HTTPConnectionManager *); /* reimpl */
-
             private:
                 void fromWaveFormatEx(const uint8_t *p_data, size_t i_data);
                 void fromVideoInfoHeader(const uint8_t *p_data, size_t i_data);