diff --git a/grc/demapping/CMakeLists.txt b/grc/demapping/CMakeLists.txt
index 84f4fee..4aacfff 100644
--- a/grc/demapping/CMakeLists.txt
+++ b/grc/demapping/CMakeLists.txt
@@ -22,5 +22,7 @@
     gsm_bcch_ccch_demapper.xml
     gsm_bcch_ccch_sdcch4_demapper.xml
     gsm_sdcch8_demapper.xml
-    gsm_tch_f_chans_demapper.xml DESTINATION share/gnuradio/grc/blocks
+    gsm_tch_f_chans_demapper.xml
+    gsm_tch_h_chans_demapper.xml
+    DESTINATION share/gnuradio/grc/blocks
 )
diff --git a/grc/demapping/gsm_tch_f_chans_demapper.xml b/grc/demapping/gsm_tch_f_chans_demapper.xml
index c87776a..33b4153 100644
--- a/grc/demapping/gsm_tch_f_chans_demapper.xml
+++ b/grc/demapping/gsm_tch_f_chans_demapper.xml
@@ -3,7 +3,7 @@
   <name>TCH/F Demapper</name>
   <key>gsm_tch_f_chans_demapper</key>
   <import>import grgsm</import>
-  <make>grgsm.tch_f_chans_demapper($timeslot_nr, $tch_type, $tch_h_channel)</make>
+  <make>grgsm.tch_f_chans_demapper($timeslot_nr)</make>
 
   <param>
     <name>Timeslot</name>
@@ -13,31 +13,6 @@
     <hide>part</hide>
   </param>
 
-  <param>
-    <name>TCH Type</name>
-    <key>tch_type</key>
-    <value>0</value>
-    <type>int</type>
-    <hide>part</hide>
-    <option>
-      <name>Full rate</name>
-      <key>0</key>
-    </option>
-    <option>
-      <name>Half rate</name>
-      <key>1</key>
-    </option>
-  </param>
-
-  <param>
-    <name>TCH/H Channel</name>
-    <key>tch_h_channel</key>
-    <value>0</value>
-    <type>int</type>
-    <hide>#if $tch_type() == 0 then 'all' else 'none'#</hide>
-  </param>
-  <check>$tch_h_channel() &gt; -1 and $tch_h_channel() &lt; 2</check>
-
   <sink>
     <name>bursts</name>
     <type>message</type>
diff --git a/grc/demapping/gsm_tch_h_chans_demapper.xml b/grc/demapping/gsm_tch_h_chans_demapper.xml
new file mode 100644
index 0000000..f2bd67f
--- /dev/null
+++ b/grc/demapping/gsm_tch_h_chans_demapper.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0"?>
+<block>
+  <name>TCH/H Demapper</name>
+  <key>gsm_tch_h_chans_demapper</key>
+  <import>import grgsm</import>
+  <make>grgsm.tch_h_chans_demapper($timeslot_nr, $tch_h_channel)</make>
+
+  <param>
+    <name>Timeslot</name>
+    <key>timeslot_nr</key>
+    <value>2</value>
+    <type>int</type>
+    <hide>part</hide>
+  </param>
+
+  <param>
+    <name>TCH/H Channel</name>
+    <key>tch_h_channel</key>
+    <value>0</value>
+    <type>int</type>
+    <hide>#if $tch_type() == 0 then 'all' else 'none'#</hide>
+  </param>
+  <check>$tch_h_channel() &gt; -1 and $tch_h_channel() &lt; 2</check>
+
+  <sink>
+    <name>bursts</name>
+    <type>message</type>
+    <optional>1</optional>
+  </sink>
+  <source>
+    <name>tch_bursts</name>
+    <type>message</type>
+    <optional>1</optional>
+  </source>
+  <source>
+    <name>acch_bursts</name>
+    <type>message</type>
+    <optional>1</optional>
+  </source>
+</block>
diff --git a/grc/gsm_block_tree.xml b/grc/gsm_block_tree.xml
index a16f4c0..c2f59cd 100644
--- a/grc/gsm_block_tree.xml
+++ b/grc/gsm_block_tree.xml
@@ -41,6 +41,7 @@
       <block>gsm_bcch_ccch_sdcch4_demapper</block>
       <block>gsm_sdcch8_demapper</block>
       <block>gsm_tch_f_chans_demapper</block>
