diff --git a/include/gsm/controlled_const_source_f.h b/include/gsm/controlled_const_source_f.h
new file mode 100644
index 0000000..b175578
--- /dev/null
+++ b/include/gsm/controlled_const_source_f.h
@@ -0,0 +1,57 @@
+/* -*- c++ -*- */
+/* 
+ * Copyright 2014 <+YOU OR YOUR COMPANY+>.
+ * 
+ * This 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.
+ * 
+ * This software 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 this software; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+
+#ifndef INCLUDED_GSM_CONTROLLED_CONST_SOURCE_F_H
+#define INCLUDED_GSM_CONTROLLED_CONST_SOURCE_F_H
+
+#include <gsm/api.h>
+#include <gnuradio/sync_block.h>
+
+namespace gr {
+  namespace gsm {
+
+    /*!
+     * \brief <+description of block+>
+     * \ingroup gsm
+     *
+     */
+    class GSM_API controlled_const_source_f : virtual public gr::sync_block
+    {
+     public:
+      typedef boost::shared_ptr<controlled_const_source_f> sptr;
+
+      /*!
+       * \brief Return a shared_ptr to a new instance of gsm::controlled_const_source_f.
+       *
+       * To avoid accidental use of raw pointers, gsm::controlled_const_source_f's
+       * constructor is in a private implementation
+       * class. gsm::controlled_const_source_f::make is the public interface for
+       * creating new instances.
+       */
+      static sptr make(float constant);
+      virtual void set_constant(float constant) = 0;
+    };
+
+  } // namespace gsm
+} // namespace gr
+
+#endif /* INCLUDED_GSM_CONTROLLED_CONST_SOURCE_F_H */
+
diff --git a/include/gsm/controlled_rotator_cc.h b/include/gsm/controlled_rotator_cc.h
new file mode 100644
index 0000000..5339660
--- /dev/null
+++ b/include/gsm/controlled_rotator_cc.h
@@ -0,0 +1,59 @@
+/* -*- c++ -*- */
+/* 
+ * Copyright 2014 <+YOU OR YOUR COMPANY+>.
+ * 
+ * This 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.
+ * 
+ * This software 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 this software; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+
+#ifndef INCLUDED_GSM_CONTROLLED_ROTATOR_CC_H
+#define INCLUDED_GSM_CONTROLLED_ROTATOR_CC_H
+
+#include <gsm/api.h>
+#include <gnuradio/sync_block.h>
+
+namespace gr {
+  namespace gsm {
+
+    /*!
+     * \brief <+description of block+>
+     * \ingroup gsm
+     *
+     */
+    class GSM_API controlled_rotator_cc : virtual public sync_block
+    {
+     public:
+      typedef boost::shared_ptr<controlled_rotator_cc> sptr;
+
+      /*!
+       * \brief Return a shared_ptr to a new instance of gsm::controlled_rotator_cc.
+       *
+       * To avoid accidental use of raw pointers, gsm::controlled_rotator_cc's
+       * constructor is in a private implementation
+       * class. gsm::controlled_rotator_cc::make is the public interface for
+       * creating new instances.
+       */
+      static sptr make(double phase_inc, double samp_rate);
+      
+      virtual void set_phase_inc(double phase_inc) = 0;
+      virtual void set_samp_rate(double samp_rate) = 0;
+    };
+
+  } // namespace gsm
+} // namespace gr
+
+#endif /* INCLUDED_GSM_CONTROLLED_ROTATOR_CC_H */
+
diff --git a/include/gsm/message_printer.h b/include/gsm/message_printer.h
new file mode 100644
index 0000000..e049934
--- /dev/null
+++ b/include/gsm/message_printer.h
@@ -0,0 +1,56 @@
+/* -*- c++ -*- */
+/* 
+ * Copyright 2014 <+YOU OR YOUR COMPANY+>.
+ * 
+ * This 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.
+ * 
+ * This software 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 this software; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+
+#ifndef INCLUDED_GSM_MESSAGE_PRINTER_H
+#define INCLUDED_GSM_MESSAGE_PRINTER_H
+
+#include <gsm/api.h>
+#include <gnuradio/sync_block.h>
+
+namespace gr {
+  namespace gsm {
+
+    /*!
+     * \brief <+description of block+>
+     * \ingroup gsm
+     *
+     */
+    class GSM_API message_printer : virtual public gr::block
+    {
+     public:
+      typedef boost::shared_ptr<message_printer> sptr;
+
+      /*!
+       * \brief Return a shared_ptr to a new instance of gsm::message_printer.
+       *
+       * To avoid accidental use of raw pointers, gsm::message_printer's
+       * constructor is in a private implementation
+       * class. gsm::message_printer::make is the public interface for
+       * creating new instances.
+       */
+      static sptr make();
+    };
+
+  } // namespace gsm
+} // namespace gr
+
+#endif /* INCLUDED_GSM_MESSAGE_PRINTER_H */
+
