diff --git a/compiler/2014/C_CodeGen.jrag b/compiler/2014/C_CodeGen.jrag
index b10029e803b835962a62c6dde6084a7e8324e246..927a9bb8ff14289216c930c1c07fa298e2f80567 100644
--- a/compiler/2014/C_CodeGen.jrag
+++ b/compiler/2014/C_CodeGen.jrag
@@ -1458,7 +1458,7 @@ aspect C_Sizeof {
 
   public void SampleDecl.C_emitSizeofDeclaration(C_env env) {
     env.println("extern int labcomm2014_sizeof_" + env.prefix + getName() +
-        "(" + env.prefix + getName() + " *v);");
+        "( const struct labcomm2014_signature *sig, " + env.prefix + getName() + " *v);");
   }
 
   public int Decl.C_fixedSizeof() {
@@ -1471,7 +1471,7 @@ aspect C_Sizeof {
   public void SampleDecl.C_emitSizeof(C_env env) {
     env = env.nestStruct("(*v)");
     env.println("int labcomm2014_sizeof_" + env.prefix + getName() +
-        "(" + env.prefix + getName() + " *v)");
+        "( const struct labcomm2014_signature *sig, " + env.prefix + getName() + " *v)");
     env.println("{");
     env.indent();
     env.println("return labcomm2014_internal_sizeof(" +
@@ -1535,7 +1535,7 @@ aspect C_Sizeof {
 
   public void SampleDecl.C_emitSizeofValue(C_env env) {
     env = env.nestStruct("(*v)");
-    env.println("static int sizeof_" + env.prefix + getName() + "(void *vv)");
+    env.println("static int sizeof_" + env.prefix + getName() + "( const struct labcomm2014_signature *sig, void *vv)");
     env.println("{");
     env.indent();
     env.println("int result = 0;");
diff --git a/lib/c/2014/labcomm2014.c b/lib/c/2014/labcomm2014.c
index 1cd953a789568e82d9ade761d88651754ae218f5..d66efea5532111bf6659e3061e672be713b7ee7d 100644
--- a/lib/c/2014/labcomm2014.c
+++ b/lib/c/2014/labcomm2014.c
@@ -272,7 +272,7 @@ int labcomm2014_get_local_type_index(const struct labcomm2014_signature *signatu
 int labcomm2014_internal_sizeof(const struct labcomm2014_signature *signature,
                             void *v)
 {
-  int length = signature->encoded_size(v);
+  int length = signature->encoded_size(signature, v);
   return (labcomm2014_size_packed32(signature->index) +
           labcomm2014_size_packed32(length) +
           length);
diff --git a/lib/c/2014/labcomm2014_encoder.c b/lib/c/2014/labcomm2014_encoder.c
index 09cdc9221e8a3b5c4efc4489745f468bdc928646..d223e48b41779e4e5e7ba56899b41ff4006585a7 100644
--- a/lib/c/2014/labcomm2014_encoder.c
+++ b/lib/c/2014/labcomm2014_encoder.c
@@ -147,7 +147,7 @@ static int do_encode(
   struct encoder *ie = e->context;
 
   index = labcomm2014_get_local_index(signature);
-  length = (signature->encoded_size(value));
+  length = (signature->encoded_size(signature, value));
   labcomm2014_scheduler_writer_lock(e->scheduler);
   if (! LABCOMM_SIGNATURE_ARRAY_GET(ie->registered, int, index, 0)) {
     result = -EINVAL;
diff --git a/lib/c/2014/labcomm2014_type_signature.h b/lib/c/2014/labcomm2014_type_signature.h
index dfb79342a30f5996437fd44b6e8d4df704bc6c16..20dd2dcc95c452cd94635f110356524748ad8bb7 100644
--- a/lib/c/2014/labcomm2014_type_signature.h
+++ b/lib/c/2014/labcomm2014_type_signature.h
@@ -50,7 +50,7 @@ struct labcomm2014_sample_ref;
 
 struct labcomm2014_signature {
   char *name;
-  int (*encoded_size)(void *); /* void* refers to sample_data */
+  int (*encoded_size)(const struct labcomm2014_signature *sig, void *); /* void* refers to sample_data */
   int size;
   unsigned char *signature; 
   int index;
diff --git a/lib/c/2014/test/test_labcomm.c b/lib/c/2014/test/test_labcomm.c
index 0b0fbf36fe0caa3c663654ba9a75bb5509b562f7..ec6dd66297aadb42edb86e1084614709d0c45f64 100644
--- a/lib/c/2014/test/test_labcomm.c
+++ b/lib/c/2014/test/test_labcomm.c
@@ -217,10 +217,10 @@ static void test_encode_decode(struct labcomm2014_encoder *encoder,
   err = test_decode_one(decoder);
   fprintf(stderr, "decode of sample %u * 2 * %u -> size=%d err=%d\n", 
 	  n_0, n_2, writer.pos, err);
-  if (writer.pos != labcomm2014_sizeof_test_sample_test_var(&encoder_var)) {
+  if (writer.pos != labcomm2014_sizeof_test_sample_test_var(NULL, &encoder_var)) {
     fprintf(stderr, "Incorrect sizeof %u * 2 * %u (%d != %d)\n",
 	    n_0, n_2, 
-	    writer.pos, labcomm2014_sizeof_test_sample_test_var(&encoder_var));
+	    writer.pos, labcomm2014_sizeof_test_sample_test_var(NULL, &encoder_var));
     exit(1);
   }
   if (writer.pos != expected) {