+      <block>gsm_tch_h_chans_demapper</block>
     </cat>
     <cat>
       <name>Decryption</name>
diff --git a/include/grgsm/demapping/CMakeLists.txt b/include/grgsm/demapping/CMakeLists.txt
index 257f66e..0165d24 100644
--- a/include/grgsm/demapping/CMakeLists.txt
+++ b/include/grgsm/demapping/CMakeLists.txt
@@ -22,5 +22,7 @@
 ########################################################################
 install(FILES
     universal_ctrl_chans_demapper.h 
-    tch_f_chans_demapper.h DESTINATION include/grgsm/demapping
+    tch_f_chans_demapper.h
+    tch_h_chans_demapper.h
+    DESTINATION include/grgsm/demapping
 )
diff --git a/include/grgsm/demapping/tch_f_chans_demapper.h b/include/grgsm/demapping/tch_f_chans_demapper.h
index 32bed30..c04c749 100644
--- a/include/grgsm/demapping/tch_f_chans_demapper.h
+++ b/include/grgsm/demapping/tch_f_chans_demapper.h
@@ -48,7 +48,7 @@
        * class. gsm::tch_f_chans_demapper::make is the public interface for
        * creating new instances.
        */
-      static sptr make(unsigned int timeslot_nr, int tch_type, int tch_h_channel);
+      static sptr make(unsigned int timeslot_nr);
     };
 
   } // namespace gsm
diff --git a/include/grgsm/demapping/tch_h_chans_demapper.h b/include/grgsm/demapping/tch_h_chans_demapper.h
new file mode 100644
index 0000000..15a7f2c
--- /dev/null
+++ b/include/grgsm/demapping/tch_h_chans_demapper.h
@@ -0,0 +1,59 @@
+/* -*- c++ -*- */
+/*
+ * @file
+ * @author (C) 2018 by Andrew Artyushok <loony.developer@gmail.com>
+ * @author (C) 2018 by Vasil Velichkov <vvvelichkov@gmail.com>
+ * @section LICENSE
+ *
+ * Gr-gsm is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * Gr-gsm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with gr-gsm; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+
+#ifndef INCLUDED_GSM_TCH_H_CHANS_DEMAPPER_H
+#define INCLUDED_GSM_TCH_H_CHANS_DEMAPPER_H
+
+#include <grgsm/api.h>
+#include <gnuradio/block.h>
+
+namespace gr {
+  namespace gsm {
+
+    /*!
+     * \brief <+description of block+>
+     * \ingroup gsm
+     *
+     */
+    class GRGSM_API tch_h_chans_demapper : virtual public gr::block
+    {
+     public:
+      typedef boost::shared_ptr<tch_h_chans_demapper> sptr;
+
+      /*!
+       * \brief Return a shared_ptr to a new instance of gsm::tch_h_chans_demapper.
+       *
+       * To avoid accidental use of raw pointers, gsm::tch_h_chans_demapper's
+       * constructor is in a private implementation
+       * class. gsm::tch_h_chans_demapper::make is the public interface for
+       * creating new instances.
+       */
+      static sptr make(unsigned int timeslot_nr, unsigned int tch_h_channel);
+    };
+
+  } // namespace gsm
+} // namespace gr
+
+#endif /* INCLUDED_GSM_TCH_H_CHANS_DEMAPPER_H */
+
diff --git a/lib/demapping/CMakeLists.txt b/lib/demapping/CMakeLists.txt
index 57d2d1a..09cd525 100644
--- a/lib/demapping/CMakeLists.txt
+++ b/lib/demapping/CMakeLists.txt
@@ -19,6 +19,7 @@
 
 add_sources(
     tch_f_chans_demapper_impl.cc
+    tch_h_chans_demapper_impl.cc
     universal_ctrl_chans_demapper_impl.cc
 )
 
diff --git a/lib/demapping/tch_f_chans_demapper_impl.cc b/lib/demapping/tch_f_chans_demapper_impl.cc
index 0841fd2..bf1ff8f 100644
--- a/lib/demapping/tch_f_chans_demapper_impl.cc
+++ b/lib/demapping/tch_f_chans_demapper_impl.cc
@@ -109,11 +109,11 @@
         }
     }
 
