diff --git a/cc/prebuilt.go b/cc/prebuilt.go
index 976c711..089ce28 100644
--- a/cc/prebuilt.go
+++ b/cc/prebuilt.go
@@ -31,12 +31,19 @@
 
 type prebuiltLinker struct {
 	android.Prebuilt
+	properties struct {
+		Srcs []string `android:"arch_variant"`
+	}
 }
 
 func (p *prebuiltLinker) prebuilt() *android.Prebuilt {
 	return &p.Prebuilt
 }
 
+func (p *prebuiltLinker) PrebuiltSrcs() []string {
+	return p.properties.Srcs
+}
+
 type prebuiltLibraryLinker struct {
 	*libraryDecorator
 	prebuiltLinker
@@ -44,20 +51,15 @@
 
 var _ prebuiltLinkerInterface = (*prebuiltLibraryLinker)(nil)
 
-func (p *prebuiltLibraryLinker) linkerProps() []interface{} {
-	props := p.libraryDecorator.linkerProps()
-	return append(props, &p.Prebuilt.Properties)
-}
-
 func (p *prebuiltLibraryLinker) link(ctx ModuleContext,
 	flags Flags, deps PathDeps, objs Objects) android.Path {
 	// TODO(ccross): verify shared library dependencies
-	if len(p.Prebuilt.Properties.Srcs) > 0 {
+	if len(p.properties.Srcs) > 0 {
 		p.libraryDecorator.exportIncludes(ctx, "-I")
 		p.libraryDecorator.reexportFlags(deps.ReexportedFlags)
 		p.libraryDecorator.reexportDeps(deps.ReexportedFlagsDeps)
 		// TODO(ccross): .toc optimization, stripping, packing
-		return p.Prebuilt.Path(ctx)
+		return p.Prebuilt.SingleSourcePath(ctx)
 	}
 
 	return nil
@@ -78,6 +80,9 @@
 	}
 	module.linker = prebuilt
 
+	module.AddProperties(&prebuilt.properties)
+
+	android.InitPrebuiltModule(module, &prebuilt.properties.Srcs)
 	return module, library
 }
 
@@ -96,6 +101,9 @@
 	}
 	module.linker = prebuilt
 
+	module.AddProperties(&prebuilt.properties)
+
+	android.InitPrebuiltModule(module, &prebuilt.properties.Srcs)
 	return module, library
 }
 
@@ -106,15 +114,10 @@
 
 var _ prebuiltLinkerInterface = (*prebuiltBinaryLinker)(nil)
 
-func (p *prebuiltBinaryLinker) linkerProps() []interface{} {
-	props := p.binaryDecorator.linkerProps()
-	return append(props, &p.Prebuilt.Properties)
-}
-
 func (p *prebuiltBinaryLinker) link(ctx ModuleContext,
 	flags Flags, deps PathDeps, objs Objects) android.Path {
 	// TODO(ccross): verify shared library dependencies
-	if len(p.Prebuilt.Properties.Srcs) > 0 {
+	if len(p.properties.Srcs) > 0 {
 		// TODO(ccross): .toc optimization, stripping, packing
 
 		// Copy binaries to a name matching the final installed name
@@ -125,7 +128,7 @@
 			Rule:        android.Cp,
 			Description: "prebuilt",
 			Output:      outputFile,
-			Input:       p.Prebuilt.Path(ctx),
+			Input:       p.Prebuilt.SingleSourcePath(ctx),
 		})
 
 		return outputFile
@@ -148,5 +151,8 @@
 	}
 	module.linker = prebuilt
 
+	module.AddProperties(&prebuilt.properties)
+
+	android.InitPrebuiltModule(module, &prebuilt.properties.Srcs)
 	return module, binary
 }
