diff --git a/moberg.c b/moberg.c
index 0f4972e80ef1c4ab452d0f2c45a734cdaab5b7dd..59de337df28ae1d040e9933a4bb8c4c43a3ba1a1 100644
--- a/moberg.c
+++ b/moberg.c
@@ -90,7 +90,10 @@ static void parse_config_dir_at(
 
 static int install_config(struct moberg *moberg)
 {
-  return 1;
+  struct moberg_install_channels install = {
+    .context=moberg
+  };
+  return moberg_config_install_channels(moberg->config, &install);
 }
 
 struct moberg *moberg_new(
diff --git a/moberg.h b/moberg.h
index d2cb9d69b0d8a75b72ecfd6a4779769b6799cf08..23e49c4afe4e88eee7461ad72fb97eccde357c3c 100644
--- a/moberg.h
+++ b/moberg.h
@@ -2,12 +2,14 @@
 #define __MOBERG_H__
 
 #include <stdio.h>
-#include <moberg_config.h>
 
 struct moberg;
+struct moberg_config;
+
 enum moberg_status { moberg_OK };
 
 struct moberg *moberg_new(struct moberg_config *config);
+
 void moberg_free(struct moberg *moberg);
 
 /* Input/output functions */
diff --git a/moberg_config.c b/moberg_config.c
index 9a98854d8e91c16291365b7f1e31cd04078ff856..98491e068497723b9489bc6ece7caa842435e001 100644
--- a/moberg_config.c
+++ b/moberg_config.c
@@ -30,6 +30,7 @@ struct moberg_config
     struct device_entry *next;
     struct moberg_device *device;
   } *device;
+#if 0
   struct  {
     int capacity;
     struct analog_in_entry {
@@ -65,6 +66,7 @@ struct moberg_config
       struct moberg_device_encoder_in *channel;
     } *value;
   } encoder_in;
+#endif
 };
 
 struct moberg_config *moberg_config_new()
@@ -73,6 +75,7 @@ struct moberg_config *moberg_config_new()
 
   if (result) {
     result->device = NULL;
+#if 0
     result->analog_in.capacity = 0;
     result->analog_in.value = NULL;
     result->analog_out.capacity = 0;
@@ -83,6 +86,7 @@ struct moberg_config *moberg_config_new()
     result->digital_out.value = NULL;
     result->encoder_in.capacity = 0;
     result->encoder_in.value = NULL;
+#endif
   }
   
   return result;
@@ -97,11 +101,13 @@ void moberg_config_free(struct moberg_config *config)
     moberg_device_free(tmp->device);
     free(tmp);
   }
+#if 0
   free(config->analog_in.value);
   free(config->analog_out.value);
   free(config->digital_in.value);
   free(config->digital_out.value);
   free(config->encoder_in.value);
+#endif
   free(config);
 }
 
@@ -130,6 +136,14 @@ int moberg_config_add_device(struct moberg_config *config,
   return 1;
 }
 
+int moberg_config_install_channels(struct moberg_config *config,
+                                   struct moberg_install_channels *install)
+{
+  return moberg_device_install_channels(config->device->device, install);
+}
+
+
+#if 0
 int moberg_config_add_analog_in(struct moberg_config *config,
                                 int index,
                                 struct moberg_device* device,
@@ -190,3 +204,4 @@ err:
   return 0;
 }
                             
+#endif
diff --git a/moberg_config.h b/moberg_config.h
index d8a9ef2a6879e247c9a6969f229b37f2135d5bff..25401c303740abea1336a370cc3dfbd2929fb5a5 100644
--- a/moberg_config.h
+++ b/moberg_config.h
@@ -1,10 +1,9 @@
 #ifndef __MOBERG_CONFIG_H__
 #define __MOBERG_CONFIG_H__
 
+#include <moberg.h>
 #include <moberg_device.h>
 
-struct moberg_config;
-
 struct moberg_config *moberg_config_new();
 
 void moberg_config_free(struct moberg_config *config);
@@ -15,6 +14,10 @@ int moberg_config_join(struct moberg_config *dest,
 int moberg_config_add_device(struct moberg_config *config,
                              struct moberg_device *device);
 
+int moberg_config_install_channels(struct moberg_config *config,
+                                   struct moberg_install_channels *install);
+
+#if 0
 int moberg_config_add_analog_in(struct moberg_config *config,
                                 int index,
                                 struct moberg_device* device,
@@ -39,7 +42,6 @@ int moberg_config_add_encoder_in(struct moberg_config *config,
                                  int index,
                                  struct moberg_device* device,
                                  struct moberg_device_encoder_in *channel);
-
-
+# endif
 
 #endif
diff --git a/moberg_device.c b/moberg_device.c
index 1ead53911e1399be0cca6b5ac2b890e2ddc9a6e1..0d7226e5f36a1c96a48926cafd9c832a9d6862de 100644
--- a/moberg_device.c
+++ b/moberg_device.c
@@ -214,4 +214,11 @@ int moberg_device_add_encoder_in(struct moberg_device* device,
   }
   return result;
 }
-                            
+
+int moberg_device_install_channels(struct moberg_device *device,
+                                   struct moberg_install_channels *install)
+{
+  printf("INSTALL\n");
+  return 1;
+}
+
diff --git a/moberg_device.h b/moberg_device.h
index 5fd0710da24b845a2c66ff9d6dbbbd266aab3fcc..275c540b21abd5e6e0d5c9cc86bff88e2c36f1e5 100644
--- a/moberg_device.h
+++ b/moberg_device.h
@@ -1,6 +1,7 @@
 #ifndef __MOBERG_DEVICE_H__
 #define __MOBERG_DEVICE_H__
 
+#include <moberg.h>
 #include <moberg_config.h>
 #include <moberg_parser.h>
 
@@ -47,6 +48,15 @@ struct moberg_device_encoder_in {
   int (*read)(struct moberg_device_encoder_in_context *, long *value);
 };
   
+struct moberg_install_channels {
+  struct moberg *context;
+  int (*analog_in)(int index, struct moberg_device_analog_in *channel);
+  int (*analog_out)(int index, struct moberg_device_analog_out *channel);
+  int (*digital_in)(int index, struct moberg_device_digital_in *channel);
+  int (*digital_out)(int index, struct moberg_device_digital_in *channel);
+  int (*encoder_in)(int index, struct moberg_device_encoder_in *channel);
+};
+
 struct moberg_parser_context;
 struct moberg_device;
 struct moberg_device_config;
@@ -97,4 +107,8 @@ int moberg_device_add_digital_out(struct moberg_device* device,
 int moberg_device_add_encoder_in(struct moberg_device* device,
                                  struct moberg_device_encoder_in *channel);
 
+int moberg_device_install_channels(struct moberg_device *device,
+                                   struct moberg_install_channels *install);
+
+
 #endif