Index: uspace/cfg/sysman/default.tgt
===================================================================
--- uspace/cfg/sysman/default.tgt	(revision 13b4504e26752afdc842697d42619f522eb4aaee)
+++ uspace/cfg/sysman/default.tgt	(revision aa0faecad659b4889d43d910a125a6f6514b3804)
@@ -4,7 +4,6 @@
 After = devman.svc
 
-; arm32 specific
-; After = s3c24xx_uart.svc
-; After = s3c24xx_ts.svc
+After = s3c24xx_uart.svc
+After = s3c24xx_ts.svc
 
 After = klog.svc
Index: uspace/cfg/sysman/s3c24xx_ts.svc
===================================================================
--- uspace/cfg/sysman/s3c24xx_ts.svc	(revision 13b4504e26752afdc842697d42619f522eb4aaee)
+++ uspace/cfg/sysman/s3c24xx_ts.svc	(revision aa0faecad659b4889d43d910a125a6f6514b3804)
@@ -1,2 +1,5 @@
+[Unit]
+ConditionArchitecture = arm32
+
 [Service]
 ExecStart = /srv/hid/s3c24xx_ts
Index: uspace/cfg/sysman/s3c24xx_uart.svc
===================================================================
--- uspace/cfg/sysman/s3c24xx_uart.svc	(revision 13b4504e26752afdc842697d42619f522eb4aaee)
+++ uspace/cfg/sysman/s3c24xx_uart.svc	(revision aa0faecad659b4889d43d910a125a6f6514b3804)
@@ -1,2 +1,5 @@
+[Unit]
+ConditionArchitecture = arm32
+
 [Service]
 ExecStart = /srv/hid/s3c24xx_uart
Index: uspace/srv/sysman/repo.c
===================================================================
--- uspace/srv/sysman/repo.c	(revision 13b4504e26752afdc842697d42619f522eb4aaee)
+++ uspace/srv/sysman/repo.c	(revision aa0faecad659b4889d43d910a125a6f6514b3804)
@@ -278,4 +278,25 @@
 }
 
+static bool repo_clean_up_unit(ht_link_t *ht_link, void *arg)
+{
+	unit_t *unit = hash_table_get_inst(ht_link, unit_t, units_by_name);
+
+	if (unit->conditions != UNIT_CONDITION_NONE) {
+		unit_log_condition(unit);
+
+		list_foreach_safe(unit->edges_in, current_link, iter) {
+			unit_edge_t *e = list_get_instance(current_link, unit_edge_t, edges_in);
+			edge_remove(&e);
+		}
+
+		list_foreach_safe(unit->edges_out, current_link, iter) {
+			unit_edge_t *e = list_get_instance(current_link, unit_edge_t, edges_out);
+			edge_remove(&e);
+		}
+	}
+
+	return true;
+}
+
 /** Resolve unresolved dependencies between any pair of units_by_name
  *
@@ -289,4 +310,10 @@
 	bool has_error = false;
 	hash_table_apply(&units_by_name, &repo_resolve_unit, &has_error);
+
+	if (!has_error) {
+		//once all references have been built test if there are
+		//units which dont meet the conditions. If yes, remove the edges
+		hash_table_apply(&units_by_name, &repo_clean_up_unit, &has_error);
+	}
 
 	return has_error ? ENOENT : EOK;
Index: uspace/srv/sysman/unit.c
===================================================================
--- uspace/srv/sysman/unit.c	(revision 13b4504e26752afdc842697d42619f522eb4aaee)
+++ uspace/srv/sysman/unit.c	(revision aa0faecad659b4889d43d910a125a6f6514b3804)
@@ -56,4 +56,5 @@
 static config_item_t unit_configuration[] = {
 	{ "After", &unit_parse_unit_list, 0, "" },
+	{ "ConditionArchitecture", &unit_parse_condition_architecture, 0, "" },
 	CONFIGURATION_ITEM_SENTINEL
 };
@@ -69,4 +70,5 @@
 	unit->state = STATE_STOPPED;
 	unit->repo_state = REPO_EMBRYO;
+	unit->conditions = UNIT_CONDITION_NONE;
 
 	link_initialize(&unit->units);
@@ -137,4 +139,5 @@
 errno_t unit_start(unit_t *unit)
 {
+	assert(unit->conditions == UNIT_CONDITION_NONE);
 	sysman_log(LVL_NOTE, "%s('%s')", __func__, unit_name(unit));
 	return UNIT_VMT(unit)->start(unit);
@@ -147,4 +150,5 @@
 errno_t unit_stop(unit_t *unit)
 {
+	assert(unit->conditions == UNIT_CONDITION_NONE);
 	sysman_log(LVL_NOTE, "%s('%s')", __func__, unit_name(unit));
 	return UNIT_VMT(unit)->stop(unit);
@@ -191,4 +195,33 @@
 {
 	return unit->name ? unit->name : "";
+}
+
+/**
+ * Logs a message for the failed conditions of a unit
+ */
+void unit_log_condition(unit_t *unit)
+{
+	assert(unit->conditions != UNIT_CONDITION_NONE);
+	unit_condition_t conditions = unit->conditions;
+	while (conditions != UNIT_CONDITION_NONE) {
+		const char *type = NULL;
+		if (conditions & UNIT_CONDITION_ARCHITECTURE) {
+			conditions ^= UNIT_CONDITION_ARCHITECTURE;
+			type = "architecture";
+		} else {
+			sysman_log(
+			    LVL_NOTE,
+			    "Condition restriction: unit '%s' does not meet the unkown condition '%d'",
+			    unit_name(unit),
+			    conditions);
+			return;
+		}
+
+		sysman_log(
+		    LVL_NOTE,
+		    "Condition restriction: unit '%s' does not meet the '%s' condition",
+		    unit_name(unit),
+		    type);
+	}
 }
 
