diff --git a/src/builtin_functions.h b/src/builtin_functions.h
index 960a1623a587278b1fb661bdeebfdeef2c62b5a9..1e068574af54ba743f63085bebd07f670fb03ded 100644
--- a/src/builtin_functions.h
+++ b/src/builtin_functions.h
@@ -5,12 +5,12 @@
 \*/
 
 /*
- * $Id: builtin_functions.h,v 1.14 2000/07/28 17:16:54 hubbe Exp $
+ * $Id: builtin_functions.h,v 1.15 2000/12/16 05:52:16 marcus Exp $
  */
 #ifndef BUILTIN_EFUNS_H
 #define BUILTIN_EFUNS_H
 
-#define TYPEP(ID,NAME,TYPE) void ID(INT32 args);
+#define TYPEP(ID,NAME,TYPE) PMOD_EXPORT void ID(INT32 args);
 
 #include "callback.h"
 
diff --git a/src/mapping.h b/src/mapping.h
index 56cd243e3d1ee0f91cff503d62a976bf1df9e740..3969d6e2c18119a6eea47433e8e1f2bbaa070457 100644
--- a/src/mapping.h
+++ b/src/mapping.h
@@ -5,7 +5,7 @@
 \*/
 
 /*
- * $Id: mapping.h,v 1.33 2000/12/16 05:24:41 marcus Exp $
+ * $Id: mapping.h,v 1.34 2000/12/16 05:45:44 marcus Exp $
  */
 #ifndef MAPPING_H
 #define MAPPING_H
@@ -143,7 +143,7 @@ PMOD_EXPORT struct mapping *add_mappings(struct svalue *argp, INT32 args);
 PMOD_EXPORT int mapping_equal_p(struct mapping *a, struct mapping *b, struct processing *p);
 void describe_mapping(struct mapping *m,struct processing *p,int indent);
 node *make_node_from_mapping(struct mapping *m);
-void f_m_delete(INT32 args);
+PMOD_EXPORT void f_m_delete(INT32 args);
 PMOD_EXPORT void f_aggregate_mapping(INT32 args);
 PMOD_EXPORT struct mapping *copy_mapping_recursively(struct mapping *m,
 					 struct processing *p);
diff --git a/src/program.h b/src/program.h
index f95139308ab025142aee3b546d421a035e0b828b..0623de9e243c856f459ac6955fcd082227f15e21 100644
--- a/src/program.h
+++ b/src/program.h
@@ -5,7 +5,7 @@
 \*/
 
 /*
- * $Id: program.h,v 1.111 2000/09/26 00:17:47 hubbe Exp $
+ * $Id: program.h,v 1.112 2000/12/16 05:45:45 marcus Exp $
  */
 #ifndef PROGRAM_H
 #define PROGRAM_H
