diff --git a/compiler/C_CodeGen.jrag b/compiler/C_CodeGen.jrag
index 5b04da8a379d738642a33ebc6859b8f7c4c0f491..a9362853472e44535510b5aaa0e6055eb0467f5a 100644
--- a/compiler/C_CodeGen.jrag
+++ b/compiler/C_CodeGen.jrag
@@ -807,7 +807,7 @@ aspect C_Signature {
 		env.prefix + getName() + " = {");
     env.indent();
     env.println("LABCOMM_SAMPLE, \"" + getName() + "\",");
-    env.println("(int (*)(void *))labcomm_sizeof_" + 
+    env.println("(int (*)(labcomm_signature_t *, void *))labcomm_sizeof_" + 
 		env.prefix + getName() + ",");
     env.println("sizeof(signature_bytes_" + getName() + "),");
     env.println("signature_bytes_"+ getName());
@@ -905,7 +905,7 @@ aspect C_Sizeof {
 
   public void SampleDecl.C_emitSizeofDeclaration(C_env env) {
     env.println("extern int labcomm_sizeof_" + env.prefix + getName() +
-		"(" + env.prefix + getName() + " *v);");
+		"(labcomm_signature_t *sig, " + env.prefix + getName() + " *v);");
   }
 
   public int Decl.C_fixedSizeof() {
@@ -966,7 +966,7 @@ aspect C_Sizeof {
   public void SampleDecl.C_emitSizeof(C_env env) {
     env = env.nestStruct("(*v)");
     env.println("int labcomm_sizeof_" + env.prefix + getName() +
-		"(" + env.prefix + getName() + " *v)");
+		"(labcomm_signature_t *sig, " + env.prefix + getName() + " *v)");
     env.println("{");
     env.indent();
     if (C_isDynamic()) {
diff --git a/lib/c/labcomm.h b/lib/c/labcomm.h
index 1d4740f36a42394369d96c704772d4b3cd15f79f..ee0a589ce6ce0d6eca4c11428b42823bef2045bb 100644
--- a/lib/c/labcomm.h
+++ b/lib/c/labcomm.h
@@ -23,17 +23,14 @@ struct labcomm_decoder;
 /*
  * Signature entry
  */
-typedef struct {
+typedef struct labcomm_signature{
   int type;
   char *name;
-  int (*encoded_size)(void *);
+  int (*encoded_size)(struct labcomm_signature *, void *); // void * == encoded_sample *
   int size;
   unsigned char *signature; 
 } labcomm_signature_t;
 
-//TODO: something along the lines of...
-void labcomm_encode_signature(struct labcomm_encoder*, labcomm_signature_t*);
-
 /*
  * Error handling.
  */