diff --git a/src/common/gamecode/economy.c b/src/common/gamecode/economy.c
index ad4f4adbb..2da386dc7 100644
--- a/src/common/gamecode/economy.c
+++ b/src/common/gamecode/economy.c
@@ -1762,7 +1762,7 @@ create_potion(unit * u, const potion_type * ptype, int want)
static void
create_item(unit * u, const item_type * itype, int want)
{
- if (fval(itype->rtype, RTF_LIMITED)) {
+ if (itype->construction && fval(itype->rtype, RTF_LIMITED)) {
#if GUARD_DISABLES_PRODUCTION == 1
if(is_guarded(u->region, u, GUARD_PRODUCE)) {
cmistake(u, u->thisorder, 70, MSG_EVENT);
diff --git a/src/common/gamecode/study.c b/src/common/gamecode/study.c
index b94a7dedd..c78c76f27 100644
--- a/src/common/gamecode/study.c
+++ b/src/common/gamecode/study.c
@@ -107,12 +107,16 @@ magic_lowskill(unit *u)
int
study_cost(unit *u, skill_t sk)
{
- static int cost = 0;
+ static int cost[MAXSKILLS];
int stufe, k = 50;
- if (cost==0) {
- cost = get_param_int(global.parameters, "skills.cost", 200);
+ if (cost[sk]==0) {
+ char buffer[256];
+ sprintf(buffer, "skills.cost.%s", skillnames[sk]);
+ cost[sk] = get_param_int(global.parameters, buffer, -1);
}
+ if (cost[sk]>=0) return cost[sk];
+
switch (sk) {
case SK_SPY:
return 100;
diff --git a/src/res/e3a.xml b/src/res/e3a.xml
index 11a7c6489..f00a07f1c 100644
--- a/src/res/e3a.xml
+++ b/src/res/e3a.xml
@@ -123,7 +123,7 @@
-
+