@@ -446,7 +446,7 @@ int low_find_shared_string_identifier(struct pike_string *name,
 struct ff_hash;
 int find_shared_string_identifier(struct pike_string *name,
 				  struct program *prog);
-int find_identifier(char *name,struct program *prog);
+PMOD_EXPORT int find_identifier(char *name,struct program *prog);
 int store_prog_string(struct pike_string *str);
 int store_constant(struct svalue *foo,
 		   int equal,
@@ -458,13 +458,13 @@ void program_index_no_free(struct svalue *to, struct program *p,
 int get_small_number(char **q);
 void start_line_numbering(void);
 void store_linenumber(INT32 current_line, struct pike_string *current_file);
-char *get_line(unsigned char *pc,struct program *prog,INT32 *linep);
+PMOD_EXPORT char *get_line(unsigned char *pc,struct program *prog,INT32 *linep);
 void my_yyerror(char *fmt,...)  ATTRIBUTE((format(printf,1,2)));
 struct program *compile(struct pike_string *prog,
 			struct object *handler,
 			int major,
 			int minor);
-int pike_add_function2(char *name, void (*cfun)(INT32),
+PMOD_EXPORT int pike_add_function2(char *name, void (*cfun)(INT32),
 		       char *type, unsigned INT8 flags,
 		       unsigned INT16 opt_flags);
 PMOD_EXPORT int quick_add_function(char *name,
@@ -490,19 +490,19 @@ void push_compiler_frame(int lexical_scope);
 void pop_local_variables(int level);
 void pop_compiler_frame(void);
 ptrdiff_t low_get_storage(struct program *o, struct program *p);
-char *get_storage(struct object *o, struct program *p);
+PMOD_EXPORT char *get_storage(struct object *o, struct program *p);
 struct program *low_program_from_function(struct program *p,
 					  INT32 i);
-struct program *program_from_function(struct svalue *f);
-struct program *program_from_svalue(struct svalue *s);
+PMOD_EXPORT struct program *program_from_function(struct svalue *f);
+PMOD_EXPORT struct program *program_from_svalue(struct svalue *s);
 struct find_child_cache_s;
 int find_child(struct program *parent, struct program *child);
 void yywarning(char *fmt, ...) ATTRIBUTE((format(printf,1,2)));
 struct implements_cache_s;
-int implements(struct program *a, struct program *b);
-int is_compatible(struct program *a, struct program *b);
+PMOD_EXPORT int implements(struct program *a, struct program *b);
+PMOD_EXPORT int is_compatible(struct program *a, struct program *b);
 int yyexplain_not_implements(struct program *a, struct program *b, int flags);
-void *parent_storage(int depth);
+PMOD_EXPORT void *parent_storage(int depth);
 PMOD_EXPORT void change_compiler_compatibility(int major, int minor);
 /* Prototypes end here */
 
diff --git a/src/stuff.h b/src/stuff.h
index 559635bb04e119fcb4fbd86cc0196b99706d0ab3..8d338af055167bc3e254f51ba1b39412e2c7100a 100644
--- a/src/stuff.h
+++ b/src/stuff.h
@@ -5,7 +5,7 @@
 \*/
 
 /*
- * $Id: stuff.h,v 1.10 2000/09/20 02:04:26 hubbe Exp $
+ * $Id: stuff.h,v 1.11 2000/12/16 05:45:45 marcus Exp $
  */
 #ifndef STUFF_H
 #define STUFF_H
@@ -13,13 +13,13 @@
 #include "global.h"
 
 /* Prototypes begin here */
-int my_log2(size_t x);
-int count_bits(unsigned INT32 x);
-int is_more_than_one_bit(unsigned INT32 x);
-double my_strtod(char *nptr, char **endptr);
+PMOD_EXPORT int my_log2(size_t x);
+PMOD_EXPORT int count_bits(unsigned INT32 x);
+PMOD_EXPORT int is_more_than_one_bit(unsigned INT32 x);
+PMOD_EXPORT double my_strtod(char *nptr, char **endptr);
 PMOD_EXPORT unsigned INT32 my_sqrt(unsigned INT32 n);
 /* Prototypes end here */
 
-extern INT32 hashprimes[32];
+PMOD_EXPORT extern INT32 hashprimes[32];
 
 #endif
diff --git a/src/svalue.h b/src/svalue.h
index 69fe43ecade8cb999b9f30a3ea2af4501b68d2b8..eba48647022c4a716c27d8b264caf6bc6f3aefc6 100644
--- a/src/svalue.h
+++ b/src/svalue.h
@@ -5,7 +5,7 @@
 \*/
 
 /*
- * $Id: svalue.h,v 1.74 2000/12/14 07:27:16 mast Exp $
+ * $Id: svalue.h,v 1.75 2000/12/16 05:52:17 marcus Exp $
  */
 #ifndef SVALUE_H
 #define SVALUE_H
@@ -385,18 +385,18 @@ PMOD_EXPORT void copy_svalues_recursively_no_free(struct svalue *to,
 				      struct processing *p);
 void check_short_svalue(union anything *u, TYPE_T type);
 void debug_check_svalue(struct svalue *s);
-void real_gc_xmark_svalues(struct svalue *s, ptrdiff_t num);
-void real_gc_check_svalues(struct svalue *s, size_t num);
+PMOD_EXPORT void real_gc_xmark_svalues(struct svalue *s, ptrdiff_t num);
+PMOD_EXPORT void real_gc_check_svalues(struct svalue *s, size_t num);
 void gc_check_weak_svalues(struct svalue *s, size_t num);
-void real_gc_check_short_svalue(union anything *u, TYPE_T type);
+PMOD_EXPORT void real_gc_check_short_svalue(union anything *u, TYPE_T type);
 void gc_check_weak_short_svalue(union anything *u, TYPE_T type);
-TYPE_FIELD real_gc_mark_svalues(struct svalue *s, size_t num);
+PMOD_EXPORT TYPE_FIELD real_gc_mark_svalues(struct svalue *s, size_t num);
 TYPE_FIELD gc_mark_weak_svalues(struct svalue *s, size_t num);
 int real_gc_mark_short_svalue(union anything *u, TYPE_T type);
 int gc_mark_weak_short_svalue(union anything *u, TYPE_T type);
-TYPE_FIELD real_gc_cycle_check_svalues(struct svalue *s, size_t num);
+PMOD_EXPORT TYPE_FIELD real_gc_cycle_check_svalues(struct svalue *s, size_t num);
 TYPE_FIELD gc_cycle_check_weak_svalues(struct svalue *s, size_t num);
-int real_gc_cycle_check_short_svalue(union anything *u, TYPE_T type);
+PMOD_EXPORT int real_gc_cycle_check_short_svalue(union anything *u, TYPE_T type);
 int gc_cycle_check_weak_short_svalue(union anything *u, TYPE_T type);
 void real_gc_free_svalue(struct svalue *s);
 void real_gc_free_short_svalue(union anything *u, TYPE_T type);
diff --git a/src/threads.h b/src/threads.h
index 7fe8746f2e1b9fd4f6204092972ee2963fe8c78c..f59cdadf4511645bacd88dc6ec41f16cfe59e863 100644
--- a/src/threads.h
+++ b/src/threads.h
@@ -1,5 +1,5 @@
 /*
- * $Id: threads.h,v 1.109 2000/12/16 05:24:41 marcus Exp $
+ * $Id: threads.h,v 1.110 2000/12/16 05:45:45 marcus Exp $
  */
 #ifndef THREADS_H
 #define THREADS_H
@@ -70,9 +70,9 @@
 
 
 extern int num_threads;
-extern int live_threads;
+PMOD_EXPORT extern int live_threads;
 struct object;
-extern size_t thread_stack_size;
+PMOD_EXPORT extern size_t thread_stack_size;
 
 #define DEFINE_MUTEX(X) PIKE_MUTEX_T X
 
@@ -291,16 +291,16 @@ typedef struct cond_t_s
 
 #define co_init(X) do { mt_init(& (X)->lock), (X)->head=(X)->tail=0; }while(0)
 
-int co_wait(COND_T *c, PIKE_MUTEX_T *m);
-int co_signal(COND_T *c);
-int co_broadcast(COND_T *c);
-int co_destroy(COND_T *c);
+PMOD_EXPORT int co_wait(COND_T *c, PIKE_MUTEX_T *m);
+PMOD_EXPORT int co_signal(COND_T *c);
+PMOD_EXPORT int co_broadcast(COND_T *c);
+PMOD_EXPORT int co_destroy(COND_T *c);
 
 #endif
 
 extern int th_running;
 
-extern PIKE_MUTEX_T interpreter_lock;
+PMOD_EXPORT extern PIKE_MUTEX_T interpreter_lock;
 
 #if defined(PIKE_DEBUG) && !defined(__NT__)
 
@@ -336,8 +336,8 @@ extern THREAD_T debug_locking_thread;
 
 #endif
 
-extern COND_T live_threads_change;		/* Used by _disable_threads */
-extern COND_T threads_disabled_change;		/* Used by _disable_threads */
+PMOD_EXPORT extern COND_T live_threads_change;		/* Used by _disable_threads */
+PMOD_EXPORT extern COND_T threads_disabled_change;		/* Used by _disable_threads */
 
 struct svalue;
 struct pike_frame;
@@ -600,16 +600,16 @@ void init_interleave_mutex(IMUTEX_T *im);
 void exit_interleave_mutex(IMUTEX_T *im);
 void thread_table_init(void);
 unsigned INT32 thread_table_hash(THREAD_T *tid);
-void thread_table_insert(struct object *o);
-void thread_table_delete(struct object *o);
-struct thread_state *thread_state_for_id(THREAD_T tid);
-struct object *thread_for_id(THREAD_T tid);
-void f_all_threads(INT32 args);
-int count_pike_threads(void);
+PMOD_EXPORT void thread_table_insert(struct object *o);
+PMOD_EXPORT void thread_table_delete(struct object *o);
+PMOD_EXPORT struct thread_state *thread_state_for_id(THREAD_T tid);
+PMOD_EXPORT struct object *thread_for_id(THREAD_T tid);
+PMOD_EXPORT void f_all_threads(INT32 args);
+PMOD_EXPORT int count_pike_threads(void);
 TH_RETURN_TYPE new_thread_func(void * data);
 void f_thread_create(INT32 args);
 void f_thread_set_concurrency(INT32 args);
-void f_this_thread(INT32 args);
+PMOD_EXPORT void f_this_thread(INT32 args);
 struct mutex_storage;
 struct key_storage;
 void f_mutex_lock(INT32 args);
@@ -627,7 +627,7 @@ void f_thread_backtrace(INT32 args);
 void f_thread_id_status(INT32 args);
 void init_thread_obj(struct object *o);
 void exit_thread_obj(struct object *o);
-void f_thread_local(INT32 args);
+PMOD_EXPORT void f_thread_local(INT32 args);
 void f_thread_local_get(INT32 args);
 void f_thread_local_set(INT32 args);
 void low_th_init(void);
@@ -635,7 +635,7 @@ void th_init(void);
 void th_cleanup(void);
 int th_num_idle_farmers(void);
 int th_num_farmers(void);
-void th_farm(void (*fun)(void *), void *here);
+PMOD_EXPORT void th_farm(void (*fun)(void *), void *here);
 /* Prototypes end here */
 
 #else
@@ -686,13 +686,13 @@ void th_farm(void (*fun)(void *), void *here);
 #ifndef PIKE_DEBUG
 #define CheckValidHandle(X) (X)
 #else
-HANDLE CheckValidHandle(HANDLE h);
+PMOD_EXPORT HANDLE CheckValidHandle(HANDLE h);
 #endif
 #endif
 
 extern int threads_disabled;
-extern ptrdiff_t thread_storage_offset;
-extern struct program *thread_id_prog;
+PMOD_EXPORT extern ptrdiff_t thread_storage_offset;
+PMOD_EXPORT extern struct program *thread_id_prog;
 
 #ifndef NO_PIKE_SHORTHAND
 #define MUTEX_T PIKE_MUTEX_T