@@ -221,2 +254,38 @@
 	return result;
 }
+
+bool unit_parse_condition_architecture(const char *string, void *dst, text_parse_t *parse,
+    size_t lineno)
+{
+	unit_t *unit = dst;
+	bool result = true;
+	char *str = NULL;
+
+	if (str_length(string) == 0) {
+		goto finish;
+	}
+
+	str = str_dup(string);
+	if (str == NULL) {
+		result = false;
+		goto finish;
+	}
+
+	char *split = str;
+	char *tok;
+	bool conditions = false;
+	while ((tok = str_tok(split, " ", &split))) {
+		if (str_casecmp(tok, STRING(UARCH)) == 0) {
+			conditions = true;
+			break;
+		}
+	}
+
+	if (!conditions) {
+		unit->conditions |= UNIT_CONDITION_ARCHITECTURE;
+	}
+
+finish:
+	free(str);
+	return result;
+}
Index: uspace/srv/sysman/unit.h
===================================================================
--- uspace/srv/sysman/unit.h	(revision 13b4504e26752afdc842697d42619f522eb4aaee)
+++ uspace/srv/sysman/unit.h	(revision aa0faecad659b4889d43d910a125a6f6514b3804)
@@ -55,4 +55,9 @@
 } repo_state_t;
 
+typedef enum {
+	UNIT_CONDITION_NONE = 0,
+	UNIT_CONDITION_ARCHITECTURE = 1
+} unit_condition_t;
+
 typedef struct {
 	/** Link to name-to-unit hash table */
@@ -92,4 +97,10 @@
 	list_t edges_in;
 	list_t edges_out;
+
+	/**
+	 * flag for conditions which were not meet
+	 * determines if the unit should be started
+	 */
+	unit_condition_t conditions;
 } unit_t;
 
@@ -161,6 +172,8 @@
 
 extern const char *unit_name(const unit_t *);
+extern void unit_log_condition(unit_t *unit);
 
 extern bool unit_parse_unit_list(const char *, void *, text_parse_t *, size_t);
+extern bool unit_parse_condition_architecture(const char *, void *, text_parse_t *, size_t);
 
 #endif