-void tch_f_chans_demapper_impl::sacch_tch_demapper(uint32_t fn_mod13, u_int32_t fn_mod26, uint32_t frame_nr,
-                                                   pmt::pmt_t *d_bursts_sacch,
-                                                   uint32_t *d_frame_numbers_sacch, pmt::pmt_t d_bursts[3][8],
-                                                   uint32_t d_frame_numbers[3][8], pmt::pmt_t msg_out)
-{
+    void tch_f_chans_demapper_impl::sacch_tch_demapper(uint32_t fn_mod13, u_int32_t fn_mod26, uint32_t frame_nr,
+                                                       pmt::pmt_t *d_bursts_sacch,
+                                                       uint32_t *d_frame_numbers_sacch, pmt::pmt_t d_bursts[3][8],
+                                                       uint32_t d_frame_numbers[3][8], pmt::pmt_t msg_out)
+    {
         bool frames_are_consecutive = true;
         if (fn_mod13 == 12)
         {
diff --git a/lib/demapping/tch_f_chans_demapper_impl.h b/lib/demapping/tch_f_chans_demapper_impl.h
index 7a546e7..bef018d 100644
--- a/lib/demapping/tch_f_chans_demapper_impl.h
+++ b/lib/demapping/tch_f_chans_demapper_impl.h
@@ -32,8 +32,6 @@
     {
      private:
       unsigned int d_timeslot;
-      int d_tch_type;
-      int d_tch_h_channel;
       // Downlink
       uint32_t d_frame_numbers_dl[3][8];       // for checking consecutive frame numbers of tch
       uint32_t d_frame_numbers_sacch_dl[4];    // for checking consecutive frame numbers of sacch
@@ -51,7 +49,7 @@
                               uint32_t d_frame_numbers[3][8], pmt::pmt_t msg_out);
 
      public:
-      tch_f_chans_demapper_impl(unsigned int timeslot_nr, int tch_type, int tch_h_channel);
+      tch_f_chans_demapper_impl(unsigned int timeslot_nr);
       ~tch_f_chans_demapper_impl();
 
       void filter_tch_chans(pmt::pmt_t msg);
diff --git a/lib/demapping/tch_h_chans_demapper_impl.cc b/lib/demapping/tch_h_chans_demapper_impl.cc
new file mode 100644
index 0000000..2c3dc79
--- /dev/null
+++ b/lib/demapping/tch_h_chans_demapper_impl.cc
@@ -0,0 +1,278 @@
+/* -*- c++ -*- */
+/*
+ * @file
+ * @author (C) 2018 by Andrew Artyushok <loony.developer@gmail.com>
+ * @author (C) 2018 by Vasil Velichkov <vvvelichkov@gmail.com>
+ * @section LICENSE
+ *
+ * Gr-gsm is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * Gr-gsm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with gr-gsm; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gnuradio/io_signature.h>
+#include "tch_h_chans_demapper_impl.h"
+#include <grgsm/endian.h>
+#include <grgsm/gsmtap.h>
+
+#define BURST_SIZE 148
+
+namespace gr {
+namespace gsm {
+
+tch_h_chans_demapper::sptr
+tch_h_chans_demapper::make(unsigned int timeslot_nr, unsigned int tch_h_channel)
+{
+        return gnuradio::get_initial_sptr
+                       (new tch_h_chans_demapper_impl(timeslot_nr, tch_h_channel));
+}
+
+/*
+ * The private constructor
+ *
+ */
+tch_h_chans_demapper_impl::tch_h_chans_demapper_impl(unsigned int timeslot_nr, unsigned int tch_h_channel)
+        : gr::block("tch_h_chans_demapper",
+                    gr::io_signature::make(0, 0, 0),
+                    gr::io_signature::make(0, 0, 0)),
+        d_timeslot(timeslot_nr),
+        d_tch_h_channel(tch_h_channel)
+
+{
+    //std::cout << "d_tch_type is " << d_tch_type << ", tch_h_channel is " << tch_h_channel << std::endl;
+
+    message_port_register_in(pmt::mp("bursts"));
+    set_msg_handler(pmt::mp("bursts"), boost::bind(&tch_h_chans_demapper_impl::filter_tch_chans, this, _1));
+    message_port_register_out(pmt::mp("tch_bursts"));
+    message_port_register_out(pmt::mp("acch_bursts"));
+}
+
+/*
+ * Our virtual destructor.
+ */
+tch_h_chans_demapper_impl::~tch_h_chans_demapper_impl()
+{
+}
+
+void tch_h_chans_demapper_impl::filter_tch_chans(pmt::pmt_t msg)
+{
+    pmt::pmt_t header_plus_burst = pmt::cdr(msg);
+    gsmtap_hdr * header = (gsmtap_hdr *)pmt::blob_data(header_plus_burst);
+    if(header->timeslot != d_timeslot) {
+        return;
+    }
+
+    uint32_t frame_nr = be32toh(header->frame_number);
+    uint32_t fn_mod26 = frame_nr % 26;
+    uint32_t fn_mod13 = frame_nr % 13;
+    int8_t* burst_bits = (int8_t *)(pmt::blob_data(header_plus_burst)) + sizeof(gsmtap_hdr);
+
+    int8_t new_msg[sizeof(gsmtap_hdr)+BURST_SIZE];
+    gsmtap_hdr * new_hdr = (gsmtap_hdr*)new_msg;
+    memcpy(new_msg, header, sizeof(gsmtap_hdr)+BURST_SIZE);
+
+    new_hdr->sub_type = (fn_mod13 == 12 ? GSMTAP_CHANNEL_ACCH : 0) | GSMTAP_CHANNEL_TCH_H;
+
+    pmt::pmt_t msg_binary_blob = pmt::make_blob(new_msg,sizeof(gsmtap_hdr)+BURST_SIZE);
+    pmt::pmt_t msg_out = pmt::cons(pmt::PMT_NIL, msg_binary_blob);
+
+    //distinguishing uplink and downlink bursts
+    bool uplink_burst = (be16toh(header->arfcn) & 0x4000) ? true : false;
+
+    if(uplink_burst)
+    {
+        sacch_tch_demapper(fn_mod13, fn_mod26, frame_nr, d_bursts_sacch_ul,
+                d_frame_numbers_sacch_ul, d_bursts_ul, d_frame_numbers_ul, msg_out);
+    }
+    else
+    {
+        sacch_tch_demapper(fn_mod13, fn_mod26, frame_nr, d_bursts_sacch_dl,
+                d_frame_numbers_sacch_dl, d_bursts_dl, d_frame_numbers_dl, msg_out);
+    }
+}
+
+void tch_h_chans_demapper_impl::sacch_tch_demapper(uint32_t fn_mod13, u_int32_t fn_mod26, uint32_t frame_nr,
+                                                   pmt::pmt_t *d_bursts_sacch,
+                                                   uint32_t *d_frame_numbers_sacch, pmt::pmt_t d_bursts[3][8],
+                                                   uint32_t d_frame_numbers[3][8], pmt::pmt_t msg_out)
+{
+    bool frames_are_consecutive = true;
+    if (fn_mod13 == 12)
+    {
+        // position of SACCH burst based on timeslot
+        // see specification gsm 05.02
+        uint32_t index;
+        bool is_sacch = false;
+
+        if (d_tch_h_channel == 0 && fn_mod26 == 12)
+        {
+            index = (((frame_nr - 12) / 26) - (d_timeslot / 2)) % 4;
+            is_sacch = true;
+        }
+        else if (d_tch_h_channel == 1 && fn_mod26 == 25)
+        {
+            index = (((frame_nr - 25) / 26) - (d_timeslot / 2)) % 4;
+            is_sacch = true;
+        }
+
+        if (is_sacch)
+        {
+            d_bursts_sacch[index] = msg_out;
+            d_frame_numbers_sacch[index] = frame_nr;
+
+            if (index == 3)
+            {
+                //check for a situation where some bursts were lost
+                //in this situation frame numbers won't be consecutive
+                frames_are_consecutive = true;
+                for(int jj=1; jj<4; jj++)
+                {
+                    if((d_frame_numbers_sacch[jj]-d_frame_numbers_sacch[jj-1]) != 26)
+                    {
+                        frames_are_consecutive = false;
+                    }
+                }
+                if(frames_are_consecutive)
+                {
+                    //send bursts to the output
+                    for(int jj=0; jj<4; jj++)
+                    {
+                        message_port_pub(pmt::mp("acch_bursts"), d_bursts_sacch[jj]);
+                    }
+                }
+            }
+        }
+    }
+    else
+    {
+        bool our_sub=false;
+        // So, here I change the fn_mod13, with this changes I can
+        // process both subslot (d_tch_h_channel) with the same code.
+        //
+        // Theory about this on github
+        //
+        // Example:
+        //
+        // For subslot=0 our burst is 0,2,4,6 etc
+        // For subslot=1 it 1,3,5 etc
+        // But if we change it with this code,
+        // both will be 0,1,2,3,4 etc
+        // And we can proced two subslot like one.
+        if(fn_mod13%2==d_tch_h_channel) {
+            if(d_tch_h_channel==0) {
+                fn_mod13=fn_mod13/2;
+            }else{
+                fn_mod13-=1;
+                fn_mod13=fn_mod13/2;
+            }
+            // We work only with our subslot
+            our_sub=true;
+        }
+        if(our_sub) {
+
+            if (fn_mod13 <= 1)
+            {
+                // add to b1 and b3
+                d_bursts[0][fn_mod13] = msg_out;
+                d_bursts[2][fn_mod13+2] = msg_out;
+
+
+
+                d_frame_numbers[0][fn_mod13] = frame_nr;
+                d_frame_numbers[2][fn_mod13+2] = frame_nr;
+            }
+            else if (fn_mod13 >=2 && fn_mod13 <=3)
+            {
+                // add to b1 and b2
+                d_bursts[0][fn_mod13] = msg_out;
+                d_bursts[1][fn_mod13-2] = msg_out;
+
+
+                d_frame_numbers[0][fn_mod13] = frame_nr;
+                d_frame_numbers[1][fn_mod13-2] = frame_nr;
+                //d_frame_numbers[1][fn_mod13 - 4] = frame_nr;
+            }
+            else if (fn_mod13 >=4 && fn_mod13 <=5)
+            {
+                // add to b1 and b2
+                d_bursts[1][fn_mod13-2] = msg_out;
+                d_bursts[2][fn_mod13-4] = msg_out;
+
+
+
+                d_frame_numbers[1][fn_mod13-2] = frame_nr;
+                d_frame_numbers[2][fn_mod13-4] = frame_nr;
+                //d_frame_numbers[1][fn_mod13 - 4] = frame_nr;
+            }
+            // send burst 1 or burst 2 to output
+            //if ( fn_mod26 == 2 || fn_mod26 == 5 || fn_mod26 == 9)
+            if(fn_mod13 == 1 || fn_mod13 == 3|| fn_mod13 == 5)
+            {
+                int tch_burst_nr = 0;
+
+                if(fn_mod13==5) {
+                    tch_burst_nr = 1;
+                }
+                if(fn_mod13==1) {
+                    tch_burst_nr = 2;
+                }
+
+                //check for a situation where some bursts were lost
+                //in this situation frame numbers won't be consecutive
+                frames_are_consecutive = true;
+                // std::cout<<"br="<<tch_burst_nr<<" Array: ";
+                // std::cout<<d_frame_numbers[tch_burst_nr][0]<<" ";
+                bool one_tree=true;
+                for(int jj=1; jj<4; jj++)
+                {
+
+                    if (((d_frame_numbers[tch_burst_nr][jj] - d_frame_numbers[tch_burst_nr][jj-1]) != 2) && frames_are_consecutive)
+                    {
+                        frames_are_consecutive = false;
+
+                        if (tch_burst_nr == 2 && jj == 2
+                                && d_frame_numbers[tch_burst_nr][jj] - d_frame_numbers[tch_burst_nr][jj - 1] == 3)
+                        {
+                            //  std::cout<<" YEAH ";
+                            frames_are_consecutive = true;
+                        }
+
+                    }
+                    //}
+            }
+            // std::cout<<std::endl;
+
+            if(frames_are_consecutive)
+            {
+
+                for(int jj=0; jj<4; jj++)
+                {
+
+                    message_port_pub(pmt::mp("tch_bursts"), d_bursts[tch_burst_nr][jj]);
+                }
+
+                // useless
+                //                        d_bursts_stolen[tch_burst_nr] = false;
+            }
+        }
+    }
+
+}
+}
+}   /* namespace gsm */
+} /* namespace gr */
diff --git a/lib/demapping/tch_h_chans_demapper_impl.h b/lib/demapping/tch_h_chans_demapper_impl.h
new file mode 100644
index 0000000..ab0efd1
--- /dev/null
+++ b/lib/demapping/tch_h_chans_demapper_impl.h
@@ -0,0 +1,65 @@
+/* -*- c++ -*- */
+/*
+ * @file
+ * @author (C) 2018 by Andrew Artyushok <loony.developer@gmail.com>
+ * @author (C) 2018 by Vasil Velichkov <vvvelichkov@gmail.com>
+ * @section LICENSE
+ *
+ * Gr-gsm is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * Gr-gsm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with gr-gsm; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_GSM_TCH_H_CHANS_DEMAPPER_IMPL_H
+#define INCLUDED_GSM_TCH_H_CHANS_DEMAPPER_IMPL_H
+
+#include <grgsm/demapping/tch_h_chans_demapper.h>
+
+namespace gr {
+    namespace gsm {
+
+        class tch_h_chans_demapper_impl : public tch_h_chans_demapper
+        {
+            private:
+                unsigned int d_timeslot;
+                unsigned int d_tch_h_channel;
+
+                // Downlink
+                uint32_t d_frame_numbers_dl[3][8];       // for checking consecutive frame numbers of tch
+                uint32_t d_frame_numbers_sacch_dl[4];    // for checking consecutive frame numbers of sacch
+                pmt::pmt_t d_bursts_dl[3][8];            // for tch output headers+bursts
+                pmt::pmt_t d_bursts_sacch_dl[4];         // for sacch output bursts
+
+                // Uplink
+                uint32_t d_frame_numbers_ul[3][8];       // for checking consecutive frame numbers of tch
+                uint32_t d_frame_numbers_sacch_ul[4];    // for checking consecutive frame numbers of sacch
+                pmt::pmt_t d_bursts_ul[3][8];            // for tch output headers+bursts
+                pmt::pmt_t d_bursts_sacch_ul[4];         // for sacch output bursts
+
+                void sacch_tch_demapper(uint32_t fn_mod13, u_int32_t fn_mod26, uint32_t frame_nr, pmt::pmt_t *d_bursts_sacch,
+                        uint32_t *d_frame_numbers_sacch, pmt::pmt_t d_bursts[3][8],
+                        uint32_t d_frame_numbers[3][8], pmt::pmt_t msg_out);
+
+                void filter_tch_chans(pmt::pmt_t msg);
+
+            public:
+                tch_h_chans_demapper_impl(unsigned int timeslot_nr, unsigned int tch_h_channel);
+                ~tch_h_chans_demapper_impl();
+        };
+
+    } // namespace gsm
+} // namespace gr
+
+#endif /* INCLUDED_GSM_TCH_H_CHANS_DEMAPPER_IMPL_H */
+
diff --git a/swig/grgsm_swig.i b/swig/grgsm_swig.i
index b980fc2..5f06eb3 100644
--- a/swig/grgsm_swig.i
+++ b/swig/grgsm_swig.i
@@ -41,6 +41,7 @@
 #include "grgsm/decryption/decryption.h"
 #include "grgsm/demapping/universal_ctrl_chans_demapper.h"
 #include "grgsm/demapping/tch_f_chans_demapper.h"
+#include "grgsm/demapping/tch_h_chans_demapper.h"
 #include "grgsm/flow_control/common.h"
 #include "grgsm/flow_control/burst_timeslot_splitter.h"
 #include "grgsm/flow_control/burst_sdcch_subslot_splitter.h"
@@ -99,6 +100,8 @@
 GR_SWIG_BLOCK_MAGIC2(gsm, universal_ctrl_chans_demapper);
 %include "grgsm/demapping/tch_f_chans_demapper.h"
 GR_SWIG_BLOCK_MAGIC2(gsm, tch_f_chans_demapper);
+%include "grgsm/demapping/tch_h_chans_demapper.h"
+GR_SWIG_BLOCK_MAGIC2(gsm, tch_h_chans_demapper);
 
 %include "grgsm/flow_control/common.h"
 %include "grgsm/flow_control/burst_timeslot_splitter.h"
